|
@@ -15,13 +15,41 @@
|
|
|
#include "esp_system.h"
|
|
|
#include "esp_timer.h"
|
|
|
#include "esp_wifi.h"
|
|
|
+#include "esp_log.h"
|
|
|
#include "monitor.h"
|
|
|
#include "platform_config.h"
|
|
|
#include "messaging.h"
|
|
|
+#include "gpio_exp.h"
|
|
|
+#include "accessors.h"
|
|
|
+
|
|
|
+#ifndef CONFIG_POWER_GPIO_LEVEL
|
|
|
+#define CONFIG_POWER_GPIO_LEVEL 1
|
|
|
+#endif
|
|
|
+
|
|
|
+static const char TAG[] = "embedded";
|
|
|
+
|
|
|
+static struct {
|
|
|
+ int gpio, active;
|
|
|
+} power_control = { CONFIG_POWER_GPIO, CONFIG_POWER_GPIO_LEVEL };
|
|
|
+
|
|
|
+extern void sb_controls_init(void);
|
|
|
+extern bool sb_displayer_init(void);
|
|
|
+
|
|
|
+u8_t custom_player_id = 12;
|
|
|
|
|
|
mutex_type slimp_mutex;
|
|
|
static jmp_buf jumpbuf;
|
|
|
|
|
|
+#ifndef POWER_LOCKED
|
|
|
+static void set_power_gpio(int gpio, char *value) {
|
|
|
+ if (strcasestr(value, "power")) {
|
|
|
+ char *p = strchr(value, ':');
|
|
|
+ if (p) power_control.active = atoi(p + 1);
|
|
|
+ power_control.gpio = gpio;
|
|
|
+ }
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
void get_mac(u8_t mac[]) {
|
|
|
esp_read_mac(mac, ESP_MAC_WIFI_STA);
|
|
|
}
|
|
@@ -56,16 +84,22 @@ uint32_t _gettime_ms_(void) {
|
|
|
return (uint32_t) (esp_timer_get_time() / 1000);
|
|
|
}
|
|
|
|
|
|
-extern void sb_controls_init(void);
|
|
|
-extern bool sb_displayer_init(void);
|
|
|
-
|
|
|
-u8_t custom_player_id = 12;
|
|
|
-
|
|
|
int embedded_init(void) {
|
|
|
mutex_create(slimp_mutex);
|
|
|
sb_controls_init();
|
|
|
custom_player_id = sb_displayer_init() ? 100 : 101;
|
|
|
|
|
|
+#ifndef POWER_LOCKED
|
|
|
+ parse_set_GPIO(set_power_gpio);
|
|
|
+#endif
|
|
|
+
|
|
|
+ if (power_control.gpio != -1) {
|
|
|
+ gpio_pad_select_gpio_x(power_control.gpio);
|
|
|
+ gpio_set_direction_x(power_control.gpio, GPIO_MODE_OUTPUT);
|
|
|
+ gpio_set_level_x(power_control.gpio, !power_control.active);
|
|
|
+ ESP_LOGI(TAG, "setting power GPIO %d (active:%d)", power_control.gpio, power_control.active);
|
|
|
+ }
|
|
|
+
|
|
|
return setjmp(jumpbuf);
|
|
|
}
|
|
|
|
|
@@ -73,6 +107,13 @@ void embedded_exit(int code) {
|
|
|
longjmp(jumpbuf, code + 1);
|
|
|
}
|
|
|
|
|
|
+void powering(bool on) {
|
|
|
+ if (power_control.gpio != -1) {
|
|
|
+ ESP_LOGI(TAG, "powering player %s", on ? "ON" : "OFF");
|
|
|
+ gpio_set_level_x(power_control.gpio, on ? power_control.active : !power_control.active);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
u16_t get_RSSI(void) {
|
|
|
wifi_ap_record_t wifidata;
|
|
|
esp_wifi_sta_get_ap_info(&wifidata);
|