Added basic primary driver display and display switch commands

This commit is contained in:
2026-03-27 16:08:24 +01:00
parent a902600aa4
commit 6d47582eba
7 changed files with 115 additions and 2 deletions

View File

@@ -17,6 +17,7 @@ enum module_id : uint8_t {
enum task_type : uint8_t { enum task_type : uint8_t {
TASK_NULL, TASK_NULL,
TASK_DISPLAY_GPS_DEBUG, TASK_DISPLAY_GPS_DEBUG,
TASK_DISPLAY_DRIVER_PRIMARY,
TASK_DISPLAY_MSG_GPS_FIX, TASK_DISPLAY_MSG_GPS_FIX,
TASK_DISPLAY_MSG_TRACK_DETECT_OK, TASK_DISPLAY_MSG_TRACK_DETECT_OK,
TASK_DISPLAY_MSG_CONFIG_NO_TRACKS, TASK_DISPLAY_MSG_CONFIG_NO_TRACKS,

View File

@@ -57,7 +57,7 @@ void setup() {
delay(1000); delay(1000);
driver_display->print_message("GPS Init Complete"); driver_display->print_message("GPS Init Complete");
delay(1000); delay(1000);
router::send(MOD_LCD, TASK_DISPLAY_GPS_DEBUG); router::send(MOD_LCD, TASK_DISPLAY_DRIVER_PRIMARY);
} }
void loop() { void loop() {

View File

@@ -95,6 +95,18 @@ cmd::command_id cmd::parse_command_name(const char *input) {
return CMD_CFG_RESET; return CMD_CFG_RESET;
} }
if (strcmp(input, "TRACK_AUTODETECT") == 0) {
return CMD_TRACK_AUTODETECT;
}
if (strcmp(input, "DISPLAY_GPS_DEBUG") == 0) {
return CMD_DISPLAY_GPS_DEBUG;
}
if (strcmp(input, "DISPLAY_DRIVER_PRIMARY") == 0) {
return CMD_DISPLAY_DRIVER_PRIMARY;
}
return CMD_UNKNOWN; return CMD_UNKNOWN;
} }
@@ -296,6 +308,60 @@ int cmd::handle_cfg_reset_command(unsigned short argc) {
return router::send(MOD_CFG, TASK_CONFIG_CFG_RESET); return router::send(MOD_CFG, TASK_CONFIG_CFG_RESET);
} }
int cmd::handle_track_autodetect_command(unsigned short argc) {
if (argc != 1) {
#ifdef ERROR
if (_logger != nullptr) {
_logger->error("TRACK_AUTODETECT expects no arguments");
}
#endif
return 1;
}
#ifdef INFO
if (_logger != nullptr) {
_logger->info("Detecting track");
}
#endif
return router::send(MOD_CFG, TASK_CONFIG_TRACK_DETECT, 1);
}
int cmd::handle_display_gps_debug(unsigned short argc) {
if (argc != 1) {
#ifdef ERROR
if (_logger != nullptr) {
_logger->error("DISPLAY_GPS_DEBUG expects no arguments");
}
#endif
return 1;
}
#ifdef INFO
if (_logger != nullptr) {
_logger->info("Switching to GPS_DEBUG display");
}
#endif
return router::send(MOD_LCD, TASK_DISPLAY_GPS_DEBUG);
}
int cmd::handle_display_driver_primary(unsigned short argc) {
if (argc != 1) {
#ifdef ERROR
if (_logger != nullptr) {
_logger->error("DISPLAY_DRIVER_PRIMARY expects no arguments");
}
#endif
return 1;
}
#ifdef INFO
if (_logger != nullptr) {
_logger->info("Switching to DRIVER_PRIMARY display");
}
#endif
return router::send(MOD_LCD, TASK_DISPLAY_DRIVER_PRIMARY);
}
int cmd::handle_unknown_command(unsigned short argc, char *argv[]) { int cmd::handle_unknown_command(unsigned short argc, char *argv[]) {
#ifdef ERROR #ifdef ERROR
if (_logger != nullptr) { if (_logger != nullptr) {
@@ -329,6 +395,15 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
case CMD_CFG_RESET: case CMD_CFG_RESET:
return this->handle_cfg_reset_command(argc); return this->handle_cfg_reset_command(argc);
case CMD_TRACK_AUTODETECT:
return this->handle_track_autodetect_command(argc);
case CMD_DISPLAY_GPS_DEBUG:
return this->handle_display_gps_debug(argc);
case CMD_DISPLAY_DRIVER_PRIMARY:
return this->handle_display_driver_primary(argc);
case CMD_UNKNOWN: case CMD_UNKNOWN:
default: default:
return this->handle_unknown_command(argc, argv); return this->handle_unknown_command(argc, argv);

View File

@@ -22,6 +22,9 @@ private:
CMD_DUMP_TRACK, CMD_DUMP_TRACK,
CMD_CFG_RESET, CMD_CFG_RESET,
CMD_CFG_DUMP, CMD_CFG_DUMP,
CMD_TRACK_AUTODETECT,
CMD_DISPLAY_GPS_DEBUG,
CMD_DISPLAY_DRIVER_PRIMARY,
}; };
HardwareSerial *_data_stream; HardwareSerial *_data_stream;
@@ -47,6 +50,9 @@ private:
int handle_track_delete_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_track_dump_command(unsigned short argc, char *argv[]);
int handle_cfg_reset_command(unsigned short argc); 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_unknown_command(unsigned short argc, char *argv[]); int handle_unknown_command(unsigned short argc, char *argv[]);
public: public:

View File

@@ -210,7 +210,7 @@ int config::task_config_detect_track(unsigned long timeout_ms) {
int config::handle_active_task(unsigned long timeout_ms) { int config::handle_active_task(unsigned long timeout_ms) {
switch (_active_task.type) { switch (_active_task.type) {
case TASK_CONFIG_TRACK_DETECT: { case TASK_CONFIG_TRACK_DETECT: {
if (!_is_track_loaded) { if (!_is_track_loaded || _active_task.data == 1) {
return task_config_detect_track(timeout_ms); return task_config_detect_track(timeout_ms);
} }
this->task_complete(); this->task_complete();

View File

@@ -142,6 +142,23 @@ int lcd::render_gps_debug() {
return 0; return 0;
} }
int lcd::render_driver_primary() {
this->clear();
gps_data gps;
gps_global_read(gps);
_display->setCursor(0,0);
this->print("GPS:");
if (gps.num_fix != 0) {
this->print("V");
} else {
this->print("X");
}
return 0;
}
int lcd::render_msg_gps_fix() { int lcd::render_msg_gps_fix() {
this->clear(); this->clear();
_display->setCursor(6, 1); _display->setCursor(6, 1);
@@ -352,6 +369,14 @@ int lcd::loop(unsigned long timeout_ms) {
} }
break; break;
case TASK_DISPLAY_DRIVER_PRIMARY:
_data_screen = screen::driver_primary;
if (!_msg_active) {
_screen = _data_screen;
_force_render = true;
}
break;
case TASK_DISPLAY_MSG_GPS_FIX: case TASK_DISPLAY_MSG_GPS_FIX:
activate_message(screen::msg_gps_fix, next_task.data); activate_message(screen::msg_gps_fix, next_task.data);
break; break;
@@ -398,6 +423,10 @@ int lcd::loop(unsigned long timeout_ms) {
this->render_gps_debug(); this->render_gps_debug();
break; break;
case screen::driver_primary:
this->render_driver_primary();
break;
case screen::msg_gps_fix: case screen::msg_gps_fix:
this->render_msg_gps_fix(); this->render_msg_gps_fix();
break; break;

View File

@@ -20,6 +20,7 @@ namespace screen {
typedef enum lcd_screen { typedef enum lcd_screen {
blank, blank,
gps_debug, gps_debug,
driver_primary,
msg_gps_fix, msg_gps_fix,
msg_track_detect_ok, msg_track_detect_ok,
msg_config_no_tracks, msg_config_no_tracks,
@@ -60,6 +61,7 @@ private:
screen::lcd_screen get_active_screen() const; screen::lcd_screen get_active_screen() const;
int render_gps_debug(); int render_gps_debug();
int render_driver_primary();
int render_msg_gps_fix(); int render_msg_gps_fix();
int render_msg_track_detect_ok(); int render_msg_track_detect_ok();
int render_msg_config_no_tracks(); int render_msg_config_no_tracks();