Files
TransparentBox-V1/src/modules/cmd/cmd.h

76 lines
2.5 KiB
C++

// Copyright (C) 2026 Hector van der Aa <hector@h3cx.dev>
// Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <Arduino.h>
#include <avr/wdt.h>
#include "base/module_base.h"
#include "base/ring_buffer.h"
#include "base/task.h"
#include "custom_types.h"
#include "modules/logger/system_logger.h"
class cmd : public module_base {
private:
enum command_id {
CMD_UNKNOWN = 0,
CMD_REBOOT,
CMD_PUT_TRACK,
CMD_DELETE_TRACK,
CMD_DUMP_TRACK,
CMD_CFG_RESET,
CMD_CFG_DUMP,
CMD_TRACK_AUTODETECT,
CMD_DISPLAY_GPS_DEBUG,
CMD_DISPLAY_DRIVER_PRIMARY,
CMD_BATTERY_CAL,
CMD_BATTERY_PRINT_VBAT,
CMD_BATTERY_SET_LOW,
CMD_THERMO_SET_LOW,
CMD_THERMO_SET_HIGH,
};
HardwareSerial *_data_stream;
unsigned long _baud_rate = 115200;
system_logger *_logger;
char _buffer[256];
unsigned int _idx = 0;
bool _buf_open = false;
ring_buffer<Task, 16> _queue;
static const unsigned short _max_args = 10;
int try_parse();
unsigned short split_args(char *input, char *argv[], unsigned short max_args);
char *trim_arg(char *input);
command_id parse_command_name(const char *input);
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 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_track_autodetect_command(unsigned short argc);
int handle_display_gps_debug(unsigned short argc);
int handle_display_driver_primary(unsigned short argc);
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:
int push(const Task &task) override;
cmd(HardwareSerial *data_stream);
cmd(HardwareSerial *data_stream, system_logger *logger);
~cmd();
int init();
int parse_task(unsigned long timeout_ms = 500);
};