mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-06 03:27:01 +03:00
add "power" gpio
This commit is contained in:
@@ -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
|
||||
#
|
||||
|
||||
@@ -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
|
||||
#
|
||||
|
||||
@@ -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
|
||||
#
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user