add "power" gpio

This commit is contained in:
philippe44
2023-09-12 15:03:58 -07:00
parent d53ae66547
commit b3ee25e3be
7 changed files with 86 additions and 8 deletions

View File

@@ -297,6 +297,12 @@ CONFIG_AUDIO_CONTROLS=""
CONFIG_AMP_GPIO=-1
# end of AMP configuration
#
# POWER configuration
#
CONFIG_POWER_GPIO=-1
# end of POWER configuration
#
# Audio JACK
#

View File

@@ -264,6 +264,12 @@ CONFIG_CSPOT_SINK=y
#
# end of Display Screen
#
# POWER configuration
#
CONFIG_POWER_GPIO=-1
# end of POWER configuration
#
# Various I/O
#

View File

@@ -288,6 +288,12 @@ CONFIG_AUDIO_CONTROLS=""
CONFIG_AMP_GPIO=-1
# end of AMP configuration
#
# POWER configuration
#
CONFIG_POWER_GPIO=-1
# end of POWER configuration
#
# Compiler options
#

View File

@@ -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);

View File

@@ -71,6 +71,7 @@ int embedded_init(void);
void register_external(void);
void deregister_external(void);
void decode_restore(int external);
void powering(bool on);
// used when other client wants to use slimproto socket to send messages
extern mutex_type slimp_mutex;
#define LOCK_P mutex_lock(slimp_mutex)

View File

@@ -441,6 +441,10 @@ static void process_aude(u8_t *pkt, int len) {
struct aude_packet *aude = (struct aude_packet *)pkt;
LOG_DEBUG("enable spdif: %d dac: %d", aude->enable_spdif, aude->enable_dac);
#if EMBEDDED
powering(aude->enable_spdif),
#endif
LOCK_O;
if (!aude->enable_spdif && output.state != OUTPUT_OFF) {

View File

@@ -148,6 +148,9 @@ menu "Squeezelite-ESP32"
int
default 21 if MUSE
default -1
config POWER_GPIO
int
default -1
config JACK_GPIO
int
default 34 if SQUEEZEAMP || MUSE
@@ -405,18 +408,29 @@ menu "Squeezelite-ESP32"
default 0
endmenu
menu "Amplifier"
visible if !TARGET_LOCKED
menu "External amplifier control"
visible if !AMP_LOCKED
config AMP_GPIO
int "Amplifier GPIO"
help
GPIO to switch on/off amplifier. Set to -1 for no amplifier.
GPIO to switch on/off external amplifier. Set to -1 for no amplifier.
config AMP_GPIO_LEVEL
depends on AMP_GPIO != -1
int "Active level(0/1)"
default 1
endmenu
menu "Power on/off status"
config POWER_GPIO
int "Power on/off GPIO"
help
GPIO that is switched when LMS turns player one. Set to -1 to disable
config POWER_GPIO_LEVEL
depends on POWER_GPIO != -1
int "Active level(0/1)"
default 1
endmenu
menu "Speaker Fault"
visible if !TARGET_LOCKED
config SPKFAULT_GPIO