Added track upload
This commit is contained in:
@@ -21,6 +21,7 @@ enum task_type : uint8_t {
|
|||||||
TASK_DISPLAY_MSG_TRACK_DETECT_OK,
|
TASK_DISPLAY_MSG_TRACK_DETECT_OK,
|
||||||
TASK_DISPLAY_MSG_CONFIG_NO_TRACKS,
|
TASK_DISPLAY_MSG_CONFIG_NO_TRACKS,
|
||||||
TASK_CONFIG_TRACK_DETECT,
|
TASK_CONFIG_TRACK_DETECT,
|
||||||
|
TASK_CONFIG_WRITE_TEMP_TRACK,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Task {
|
struct Task {
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ struct lat_lng {
|
|||||||
|
|
||||||
struct track_data {
|
struct track_data {
|
||||||
uint16_t magic = CONFIG_MAGIC;
|
uint16_t magic = CONFIG_MAGIC;
|
||||||
int id;
|
unsigned short id;
|
||||||
char name[20];
|
char name[21];
|
||||||
lat_lng pt_a;
|
lat_lng pt_a;
|
||||||
lat_lng pt_b;
|
lat_lng pt_b;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "data/track_store.h"
|
||||||
|
#include "base/router.h"
|
||||||
|
|
||||||
char *cmd::trim_arg(char *input) {
|
char *cmd::trim_arg(char *input) {
|
||||||
if (input == nullptr) {
|
if (input == nullptr) {
|
||||||
@@ -76,6 +78,10 @@ cmd::command_id cmd::parse_command_name(const char *input) {
|
|||||||
return CMD_DUMPCFG;
|
return CMD_DUMPCFG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(input, "TRACK_LOAD") == 0) {
|
||||||
|
return CMD_LOAD_TRACK;
|
||||||
|
}
|
||||||
|
|
||||||
return CMD_UNKNOWN;
|
return CMD_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,6 +105,58 @@ int cmd::dispatch_command(command_id command, unsigned short argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case CMD_LOAD_TRACK:
|
||||||
|
if (argc != 7) {
|
||||||
|
#ifdef ERROR
|
||||||
|
if (_logger != nullptr) {
|
||||||
|
_logger->error("TRACK_LOAD expects 6 arguments");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
track_data new_track;
|
||||||
|
|
||||||
|
new_track.id = strtoul(argv[1], nullptr, 10);
|
||||||
|
|
||||||
|
strncpy(new_track.name, argv[2], sizeof(new_track.name) - 1);
|
||||||
|
new_track.name[sizeof(new_track.name) - 1] = '\0';
|
||||||
|
|
||||||
|
lat_lng pt_a;
|
||||||
|
pt_a.lat = strtod(argv[3], nullptr);
|
||||||
|
pt_a.lng = strtod(argv[4], nullptr);
|
||||||
|
new_track.pt_a = pt_a;
|
||||||
|
|
||||||
|
lat_lng pt_b;
|
||||||
|
pt_b.lat = strtod(argv[5], nullptr);
|
||||||
|
pt_b.lng = strtod(argv[6], nullptr);
|
||||||
|
new_track.pt_b = pt_b;
|
||||||
|
|
||||||
|
if (new_track.id < 1 || new_track.id > 8) {
|
||||||
|
#ifdef ERROR
|
||||||
|
if (_logger != nullptr) {
|
||||||
|
_logger->error(String("ID out of range: ") + String(new_track.id));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef INFO
|
||||||
|
if (_logger != nullptr) {
|
||||||
|
_logger->info("Loading new track");
|
||||||
|
_logger->info(String("ID: ") + String(new_track.id));
|
||||||
|
_logger->info(String("Name: ") + new_track.name);
|
||||||
|
_logger->info(String("Point A lat: ") + String(new_track.pt_a.lat));
|
||||||
|
_logger->info(String("Point A lng: ") + String(new_track.pt_a.lat));
|
||||||
|
_logger->info(String("Point B lat: ") + String(new_track.pt_b.lat));
|
||||||
|
_logger->info(String("Point B lng: ") + String(new_track.pt_b.lat));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
track_temp_global_write(new_track);
|
||||||
|
router::send(MOD_CFG, TASK_CONFIG_WRITE_TEMP_TRACK);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
case CMD_UNKNOWN:
|
case CMD_UNKNOWN:
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ private:
|
|||||||
enum command_id {
|
enum command_id {
|
||||||
CMD_UNKNOWN = 0,
|
CMD_UNKNOWN = 0,
|
||||||
CMD_REBOOT,
|
CMD_REBOOT,
|
||||||
CMD_DUMPCFG
|
CMD_DUMPCFG,
|
||||||
|
CMD_LOAD_TRACK,
|
||||||
};
|
};
|
||||||
|
|
||||||
HardwareSerial *_data_stream;
|
HardwareSerial *_data_stream;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "data/track_store.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -17,6 +18,34 @@ int config::task_complete() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int config::write_track(const track_data& in) {
|
||||||
|
track_data copy = in;
|
||||||
|
copy.magic = CONFIG_MAGIC;
|
||||||
|
if (copy.id < 1 || copy.id > 8) {
|
||||||
|
#ifdef ERROR
|
||||||
|
if (_logger != nullptr) {
|
||||||
|
_logger->error("Cannot write track data with out of range id, aborting");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
EEPROM.put(copy.id, copy);
|
||||||
|
_config.track_slot_occupied[copy.id - 1] = true;
|
||||||
|
this->write_cfg();
|
||||||
|
#ifdef INFO
|
||||||
|
if (_logger !=nullptr) {
|
||||||
|
_logger->info("Succesfully wrote new track into slot " + String(copy.id));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int config::write_track_from_temp() {
|
||||||
|
track_data new_track;
|
||||||
|
track_temp_global_read(new_track);
|
||||||
|
return this->write_track(new_track);
|
||||||
|
}
|
||||||
|
|
||||||
config::config() : _logger(nullptr), _valid_config(true) {}
|
config::config() : _logger(nullptr), _valid_config(true) {}
|
||||||
|
|
||||||
config::config(system_logger *logger) : _logger(logger), _valid_config(true) {}
|
config::config(system_logger *logger) : _logger(logger), _valid_config(true) {}
|
||||||
@@ -123,7 +152,10 @@ int config::handle_active_task(unsigned long timeout_ms) {
|
|||||||
if (!_is_track_loaded) {
|
if (!_is_track_loaded) {
|
||||||
return task_config_detect_track(timeout_ms);
|
return task_config_detect_track(timeout_ms);
|
||||||
}
|
}
|
||||||
break;
|
return 0;
|
||||||
|
|
||||||
|
case TASK_CONFIG_WRITE_TEMP_TRACK:
|
||||||
|
return this->write_track_from_temp();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ private:
|
|||||||
int handle_active_task(unsigned long timeout_ms);
|
int handle_active_task(unsigned long timeout_ms);
|
||||||
int task_config_detect_track(unsigned long timeout_ms);
|
int task_config_detect_track(unsigned long timeout_ms);
|
||||||
int task_complete();
|
int task_complete();
|
||||||
|
int write_track(const track_data& in);
|
||||||
|
int write_track_from_temp();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int push(const Task &task) override;
|
int push(const Task &task) override;
|
||||||
|
|||||||
Reference in New Issue
Block a user