diff --git a/src/base/task.h b/src/base/task.h index 61b50ee..8944e05 100644 --- a/src/base/task.h +++ b/src/base/task.h @@ -19,6 +19,7 @@ enum task_type : uint8_t { TASK_DISPLAY_GPS_DEBUG, TASK_DISPLAY_MSG_GPS_FIX, TASK_DISPLAY_MSG_TRACK_DETECT_OK, + TASK_DISPLAY_MSG_CONFIG_NO_TRACKS, TASK_CONFIG_TRACK_DETECT, }; @@ -26,4 +27,4 @@ struct Task { module_id target; task_type type; uint32_t data; -}; \ No newline at end of file +}; diff --git a/src/data/config_store.cpp b/src/data/config_store.cpp index 9e705d4..6fa2c41 100644 --- a/src/data/config_store.cpp +++ b/src/data/config_store.cpp @@ -9,6 +9,6 @@ copy_from_volatile(out, config_global); } - void track_global_write(const vehicle_config& in) { + void config_global_write(const vehicle_config& in) { copy_to_volatile(config_global, in); - } \ No newline at end of file + } diff --git a/src/modules/config/config.cpp b/src/modules/config/config.cpp index 116c078..315c165 100644 --- a/src/modules/config/config.cpp +++ b/src/modules/config/config.cpp @@ -25,16 +25,19 @@ config::~config() {} int config::read_cfg() { EEPROM.get(0, _config); + config_global_write(_config); return 0; } int config::write_cfg() { EEPROM.put(0, _config); + config_global_write(_config); return 0; } int config::write_cfg(const vehicle_config &new_config) { EEPROM.put(0, new_config); + config_global_write(new_config); return 0; } @@ -50,6 +53,10 @@ int config::task_config_detect_track(unsigned long timeout_ms) { } if (!min_one) { + if (!_no_tracks_notice_shown) { + router::send(MOD_LCD, TASK_DISPLAY_MSG_CONFIG_NO_TRACKS, 3000); + _no_tracks_notice_shown = true; + } this->task_complete(); return 1; } @@ -83,10 +90,23 @@ int config::task_config_detect_track(unsigned long timeout_ms) { } if (task_data.last_checked >= 8) { - this->load_track(task_data.smallest_idx); + int load_res = 1; + if (task_data.smallest_idx > 0) { + load_res = this->load_track(task_data.smallest_idx); + } + this->task_complete(); - router::send(MOD_LCD, TASK_DISPLAY_MSG_TRACK_DETECT_OK, 4000); - return 0; + if (load_res == 0) { + _no_tracks_notice_shown = false; + router::send(MOD_LCD, TASK_DISPLAY_MSG_TRACK_DETECT_OK, 4000); + return 0; + } + + if (!_no_tracks_notice_shown) { + router::send(MOD_LCD, TASK_DISPLAY_MSG_CONFIG_NO_TRACKS, 3000); + _no_tracks_notice_shown = true; + } + return 1; } if ((unsigned long)(millis() - start) >= timeout_ms) { @@ -185,4 +205,4 @@ int config::load_track(unsigned int idx) { track_global_write(_loaded_track); _is_track_loaded = true; return 0; -} \ No newline at end of file +} diff --git a/src/modules/config/config.h b/src/modules/config/config.h index 23e0722..1e0aff7 100644 --- a/src/modules/config/config.h +++ b/src/modules/config/config.h @@ -34,6 +34,7 @@ private: Task _active_task = {}; uint8_t _task_memory[64] = {}; bool _task_memory_stale = true; + bool _no_tracks_notice_shown = false; int read_cfg(); int write_cfg(); @@ -51,4 +52,4 @@ public: int loop(unsigned long timeout_ms = 500); int get_track(unsigned int idx, track_data &t); int load_track(unsigned int idx); -}; \ No newline at end of file +}; diff --git a/src/modules/lcd/lcd.cpp b/src/modules/lcd/lcd.cpp index 16d0ff3..5ceb9cc 100644 --- a/src/modules/lcd/lcd.cpp +++ b/src/modules/lcd/lcd.cpp @@ -60,6 +60,7 @@ bool lcd::is_message_task(task_type type) { switch (type) { case TASK_DISPLAY_MSG_GPS_FIX: case TASK_DISPLAY_MSG_TRACK_DETECT_OK: + case TASK_DISPLAY_MSG_CONFIG_NO_TRACKS: return true; default: @@ -165,6 +166,15 @@ int lcd::render_msg_track_detect_ok() { return 0; } +int lcd::render_msg_config_no_tracks() { + this->clear(); + _display->setCursor(4, 1); + this->print("CONFIG INFO"); + _display->setCursor(2, 2); + this->print("NO TRACKS LOADED"); + return 0; +} + int lcd::push(const Task &task) { return _queue.push(task); } @@ -350,6 +360,10 @@ int lcd::loop(unsigned long timeout_ms) { activate_message(screen::msg_track_detect_ok, next_task.data); break; + case TASK_DISPLAY_MSG_CONFIG_NO_TRACKS: + activate_message(screen::msg_config_no_tracks, next_task.data); + break; + default: break; } @@ -392,6 +406,10 @@ int lcd::loop(unsigned long timeout_ms) { this->render_msg_track_detect_ok(); break; + case screen::msg_config_no_tracks: + this->render_msg_config_no_tracks(); + break; + default: break; } @@ -401,4 +419,4 @@ int lcd::loop(unsigned long timeout_ms) { return 1; } -#undef MOD \ No newline at end of file +#undef MOD diff --git a/src/modules/lcd/lcd.h b/src/modules/lcd/lcd.h index ea51d7e..22f1cdb 100644 --- a/src/modules/lcd/lcd.h +++ b/src/modules/lcd/lcd.h @@ -22,6 +22,7 @@ typedef enum lcd_screen { gps_debug, msg_gps_fix, msg_track_detect_ok, + msg_config_no_tracks, } lcd_screen; } // namespace screen @@ -61,6 +62,7 @@ private: int render_gps_debug(); int render_msg_gps_fix(); int render_msg_track_detect_ok(); + int render_msg_config_no_tracks(); public: int push(const Task &task) override; @@ -70,4 +72,4 @@ public: int init(); int print_message(String message); int loop(unsigned long timeout_ms = 500); -}; \ No newline at end of file +};