Added basic primary driver display and display switch commands
This commit is contained in:
@@ -17,6 +17,7 @@ enum module_id : uint8_t {
|
||||
enum task_type : uint8_t {
|
||||
TASK_NULL,
|
||||
TASK_DISPLAY_GPS_DEBUG,
|
||||
TASK_DISPLAY_DRIVER_PRIMARY,
|
||||
TASK_DISPLAY_MSG_GPS_FIX,
|
||||
TASK_DISPLAY_MSG_TRACK_DETECT_OK,
|
||||
TASK_DISPLAY_MSG_CONFIG_NO_TRACKS,
|
||||
|
||||
@@ -57,7 +57,7 @@ void setup() {
|
||||
delay(1000);
|
||||
driver_display->print_message("GPS Init Complete");
|
||||
delay(1000);
|
||||
router::send(MOD_LCD, TASK_DISPLAY_GPS_DEBUG);
|
||||
router::send(MOD_LCD, TASK_DISPLAY_DRIVER_PRIMARY);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
@@ -95,6 +95,18 @@ cmd::command_id cmd::parse_command_name(const char *input) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -296,6 +308,60 @@ int cmd::handle_cfg_reset_command(unsigned short argc) {
|
||||
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[]) {
|
||||
#ifdef ERROR
|
||||
if (_logger != nullptr) {
|
||||
@@ -328,6 +394,15 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
|
||||
|
||||
case CMD_CFG_RESET:
|
||||
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:
|
||||
default:
|
||||
|
||||
@@ -22,6 +22,9 @@ private:
|
||||
CMD_DUMP_TRACK,
|
||||
CMD_CFG_RESET,
|
||||
CMD_CFG_DUMP,
|
||||
CMD_TRACK_AUTODETECT,
|
||||
CMD_DISPLAY_GPS_DEBUG,
|
||||
CMD_DISPLAY_DRIVER_PRIMARY,
|
||||
};
|
||||
|
||||
HardwareSerial *_data_stream;
|
||||
@@ -47,6 +50,9 @@ private:
|
||||
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_unknown_command(unsigned short argc, char *argv[]);
|
||||
|
||||
public:
|
||||
|
||||
@@ -210,7 +210,7 @@ int config::task_config_detect_track(unsigned long timeout_ms) {
|
||||
int config::handle_active_task(unsigned long timeout_ms) {
|
||||
switch (_active_task.type) {
|
||||
case TASK_CONFIG_TRACK_DETECT: {
|
||||
if (!_is_track_loaded) {
|
||||
if (!_is_track_loaded || _active_task.data == 1) {
|
||||
return task_config_detect_track(timeout_ms);
|
||||
}
|
||||
this->task_complete();
|
||||
|
||||
@@ -142,6 +142,23 @@ int lcd::render_gps_debug() {
|
||||
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() {
|
||||
this->clear();
|
||||
_display->setCursor(6, 1);
|
||||
@@ -352,6 +369,14 @@ int lcd::loop(unsigned long timeout_ms) {
|
||||
}
|
||||
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:
|
||||
activate_message(screen::msg_gps_fix, next_task.data);
|
||||
break;
|
||||
@@ -397,6 +422,10 @@ int lcd::loop(unsigned long timeout_ms) {
|
||||
case screen::gps_debug:
|
||||
this->render_gps_debug();
|
||||
break;
|
||||
|
||||
case screen::driver_primary:
|
||||
this->render_driver_primary();
|
||||
break;
|
||||
|
||||
case screen::msg_gps_fix:
|
||||
this->render_msg_gps_fix();
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace screen {
|
||||
typedef enum lcd_screen {
|
||||
blank,
|
||||
gps_debug,
|
||||
driver_primary,
|
||||
msg_gps_fix,
|
||||
msg_track_detect_ok,
|
||||
msg_config_no_tracks,
|
||||
@@ -60,6 +61,7 @@ private:
|
||||
screen::lcd_screen get_active_screen() const;
|
||||
|
||||
int render_gps_debug();
|
||||
int render_driver_primary();
|
||||
int render_msg_gps_fix();
|
||||
int render_msg_track_detect_ok();
|
||||
int render_msg_config_no_tracks();
|
||||
|
||||
Reference in New Issue
Block a user