reworking initial calibration and setting cal values from EEPROM

This commit is contained in:
tyler miller 2025-01-10 13:21:27 -05:00
parent 3a514fd381
commit 5a8a1500eb
3 changed files with 52 additions and 16 deletions

View file

@ -26,6 +26,7 @@ void writeCalibration(const JoystickCalibration &cal) {
void readNvm(NonVolatileMemory &nvm)
{
nvm.calData.validMarker = 0;
for (size_t ii = 0; ii < sizeof(NonVolatileMemory); ii++)
{
nvm.rawBytes[ii] = EEPROM.read(ii);

View file

@ -23,16 +23,36 @@ struct JoystickAxisCalibration
bool valid() const;
} __attribute__((packed));
/// calibration of min/max for single axis analog signals with no mid point
/// ie: a potentiometer
struct LinearAnalogCalibration {
uint16_t min;
uint16_t max;
inline bool valid() const { return min < max; }
} __attribute__((packed));
struct JoystickCalibration
{
JoystickAxisCalibration x;
JoystickAxisCalibration y;
} __attribute__((packed));
static constexpr uint32_t VALID_MARKER_DEFAULT = 0xcafecall;
union NonVolatileMemory
{
JoystickCalibration joystickCal;
uint8_t rawBytes[sizeof(JoystickCalibration)] = {};
struct Calibration {
/// place hard-coded start marker at the beginning of the data
/// to indicate validity
uint32_t validMarker = VALID_MARKER_DEFAULT;
JoystickCalibration joystickCal;
LinearAnalogCalibration linearCal;
} __attribute__((packed)) calData;
uint8_t rawBytes[NonVolatileMemory::Calibration] = {};
inline bool valid() const { return calData.validMarker == VALID_MARKER_DEFAULT; }
};
/// @brief Write the provided struct to EEPROM