initial commit. start platformio project

This commit is contained in:
len0rd 2025-01-10 09:14:27 -05:00
commit b1e2aecfff
8 changed files with 314 additions and 0 deletions

33
lib/nvm/src/NvmEeprom.cpp Normal file
View file

@ -0,0 +1,33 @@
/** \File NvmEeprom.cpp
* \copyright (c) 2025 len0rd
* \date 2025-01-09
*/
#include "NvmEeprom.hpp"
#include <cstddef>
#include "EEPROM.h"
bool JoystickAxisCalibration::valid() const {
return min < mid < max;
}
void writeNvm(const NonVolatileMemory &nvm)
{
for (size_t ii = 0; ii < sizeof(NonVolatileMemory); ii++)
{
EEPROM.write(ii, nvm.rawBytes[ii]);
}
}
void writeCalibration(const JoystickCalibration &cal) {
NonVolatileMemory nvm = {};
nvm.joystickCal = cal;
writeNvm(nvm);
}
void readNvm(NonVolatileMemory &nvm)
{
for (size_t ii = 0; ii < sizeof(NonVolatileMemory); ii++)
{
nvm.rawBytes[ii] = EEPROM.read(ii);
}
}

44
lib/nvm/src/NvmEeprom.hpp Normal file
View file

@ -0,0 +1,44 @@
/** \File NvmEeprom.hpp
* \copyright (c) 2025 len0rd
* \date 2025-01-09
*
* Very basic non-volatile memory handler to save and retrieve data
* needed by the controller
*/
#ifndef __NVMEEPROM_H__
#define __NVMEEPROM_H__
#include <cstdint>
struct JoystickAxisCalibration
{
/// Minimum value axis could be
uint16_t min;
/// average center point of axis
uint16_t mid;
/// max value axis could be
uint16_t max;
/// Check if the data in this struct makes sense
/// Returns true if data might be valid, otherwise false
bool valid() const;
} __attribute__((packed));
struct JoystickCalibration
{
JoystickAxisCalibration x;
JoystickAxisCalibration y;
} __attribute__((packed));
union NonVolatileMemory
{
JoystickCalibration joystickCal;
uint8_t rawBytes[sizeof(JoystickCalibration)] = {};
};
/// @brief Write the provided struct to EEPROM
void writeNvm(const NonVolatileMemory &nvm);
void writeCalibration(const JoystickCalibration&cal);
void readNvm(NonVolatileMemory &nvm);
#endif /* __NVMEEPROM_H__ */