More refactoring

- Display is a separated entity
- Make battery configuration consistent with others
- Led config part of led.c
- Jack config moved to monitor.c
This commit is contained in:
philippe44
2020-02-09 11:36:58 -08:00
parent 0cb807b023
commit 64fcc0edec
49 changed files with 141 additions and 188 deletions

View File

@@ -12,9 +12,12 @@ CONFIG_SPI_CONFIG=""
CONFIG_SET_GPIO=""
CONFIG_ROTARY_ENCODER=""
CONFIG_LED_GREEN_GPIO=-1
CONFIG_LED_GREEN_GPIO_LEVEL=1
CONFIG_LED_RED_GPIO=-1
CONFIG_LED_RED_GPIO_LEVEL=1
CONFIG_JACK_GPIO=-1
CONFIG_BAT_CONFIG=""
CONFIG_BAT_CHANNEL=-1
CONFIG_BAT_SCALE="0"
CONFIG_I2S_BCK_IO=27
CONFIG_I2S_WS_IO=26
CONFIG_I2S_DO_IO=25

View File

@@ -9,9 +9,12 @@ CONFIG_SPI_CONFIG=""
CONFIG_SET_GPIO=""
CONFIG_ROTARY_ENCODER=""
CONFIG_LED_GREEN_GPIO=-1
CONFIG_LED_GREEN_GPIO_LEVEL=1
CONFIG_LED_RED_GPIO=-1
CONFIG_LED_RED_GPIO_LEVEL=1
CONFIG_JACK_GPIO=-1
CONFIG_BAT_CONFIG=""
CONFIG_BAT_CHANNEL=-1
CONFIG_BAT_SCALE="0"
CONFIG_I2S_NUM=0
CONFIG_I2S_BCK_IO=33
CONFIG_I2S_WS_IO=25

View File

@@ -9,9 +9,12 @@ CONFIG_SPI_CONFIG=""
CONFIG_SET_GPIO=""
CONFIG_ROTARY_ENCODER=""
CONFIG_LED_GREEN_GPIO=-1
CONFIG_LED_GREEN_GPIO_LEVEL=1
CONFIG_LED_RED_GPIO=-1
CONFIG_LED_RED_GPIO_LEVEL=1
CONFIG_JACK_GPIO=-1
CONFIG_BAT_CONFIG=""
CONFIG_BAT_CHANNEL=-1
CONFIG_BAT_SCALE="0"
CONFIG_I2S_NUM=0
CONFIG_I2S_BCK_IO=33
CONFIG_I2S_WS_IO=25

View File

@@ -8,16 +8,20 @@ CONFIG_JACK_LOCKED=y
CONFIG_BAT_LOCKED=y
CONFIG_I2C_LOCKED=y
CONFIG_SPDIF_LOCKED=y
CONFIG_LED_LOCKED=y
CONFIG_DISPLAY_CONFIG=""
CONFIG_I2C_CONFIG=""
CONFIG_SPI_CONFIG=""
CONFIG_SET_GPIO=""
CONFIG_ROTARY_ENCODER=""
CONFIG_LED_GREEN_GPIO=12
CONFIG_LED_GREEN_GPIO_LEVEL=0
CONFIG_LED_RED_GPIO=13
CONFIG_LED_RED_GPIO_LEVEL=0
CONFIG_JACK_GPIO=34
CONFIG_JACK_GPIO_LEVEL=0
CONFIG_BAT_CONFIG="channel=7,scale=20.24"
CONFIG_BAT_CHANNEL=7
CONFIG_BAT_SCALE="20.24"
CONFIG_I2S_NUM=0
CONFIG_I2S_BCK_IO=33
CONFIG_I2S_WS_IO=25

View File

@@ -8,16 +8,20 @@ CONFIG_JACK_LOCKED=y
CONFIG_BAT_LOCKED=y
CONFIG_I2C_LOCKED=y
CONFIG_SPDIF_LOCKED=y
CONFIG_LED_LOCKED=y
CONFIG_DISPLAY_CONFIG=""
CONFIG_I2C_CONFIG=""
CONFIG_SPI_CONFIG=""
CONFIG_SET_GPIO=""
CONFIG_ROTARY_ENCODER=""
CONFIG_LED_GREEN_GPIO=12
CONFIG_LED_GREEN_GPIO_LEVEL=0
CONFIG_LED_RED_GPIO=13
CONFIG_LED_RED_GPIO_LEVEL=0
CONFIG_JACK_GPIO=34
CONFIG_JACK_GPIO_LEVEL=0
CONFIG_BAT_CONFIG="channel=7,scale=20.24"
CONFIG_BAT_CHANNEL=7
CONFIG_BAT_SCALE="20.24"
CONFIG_I2S_NUM=0
CONFIG_I2S_BCK_IO=33
CONFIG_I2S_WS_IO=25

View File

@@ -8,16 +8,20 @@ CONFIG_JACK_LOCKED=y
CONFIG_BAT_LOCKED=y
CONFIG_I2C_LOCKED=y
CONFIG_SPDIF_LOCKED=y
CONFIG_LED_LOCKED=y
CONFIG_DISPLAY_CONFIG=""
CONFIG_I2C_CONFIG=""
CONFIG_SPI_CONFIG=""
CONFIG_SET_GPIO=""
CONFIG_ROTARY_ENCODER=""
CONFIG_LED_GREEN_GPIO=12
CONFIG_LED_GREEN_GPIO_LEVEL=0
CONFIG_LED_RED_GPIO=13
CONFIG_LED_RED_GPIO_LEVEL=0
CONFIG_JACK_GPIO=34
CONFIG_JACK_GPIO_LEVEL=0
CONFIG_BAT_CONFIG="channel=7,scale=20.24"
CONFIG_BAT_CHANNEL=7
CONFIG_BAT_SCALE="20.24"
CONFIG_I2S_NUM=0
CONFIG_I2S_BCK_IO=33
CONFIG_I2S_WS_IO=25

View File

@@ -0,0 +1,6 @@
idf_component_register(SRCS "led.c" "audio_controls.c" "buttons.c" "services.c" "monitor.c"INCLUDE_DIRS
INCLUDE_DIRS . ../tools/
)

View File

@@ -0,0 +1,12 @@
#
# Component Makefile
#
# This Makefile should, at the very least, just include $(SDK_PATH)/Makefile. By default,
# this will take the sources in the src/ directory, compile them and link them into
# lib(subdirectory_name).a in the build directory. This behaviour is entirely configurable,
# please read the SDK documents if you need to do this.
#
COMPONENT_SRCDIRS := . tarablessd13x6 tarablessd13x6/fonts tarablessd13x6/ifaces
COMPONENT_ADD_INCLUDEDIRS := .
COMPONENT_ADD_INCLUDEDIRS += ./tarablessd13x6

View File

@@ -46,7 +46,6 @@ int battery_value_svc(void) {
/****************************************************************************************
*
*/
#ifdef CONFIG_BAT_CONFIG
static void battery_callback(TimerHandle_t xTimer) {
battery.sum += adc1_get_raw(battery.channel) * battery.scale / 4095.0;
if (++battery.count == 30) {
@@ -55,27 +54,25 @@ static void battery_callback(TimerHandle_t xTimer) {
ESP_LOGI(TAG, "Voltage %.2fV", battery.avg);
}
}
#endif
/****************************************************************************************
*
*/
void battery_svc_init(void) {
#ifdef CONFIG_BAT_CONFIG
char *p;
if ((p = strcasestr(CONFIG_BAT_CONFIG, "channel")) != NULL) battery.channel = atof(strchr(p, '=') + 1);
if ((p = strcasestr(CONFIG_BAT_CONFIG, "scale")) != NULL) battery.scale = atof(strchr(p, '=') + 1);
battery.channel = CONFIG_BAT_CHANNEL;
battery.scale = atof(CONFIG_BAT_SCALE);
#ifndef BAT_LOCKED
char *nvs_item = config_alloc_get_default(NVS_TYPE_STR, "bat_config", "n", 0);
if (nvs_item) {
char *p;
if ((p = strcasestr(nvs_item, "channel")) != NULL) battery.channel = atoi(strchr(p, '=') + 1);
if ((p = strcasestr(nvs_item, "scale")) != NULL) battery.scale = atof(strchr(p, '=') + 1);
free(nvs_item);
}
#endif
if (battery.scale) {
if (battery.channel != -1) {
ESP_LOGI(TAG, "Battery measure channel: %u, scale %f", battery.channel, battery.scale);
adc1_config_width(ADC_WIDTH_BIT_12);
@@ -86,5 +83,4 @@ void battery_svc_init(void) {
} else {
ESP_LOGI(TAG, "No battery");
}
#endif
}

View File

@@ -7,6 +7,5 @@
# please read the SDK documents if you need to do this.
#
COMPONENT_SRCDIRS := . tarablessd13x6 tarablessd13x6/fonts tarablessd13x6/ifaces
COMPONENT_SRCDIRS := .
COMPONENT_ADD_INCLUDEDIRS := .
COMPONENT_ADD_INCLUDEDIRS += ./tarablessd13x6

View File

@@ -17,6 +17,7 @@
#include "esp_log.h"
#include "driver/gpio.h"
#include "led.h"
#include "accessors.h"
#define MAX_LED 8
#define BLOCKTIME 10 // up to portMAX_DELAY
@@ -33,10 +34,15 @@ static struct led_s {
TimerHandle_t timer;
} leds[MAX_LED];
void led_svc_init(void) {
ESP_LOGI(TAG, "Initializing led");
}
static struct {
int gpio;
int state;
} green = { CONFIG_LED_GREEN_GPIO, CONFIG_LED_GREEN_GPIO_LEVEL},
red = { CONFIG_LED_RED_GPIO, CONFIG_LED_RED_GPIO_LEVEL };
/****************************************************************************************
*
*/
static void vCallbackFunction( TimerHandle_t xTimer ) {
struct led_s *led = (struct led_s*) pvTimerGetTimerID (xTimer);
@@ -53,6 +59,9 @@ static void vCallbackFunction( TimerHandle_t xTimer ) {
xTimerChangePeriod(xTimer, (led->on ? led->ontime : led->offtime) / portTICK_RATE_MS, BLOCKTIME);
}
/****************************************************************************************
*
*/
bool led_blink_core(int idx, int ontime, int offtime, bool pushed) {
if (!leds[idx].gpio || leds[idx].gpio<0 ) return false;
@@ -99,6 +108,9 @@ bool led_blink_core(int idx, int ontime, int offtime, bool pushed) {
return true;
}
/****************************************************************************************
*
*/
bool led_unpush(int idx) {
if (!leds[idx].gpio || leds[idx].gpio<0) return false;
@@ -108,6 +120,9 @@ bool led_unpush(int idx) {
return true;
}
/****************************************************************************************
*
*/
bool led_config(int idx, gpio_num_t gpio, int onstate) {
if(gpio<0){
ESP_LOGW(TAG,"LED GPIO not configured");
@@ -127,6 +142,9 @@ bool led_config(int idx, gpio_num_t gpio, int onstate) {
return true;
}
/****************************************************************************************
*
*/
bool led_unconfig(int idx) {
if (idx >= MAX_LED) return false;
@@ -135,3 +153,28 @@ bool led_unconfig(int idx) {
return true;
}
/****************************************************************************************
*
*/
void set_led_gpio(int gpio, char *value) {
char *p;
if (strcasestr(value, "green")) {
green.gpio = gpio;
if ((p = strchr(value, ':')) != NULL) green.state = atoi(p + 1);
} else if (strcasestr(value, "red")) {
red.state = gpio;
if ((p = strchr(value, ':')) != NULL) red.state = atoi(p + 1);
}
}
void led_svc_init(void) {
#ifndef LED_LOCKED
parse_set_GPIO(set_led_gpio);
#endif
ESP_LOGI(TAG,"Configuring LEDs green:%d (active:%d), red:%d (active:%d)", green.gpio, green.state, red.gpio, red.state);
led_config(LED_GREEN, green.gpio, green.state);
led_config(LED_RED, red.gpio, red.state);
}

View File

@@ -88,24 +88,23 @@ bool spkfault_svc (void) {
*
*/
void set_jack_gpio(int gpio, char *value) {
bool low = false;
char *p;
int active = 1;
if (!strcasecmp(value, "jack_l")) {
jack_gpio = gpio;
low = true;
} else if (!strcasecmp(value, "jack_h")) {
if (strcasestr(value, "jack")) {
jack_gpio = gpio;
if ((p = strchr(value, ':')) != NULL) active = atoi(p + 1);
}
if (jack_gpio != -1) {
gpio_pad_select_gpio(jack_gpio);
gpio_set_direction(jack_gpio, GPIO_MODE_INPUT);
gpio_set_pull_mode(jack_gpio, low ? GPIO_PULLUP_ONLY : GPIO_PULLDOWN_ONLY);
gpio_set_pull_mode(jack_gpio, active ? GPIO_PULLDOWN_ONLY : GPIO_PULLUP_ONLY);
ESP_LOGI(TAG,"Adding jack (%s) detection GPIO %d", low ? "low" : "high", gpio);
ESP_LOGI(TAG,"Adding jack (%s) detection GPIO %d", active ? "high" : "low", gpio);
// re-use button management for jack handler, it's a GPIO after all
button_create(NULL, jack_gpio, low ? BUTTON_LOW : BUTTON_HIGH, false, 250, jack_handler_default, 0, -1);
button_create(NULL, jack_gpio, active ? BUTTON_HIGH : BUTTON_LOW, false, 250, jack_handler_default, 0, -1);
}
}
@@ -115,14 +114,12 @@ void set_jack_gpio(int gpio, char *value) {
void monitor_svc_init(void) {
ESP_LOGI(TAG, "Initializing monitoring");
#ifdef CONFIG_JACK_GPIO
jack_gpio = CONFIG_JACK_GPIO;
#if CONFIG_JACK_GPIO_LEVEL == 1
set_jack_gpio(CONFIG_JACK_GPIO, "jack_h");
set_jack_gpio(CONFIG_JACK_GPIO, "jack:1");
#else
set_jack_gpio(CONFIG_JACK_GPIO, "jack_l");
#endif
set_jack_gpio(CONFIG_JACK_GPIO, "jack:0");
#endif
#ifndef CONFIG_JACK_LOCKED
parse_set_GPIO(set_jack_gpio);
#endif

View File

@@ -45,6 +45,7 @@ void set_power_gpio(int gpio, char *value) {
if (parsed) ESP_LOGI(TAG, "set GPIO %u to %s", gpio, value);
}
/****************************************************************************************
*
@@ -88,11 +89,7 @@ void services_init(void) {
ESP_LOGW(TAG, "no SPI configured");
}
ESP_LOGD(TAG,"Configuring LEDs green:%d red:%d", CONFIG_LED_GREEN_GPIO, CONFIG_LED_RED_GPIO);
led_svc_init();
led_config(LED_GREEN, CONFIG_LED_GREEN_GPIO, 0);
led_config(LED_RED, CONFIG_LED_RED_GPIO, 0);
battery_svc_init();
monitor_svc_init();
}

View File

@@ -1,4 +0,0 @@
.vscode
build
.DS_Store

View File

@@ -1,3 +0,0 @@
set(COMPONENT_SRCDIRS ". fonts ifaces")
set(COMPONENT_ADD_INCLUDEDIRS ".")
register_component()

View File

@@ -1,106 +0,0 @@
menu "TarableSSD1306"
config SSD1306_ENABLE_DEFAULT_I2C_INTERFACE
bool "Enable default i2c master interface code"
default y
help
Provides initialization code for both the i2c bus and i2c display device.
config SSD1306_DEFAULT_I2C_SPEED
depends on SSD1306_ENABLE_DEFAULT_I2C_INTERFACE
int "Bus speed for i2c master"
default 250000
help
Default i2c interface speed in Hz
config SSD1306_DEFAULT_I2C_PORT_NUMBER
depends on SSD1306_ENABLE_DEFAULT_I2C_INTERFACE
int "I2C port number to use"
default 0
config SSD1306_DEFAULT_I2C_SCL_PIN
depends on SSD1306_ENABLE_DEFAULT_I2C_INTERFACE
int "Default SCL pin number"
default 22
config SSD1306_DEFAULT_I2C_SDA_PIN
depends on SSD1306_ENABLE_DEFAULT_I2C_INTERFACE
int "Default SDA pin number"
default 21
config SSD1306_ENABLE_DEFAULT_SPI_INTERFACE
bool "Enable default SPI interface"
default y
help
Provides initialization code for both the i2c device and spi attached display.
config SSD1306_DEFAULT_SPI_HOST
depends on SSD1306_ENABLE_DEFAULT_SPI_INTERFACE
int
default 1 if SSD1306_USE_HSPI_HOST
default 2 if SSD1306_USE_VSPI_HOST
choice
depends on SSD1306_ENABLE_DEFAULT_SPI_INTERFACE
prompt "Default SPI host"
default SSD1306_USE_HSPI_HOST
config SSD1306_USE_HSPI_HOST
bool "HSPI"
config SSD1306_USE_VSPI_HOST
bool "VSPI"
endchoice
config SSD1306_DEFAULT_SPI_FREQUENCY
depends on SSD1306_ENABLE_DEFAULT_SPI_INTERFACE
int "Default frequency for SPI attached display"
default 1000000
config SSD1306_DEFAULT_SPI_MOSI_PIN
depends on SSD1306_ENABLE_DEFAULT_SPI_INTERFACE
int "Default MOSI pin number"
default 13
config SSD1306_DEFAULT_SPI_SCLK_PIN
depends on SSD1306_ENABLE_DEFAULT_SPI_INTERFACE
int "Default SCLK pin number"
default 14
config SSD1306_DEFAULT_SPI_DC_PIN
depends on SSD1306_ENABLE_DEFAULT_SPI_INTERFACE
int "Default DC pin number"
default 33
config SSD1306_ERROR_ABORT
bool "Call abort() on all errors"
default y
config SSD1306_CLIPDEBUG
int
default 0 if CLIPDEBUG_NONE
default 1 if CLIPDEBUG_WARNING
default 2 if CLIPDEBUG_ERROR
choice
prompt "Clipping debug level"
default CLIPDEBUG_WARNING
config CLIPDEBUG_NONE
bool "None"
help
Drawing operations clip silently.
config CLIPDEBUG_WARNING
bool "Warning"
help
If a drawing operation is clipped a warning is written to the console.
config CLIPDEBUG_ERROR
bool "Error"
help
If a drawing operation is clipped an error is written to the console along with an abort.
endchoice
endmenu

View File

@@ -1,9 +0,0 @@
MIT License
Copyright (c) 2017 Tara Keeling
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -1,16 +0,0 @@
<!---
Copyright (c) 2017 Tara Keeling
This software is released under the MIT License.
https://opensource.org/licenses/MIT
-->
# SSD1306 Component for the ESP32 and ESP-IDF SDK
## About:
This is a simple component for the SSD1306 display.
It supports multiple display sizes on both i2c and spi interfaces.
Check out the wiki where most of the relevant information is.
***Examples:*** https://github.com/TaraHoleInIt/tarablessd1306_examples

View File

@@ -1,2 +0,0 @@
COMPONENT_SRCDIRS := . fonts ifaces
COMPONENT_ADD_INCLUDEDIRS := .

View File

@@ -29,6 +29,8 @@ menu "Squeezelite-ESP32"
bool
config SPDIF_LOCKED
bool
config LED_LOCKED
bool
menu "Audio Output"
choice OUTPUT_TYPE
prompt "Output Type"
@@ -41,6 +43,7 @@ menu "Squeezelite-ESP32"
select BAT_LOCKED
select I2C_LOCKED
select SPDIF_LOCKED
select LED_LOCKED
config A1S
bool "ESP32-A1S module"
select I2C_LOCKED
@@ -49,7 +52,7 @@ menu "Squeezelite-ESP32"
endchoice
menu "DAC I2S settings"
visible if !SQUEEZEAMP && !A1S
visible if BASIC_I2C_BT
config I2S_NUM
int "I2S channel (0 or 1). "
default 0
@@ -83,7 +86,7 @@ menu "Squeezelite-ESP32"
endmenu
menu "SPDIF settings"
visible if !SQUEEZEAMP && !A1S
visible if BASIC_I2C_BT
config SDIF_NUM
int "I2S channel for SDPIF (0 or 1)"
default 0
@@ -202,9 +205,11 @@ menu "Squeezelite-ESP32"
default ""
help
Set parameters of shared GPIO with special values.
<gpio_1>=Vcc|GND|amp|jack_h|jack_l[,<gpio_n>=Vcc|GND|amp|jack_h|jack_l]
'amp' means a GPIO that is set when playback starts
'jack_h' means the audio_gpio insertion detection (1=inserted, use 'jack_l' when 0=inserted) - see also "Jack Insertion GPIO"
<gpio_1>=Vcc|GND|amp|jack[:0|1][,<gpio_n>=Vcc|GND|amp|jack[:0|1]]
'amp' => GPIO that is set when playback starts
'jack' => GPIO used for audio jack detection
'green', 'red' => GPIO for status LED
'[:0|1] means set the active value for that GPIO can be low or high
config ROTARY_ENCODER
string "Rotary Encoder configuration"
default ""
@@ -220,12 +225,22 @@ menu "Squeezelite-ESP32"
default 12 if SQUEEZEAMP
help
Set to -1 for no LED
config LED_GREEN_GPIO_LEVEL
int "Green led ON level"
depends on LED_GREEN_GPIO != -1
default 0 if SQUEEZEAMP
default 1 if !SQUEEZEAMP
config LED_RED_GPIO
int "Red led GPIO"
default -1 if !SQUEEZEAMP
default 13 if SQUEEZEAMP
help
Set to -1 for no LED
config LED_RED_GPIO_LEVEL
int "Red led ON level"
depends on LED_RED_GPIO != -1
default 0 if SQUEEZEAMP
default 1 if !SQUEEZEAMP
endmenu
menu "Audio JACK"
visible if !SQUEEZEAMP
@@ -242,12 +257,19 @@ menu "Squeezelite-ESP32"
endmenu
menu "Battery measure"
visible if !SQUEEZEAMP
config BAT_CONFIG
string "Set channel and scale"
default "" if !SQUEEZEAMP
default "channel=7,scale=20.24" if SQUEEZEAMP
config BAT_CHANNEL
int "Set channel (0..7)"
default -1 if !SQUEEZEAMP
default 7 if SQUEEZEAMP
help
Read a value every 10s on ADC1. Configuration format: channel=0..7,scale=<scale>
Read a value every 10s on ADC1 on set Channel
config BAT_SCALE
string "Set scaling factor"
depends on BAT_CHANNEL != -1
default "" if !SQUEEZEAMP
default "20.24" if SQUEEZEAMP
help
Set the scaling factor for this 12 bits ADC
endmenu
endmenu

View File

@@ -322,8 +322,8 @@ void register_default_nvs(){
ESP_LOGD(TAG,"Registering default value for key %s", "dac_config");
config_set_default(NVS_TYPE_STR, "dac_config", "", 0);
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "bat_config", CONFIG_BAT_CONFIG);
config_set_default(NVS_TYPE_STR, "bat_config", CONFIG_BAT_CONFIG, 0);
ESP_LOGD(TAG,"Registering default value for key %s", "bat_config");
config_set_default(NVS_TYPE_STR, "bat_config", "", 0);
ESP_LOGD(TAG,"Registering default value for key %s", "metadata_config");
config_set_default(NVS_TYPE_STR, "metadata_config", "", 0);