mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-06 03:27:01 +03:00
Fix recovery
This commit is contained in:
@@ -25,7 +25,11 @@ ENV GCC_TOOLS_BASE=/opt/esp/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtens
|
|||||||
# pushd components/wifi-manager/webapp/ && npm install && npm run-script build && popd
|
# pushd components/wifi-manager/webapp/ && npm install && npm run-script build && popd
|
||||||
#
|
#
|
||||||
# to run the docker with netwotrk port published on the host:
|
# to run the docker with netwotrk port published on the host:
|
||||||
|
# (windows)
|
||||||
# docker run --rm -p 5000:5000/tcp -v %cd%:/project -w /project -it sle118/squeezelite-esp32-idfv435
|
# docker run --rm -p 5000:5000/tcp -v %cd%:/project -w /project -it sle118/squeezelite-esp32-idfv435
|
||||||
|
# (linux)
|
||||||
|
# docker run --rm -p 5000:5000/tcp -v `pwd`:/project -w /project -it sle118/squeezelite-esp32-idfv435
|
||||||
|
|
||||||
|
|
||||||
ARG IDF_CLONE_URL=https://github.com/espressif/esp-idf.git
|
ARG IDF_CLONE_URL=https://github.com/espressif/esp-idf.git
|
||||||
ARG IDF_CLONE_BRANCH_OR_TAG=master
|
ARG IDF_CLONE_BRANCH_OR_TAG=master
|
||||||
|
|||||||
@@ -43,11 +43,15 @@ const __attribute__((section(".rodata_desc"))) esp_app_desc_t esp_app_desc = {
|
|||||||
extern void register_audio_config(void);
|
extern void register_audio_config(void);
|
||||||
extern void register_rotary_config(void);
|
extern void register_rotary_config(void);
|
||||||
extern void register_ledvu_config(void);
|
extern void register_ledvu_config(void);
|
||||||
|
extern void register_nvs();
|
||||||
|
|
||||||
void register_optional_cmd(void) {
|
void register_optional_cmd(void) {
|
||||||
|
#if CONFIG_WITH_CONFIG_UI
|
||||||
register_rotary_config();
|
register_rotary_config();
|
||||||
register_ledvu_config();
|
#endif
|
||||||
register_audio_config();
|
register_audio_config();
|
||||||
|
register_ledvu_config();
|
||||||
|
register_nvs();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int squeezelite_main(int argc, char **argv);
|
extern int squeezelite_main(int argc, char **argv);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -73,24 +73,42 @@ static void register_set_services();
|
|||||||
static void register_tasks();
|
static void register_tasks();
|
||||||
#endif
|
#endif
|
||||||
extern BaseType_t network_manager_task;
|
extern BaseType_t network_manager_task;
|
||||||
|
FILE * system_open_memstream(const char * cmdname,char **buf,size_t *buf_size){
|
||||||
|
FILE *f = open_memstream(buf, buf_size);
|
||||||
|
if (f == NULL) {
|
||||||
|
cmd_send_messaging(cmdname,MESSAGING_ERROR,"Unable to open memory stream.");
|
||||||
|
}
|
||||||
|
return f;
|
||||||
|
}
|
||||||
void register_system()
|
void register_system()
|
||||||
{
|
{
|
||||||
register_free();
|
|
||||||
|
register_setdevicename();
|
||||||
register_set_services();
|
register_set_services();
|
||||||
|
register_free();
|
||||||
register_heap();
|
register_heap();
|
||||||
register_dump_heap();
|
register_dump_heap();
|
||||||
register_setdevicename();
|
|
||||||
register_version();
|
register_version();
|
||||||
register_restart();
|
register_restart();
|
||||||
register_deep_sleep();
|
|
||||||
register_light_sleep();
|
|
||||||
register_factory_boot();
|
register_factory_boot();
|
||||||
register_restart_ota();
|
register_restart_ota();
|
||||||
#if WITH_TASKS_INFO
|
#if WITH_TASKS_INFO
|
||||||
register_tasks();
|
register_tasks();
|
||||||
#endif
|
#endif
|
||||||
|
#if CONFIG_WITH_CONFIG_UI
|
||||||
|
register_deep_sleep();
|
||||||
|
register_light_sleep();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
void simple_restart()
|
||||||
|
{
|
||||||
|
log_send_messaging(MESSAGING_WARNING,"Rebooting.");
|
||||||
|
if(!wait_for_commit()){
|
||||||
|
log_send_messaging(MESSAGING_WARNING,"Unable to commit configuration. ");
|
||||||
|
}
|
||||||
|
vTaskDelay(750/ portTICK_PERIOD_MS);
|
||||||
|
esp_restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'version' command */
|
/* 'version' command */
|
||||||
static int get_version(int argc, char **argv)
|
static int get_version(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@@ -128,36 +146,23 @@ esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
|
|||||||
{
|
{
|
||||||
if(is_recovery_running){
|
if(is_recovery_running){
|
||||||
if(partition_subtype ==ESP_PARTITION_SUBTYPE_APP_FACTORY){
|
if(partition_subtype ==ESP_PARTITION_SUBTYPE_APP_FACTORY){
|
||||||
log_send_messaging(MESSAGING_WARNING,"RECOVERY application is already active");
|
// log_send_messaging(MESSAGING_WARNING,"RECOVERY application is already active");
|
||||||
if(!wait_for_commit()){
|
simple_restart();
|
||||||
log_send_messaging(MESSAGING_WARNING,"Unable to commit configuration. ");
|
|
||||||
}
|
|
||||||
|
|
||||||
vTaskDelay(750/ portTICK_PERIOD_MS);
|
|
||||||
esp_restart();
|
|
||||||
return ESP_OK;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(partition_subtype !=ESP_PARTITION_SUBTYPE_APP_FACTORY){
|
if(partition_subtype !=ESP_PARTITION_SUBTYPE_APP_FACTORY){
|
||||||
log_send_messaging(MESSAGING_WARNING,"SQUEEZELITE application is already active");
|
// log_send_messaging(MESSAGING_WARNING,"SQUEEZELITE application is already active");
|
||||||
if(!wait_for_commit()){
|
simple_restart();
|
||||||
log_send_messaging(MESSAGING_WARNING,"Unable to commit configuration. ");
|
|
||||||
}
|
|
||||||
|
|
||||||
vTaskDelay(750/ portTICK_PERIOD_MS);
|
|
||||||
esp_restart();
|
|
||||||
return ESP_OK;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
esp_err_t err = ESP_OK;
|
esp_err_t err = ESP_OK;
|
||||||
bool bFound=false;
|
// log_send_messaging(MESSAGING_INFO, "Looking for partition type %u",partition_subtype);
|
||||||
log_send_messaging(MESSAGING_INFO, "Looking for partition type %u",partition_subtype);
|
|
||||||
const esp_partition_t *partition;
|
const esp_partition_t *partition;
|
||||||
esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_APP, partition_subtype, NULL);
|
esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_APP, partition_subtype, NULL);
|
||||||
|
|
||||||
if(it == NULL){
|
if(it == NULL){
|
||||||
log_send_messaging(MESSAGING_ERROR,"Reboot failed. Cannot iterate through partitions");
|
log_send_messaging(MESSAGING_ERROR,"Reboot failed. Partitions error");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -166,15 +171,11 @@ esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
|
|||||||
ESP_LOGD(TAG, "Releasing partition iterator");
|
ESP_LOGD(TAG, "Releasing partition iterator");
|
||||||
esp_partition_iterator_release(it);
|
esp_partition_iterator_release(it);
|
||||||
if(partition != NULL){
|
if(partition != NULL){
|
||||||
log_send_messaging(MESSAGING_INFO, "Found application partition %s sub type %u", partition->label,partition_subtype);
|
log_send_messaging(MESSAGING_INFO, "Rebooting to %s", partition->label);
|
||||||
err=esp_ota_set_boot_partition(partition);
|
err=esp_ota_set_boot_partition(partition);
|
||||||
if(err!=ESP_OK){
|
if(err!=ESP_OK){
|
||||||
bFound=false;
|
|
||||||
log_send_messaging(MESSAGING_ERROR,"Unable to select partition for reboot: %s",esp_err_to_name(err));
|
log_send_messaging(MESSAGING_ERROR,"Unable to select partition for reboot: %s",esp_err_to_name(err));
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
bFound=true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -183,13 +184,7 @@ esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
|
|||||||
}
|
}
|
||||||
ESP_LOGD(TAG, "Yielding to other processes");
|
ESP_LOGD(TAG, "Yielding to other processes");
|
||||||
taskYIELD();
|
taskYIELD();
|
||||||
if(bFound) {
|
simple_restart();
|
||||||
if(!wait_for_commit()){
|
|
||||||
log_send_messaging(MESSAGING_WARNING,"Unable to commit configuration changes. ");
|
|
||||||
}
|
|
||||||
vTaskDelay(750/ portTICK_PERIOD_MS);
|
|
||||||
esp_restart();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
@@ -197,46 +192,31 @@ esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
|
|||||||
|
|
||||||
static int restart(int argc, char **argv)
|
static int restart(int argc, char **argv)
|
||||||
{
|
{
|
||||||
log_send_messaging(MESSAGING_WARNING, "\n\nPerforming a simple restart to the currently active partition.");
|
simple_restart();
|
||||||
if(!wait_for_commit()){
|
|
||||||
cmd_send_messaging(argv[0],MESSAGING_WARNING,"Unable to commit configuration. ");
|
|
||||||
}
|
|
||||||
vTaskDelay(750/ portTICK_PERIOD_MS);
|
|
||||||
esp_restart();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void simple_restart()
|
|
||||||
{
|
|
||||||
log_send_messaging(MESSAGING_WARNING,"System reboot requested.");
|
|
||||||
if(!wait_for_commit()){
|
|
||||||
log_send_messaging(MESSAGING_WARNING,"Unable to commit configuration. ");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
vTaskDelay(750/ portTICK_PERIOD_MS);
|
|
||||||
esp_restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
esp_err_t guided_restart_ota(){
|
esp_err_t guided_restart_ota(){
|
||||||
log_send_messaging(MESSAGING_WARNING,"System reboot to Application requested");
|
log_send_messaging(MESSAGING_WARNING,"Booting to Squeezelite");
|
||||||
guided_boot(ESP_PARTITION_SUBTYPE_APP_OTA_0);
|
guided_boot(ESP_PARTITION_SUBTYPE_APP_OTA_0);
|
||||||
return ESP_FAIL; // return fail. This should never return... we're rebooting!
|
return ESP_FAIL; // return fail. This should never return... we're rebooting!
|
||||||
}
|
}
|
||||||
esp_err_t guided_factory(){
|
esp_err_t guided_factory(){
|
||||||
log_send_messaging(MESSAGING_WARNING,"System reboot to recovery requested");
|
log_send_messaging(MESSAGING_WARNING,"Booting to recovery");
|
||||||
guided_boot(ESP_PARTITION_SUBTYPE_APP_FACTORY);
|
guided_boot(ESP_PARTITION_SUBTYPE_APP_FACTORY);
|
||||||
return ESP_FAIL; // return fail. This should never return... we're rebooting!
|
return ESP_FAIL; // return fail. This should never return... we're rebooting!
|
||||||
}
|
}
|
||||||
static int restart_factory(int argc, char **argv)
|
static int restart_factory(int argc, char **argv)
|
||||||
{
|
{
|
||||||
cmd_send_messaging(argv[0],MESSAGING_WARNING, "Executing guided boot into recovery");
|
cmd_send_messaging(argv[0],MESSAGING_WARNING, "Booting to Recovery");
|
||||||
guided_boot(ESP_PARTITION_SUBTYPE_APP_FACTORY);
|
guided_boot(ESP_PARTITION_SUBTYPE_APP_FACTORY);
|
||||||
return 0; // return fail. This should never return... we're rebooting!
|
return 0; // return fail. This should never return... we're rebooting!
|
||||||
}
|
}
|
||||||
static int restart_ota(int argc, char **argv)
|
static int restart_ota(int argc, char **argv)
|
||||||
{
|
{
|
||||||
cmd_send_messaging(argv[0],MESSAGING_WARNING, "Executing guided boot into ota app 0");
|
cmd_send_messaging(argv[0],MESSAGING_WARNING, "Booting to Squeezelite");
|
||||||
guided_boot(ESP_PARTITION_SUBTYPE_APP_OTA_0);
|
guided_boot(ESP_PARTITION_SUBTYPE_APP_OTA_0);
|
||||||
return 0; // return fail. This should never return... we're rebooting!
|
return 0; // return fail. This should never return... we're rebooting!
|
||||||
}
|
}
|
||||||
@@ -248,7 +228,9 @@ static void register_restart()
|
|||||||
.hint = NULL,
|
.hint = NULL,
|
||||||
.func = &restart,
|
.func = &restart,
|
||||||
};
|
};
|
||||||
|
#if CONFIG_WITH_CONFIG_UI
|
||||||
cmd_to_json(&cmd);
|
cmd_to_json(&cmd);
|
||||||
|
#endif
|
||||||
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
||||||
}
|
}
|
||||||
static void register_restart_ota()
|
static void register_restart_ota()
|
||||||
@@ -259,7 +241,9 @@ static void register_restart_ota()
|
|||||||
.hint = NULL,
|
.hint = NULL,
|
||||||
.func = &restart_ota,
|
.func = &restart_ota,
|
||||||
};
|
};
|
||||||
|
#if CONFIG_WITH_CONFIG_UI
|
||||||
cmd_to_json(&cmd);
|
cmd_to_json(&cmd);
|
||||||
|
#endif
|
||||||
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,7 +255,9 @@ static void register_factory_boot()
|
|||||||
.hint = NULL,
|
.hint = NULL,
|
||||||
.func = &restart_factory,
|
.func = &restart_factory,
|
||||||
};
|
};
|
||||||
|
#if CONFIG_WITH_CONFIG_UI
|
||||||
cmd_to_json(&cmd);
|
cmd_to_json(&cmd);
|
||||||
|
#endif
|
||||||
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
||||||
}
|
}
|
||||||
/** 'free' command prints available heap memory */
|
/** 'free' command prints available heap memory */
|
||||||
@@ -287,11 +273,14 @@ static void register_free()
|
|||||||
{
|
{
|
||||||
const esp_console_cmd_t cmd = {
|
const esp_console_cmd_t cmd = {
|
||||||
.command = "free",
|
.command = "free",
|
||||||
.help = "Get the current size of free heap memory",
|
.help = "Get free heap memory",
|
||||||
.hint = NULL,
|
.hint = NULL,
|
||||||
.func = &free_mem,
|
.func = &free_mem,
|
||||||
};
|
};
|
||||||
|
#if CONFIG_WITH_CONFIG_UI
|
||||||
cmd_to_json(&cmd);
|
cmd_to_json(&cmd);
|
||||||
|
#endif
|
||||||
|
|
||||||
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd) );
|
||||||
}
|
}
|
||||||
static int dump_heap(int argc, char **argv)
|
static int dump_heap(int argc, char **argv)
|
||||||
@@ -303,16 +292,16 @@ static int dump_heap(int argc, char **argv)
|
|||||||
/* 'heap' command prints minumum heap size */
|
/* 'heap' command prints minumum heap size */
|
||||||
static int heap_size(int argc, char **argv)
|
static int heap_size(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ESP_LOGI(TAG,"Heap internal:%zu (min:%zu) (largest block:%zu)\nexternal:%zu (min:%zu) (largest block:%zd)\ndma :%zu (min:%zu) (largest block:%zd)",
|
// ESP_LOGI(TAG,"Heap internal:%zu (min:%zu) (largest block:%zu)\nexternal:%zu (min:%zu) (largest block:%zd)\ndma :%zu (min:%zu) (largest block:%zd)",
|
||||||
heap_caps_get_free_size(MALLOC_CAP_INTERNAL),
|
// heap_caps_get_free_size(MALLOC_CAP_INTERNAL),
|
||||||
heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL),
|
// heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL),
|
||||||
heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL),
|
// heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL),
|
||||||
heap_caps_get_free_size(MALLOC_CAP_SPIRAM),
|
// heap_caps_get_free_size(MALLOC_CAP_SPIRAM),
|
||||||
heap_caps_get_minimum_free_size(MALLOC_CAP_SPIRAM),
|
// heap_caps_get_minimum_free_size(MALLOC_CAP_SPIRAM),
|
||||||
heap_caps_get_largest_free_block(MALLOC_CAP_SPIRAM),
|
// heap_caps_get_largest_free_block(MALLOC_CAP_SPIRAM),
|
||||||
heap_caps_get_free_size(MALLOC_CAP_DMA),
|
// heap_caps_get_free_size(MALLOC_CAP_DMA),
|
||||||
heap_caps_get_minimum_free_size(MALLOC_CAP_DMA),
|
// heap_caps_get_minimum_free_size(MALLOC_CAP_DMA),
|
||||||
heap_caps_get_largest_free_block(MALLOC_CAP_DMA));
|
// heap_caps_get_largest_free_block(MALLOC_CAP_DMA));
|
||||||
cmd_send_messaging(argv[0],MESSAGING_INFO,"Heap internal:%zu (min:%zu) (largest block:%zu)\nexternal:%zu (min:%zu) (largest block:%zd)\ndma :%zu (min:%zu) (largest block:%zd)",
|
cmd_send_messaging(argv[0],MESSAGING_INFO,"Heap internal:%zu (min:%zu) (largest block:%zu)\nexternal:%zu (min:%zu) (largest block:%zd)\ndma :%zu (min:%zu) (largest block:%zd)",
|
||||||
heap_caps_get_free_size(MALLOC_CAP_INTERNAL),
|
heap_caps_get_free_size(MALLOC_CAP_INTERNAL),
|
||||||
heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL),
|
heap_caps_get_minimum_free_size(MALLOC_CAP_INTERNAL),
|
||||||
@@ -457,9 +446,8 @@ static int setdevicename(int argc, char **argv)
|
|||||||
|
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
size_t buf_size = 0;
|
size_t buf_size = 0;
|
||||||
FILE *f = open_memstream(&buf, &buf_size);
|
FILE *f = system_open_memstream(argv[0],&buf, &buf_size);
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream.");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
nerrors+=setnamevar("a2dp_dev_name", f, name);
|
nerrors+=setnamevar("a2dp_dev_name", f, name);
|
||||||
@@ -488,11 +476,13 @@ static void register_heap()
|
|||||||
{
|
{
|
||||||
const esp_console_cmd_t heap_cmd = {
|
const esp_console_cmd_t heap_cmd = {
|
||||||
.command = "heap",
|
.command = "heap",
|
||||||
.help = "Get minimum size of free heap memory found during execution",
|
.help = "Get minimum size of free heap memory",
|
||||||
.hint = NULL,
|
.hint = NULL,
|
||||||
.func = &heap_size,
|
.func = &heap_size,
|
||||||
};
|
};
|
||||||
|
#if CONFIG_WITH_CONFIG_UI
|
||||||
cmd_to_json(&heap_cmd);
|
cmd_to_json(&heap_cmd);
|
||||||
|
#endif
|
||||||
ESP_ERROR_CHECK( esp_console_cmd_register(&heap_cmd) );
|
ESP_ERROR_CHECK( esp_console_cmd_register(&heap_cmd) );
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -521,6 +511,7 @@ static void register_setdevicename()
|
|||||||
.func = &setdevicename,
|
.func = &setdevicename,
|
||||||
.argtable = &name_args
|
.argtable = &name_args
|
||||||
};
|
};
|
||||||
|
|
||||||
cmd_to_json_with_cb(&set_name,&setdevicename_cb);
|
cmd_to_json_with_cb(&set_name,&setdevicename_cb);
|
||||||
ESP_ERROR_CHECK(esp_console_cmd_register(&set_name));
|
ESP_ERROR_CHECK(esp_console_cmd_register(&set_name));
|
||||||
}
|
}
|
||||||
@@ -618,9 +609,7 @@ static void register_deep_sleep()
|
|||||||
|
|
||||||
const esp_console_cmd_t cmd = {
|
const esp_console_cmd_t cmd = {
|
||||||
.command = "deep_sleep",
|
.command = "deep_sleep",
|
||||||
.help = "Enter deep sleep mode. "
|
.help = "Enter deep sleep mode. ",
|
||||||
"Two wakeup modes are supported: timer and GPIO. "
|
|
||||||
"If no wakeup option is specified, will sleep indefinitely.",
|
|
||||||
.hint = NULL,
|
.hint = NULL,
|
||||||
.func = &deep_sleep,
|
.func = &deep_sleep,
|
||||||
.argtable = &deep_sleep_args
|
.argtable = &deep_sleep_args
|
||||||
@@ -649,9 +638,8 @@ static int do_set_services(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
size_t buf_size = 0;
|
size_t buf_size = 0;
|
||||||
FILE *f = open_memstream(&buf, &buf_size);
|
FILE *f = system_open_memstream(argv[0],&buf, &buf_size);
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream.");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,7 +662,7 @@ static int do_set_services(int argc, char **argv)
|
|||||||
|
|
||||||
if(err!=ESP_OK){
|
if(err!=ESP_OK){
|
||||||
nerrors++;
|
nerrors++;
|
||||||
fprintf(f,"Error setting telnet service to %s. %s\n",set_services_args.telnet->sval[0], esp_err_to_name(err));
|
fprintf(f,"Error setting telnet to %s. %s\n",set_services_args.telnet->sval[0], esp_err_to_name(err));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fprintf(f,"Telnet service changed to %s\n",set_services_args.telnet->sval[0]);
|
fprintf(f,"Telnet service changed to %s\n",set_services_args.telnet->sval[0]);
|
||||||
@@ -706,7 +694,6 @@ cJSON * set_services_cb(){
|
|||||||
#if WITH_TASKS_INFO
|
#if WITH_TASKS_INFO
|
||||||
console_set_bool_parameter(values,"stats",set_services_args.stats);
|
console_set_bool_parameter(values,"stats",set_services_args.stats);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((p = config_alloc_get(NVS_TYPE_STR, "telnet_enable")) != NULL) {
|
if ((p = config_alloc_get(NVS_TYPE_STR, "telnet_enable")) != NULL) {
|
||||||
if(strcasestr("YX",p)!=NULL){
|
if(strcasestr("YX",p)!=NULL){
|
||||||
cJSON_AddStringToObject(values,set_services_args.telnet->hdr.longopts,"Telnet Only");
|
cJSON_AddStringToObject(values,set_services_args.telnet->hdr.longopts,"Telnet Only");
|
||||||
@@ -717,7 +704,6 @@ cJSON * set_services_cb(){
|
|||||||
else {
|
else {
|
||||||
cJSON_AddStringToObject(values,set_services_args.telnet->hdr.longopts,"Disabled");
|
cJSON_AddStringToObject(values,set_services_args.telnet->hdr.longopts,"Disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
FREE_AND_NULL(p);
|
FREE_AND_NULL(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ void register_system();
|
|||||||
esp_err_t guided_factory();
|
esp_err_t guided_factory();
|
||||||
esp_err_t guided_restart_ota();
|
esp_err_t guided_restart_ota();
|
||||||
void simple_restart();
|
void simple_restart();
|
||||||
|
FILE * system_open_memstream(const char * cmdname,char **buf,size_t *buf_size);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,8 +204,10 @@ void register_wifi_join()
|
|||||||
|
|
||||||
void register_wifi()
|
void register_wifi()
|
||||||
{
|
{
|
||||||
|
#ifdef WIFI_CMDLINE
|
||||||
register_wifi_join();
|
register_wifi_join();
|
||||||
if(bypass_network_manager){
|
if(bypass_network_manager){
|
||||||
initialise_wifi();
|
initialise_wifi();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#include "driver/i2s.h"
|
#include "driver/i2s.h"
|
||||||
#include "driver/spi_master.h"
|
#include "driver/spi_master.h"
|
||||||
#include "gpio_exp.h"
|
#include "gpio_exp.h"
|
||||||
|
#include "cJSON.h"
|
||||||
extern const char *i2c_name_type;
|
extern const char *i2c_name_type;
|
||||||
extern const char *spi_name_type;
|
extern const char *spi_name_type;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
"babel": "^6.23.0",
|
"babel": "^6.23.0",
|
||||||
"babel-loader": "^8.2.3",
|
"babel-loader": "^8.2.3",
|
||||||
"babel-runtime": "^6.26.0",
|
"babel-runtime": "^6.26.0",
|
||||||
"bootswatch": "file:src/bootswatch",
|
|
||||||
"clean-webpack-plugin": "^4.0.0",
|
"clean-webpack-plugin": "^4.0.0",
|
||||||
"commander": "^8.3.0",
|
"commander": "^8.3.0",
|
||||||
"compression-webpack-plugin": "^9.2.0",
|
"compression-webpack-plugin": "^9.2.0",
|
||||||
@@ -75,8 +74,10 @@
|
|||||||
"@babel/runtime": "^7.16.7",
|
"@babel/runtime": "^7.16.7",
|
||||||
"async-mutex": "^0.3.2",
|
"async-mutex": "^0.3.2",
|
||||||
"bootstrap": "^5.1.3",
|
"bootstrap": "^5.1.3",
|
||||||
|
"bootswatch": "^5.3.2",
|
||||||
"jquery": "^3.6.0",
|
"jquery": "^3.6.0",
|
||||||
"npm": "^10.1.0",
|
"npm": "^10.1.0",
|
||||||
|
"optipng-bin": "^9.0.0",
|
||||||
"popper.js": "^1.16.1",
|
"popper.js": "^1.16.1",
|
||||||
"webpack-visualizer-plugin": "^0.1.11",
|
"webpack-visualizer-plugin": "^0.1.11",
|
||||||
"webpack-visualizer-plugin2": "^1.0.0"
|
"webpack-visualizer-plugin2": "^1.0.0"
|
||||||
|
|||||||
@@ -99,7 +99,7 @@
|
|||||||
<div class="tab-pane fade" id="tab-cfg-gen"></div>
|
<div class="tab-pane fade" id="tab-cfg-gen"></div>
|
||||||
<div class="tab-pane fade" id="tab-cfg-fw">
|
<div class="tab-pane fade" id="tab-cfg-fw">
|
||||||
|
|
||||||
<div class="card text-white mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header">Software Updates</div>
|
<div class="card-header">Software Updates</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<table class="table table-hover table-striped table-dark">
|
<table class="table table-hover table-striped table-dark">
|
||||||
@@ -171,7 +171,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card text-white mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header">Local Firmware Upload</div>
|
<div class="card-header">Local Firmware Upload</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div id="uploaddiv" class="form-group row ">
|
<div id="uploaddiv" class="form-group row ">
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade" id="tab-cfg-audio">
|
<div class="tab-pane fade" id="tab-cfg-audio">
|
||||||
<div class="card text-white mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header">Usage Templates</div>
|
<div class="card-header">Usage Templates</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<fieldset class="form-group" id="output-tmpl">
|
<fieldset class="form-group" id="output-tmpl">
|
||||||
@@ -355,7 +355,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane fade active show" id="tab-wifi">
|
<div class="tab-pane fade active show" id="tab-wifi">
|
||||||
<div class="card text-white mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header">WiFi Status</div>
|
<div class="card-header">WiFi Status</div>
|
||||||
|
|
||||||
<div class="card-body if_eth" style="display: none">
|
<div class="card-body if_eth" style="display: none">
|
||||||
@@ -527,7 +527,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- syslog -->
|
<!-- syslog -->
|
||||||
<div class="tab-pane fade " id="tab-credits">
|
<div class="tab-pane fade " id="tab-credits">
|
||||||
<div class="card text-white mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header">Credits</div>
|
<div class="card-header">Credits</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p><strong><a
|
<p><strong><a
|
||||||
@@ -554,7 +554,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card text-white mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header">Extras/Overrides</div>
|
<div class="card-header">Extras/Overrides</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
|||||||
@@ -2097,7 +2097,7 @@ function getCommands() {
|
|||||||
const isConfig = cmdParts[0] === 'cfg';
|
const isConfig = cmdParts[0] === 'cfg';
|
||||||
const targetDiv = '#tab-' + cmdParts[0] + '-' + cmdParts[1];
|
const targetDiv = '#tab-' + cmdParts[0] + '-' + cmdParts[1];
|
||||||
let innerhtml = '';
|
let innerhtml = '';
|
||||||
innerhtml += `<div class="card text-white mb-3"><div class="card-header">${command.help.encodeHTML().replace(/\n/g, '<br />')}</div><div class="card-body"><fieldset id="flds-${command.name}">`;
|
innerhtml += `<div class="card mb-3"><div class="card-header">${command.help.encodeHTML().replace(/\n/g, '<br />')}</div><div class="card-body"><fieldset id="flds-${command.name}">`;
|
||||||
if (command.argtable) {
|
if (command.argtable) {
|
||||||
command.argtable.forEach(function (arg) {
|
command.argtable.forEach(function (arg) {
|
||||||
let placeholder = arg.datatype || '';
|
let placeholder = arg.datatype || '';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
@import "~bootswatch/dist/darkly/variables";
|
// @import "~bootswatch/dist/darkly/variables"; -- remove darkly until bootswatch color is resolved
|
||||||
@import "utils/variables";
|
@import "utils/variables";
|
||||||
@import "~bootstrap/scss/bootstrap";
|
@import "~bootstrap/scss/bootstrap";
|
||||||
// @import "~bootstrap/scss/functions";
|
// @import "~bootstrap/scss/functions";
|
||||||
@@ -38,5 +38,5 @@
|
|||||||
|
|
||||||
// // Utilities
|
// // Utilities
|
||||||
// @import "~bootstrap/scss/utilities/api";
|
// @import "~bootstrap/scss/utilities/api";
|
||||||
@import "~bootswatch/dist/darkly/bootswatch";
|
// @import "~bootswatch/dist/darkly/bootswatch"; -- remove darkly until bootswatch color is resolved
|
||||||
@import "utils/style";
|
@import "utils/style";
|
||||||
117
components/wifi-manager/webapp/webpack/BuildEventsHook.js
Normal file
117
components/wifi-manager/webapp/webpack/BuildEventsHook.js
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const fs = require('fs');
|
||||||
|
const zlib = require("zlib");
|
||||||
|
const glob = require('glob');
|
||||||
|
|
||||||
|
|
||||||
|
class BuildEventsHook {
|
||||||
|
constructor(name, fn, stage = 'afterEmit') {
|
||||||
|
this.name = name;
|
||||||
|
this.stage = stage;
|
||||||
|
this.function = fn;
|
||||||
|
}
|
||||||
|
apply(compiler) {
|
||||||
|
compiler.hooks[this.stage].tap(this.name, this.function);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createBuildEventsHook(options){
|
||||||
|
return new BuildEventsHook('Update C App',
|
||||||
|
function (stats, arguments) {
|
||||||
|
|
||||||
|
if (options.mode !== "production") return;
|
||||||
|
let buildRootPath = path.join(process.cwd(), '..', '..', '..');
|
||||||
|
let wifiManagerPath = glob.sync(path.join(buildRootPath, 'components/**/wifi-manager*'))[0];
|
||||||
|
let buildCRootPath = glob.sync(buildRootPath)[0];
|
||||||
|
fs.appendFileSync('./dist/index.html.gz',
|
||||||
|
zlib.gzipSync(fs.readFileSync('./dist/index.html'),
|
||||||
|
{
|
||||||
|
chunckSize: 65536,
|
||||||
|
level: zlib.constants.Z_BEST_COMPRESSION
|
||||||
|
}));
|
||||||
|
|
||||||
|
let getDirectories = function getDirectories (src, callback) {
|
||||||
|
let searchPath = path.posix.join(src, '/**/*(*.gz|favicon-32x32.png)');
|
||||||
|
console.log(`Post build: Getting file list from ${searchPath}`);
|
||||||
|
glob(searchPath, callback);
|
||||||
|
};
|
||||||
|
let cleanUpPath = path.posix.join(buildCRootPath, '/build/*.S');
|
||||||
|
console.log(`Post build: Cleaning up previous builds in ${cleanUpPath}`);
|
||||||
|
glob(cleanUpPath, function (err, list) {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error', err);
|
||||||
|
} else {
|
||||||
|
list.forEach(fileName => {
|
||||||
|
try {
|
||||||
|
console.log(`Post build: Purging old binary file ${fileName} from C project.`);
|
||||||
|
fs.unlinkSync(fileName)
|
||||||
|
//file removed
|
||||||
|
} catch (ferr) {
|
||||||
|
console.error(ferr)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'afterEmit'
|
||||||
|
);
|
||||||
|
console.log('Generating C include files from webpack build output');
|
||||||
|
getDirectories('./dist', function (err, list) {
|
||||||
|
console.log(`Post build: found ${list.length} files. Relative path: ${wifiManagerPath}.`);
|
||||||
|
if (err) {
|
||||||
|
console.log('Error', err);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
let exportDefHead =
|
||||||
|
`/***********************************
|
||||||
|
webpack_headers
|
||||||
|
${arguments[1]}
|
||||||
|
***********************************/
|
||||||
|
#pragma once
|
||||||
|
#include <inttypes.h>
|
||||||
|
extern const char * resource_lookups[];
|
||||||
|
extern const uint8_t * resource_map_start[];
|
||||||
|
extern const uint8_t * resource_map_end[];`;
|
||||||
|
let exportDef = '// Automatically generated. Do not edit manually!.\n' +
|
||||||
|
'#include <inttypes.h>\n';
|
||||||
|
let lookupDef = 'const char * resource_lookups[] = {\n';
|
||||||
|
let lookupMapStart = 'const uint8_t * resource_map_start[] = {\n';
|
||||||
|
let lookupMapEnd = 'const uint8_t * resource_map_end[] = {\n';
|
||||||
|
let cMake = '';
|
||||||
|
|
||||||
|
list.forEach(foundFile => {
|
||||||
|
let exportName = path.basename(foundFile).replace(/[\. \-]/gm, '_');
|
||||||
|
//take the full path of the file and make it relative to the build directory
|
||||||
|
let cmakeFileName = path.posix.relative(wifiManagerPath, glob.sync(path.resolve(foundFile))[0]);
|
||||||
|
let httpRelativePath = path.posix.join('/', path.posix.relative('dist', foundFile));
|
||||||
|
exportDef += `extern const uint8_t _${exportName}_start[] asm("_binary_${exportName}_start");\nextern const uint8_t _${exportName}_end[] asm("_binary_${exportName}_end");\n`;
|
||||||
|
lookupDef += `\t"${httpRelativePath}",\n`;
|
||||||
|
lookupMapStart += '\t_' + exportName + '_start,\n';
|
||||||
|
lookupMapEnd += '\t_' + exportName + '_end,\n';
|
||||||
|
cMake += `target_add_binary_data( __idf_wifi-manager ${cmakeFileName} BINARY)\n`;
|
||||||
|
console.log(`Post build: adding cmake file reference to ${cmakeFileName} from C project, with web path ${httpRelativePath}.`);
|
||||||
|
});
|
||||||
|
|
||||||
|
lookupDef += '""\n};\n';
|
||||||
|
lookupMapStart = lookupMapStart.substring(0, lookupMapStart.length - 2) + '\n};\n';
|
||||||
|
lookupMapEnd = lookupMapEnd.substring(0, lookupMapEnd.length - 2) + '\n};\n';
|
||||||
|
try {
|
||||||
|
fs.writeFileSync('webapp.cmake', cMake);
|
||||||
|
fs.writeFileSync('webpack.c', exportDef + lookupDef + lookupMapStart + lookupMapEnd);
|
||||||
|
fs.writeFileSync('webpack.h', exportDefHead);
|
||||||
|
//file written successfully
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log('Post build completed.');
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
BuildEventsHook,
|
||||||
|
createBuildEventsHook
|
||||||
|
}
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@ const HtmlWebPackPlugin = require('html-webpack-plugin');
|
|||||||
const { Command } = require('commander');
|
const { Command } = require('commander');
|
||||||
let cmdLines= { };
|
let cmdLines= { };
|
||||||
var { parseArgsStringToArgv } = require('string-argv');
|
var { parseArgsStringToArgv } = require('string-argv');
|
||||||
const PORT = 9100;
|
const PORT = 5000;
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
messages: require("../mock/messages.json"),
|
messages: require("../mock/messages.json"),
|
||||||
@@ -159,7 +159,7 @@ module.exports ={
|
|||||||
open: true,
|
open: true,
|
||||||
compress: true,
|
compress: true,
|
||||||
port: PORT,
|
port: PORT,
|
||||||
host: '127.0.0.1',//your ip address
|
host: '0.0.0.0',
|
||||||
allowedHosts: "all",
|
allowedHosts: "all",
|
||||||
headers: {'Access-Control-Allow-Origin': '*', 'Accept-Encoding': 'identity'},
|
headers: {'Access-Control-Allow-Origin': '*', 'Accept-Encoding': 'identity'},
|
||||||
client: {
|
client: {
|
||||||
|
|||||||
91
docker/ToggleGitTracking.ps1
Normal file
91
docker/ToggleGitTracking.ps1
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
param (
|
||||||
|
[Parameter(Position=0, Mandatory=$false)]
|
||||||
|
[ValidateSet("t", "u", "d")]
|
||||||
|
[string]$option
|
||||||
|
)
|
||||||
|
|
||||||
|
# Get the current directory
|
||||||
|
$currentDir = Get-Location
|
||||||
|
|
||||||
|
# Define target directories
|
||||||
|
$targetDir = "components\wifi-manager\webapp"
|
||||||
|
$distDir = "$targetDir\dist"
|
||||||
|
|
||||||
|
# Get list of files from the 'dist' directory
|
||||||
|
$fsFiles = Get-ChildItem -Recurse $distDir -File | ForEach-Object {
|
||||||
|
$_.FullName.Substring($currentDir.Path.Length + 1).Replace("\", "/")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define additional files to include
|
||||||
|
$additionalFiles = @("webpack.c", "webpack.h", "webapp.cmake")
|
||||||
|
|
||||||
|
# Check if additional files exist in $targetDir and format them
|
||||||
|
$additionalFilesFormatted = @()
|
||||||
|
Get-ChildItem $targetDir -File | ForEach-Object {
|
||||||
|
if ($additionalFiles -contains $_.Name) {
|
||||||
|
$formatted = $_.FullName.Substring($currentDir.Path.Length + 1).Replace("\", "/")
|
||||||
|
$additionalFilesFormatted += $formatted
|
||||||
|
Write-Host "Found $formatted"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get list of files from the Git index
|
||||||
|
$indexFiles = git ls-files -s $distDir | ForEach-Object {
|
||||||
|
($_ -split "\s+")[3]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Combine and remove duplicates
|
||||||
|
$allFiles = $fsFiles + $additionalFilesFormatted + $indexFiles | Sort-Object -Unique
|
||||||
|
# ... (previous code remains unchanged)
|
||||||
|
|
||||||
|
# Apply the git command based on the option
|
||||||
|
$allFiles | ForEach-Object {
|
||||||
|
$relativePath = $_
|
||||||
|
$isInIndex = $indexFiles -contains $relativePath
|
||||||
|
|
||||||
|
if ($null -eq $option) {
|
||||||
|
$gitStatus = & git status --porcelain -- $relativePath
|
||||||
|
if ($gitStatus) {
|
||||||
|
$status = ($gitStatus -split "\s")[0]
|
||||||
|
Write-Host "$relativePath has Git status: $status"
|
||||||
|
} else {
|
||||||
|
Write-Host "$relativePath is not tracked"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif ($isInIndex) {
|
||||||
|
if ($option -eq "d") {
|
||||||
|
$resetResult = & git reset -- $relativePath 2>&1
|
||||||
|
if ($resetResult -match 'error:') {
|
||||||
|
Write-Host "Error resetting ${relativePath}: $resetResult"
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
$checkoutResult = & git checkout -- $relativePath 2>&1
|
||||||
|
if ($checkoutResult -match 'error:') {
|
||||||
|
Write-Host "Error checking out ${relativePath}: $checkoutResult"
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
Write-Host "Discarded changes in $relativePath"
|
||||||
|
}
|
||||||
|
# ... (rest of the code remains unchanged)
|
||||||
|
}
|
||||||
|
# else {
|
||||||
|
# # if ($option -eq "d") {
|
||||||
|
# # Remove-Item -Path $relativePath -Force
|
||||||
|
# # Write-Host "Removed untracked file $relativePath"
|
||||||
|
# # } else {
|
||||||
|
# # Write-Host "File $relativePath is not tracked."
|
||||||
|
# # }
|
||||||
|
|
||||||
|
# }
|
||||||
|
else {
|
||||||
|
if ($option -eq "t") {
|
||||||
|
git add $relativePath
|
||||||
|
git update-index --no-skip-worktree $relativePath
|
||||||
|
Write-Host "Started tracking changes in $relativePath"
|
||||||
|
} else {
|
||||||
|
Write-Host "File $relativePath is not tracked."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -68,7 +68,68 @@ bool cold_boot=true;
|
|||||||
extern const char _ctype_[];
|
extern const char _ctype_[];
|
||||||
const char* __ctype_ptr__ = _ctype_;
|
const char* __ctype_ptr__ = _ctype_;
|
||||||
#endif
|
#endif
|
||||||
|
typedef struct {
|
||||||
|
const char *key;
|
||||||
|
const char *value;
|
||||||
|
} DefaultStringVal;
|
||||||
|
typedef struct {
|
||||||
|
const char *key;
|
||||||
|
unsigned int uint_value;
|
||||||
|
bool is_signed;
|
||||||
|
} DefaultNumVal;
|
||||||
|
|
||||||
|
const DefaultNumVal defaultNumVals[] = {
|
||||||
|
{"ota_erase_blk", OTA_FLASH_ERASE_BLOCK, 0},
|
||||||
|
{"ota_stack", OTA_STACK_SIZE, 0},
|
||||||
|
{"ota_prio", OTA_TASK_PRIOTITY, 1}
|
||||||
|
};
|
||||||
|
const DefaultStringVal defaultStringVals[] = {
|
||||||
|
{"equalizer", ""},
|
||||||
|
{"loudness", "0"},
|
||||||
|
{"actrls_config", ""},
|
||||||
|
{"lms_ctrls_raw", "n"},
|
||||||
|
{"rotary_config", CONFIG_ROTARY_ENCODER},
|
||||||
|
{"display_config", CONFIG_DISPLAY_CONFIG},
|
||||||
|
{"eth_config", CONFIG_ETH_CONFIG},
|
||||||
|
{"i2c_config", CONFIG_I2C_CONFIG},
|
||||||
|
{"spi_config", CONFIG_SPI_CONFIG},
|
||||||
|
{"set_GPIO", CONFIG_SET_GPIO},
|
||||||
|
{"sleep_config", ""},
|
||||||
|
{"led_brightness", ""},
|
||||||
|
{"spdif_config", ""},
|
||||||
|
{"dac_config", ""},
|
||||||
|
{"dac_controlset", ""},
|
||||||
|
{"jack_mutes_amp", "n"},
|
||||||
|
{"gpio_exp_config", CONFIG_GPIO_EXP_CONFIG},
|
||||||
|
{"bat_config", ""},
|
||||||
|
{"metadata_config", ""},
|
||||||
|
{"telnet_enable", ""},
|
||||||
|
{"telnet_buffer", "40000"},
|
||||||
|
{"telnet_block", "500"},
|
||||||
|
{"stats", "n"},
|
||||||
|
{"rel_api", CONFIG_RELEASE_API},
|
||||||
|
{"pollmx", "600"},
|
||||||
|
{"pollmin", "15"},
|
||||||
|
{"ethtmout", "8"},
|
||||||
|
{"dhcp_tmout", "8"},
|
||||||
|
{"target", CONFIG_TARGET},
|
||||||
|
{"led_vu_config", ""},
|
||||||
|
#ifdef CONFIG_BT_SINK
|
||||||
|
{"bt_sink_pin", STR(CONFIG_BT_SINK_PIN)},
|
||||||
|
{"bt_sink_volume", "127"},
|
||||||
|
// Note: register_default_with_mac("bt_name", CONFIG_BT_NAME); is a special case
|
||||||
|
{"enable_bt_sink", STR(CONFIG_BT_SINK)},
|
||||||
|
{"a2dp_dev_name", CONFIG_A2DP_DEV_NAME},
|
||||||
|
{"a2dp_ctmt", STR(CONFIG_A2DP_CONNECT_TIMEOUT_MS)},
|
||||||
|
{"a2dp_ctrld", STR(CONFIG_A2DP_CONTROL_DELAY_MS)},
|
||||||
|
{"a2dp_sink_name", CONFIG_A2DP_SINK_NAME},
|
||||||
|
{"autoexec", "1"},
|
||||||
|
#ifdef CONFIG_AIRPLAY_SINK
|
||||||
|
{"airplay_port", CONFIG_AIRPLAY_PORT},
|
||||||
|
{"enable_airplay", STR(CONFIG_AIRPLAY_SINK)}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
};
|
||||||
static bool bNetworkConnected=false;
|
static bool bNetworkConnected=false;
|
||||||
|
|
||||||
// as an exception _init function don't need include
|
// as an exception _init function don't need include
|
||||||
@@ -80,7 +141,9 @@ extern void target_init(char *target);
|
|||||||
const char * str_or_unknown(const char * str) { return (str?str:unknown_string_placeholder); }
|
const char * str_or_unknown(const char * str) { return (str?str:unknown_string_placeholder); }
|
||||||
const char * str_or_null(const char * str) { return (str?str:null_string_placeholder); }
|
const char * str_or_null(const char * str) { return (str?str:null_string_placeholder); }
|
||||||
bool is_recovery_running;
|
bool is_recovery_running;
|
||||||
|
bool is_network_connected(){
|
||||||
|
return bNetworkConnected;
|
||||||
|
}
|
||||||
void cb_connection_got_ip(nm_state_t new_state, int sub_state){
|
void cb_connection_got_ip(nm_state_t new_state, int sub_state){
|
||||||
const char *hostname;
|
const char *hostname;
|
||||||
static ip4_addr_t ip;
|
static ip4_addr_t ip;
|
||||||
@@ -163,7 +226,7 @@ void set_log_level(char * tag, char * level){
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define DEFAULT_NAME_WITH_MAC(var,defval) char var[strlen(defval)+sizeof(macStr)]; strcpy(var,defval); strcat(var,macStr)
|
#define DEFAULT_NAME_WITH_MAC(var,defval) char var[strlen(defval)+sizeof(macStr)]; strcpy(var,defval); strcat(var,macStr)
|
||||||
void register_default_string_val(const char * key, char * value){
|
void register_default_string_val(const char * key, const char * value){
|
||||||
char * existing =(char *)config_alloc_get(NVS_TYPE_STR,key );
|
char * existing =(char *)config_alloc_get(NVS_TYPE_STR,key );
|
||||||
ESP_LOGD(TAG,"Register default called with: %s= %s",key,value );
|
ESP_LOGD(TAG,"Register default called with: %s= %s",key,value );
|
||||||
if(!existing) {
|
if(!existing) {
|
||||||
@@ -175,7 +238,15 @@ void register_default_string_val(const char * key, char * value){
|
|||||||
}
|
}
|
||||||
FREE_AND_NULL(existing);
|
FREE_AND_NULL(existing);
|
||||||
}
|
}
|
||||||
|
void register_single_default_num_val(const DefaultNumVal *entry) {
|
||||||
|
char number_buffer[101] = {};
|
||||||
|
if (entry->is_signed) {
|
||||||
|
snprintf(number_buffer, sizeof(number_buffer) - 1, "%d", entry->uint_value);
|
||||||
|
} else {
|
||||||
|
snprintf(number_buffer, sizeof(number_buffer) - 1, "%u", entry->uint_value);
|
||||||
|
}
|
||||||
|
register_default_string_val(entry->key, number_buffer);
|
||||||
|
}
|
||||||
char * alloc_get_string_with_mac(const char * val) {
|
char * alloc_get_string_with_mac(const char * val) {
|
||||||
uint8_t mac[6];
|
uint8_t mac[6];
|
||||||
char macStr[LOCAL_MAC_SIZE + 1];
|
char macStr[LOCAL_MAC_SIZE + 1];
|
||||||
@@ -220,77 +291,25 @@ void register_default_nvs(){
|
|||||||
else {
|
else {
|
||||||
register_default_string_val("cspot_config", "");
|
register_default_string_val("cspot_config", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_AIRPLAY_SINK
|
#ifdef CONFIG_AIRPLAY_SINK
|
||||||
register_default_with_mac("airplay_name", CONFIG_AIRPLAY_NAME);
|
register_default_with_mac("airplay_name", CONFIG_AIRPLAY_NAME);
|
||||||
register_default_string_val("airplay_port", CONFIG_AIRPLAY_PORT);
|
|
||||||
register_default_string_val( "enable_airplay", STR(CONFIG_AIRPLAY_SINK));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_BT_SINK
|
#ifdef CONFIG_BT_SINK
|
||||||
register_default_string_val( "bt_sink_pin", STR(CONFIG_BT_SINK_PIN));
|
|
||||||
register_default_string_val( "bt_sink_volume", "127");
|
|
||||||
register_default_with_mac("bt_name", CONFIG_BT_NAME);
|
register_default_with_mac("bt_name", CONFIG_BT_NAME);
|
||||||
register_default_string_val( "enable_bt_sink", STR(CONFIG_BT_SINK));
|
|
||||||
register_default_string_val("a2dp_dev_name", CONFIG_A2DP_DEV_NAME);
|
|
||||||
register_default_string_val("a2dp_ctmt", STR(CONFIG_A2DP_CONNECT_TIMEOUT_MS));
|
|
||||||
register_default_string_val("a2dp_ctrld", STR(CONFIG_A2DP_CONTROL_DELAY_MS));
|
|
||||||
register_default_string_val("a2dp_sink_name", CONFIG_A2DP_SINK_NAME);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
register_default_with_mac("host_name", DEFAULT_HOST_NAME);
|
register_default_with_mac("host_name", DEFAULT_HOST_NAME);
|
||||||
register_default_with_mac("ap_ssid", CONFIG_DEFAULT_AP_SSID);
|
register_default_with_mac("ap_ssid", CONFIG_DEFAULT_AP_SSID);
|
||||||
register_default_string_val("autoexec","1");
|
|
||||||
register_default_with_mac("autoexec1",CONFIG_DEFAULT_COMMAND_LINE " -n " DEFAULT_HOST_NAME);
|
register_default_with_mac("autoexec1",CONFIG_DEFAULT_COMMAND_LINE " -n " DEFAULT_HOST_NAME);
|
||||||
|
for (int i = 0; i < sizeof(defaultStringVals) / sizeof(DefaultStringVal); ++i) {
|
||||||
|
register_default_string_val(defaultStringVals[i].key, defaultStringVals[i].value);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < sizeof(defaultNumVals) / sizeof(DefaultNumVal); ++i) {
|
||||||
|
register_single_default_num_val(&defaultNumVals[i]);
|
||||||
|
}
|
||||||
|
|
||||||
register_default_string_val("release_url", CONFIG_SQUEEZELITE_ESP32_RELEASE_URL);
|
|
||||||
register_default_string_val("ap_ip_address",CONFIG_DEFAULT_AP_IP);
|
|
||||||
register_default_string_val("ap_ip_gateway",CONFIG_DEFAULT_AP_GATEWAY );
|
|
||||||
register_default_string_val("ap_ip_netmask",CONFIG_DEFAULT_AP_NETMASK);
|
|
||||||
register_default_string_val("ap_channel",STR(CONFIG_DEFAULT_AP_CHANNEL));
|
|
||||||
register_default_string_val("ap_pwd", CONFIG_DEFAULT_AP_PASSWORD);
|
|
||||||
register_default_string_val("bypass_wm", "0");
|
|
||||||
register_default_string_val("equalizer", "");
|
|
||||||
register_default_string_val("loudness", "0");
|
|
||||||
register_default_string_val("actrls_config", "");
|
|
||||||
register_default_string_val("lms_ctrls_raw", "n");
|
|
||||||
register_default_string_val("rotary_config", CONFIG_ROTARY_ENCODER);
|
|
||||||
char number_buffer[101] = {};
|
|
||||||
snprintf(number_buffer,sizeof(number_buffer)-1,"%u",OTA_FLASH_ERASE_BLOCK);
|
|
||||||
register_default_string_val( "ota_erase_blk", number_buffer);
|
|
||||||
snprintf(number_buffer,sizeof(number_buffer)-1,"%u",OTA_STACK_SIZE);
|
|
||||||
register_default_string_val( "ota_stack", number_buffer);
|
|
||||||
snprintf(number_buffer,sizeof(number_buffer)-1,"%d",OTA_TASK_PRIOTITY);
|
|
||||||
register_default_string_val( "ota_prio", number_buffer);
|
|
||||||
register_default_string_val( "display_config", CONFIG_DISPLAY_CONFIG);
|
|
||||||
register_default_string_val( "eth_config", CONFIG_ETH_CONFIG);
|
|
||||||
register_default_string_val( "i2c_config", CONFIG_I2C_CONFIG);
|
|
||||||
register_default_string_val( "spi_config", CONFIG_SPI_CONFIG);
|
|
||||||
register_default_string_val( "set_GPIO", CONFIG_SET_GPIO);
|
|
||||||
register_default_string_val( "sleep_config", "");
|
|
||||||
register_default_string_val( "led_brightness", "");
|
|
||||||
register_default_string_val( "spdif_config", "");
|
|
||||||
register_default_string_val( "dac_config", "");
|
|
||||||
register_default_string_val( "dac_controlset", "");
|
|
||||||
register_default_string_val( "jack_mutes_amp", "n");
|
|
||||||
register_default_string_val("gpio_exp_config", CONFIG_GPIO_EXP_CONFIG);
|
|
||||||
register_default_string_val( "bat_config", "");
|
|
||||||
register_default_string_val( "metadata_config", "");
|
|
||||||
register_default_string_val( "telnet_enable", "");
|
|
||||||
register_default_string_val( "telnet_buffer", "40000");
|
|
||||||
register_default_string_val( "telnet_block", "500");
|
|
||||||
register_default_string_val( "stats", "n");
|
|
||||||
register_default_string_val( "rel_api", CONFIG_RELEASE_API);
|
|
||||||
register_default_string_val("pollmx","600");
|
|
||||||
register_default_string_val("pollmin","15");
|
|
||||||
register_default_string_val("ethtmout","8");
|
|
||||||
register_default_string_val("dhcp_tmout","8");
|
|
||||||
register_default_string_val("target", CONFIG_TARGET);
|
|
||||||
register_default_string_val("led_vu_config", "");
|
|
||||||
wait_for_commit();
|
wait_for_commit();
|
||||||
ESP_LOGD(TAG,"Done setting default values in nvs.");
|
ESP_LOGD(TAG,"Done setting default values in nvs.");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user