diff --git a/src/cmnds/cmd_eventHandlers.c b/src/cmnds/cmd_eventHandlers.c index 5e943606c..0f1216902 100644 --- a/src/cmnds/cmd_eventHandlers.c +++ b/src/cmnds/cmd_eventHandlers.c @@ -244,6 +244,7 @@ void EventHandlers_ProcessVariableChange_Integer(byte eventCode, int oldValue, i void EventHandlers_AddEventHandler_Integer(byte eventCode, int type, int requiredArgument, int requiredArgument2, const char *commandToRun) { eventHandler_t *ev = malloc(sizeof(eventHandler_t)); + memset(ev,0,sizeof(eventHandler_t)); ev->next = g_eventHandlers; g_eventHandlers = ev; @@ -259,6 +260,7 @@ void EventHandlers_AddEventHandler_Integer(byte eventCode, int type, int require void EventHandlers_AddEventHandler_String(byte eventCode, int type, const char *requiredArgument, const char *commandToRun) { eventHandler_t *ev = malloc(sizeof(eventHandler_t)); + memset(ev,0,sizeof(eventHandler_t)); ev->next = g_eventHandlers; g_eventHandlers = ev; diff --git a/src/cmnds/cmd_tasmota.c b/src/cmnds/cmd_tasmota.c index c8ae310fe..be0fab734 100644 --- a/src/cmnds/cmd_tasmota.c +++ b/src/cmnds/cmd_tasmota.c @@ -179,6 +179,62 @@ static int cmnd_backlog(const void * context, const char *cmd, const char *args, return 1; } +// Our wrapper for LFS. +// Returns a buffer created with malloc. +// You must free it later. +byte *LFS_ReadFile(const char *fname) { +#ifdef BK_LITTLEFS + if (lfs_present()){ + lfs_file_t file; + int lfsres; + int len; + int cnt; + byte *res, *at; + + cnt = 0; + + memset(&file, 0, sizeof(lfs_file_t)); + lfsres = lfs_file_open(&lfs, &file, fname, LFS_O_RDONLY); + + if (lfsres >= 0) { + ADDLOG_INFO(LOG_FEATURE_CMD, "LFS_ReadFile: openned file %s", fname); + //lfs_file_seek(&lfs,&file,0,LFS_SEEK_END); + //len = lfs_file_tell(&lfs,&file); + //lfs_file_seek(&lfs,&file,0,LFS_SEEK_SET); + + len = lfs_file_size(&lfs,&file); + + res = malloc(len); + at = res; + + if(res == 0) { + ADDLOG_INFO(LOG_FEATURE_CMD, "LFS_ReadFile: openned file %s but malloc failed for %i", fname, len); + } else { + char buffer[32]; + + while(1) { + lfsres = lfs_file_read(&lfs, &file, buffer, sizeof(buffer)); + if(lfsres <= 0) + break; + memcpy(at,buffer,lfsres); + + at += lfsres; + break; + } + ADDLOG_INFO(LOG_FEATURE_CMD, "LFS_ReadFile: Loaded %i bytes\n",len); + } + lfs_file_close(&lfs, &file); + ADDLOG_INFO(LOG_FEATURE_CMD, "LFS_ReadFile: closed file %s", fname); + return res; + } else { + ADDLOG_INFO(LOG_FEATURE_CMD, "LFS_ReadFile: failed to file %s", fname); + } + } else { + ADDLOG_ERROR(LOG_FEATURE_CMD, "LFS_ReadFile: lfs is absent"); + } +#endif + return 0; +} static int cmnd_lfsexec(const void * context, const char *cmd, const char *args, int cmdFlags){ #ifdef BK_LITTLEFS @@ -305,6 +361,17 @@ static int cmnd_lfs_test2(const void * context, const char *cmd, const char *arg #endif return 1; } +// Usage for continous test: addRepeatingEvent 1 -1 lfs_test3 ir.bat +static int cmnd_lfs_test3(const void * context, const char *cmd, const char *args, int cmdFlags){ + byte *res; + + res = LFS_ReadFile(args); + + if(res) { + free(res); + } + return 1; +} int taslike_commands_init(){ CMD_RegisterCommand("power", "", power, "set output POWERn 0..100", NULL); CMD_RegisterCommand("powerStateOnly", "", powerStateOnly, "ensures that device is on or off without changing pwm values", NULL); @@ -314,5 +381,6 @@ int taslike_commands_init(){ CMD_RegisterCommand("exec", "", cmnd_lfsexec, "exec - run autoexec.bat or other file from LFS if present", NULL); CMD_RegisterCommand("lfs_test1", "", cmnd_lfs_test1, "", NULL); CMD_RegisterCommand("lfs_test2", "", cmnd_lfs_test2, "", NULL); + CMD_RegisterCommand("lfs_test3", "", cmnd_lfs_test3, "", NULL); return 0; } diff --git a/src/httpserver/http_tcp_server.c b/src/httpserver/http_tcp_server.c index e84a9a12b..7ad9579d3 100644 --- a/src/httpserver/http_tcp_server.c +++ b/src/httpserver/http_tcp_server.c @@ -11,6 +11,15 @@ #define INCOMING_BUFFER_SIZE 1024 +// it was 0x800 - 2048 - until 23 10 2022 +// The larger stack size for handling HTTP request is needed, for example, for commands +// See: https://github.com/openshwprojects/OpenBK7231T_App/issues/314 +#if PLATFORM_BEKEN +#define HTTP_CLIENT_STACK_SIZE 8192 +#else +#define HTTP_CLIENT_STACK_SIZE 2048 +#endif + #define CREATE_THREAD_PER_EACH_HTTP_CLIENT #ifdef CREATE_THREAD_PER_EACH_HTTP_CLIENT @@ -182,7 +191,7 @@ static void tcp_server_thread(beken_thread_arg_t arg) rtos_create_thread(NULL, BEKEN_APPLICATION_PRIORITY, "HTTP Client", (beken_thread_function_t)tcp_client_thread, - 0x800, + HTTP_CLIENT_STACK_SIZE, (beken_thread_arg_t)client_fd) #endif