diff --git a/src/modules/cmd/cmd.cpp b/src/modules/cmd/cmd.cpp index ad12799..f30d14b 100644 --- a/src/modules/cmd/cmd.cpp +++ b/src/modules/cmd/cmd.cpp @@ -3,6 +3,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "cmd.h" +#include "help.h" #include #include "data/track_store.h" @@ -131,6 +132,10 @@ Cmd::CommandId Cmd::parseCommandName(const char *input) { if (strcmp(input, "THERMO_SET_HIGH") == 0) { return ThermoSetHigh; } + + if (strcmp(input, "HELP") == 0) { + return HelpGlobal; + } return Unknown; } @@ -507,6 +512,46 @@ int Cmd::handleThermoSetHigh(unsigned short argc, char* argv[]) { return result; } +int Cmd::handleHelpGlobal(unsigned short argc) { + if (argc != 1) { +#ifdef ERROR + if (logger_ != nullptr) { + logger_->error("HELP expects no arguments"); + } +#endif + return 1; + } +#ifdef INFO + if (logger_ != nullptr) { + String line; + line.reserve(96); + + for (size_t idx = 0; cmd_help::kGlobalHelpText[idx] != '\0'; idx++) { + char c = cmd_help::kGlobalHelpText[idx]; + + if (c == '\r') { + continue; + } + + if (c == '\n') { + if (line.length() > 0) { + logger_->info(line); + line = ""; + } + continue; + } + + line += c; + } + + if (line.length() > 0) { + logger_->info(line); + } + } +#endif + return 0; +} + int Cmd::handleUnknownCommand(unsigned short argc, char *argv[]) { #ifdef ERROR if (logger_ != nullptr) { @@ -564,6 +609,9 @@ int Cmd::dispatchCommand(CommandId command, unsigned short argc, char *argv[]) { case ThermoSetHigh: return this->handleThermoSetHigh(argc, argv); + case HelpGlobal: + return this->handleHelpGlobal(argc); + case Unknown: default: return this->handleUnknownCommand(argc, argv); diff --git a/src/modules/cmd/cmd.h b/src/modules/cmd/cmd.h index 23497d3..378cb2d 100644 --- a/src/modules/cmd/cmd.h +++ b/src/modules/cmd/cmd.h @@ -30,6 +30,7 @@ private: BatterySetLow, ThermoSetLow, ThermoSetHigh, + HelpGlobal, }; HardwareSerial *data_stream_; @@ -62,6 +63,7 @@ private: int handleBatterySetLow(unsigned short argc, char *argv[]); int handleThermoSetLow(unsigned short argc, char *argv[]); int handleThermoSetHigh(unsigned short argc, char *argv[]); + int handleHelpGlobal(unsigned short argc); int handleUnknownCommand(unsigned short argc, char *argv[]); public: diff --git a/src/modules/cmd/help.h b/src/modules/cmd/help.h new file mode 100644 index 0000000..686be3f --- /dev/null +++ b/src/modules/cmd/help.h @@ -0,0 +1,24 @@ +// Copyright (C) 2026 Hector van der Aa +// Copyright (C) 2026 Association Exergie +// SPDX-License-Identifier: GPL-3.0-or-later +#pragma once + +namespace cmd_help { +static constexpr char kGlobalHelpText[] = + "Available commands:\n" + " HELP\n" + " REBOOT\n" + " CFG_DUMP\n" + " CFG_RESET\n" + " TRACK_PUT,,,,,,\n" + " TRACK_DELETE,\n" + " TRACK_DUMP,\n" + " TRACK_AUTODETECT\n" + " DISPLAY_GPS_DEBUG\n" + " DISPLAY_DRIVER_PRIMARY\n" + " BATTERY_CAL,\n" + " BATTERY_PRINT_VBAT\n" + " BATTERY_SET_LOW,\n" + " THERMO_SET_LOW,\n" + " THERMO_SET_HIGH,\n"; +} // namespace cmd_help