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 {
|
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,
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user