Added track store and updated copy to and from volatile to single template function
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define CONFIG_MAGIC 0xBEEF
|
#define CONFIG_MAGIC 0xBEEF
|
||||||
struct vehicle_config{
|
struct vehicle_config{
|
||||||
@@ -20,7 +21,7 @@ struct lat_lng {
|
|||||||
struct track_data {
|
struct track_data {
|
||||||
uint16_t magic = CONFIG_MAGIC;
|
uint16_t magic = CONFIG_MAGIC;
|
||||||
int id;
|
int id;
|
||||||
char name[32];
|
char name[20];
|
||||||
lat_lng pt_a;
|
lat_lng pt_a;
|
||||||
lat_lng pt_b;
|
lat_lng pt_b;
|
||||||
};
|
};
|
||||||
@@ -40,32 +41,12 @@ struct gps_data {
|
|||||||
uint32_t num_fix;
|
uint32_t num_fix;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void gps_sub_copy_from_volatile(gps_sub_data& dst, const volatile gps_sub_data& src) {
|
template<typename T>
|
||||||
dst.age = src.age;
|
inline void copy_from_volatile(T& dst, const volatile T& src) {
|
||||||
dst.valid = src.valid;
|
memcpy(&dst, (const void*)&src, sizeof(T));
|
||||||
dst.value = src.value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void gps_sub_copy_to_volatile(volatile gps_sub_data& dst, const gps_sub_data& src) {
|
template<typename T>
|
||||||
dst.age = src.age;
|
inline void copy_to_volatile(volatile T& dst, const T& src) {
|
||||||
dst.valid = src.valid;
|
memcpy((void*)&dst, &src, sizeof(T));
|
||||||
dst.value = src.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void gps_copy_from_volatile(gps_data& dst, const volatile gps_data& src) {
|
|
||||||
gps_sub_copy_from_volatile(dst.altitude, src.altitude);
|
|
||||||
gps_sub_copy_from_volatile(dst.lat, src.lat);
|
|
||||||
gps_sub_copy_from_volatile(dst.lng, src.lng);
|
|
||||||
gps_sub_copy_from_volatile(dst.speed, src.speed);
|
|
||||||
gps_sub_copy_from_volatile(dst.course, src.course);
|
|
||||||
dst.num_fix = src.num_fix;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void gps_copy_to_volatile(volatile gps_data& dst, const gps_data& src) {
|
|
||||||
gps_sub_copy_to_volatile(dst.altitude, src.altitude);
|
|
||||||
gps_sub_copy_to_volatile(dst.lat, src.lat);
|
|
||||||
gps_sub_copy_to_volatile(dst.lng, src.lng);
|
|
||||||
gps_sub_copy_to_volatile(dst.speed, src.speed);
|
|
||||||
gps_sub_copy_to_volatile(dst.course, src.course);
|
|
||||||
dst.num_fix = src.num_fix;
|
|
||||||
}
|
}
|
||||||
@@ -6,9 +6,9 @@
|
|||||||
volatile gps_data gps_data_global = {};
|
volatile gps_data gps_data_global = {};
|
||||||
|
|
||||||
void gps_global_read(gps_data& out) {
|
void gps_global_read(gps_data& out) {
|
||||||
gps_copy_from_volatile(out, gps_data_global);
|
copy_from_volatile(out, gps_data_global);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gps_global_write(const gps_data& in) {
|
void gps_global_write(const gps_data& in) {
|
||||||
gps_copy_to_volatile(gps_data_global, in);
|
copy_to_volatile(gps_data_global, in);
|
||||||
}
|
}
|
||||||
27
src/data/track_store.cpp
Normal file
27
src/data/track_store.cpp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright (C) 2026 Hector van der Aa <hector@h3cx.dev>
|
||||||
|
// Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
#include "data/track_store.h"
|
||||||
|
|
||||||
|
volatile track_data track_data_global = {};
|
||||||
|
|
||||||
|
void track_global_read(track_data& out) {
|
||||||
|
copy_from_volatile(out, track_data_global);
|
||||||
|
}
|
||||||
|
|
||||||
|
int track_global_read(unsigned short idx, track_data& out) {
|
||||||
|
if (idx < 1 || idx > 8) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
track_data temp;
|
||||||
|
EEPROM.get(idx, temp);
|
||||||
|
if (temp.magic != CONFIG_MAGIC) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
out = temp;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void track_global_write(const track_data& in) {
|
||||||
|
copy_to_volatile(track_data_global, in);
|
||||||
|
}
|
||||||
13
src/data/track_store.h
Normal file
13
src/data/track_store.h
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (C) 2026 Hector van der Aa <hector@h3cx.dev>
|
||||||
|
// Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "custom_types.h"
|
||||||
|
#include <EEPROM.h>
|
||||||
|
|
||||||
|
extern volatile track_data track_data_global;
|
||||||
|
|
||||||
|
void track_global_read(track_data& out);
|
||||||
|
int track_global_read(unsigned short idx, track_data& out);
|
||||||
|
void track_global_write(const track_data& in);
|
||||||
Reference in New Issue
Block a user