reworking initial calibration and setting cal values from EEPROM
This commit is contained in:
parent
3a514fd381
commit
5a8a1500eb
3 changed files with 52 additions and 16 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue