From da00c41a21b24b360889ed76eb4b49d49e989304 Mon Sep 17 00:00:00 2001 From: fvanroie <15969459+fvanroie@users.noreply.github.com> Date: Fri, 26 Feb 2021 23:52:54 +0100 Subject: [PATCH] Move dispatchSetup to haspSetup --- src/hasp/hasp.cpp | 1 + src/hasp/hasp_dispatch.cpp | 88 +++++++++++++++++++------------------- src/main_arduino.cpp | 3 +- src/main_windows.cpp | 3 +- 4 files changed, 48 insertions(+), 47 deletions(-) diff --git a/src/hasp/hasp.cpp b/src/hasp/hasp.cpp index 0cc018be..dbae6d46 100644 --- a/src/hasp/hasp.cpp +++ b/src/hasp/hasp.cpp @@ -319,6 +319,7 @@ static void custom_font_apply_cb(lv_theme_t* th, lv_obj_t* obj, lv_theme_style_t */ void haspSetup(void) { + dispatchSetup(); haspDevice.set_backlight_level(haspStartDim); /******* File System Test ********************************************************************/ diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 16491f63..55eb8770 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -40,48 +40,10 @@ extern uint8_t hasp_sleep_state; dispatch_conf_t dispatch_setings = {.teleperiod = 10}; + uint32_t dispatchLastMillis; - -/* 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} - -}; +uint8_t nCommands = 0; +haspCommand_t commands[17]; struct moodlight_t { @@ -97,6 +59,7 @@ 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)); @@ -237,7 +200,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 < sizeof(commands) / sizeof(haspCommand_t); i++) { + for(int i = 0; i < nCommands; 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 */ @@ -938,6 +901,7 @@ void dispatch_current_state() void dispatch_output_statusupdate(const char*, const char*) { #if HASP_USE_MQTT > 0 + char data[3 * 128]; { char buffer[128]; @@ -1006,8 +970,46 @@ 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/main_arduino.cpp b/src/main_arduino.cpp index 3b014ace..8dfec4c7 100644 --- a/src/main_arduino.cpp +++ b/src/main_arduino.cpp @@ -57,7 +57,6 @@ void setup() configSetup(); // also runs debugPreSetup(), debugSetup() and debugStart() #endif - dispatchSetup(); guiSetup(); debugSetup(); // Init the console @@ -100,7 +99,7 @@ void setup() telnetSetup(); #endif -#if HASP_USE_TASMOTA_CLINET > 0 +#if HASP_USE_TASMOTA_CLIENT > 0 slaveSetup(); #endif diff --git a/src/main_windows.cpp b/src/main_windows.cpp index 8ccf9171..2efb6f21 100644 --- a/src/main_windows.cpp +++ b/src/main_windows.cpp @@ -103,9 +103,8 @@ void setup() lv_log_register_print_cb(debugLvglLogEvent); lv_init(); - haspDevice.init(); + haspDevice.init(); // hardware setup // hal_setup(); - dispatchSetup(); guiSetup(); // debugSetup(); // Init the console