From 6d6e1b99ef658c988ee23d51942b8f2fee8bc9ab Mon Sep 17 00:00:00 2001 From: fvanroie <15969459+fvanroie@users.noreply.github.com> Date: Fri, 26 Feb 2021 23:24:46 +0100 Subject: [PATCH] Make commands array autosized --- src/hasp/hasp_dispatch.cpp | 88 +++++++++++++++++++------------------- src/hasp/hasp_dispatch.h | 2 +- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 55eb8770..16491f63 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -40,10 +40,48 @@ extern uint8_t hasp_sleep_state; dispatch_conf_t dispatch_setings = {.teleperiod = 10}; - uint32_t dispatchLastMillis; -uint8_t nCommands = 0; -haspCommand_t commands[17]; + +/* Declare all Command Handlers */ +void dispatch_parse_json(const char*, const char* payload); +void dispatch_parse_jsonl(const char*, const char* payload); +void dispatch_page(const char*, const char* payload); +void dispatch_wakeup(const char*, const char* payload); +void dispatch_output_statusupdate(const char*, const char* payload); +void dispatch_clear_page(const char*, const char* payload); +void dispatch_dim(const char*, const char* payload); +void dispatch_backlight(const char*, const char* payload); +void dispatch_moodlight(const char*, const char* payload); +void dispatch_calibrate(const char*, const char* payload); +void dispatch_web_update(const char*, const char* payload); +void dispatch_reboot(const char*, const char* payload); +void dispatch_screenshot(const char*, const char* payload); +void dispatch_factory_reset(const char*, const char* payload); + +/* Map Commands to Command Handlers */ +haspCommand_t commands[] = { + + {PSTR("json"), dispatch_parse_json}, + {PSTR("page"), dispatch_page}, + {PSTR("wakeup"), dispatch_wakeup}, + {PSTR("statusupdate"), dispatch_output_statusupdate}, + {PSTR("clearpage"), dispatch_clear_page}, + {PSTR("jsonl"), dispatch_parse_jsonl}, + {PSTR("dim"), dispatch_dim}, + {PSTR("brightness"), dispatch_dim}, + {PSTR("light"), dispatch_backlight}, + {PSTR("moodlight"), dispatch_moodlight}, + {PSTR("calibrate"), dispatch_calibrate}, + {PSTR("update"), dispatch_web_update}, + {PSTR("reboot"), dispatch_reboot}, + {PSTR("restart"), dispatch_reboot}, + {PSTR("screenshot"), dispatch_screenshot}, +#if HASP_USE_CONFIG > 0 + {PSTR("setupap"), oobeFakeSetup}, +#endif + {PSTR("factoryreset"), dispatch_factory_reset} + +}; struct moodlight_t { @@ -59,7 +97,6 @@ static inline void dispatch_state_msg(const __FlashStringHelper* subtopic, const void dispatch_screenshot(const char*, const char* filename) { #if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0 - if(strlen(filename) == 0) { // no filename given char tempfile[32]; memcpy_P(tempfile, PSTR("/screenshot.bmp"), sizeof(tempfile)); @@ -200,7 +237,7 @@ void dispatch_command(const char* topic, const char* payload) /* ================================= Standard payload commands ======================================= */ // check and execute commands from commands array - for(int i = 0; i < nCommands; i++) { + for(int i = 0; i < sizeof(commands) / sizeof(haspCommand_t); i++) { if(!strcasecmp_P(topic, commands[i].p_cmdstr)) { // LOG_DEBUG(TAG_MSGR, F("Command %d found in array !!!"), i); commands[i].func(topic, payload); /* execute command */ @@ -901,7 +938,6 @@ void dispatch_current_state() void dispatch_output_statusupdate(const char*, const char*) { #if HASP_USE_MQTT > 0 - char data[3 * 128]; { char buffer[128]; @@ -970,46 +1006,8 @@ void dispatch_factory_reset(const char*, const char*) /******************************************* Commands builder *******************************************/ -static void dispatch_add_command(const char* p_cmdstr, void (*func)(const char*, const char*)) -{ - if(nCommands >= sizeof(commands) / sizeof(haspCommand_t)) { - LOG_FATAL(TAG_MSGR, F("CMD_OVERFLOW %d"), nCommands); - while(1) { - } - } else { - commands[nCommands].p_cmdstr = p_cmdstr; - commands[nCommands].func = func; - nCommands++; - } -} - void dispatchSetup() -{ - // In order of importance : commands are NOT case-sensitive - // The command.func() call will receive the full topic and payload parameters! - - /* WARNING: remember to expand the commands array when adding new commands */ - dispatch_add_command(PSTR("json"), dispatch_parse_json); - dispatch_add_command(PSTR("page"), dispatch_page); - dispatch_add_command(PSTR("wakeup"), dispatch_wakeup); - dispatch_add_command(PSTR("statusupdate"), dispatch_output_statusupdate); - dispatch_add_command(PSTR("clearpage"), dispatch_clear_page); - dispatch_add_command(PSTR("jsonl"), dispatch_parse_jsonl); - dispatch_add_command(PSTR("dim"), dispatch_dim); - dispatch_add_command(PSTR("brightness"), dispatch_dim); - dispatch_add_command(PSTR("light"), dispatch_backlight); - dispatch_add_command(PSTR("moodlight"), dispatch_moodlight); - dispatch_add_command(PSTR("calibrate"), dispatch_calibrate); - dispatch_add_command(PSTR("update"), dispatch_web_update); - dispatch_add_command(PSTR("reboot"), dispatch_reboot); - dispatch_add_command(PSTR("restart"), dispatch_reboot); - dispatch_add_command(PSTR("screenshot"), dispatch_screenshot); - dispatch_add_command(PSTR("factoryreset"), dispatch_factory_reset); -#if HASP_USE_CONFIG > 0 - dispatch_add_command(PSTR("setupap"), oobeFakeSetup); -#endif - /* WARNING: remember to expand the commands array when adding new commands */ -} +{} void dispatchLoop() { diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index 39f8cacc..1dba3b41 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -79,8 +79,8 @@ void dispatch_send_obj_attribute_color(uint8_t pageid, uint8_t btnid, const char /* ===== Structs and Constants ===== */ struct haspCommand_t { - void (*func)(const char*, const char*); const char* p_cmdstr; + void (*func)(const char*, const char*); }; #endif \ No newline at end of file