Break out of commands to individual functions

This commit is contained in:
Hector van der Aa
2026-03-27 14:56:39 +01:00
parent 1d7586129d
commit 2520c2b6ba
2 changed files with 183 additions and 137 deletions

View File

@@ -92,11 +92,6 @@ cmd::command_id cmd::parse_command_name(const char *input) {
} }
if (strcmp(input, "CFG_RESET") == 0) { if (strcmp(input, "CFG_RESET") == 0) {
#ifdef INFO
if (_logger != nullptr) {
_logger->info("Resetting config");
}
#endif
return CMD_CFG_RESET; return CMD_CFG_RESET;
} }
@@ -148,9 +143,16 @@ int cmd::dump_track_slot(unsigned short id) {
return 0; return 0;
} }
int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[]) { int cmd::handle_reboot_command(unsigned short argc) {
switch (command) { if (argc != 1) {
case CMD_REBOOT: #ifdef ERROR
if (_logger != nullptr) {
_logger->error("REBOOT expects no arguments");
}
#endif
return 1;
}
#ifdef INFO #ifdef INFO
if (_logger != nullptr) { if (_logger != nullptr) {
_logger->info("Rebooting"); _logger->info("Rebooting");
@@ -160,16 +162,28 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
wdt_enable(WDTO_15MS); wdt_enable(WDTO_15MS);
while (true) { while (true) {
} }
return 0;
}
int cmd::handle_dumpcfg_command(unsigned short argc) {
if (argc != 1) {
#ifdef ERROR
if (_logger != nullptr) {
_logger->error("DUMPCFG expects no arguments");
}
#endif
return 1;
}
case CMD_DUMPCFG:
#ifdef INFO #ifdef INFO
if (_logger != nullptr) { if (_logger != nullptr) {
_logger->dump_config(); _logger->dump_config();
} }
#endif #endif
return 0; return 0;
}
case CMD_PUT_TRACK: int cmd::handle_track_put_command(unsigned short argc, char *argv[]) {
if (argc != 7) { if (argc != 7) {
#ifdef ERROR #ifdef ERROR
if (_logger != nullptr) { if (_logger != nullptr) {
@@ -178,8 +192,8 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
#endif #endif
return 1; return 1;
} }
track_data new_track;
track_data new_track;
if (parse_track_slot_id(argv[1], new_track.id) != 0) { if (parse_track_slot_id(argv[1], new_track.id) != 0) {
#ifdef ERROR #ifdef ERROR
if (_logger != nullptr) { if (_logger != nullptr) {
@@ -215,11 +229,10 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
#endif #endif
track_temp_global_write(new_track); track_temp_global_write(new_track);
router::send(MOD_CFG, TASK_CONFIG_WRITE_TEMP_TRACK); return router::send(MOD_CFG, TASK_CONFIG_WRITE_TEMP_TRACK);
}
return 0; int cmd::handle_track_delete_command(unsigned short argc, char *argv[]) {
case CMD_DELETE_TRACK: {
if (argc != 2) { if (argc != 2) {
#ifdef ERROR #ifdef ERROR
if (_logger != nullptr) { if (_logger != nullptr) {
@@ -242,7 +255,7 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
return router::send(MOD_CFG, TASK_CONFIG_TRACK_DELETE, id); return router::send(MOD_CFG, TASK_CONFIG_TRACK_DELETE, id);
} }
case CMD_DUMP_TRACK: { int cmd::handle_track_dump_command(unsigned short argc, char *argv[]) {
if (argc != 2) { if (argc != 2) {
#ifdef ERROR #ifdef ERROR
if (_logger != nullptr) { if (_logger != nullptr) {
@@ -265,7 +278,7 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
return this->dump_track_slot(id); return this->dump_track_slot(id);
} }
case CMD_CFG_RESET: int cmd::handle_cfg_reset_command(unsigned short argc) {
if (argc != 1) { if (argc != 1) {
#ifdef ERROR #ifdef ERROR
if (_logger != nullptr) { if (_logger != nullptr) {
@@ -274,15 +287,16 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
#endif #endif
return 1; return 1;
} }
#ifdef INFO #ifdef INFO
if (_logger != nullptr) { if (_logger != nullptr) {
_logger->info("Resetting config"); _logger->info("Resetting config");
} }
#endif #endif
return router::send(MOD_CFG, TASK_CONFIG_CFG_RESET); return router::send(MOD_CFG, TASK_CONFIG_CFG_RESET);
}
case CMD_UNKNOWN: int cmd::handle_unknown_command(unsigned short argc, char *argv[]) {
default:
#ifdef ERROR #ifdef ERROR
if (_logger != nullptr) { if (_logger != nullptr) {
if (argc > 0 && argv != nullptr && argv[0] != nullptr && argv[0][0] != '\0') { if (argc > 0 && argv != nullptr && argv[0] != nullptr && argv[0][0] != '\0') {
@@ -294,6 +308,31 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
#endif #endif
return 1; return 1;
} }
int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[]) {
switch (command) {
case CMD_REBOOT:
return this->handle_reboot_command(argc);
case CMD_DUMPCFG:
return this->handle_dumpcfg_command(argc);
case CMD_PUT_TRACK:
return this->handle_track_put_command(argc, argv);
case CMD_DELETE_TRACK:
return this->handle_track_delete_command(argc, argv);
case CMD_DUMP_TRACK:
return this->handle_track_dump_command(argc, argv);
case CMD_CFG_RESET:
return this->handle_cfg_reset_command(argc);
case CMD_UNKNOWN:
default:
return this->handle_unknown_command(argc, argv);
}
} }
int cmd::try_parse() { int cmd::try_parse() {

View File

@@ -41,6 +41,13 @@ private:
int dispatch_command(command_id command, unsigned short argc, char *argv[]); int dispatch_command(command_id command, unsigned short argc, char *argv[]);
int parse_track_slot_id(const char *id_str, unsigned short &id_out); int parse_track_slot_id(const char *id_str, unsigned short &id_out);
int dump_track_slot(unsigned short id); int dump_track_slot(unsigned short id);
int handle_reboot_command(unsigned short argc);
int handle_dumpcfg_command(unsigned short argc);
int handle_track_put_command(unsigned short argc, char *argv[]);
int handle_track_delete_command(unsigned short argc, char *argv[]);
int handle_track_dump_command(unsigned short argc, char *argv[]);
int handle_cfg_reset_command(unsigned short argc);
int handle_unknown_command(unsigned short argc, char *argv[]);
public: public:
int push(const Task &task) override; int push(const Task &task) override;