From 812f39104233184ae2bf0468cc90dda411459fee Mon Sep 17 00:00:00 2001 From: Hector van der Aa Date: Fri, 27 Mar 2026 23:37:35 +0100 Subject: [PATCH] Wired in teng low and high in config and wired in command handler --- src/base/task.h | 2 + src/custom_types.h | 2 + src/modules/cmd/cmd.cpp | 56 ++++++++++++++++++++++++++++ src/modules/cmd/cmd.h | 4 ++ src/modules/logger/system_logger.cpp | 3 ++ 5 files changed, 67 insertions(+) diff --git a/src/base/task.h b/src/base/task.h index aeb4b94..1de840e 100644 --- a/src/base/task.h +++ b/src/base/task.h @@ -37,6 +37,8 @@ enum task_type : uint8_t { TASK_CONFIG_CFG_RESET, TASK_CONFIG_VBAT_CAL_SET, TASK_CONFIG_VBAT_SET_LOW, + TASK_CONFIG_TENG_SET_LOW, + TASK_CONFIG_TENG_SET_HIGH, TASK_BATTERY_CAL, TASK_ALL_CONFIG_UPDATED, }; diff --git a/src/custom_types.h b/src/custom_types.h index c945d87..c055155 100644 --- a/src/custom_types.h +++ b/src/custom_types.h @@ -13,6 +13,8 @@ struct vehicle_config{ bool track_slot_occupied[8] = {false}; double vbat_calibration = 0; double vbat_low = 0; + double teng_low = 0; + double teng_high = 0; }; struct lat_lng { diff --git a/src/modules/cmd/cmd.cpp b/src/modules/cmd/cmd.cpp index a8d6678..bae8f40 100644 --- a/src/modules/cmd/cmd.cpp +++ b/src/modules/cmd/cmd.cpp @@ -120,6 +120,14 @@ cmd::command_id cmd::parse_command_name(const char *input) { return CMD_BATTERY_SET_LOW; } + if (strcmp(input, "THERMO_SET_LOW") == 0) { + return CMD_THERMO_SET_LOW; + } + + if (strcmp(input, "THERMO_SET_HIGH") == 0) { + return CMD_THERMO_SET_HIGH; + } + return CMD_UNKNOWN; } @@ -436,6 +444,48 @@ int cmd::handle_battery_set_low(unsigned short argc, char* argv[]) { return 0; } +int cmd::handle_thermo_set_low(unsigned short argc, char* argv[]) { + if (argc != 2) { +#ifdef ERROR + if (_logger != nullptr) { + _logger->error("THERMO_SET_LOW expects 1 argument"); + } +#endif + return 1; + } + double low = strtod(argv[1], nullptr); + uint32_t task_data; + memcpy(&task_data, &low, sizeof(uint32_t)); +#ifdef INFO + if (_logger != nullptr) { + _logger->info("Setting low level for TENG"); + } +#endif + router::send(MOD_CFG, TASK_CONFIG_TENG_SET_LOW, task_data); + return 0; +} + +int cmd::handle_thermo_set_high(unsigned short argc, char* argv[]) { + if (argc != 2) { +#ifdef ERROR + if (_logger != nullptr) { + _logger->error("THERMO_SET_HIGH expects 1 argument"); + } +#endif + return 1; + } + double low = strtod(argv[1], nullptr); + uint32_t task_data; + memcpy(&task_data, &low, sizeof(uint32_t)); +#ifdef INFO + if (_logger != nullptr) { + _logger->info("Setting high level for TENG"); + } +#endif + router::send(MOD_CFG, TASK_CONFIG_TENG_SET_LOW, task_data); + return 0; +} + int cmd::handle_unknown_command(unsigned short argc, char *argv[]) { #ifdef ERROR if (_logger != nullptr) { @@ -487,6 +537,12 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[]) case CMD_BATTERY_SET_LOW: return this->handle_battery_set_low(argc, argv); + case CMD_THERMO_SET_LOW: + return this->handle_thermo_set_low(argc, argv); + + case CMD_THERMO_SET_HIGH: + return this->handle_thermo_set_high(argc, argv); + case CMD_UNKNOWN: default: return this->handle_unknown_command(argc, argv); diff --git a/src/modules/cmd/cmd.h b/src/modules/cmd/cmd.h index e86d224..f71e861 100644 --- a/src/modules/cmd/cmd.h +++ b/src/modules/cmd/cmd.h @@ -28,6 +28,8 @@ private: CMD_BATTERY_CAL, CMD_BATTERY_PRINT_VBAT, CMD_BATTERY_SET_LOW, + CMD_THERMO_SET_LOW, + CMD_THERMO_SET_HIGH, }; HardwareSerial *_data_stream; @@ -59,6 +61,8 @@ private: int handle_battery_cal(unsigned short argc, char *argv[]); int handle_battery_print_vbat(unsigned short argc); int handle_battery_set_low(unsigned short argc, char *argv[]); + int handle_thermo_set_low(unsigned short argc, char *argv[]); + int handle_thermo_set_high(unsigned short argc, char *argv[]); int handle_unknown_command(unsigned short argc, char *argv[]); public: diff --git a/src/modules/logger/system_logger.cpp b/src/modules/logger/system_logger.cpp index f22055e..d5988e7 100644 --- a/src/modules/logger/system_logger.cpp +++ b/src/modules/logger/system_logger.cpp @@ -53,6 +53,9 @@ int system_logger::dump_config() { this->info("\tVBAT cal factor: " + String(temp.vbat_calibration, 6)); + this->info("\tVBAT low: " + String(temp.vbat_low, 2)); + this->info("\tTENG low: " + String(temp.teng_low, 2)); + this->info("\tTENG high: " + String(temp.teng_high, 2)); // Track slots (one per line) for (size_t i = 0; i < 8; i++) {