initial commit
This commit is contained in:
45
include/tuning_store.h
Normal file
45
include/tuning_store.h
Normal file
@@ -0,0 +1,45 @@
|
||||
#pragma once
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <EEPROM.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
static const uint16_t TUNING_MAGIC = 0xDA7A;
|
||||
static const int TUNING_EEPROM_ADDR = 0;
|
||||
|
||||
struct TuningData {
|
||||
uint16_t magic = 0;
|
||||
float kp = PID_KP;
|
||||
float ki = PID_KI;
|
||||
float kd = PID_KD;
|
||||
uint8_t fanMixMax = FAN_MIX_MAX_PWM;
|
||||
};
|
||||
|
||||
inline uint8_t tuningChecksum(const TuningData &data) {
|
||||
const uint8_t *bytes = reinterpret_cast<const uint8_t *>(&data);
|
||||
uint8_t sum = 0;
|
||||
for (uint8_t i = 0; i < sizeof(TuningData) - 1; ++i) {
|
||||
sum ^= bytes[i];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
inline bool tuningLoad(TuningData &out) {
|
||||
EEPROM.get(TUNING_EEPROM_ADDR, out);
|
||||
const uint8_t stored = EEPROM.read(TUNING_EEPROM_ADDR + sizeof(TuningData));
|
||||
if (out.magic != TUNING_MAGIC) {
|
||||
return false;
|
||||
}
|
||||
return tuningChecksum(out) == stored;
|
||||
}
|
||||
|
||||
inline void tuningSave(const TuningData &data) {
|
||||
EEPROM.put(TUNING_EEPROM_ADDR, data);
|
||||
EEPROM.write(TUNING_EEPROM_ADDR + sizeof(TuningData), tuningChecksum(data));
|
||||
}
|
||||
|
||||
inline void tuningClear() {
|
||||
TuningData cleared;
|
||||
tuningSave(cleared);
|
||||
}
|
||||
Reference in New Issue
Block a user