From cad286c8d7370f1130abf70be3565fb3921b9c25 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Wed, 29 Mar 2023 23:02:16 -0700 Subject: [PATCH] provide squeezelite error log in UI --- .../app_squeezelite/cmd_squeezelite.c | 35 ++++++++----------- components/services/messaging.c | 11 ++++-- components/services/messaging.h | 1 + components/squeezelite/CMakeLists.txt | 1 + components/squeezelite/embedded.c | 11 ++++++ components/squeezelite/embedded.h | 4 +++ components/squeezelite/main.c | 6 +++- components/squeezelite/squeezelite.h | 5 ++- components/squeezelite/stream.c | 4 +-- components/telnet/telnet.c | 4 +-- main/CMakeLists.txt | 1 - main/esp_app_main.c | 7 ---- 12 files changed, 53 insertions(+), 37 deletions(-) diff --git a/components/platform_console/app_squeezelite/cmd_squeezelite.c b/components/platform_console/app_squeezelite/cmd_squeezelite.c index cdfa8025..295219b2 100644 --- a/components/platform_console/app_squeezelite/cmd_squeezelite.c +++ b/components/platform_console/app_squeezelite/cmd_squeezelite.c @@ -40,7 +40,8 @@ const __attribute__((section(".rodata_desc"))) esp_app_desc_t esp_app_desc = { #endif }; -extern int main(int argc, char **argv); +extern int squeezelite_main(int argc, char **argv); + static int launchsqueezelite(int argc, char **argv); /** Arguments used by 'squeezelite' function */ @@ -54,39 +55,33 @@ static struct { } thread_parms ; #define ADDITIONAL_SQUEEZELITE_ARGS 5 -static void squeezelite_thread(void *arg){ +static void squeezelite_thread(void *arg){ ESP_LOGV(TAG ,"Number of args received: %u",thread_parms.argc ); ESP_LOGV(TAG ,"Values:"); for(int i = 0;imessage, fmt, va); - va_end(va); message->msg_size = msg_size; message->type = type; message->msg_class = msg_class; diff --git a/components/services/messaging.h b/components/services/messaging.h index 7d0cb273..941a35d7 100644 --- a/components/services/messaging.h +++ b/components/services/messaging.h @@ -34,6 +34,7 @@ cJSON * messaging_retrieve_messages(RingbufHandle_t buf_handle); messaging_handle_t messaging_register_subscriber(uint8_t max_count, char * name); esp_err_t messaging_post_to_queue(messaging_handle_t subscriber_handle, single_message_t * message, size_t message_size); void messaging_post_message(messaging_types type,messaging_classes msg_class, const char * fmt, ...); +void vmessaging_post_message(messaging_types type,messaging_classes msg_class, const char *fmt, va_list va); cJSON * messaging_retrieve_messages(RingbufHandle_t buf_handle); single_message_t * messaging_retrieve_message(RingbufHandle_t buf_handle); void log_send_messaging(messaging_types msgtype,const char *fmt, ...); diff --git a/components/squeezelite/CMakeLists.txt b/components/squeezelite/CMakeLists.txt index 5c1f0375..f2ac3b4a 100644 --- a/components/squeezelite/CMakeLists.txt +++ b/components/squeezelite/CMakeLists.txt @@ -13,6 +13,7 @@ idf_component_register( SRC_DIRS . external ac101 tas57xx wm8978 display tools audio + _override EMBED_FILES vu_s.data arrow.data ) diff --git a/components/squeezelite/embedded.c b/components/squeezelite/embedded.c index 4d16afa5..75e54f00 100644 --- a/components/squeezelite/embedded.c +++ b/components/squeezelite/embedded.c @@ -17,6 +17,7 @@ #include "esp_wifi.h" #include "monitor.h" #include "platform_config.h" +#include "messaging.h" mutex_type slimp_mutex; static jmp_buf jumpbuf; @@ -29,6 +30,15 @@ _sig_func_ptr signal(int sig, _sig_func_ptr func) { return NULL; } +void em_logprint(const char *fmt, ...) { + va_list args; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + vmessaging_post_message(MESSAGING_ERROR, MESSAGING_CLASS_SYSTEM, fmt, args); + va_end(args); + fflush(stderr); +} + void *audio_calloc(size_t nmemb, size_t size) { return calloc(nmemb, size); } @@ -55,6 +65,7 @@ int embedded_init(void) { mutex_create(slimp_mutex); sb_controls_init(); custom_player_id = sb_displayer_init() ? 100 : 101; + return setjmp(jumpbuf); } diff --git a/components/squeezelite/embedded.h b/components/squeezelite/embedded.h index 2d3e38f8..53e06ebc 100644 --- a/components/squeezelite/embedded.h +++ b/components/squeezelite/embedded.h @@ -51,6 +51,10 @@ extern u8_t custom_player_id; // to force some special buffer attribute #define EXT_BSS __attribute__((section(".ext_ram.bss"))) +// otherwise just leave it empty +void em_logprint(const char *fmt, ...); +#define LOG_ERROR(fmt, ...) em_logprint("%s %s:%d " fmt "\n", logtime(), __FUNCTION__, __LINE__, ##__VA_ARGS__); + // all exit() calls are made from main thread (or a function called in main thread) void embedded_exit(int code); #define exit(code) do { embedded_exit(code); } while (0) diff --git a/components/squeezelite/main.c b/components/squeezelite/main.c index 9e343d29..07f0ed97 100644 --- a/components/squeezelite/main.c +++ b/components/squeezelite/main.c @@ -275,7 +275,11 @@ static void sighandler(int signum) { signal(signum, SIG_DFL); } +#ifndef EMBEDDED int main(int argc, char **argv) { +#else +int squeezelite_main(int argc, char **argv) { +#endif char *server = NULL; char *output_device = "default"; char *include_codecs = NULL; @@ -845,5 +849,5 @@ int main(int argc, char **argv) { free_ssl_symbols(); #endif - exit(0); + return(0); } diff --git a/components/squeezelite/squeezelite.h b/components/squeezelite/squeezelite.h index 081cb3d8..47a6a197 100644 --- a/components/squeezelite/squeezelite.h +++ b/components/squeezelite/squeezelite.h @@ -393,7 +393,6 @@ typedef enum { lERROR = 0, lWARN, lINFO, lDEBUG, lSDEBUG } log_level; const char *logtime(void); void logprint(const char *fmt, ...); -#define LOG_ERROR(fmt, ...) logprint("%s %s:%d " fmt "\n", logtime(), __FUNCTION__, __LINE__, ##__VA_ARGS__) #define LOG_WARN(fmt, ...) if (loglevel >= lWARN) logprint("%s %s:%d " fmt "\n", logtime(), __FUNCTION__, __LINE__, ##__VA_ARGS__) #define LOG_INFO(fmt, ...) if (loglevel >= lINFO) logprint("%s %s:%d " fmt "\n", logtime(), __FUNCTION__, __LINE__, ##__VA_ARGS__) #define LOG_DEBUG(fmt, ...) if (loglevel >= lDEBUG) logprint("%s %s:%d " fmt "\n", logtime(), __FUNCTION__, __LINE__, ##__VA_ARGS__) @@ -406,6 +405,10 @@ typedef int sockfd; #include "embedded.h" #endif +#ifndef LOG_ERROR +#define LOG_ERROR(fmt, ...) logprint("%s %s:%d " fmt "\n", logtime(), __FUNCTION__, __LINE__, ##__VA_ARGS__) +#endif + #if !defined(MSG_NOSIGNAL) #define MSG_NOSIGNAL 0 #endif diff --git a/components/squeezelite/stream.c b/components/squeezelite/stream.c index 2c08e358..794126ad 100644 --- a/components/squeezelite/stream.c +++ b/components/squeezelite/stream.c @@ -390,7 +390,7 @@ void stream_init(log_level level, unsigned stream_buf_size) { buf_init(streambuf, stream_buf_size); if (streambuf->buf == NULL) { LOG_ERROR("unable to malloc buffer"); - exit(0); + exit(2); } #if USE_SSL @@ -401,7 +401,7 @@ void stream_init(log_level level, unsigned stream_buf_size) { SSLctx = SSL_CTX_new(SSLv23_client_method()); if (SSLctx == NULL) { LOG_ERROR("unable to allocate SSL context"); - exit(0); + exit(3); } SSL_CTX_set_options(SSLctx, SSL_OP_NO_SSLv2); #if !LINKALL && !NO_SSLSYM diff --git a/components/telnet/telnet.c b/components/telnet/telnet.c index 2c8e5166..0a3efbf6 100644 --- a/components/telnet/telnet.c +++ b/components/telnet/telnet.c @@ -128,8 +128,8 @@ void init_telnet(){ if (bMirrorToUART) uart_fd = open("/dev/uart/0", O_RDWR); ESP_ERROR_CHECK(esp_vfs_register("/dev/pkspstdout", &vfs, NULL)); - freopen("/dev/pkspstdout", "wb", stdout); - freopen("/dev/pkspstdout", "wb", stderr); + freopen("/dev/pkspstdout", "w", stdout); + freopen("/dev/pkspstdout", "w", stderr); bIsEnabled=true; } diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index f98926be..c6c980ef 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,6 +1,5 @@ idf_component_register(SRC_DIRS . PRIV_REQUIRES _override esp_common wifi-manager pthread squeezelite-ota platform_console telnet display targets - EMBED_FILES ../server_certs/github.pem LDFRAGMENTS "linker.lf" ) #get_target_property(ill ${COMPONENT_LIB} INTERFACE_LINK_LIBRARIES) diff --git a/main/esp_app_main.c b/main/esp_app_main.c index 5f3e49bd..bef6bc0b 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -381,13 +381,6 @@ void app_main() GDS_TextPos(display, GDS_FONT_DEFAULT, GDS_TEXT_CENTERED, GDS_TEXT_CLEAR | GDS_TEXT_UPDATE, "RECOVERY"); } - -/* - ESP_LOGI(TAG,"Checking if certificates need to be updated"); - update_certificates(false); - MEMTRACE_PRINT_DELTA(); -*/ - ESP_LOGD(TAG,"Getting firmware OTA URL (if any)"); fwurl = process_ota_url();