Files
lemon-pepper-stepper/firmware/lib/Arduino-FOC-drivers/src/settings/SettingsStorage.cpp
2023-11-09 19:02:15 -05:00

121 lines
3.3 KiB
C++

#include "./SettingsStorage.h"
#include "communication/SimpleFOCDebug.h"
SettingsStorage::SettingsStorage() {
};
SettingsStorage::~SettingsStorage() {
};
void SettingsStorage::addMotor(BLDCMotor* motor) {
if (numMotors < SIMPLEFOC_SETTINGS_MAX_MOTORS) {
motors[numMotors] = motor;
numMotors++;
}
else
SimpleFOCDebug::println("SS: too many motors");
};
void SettingsStorage::setRegisters(SimpleFOCRegister* registers, int numRegisters){
this->registers = registers;
this->numRegisters = numRegisters;
};
void SettingsStorage::init() {
// make sure we have motors and registers
if (numMotors < 1) {
SimpleFOCDebug::println("SS: no motors");
return;
}
if (registers==NULL || numRegisters < 1) {
SimpleFOCDebug::println("SS: no registers");
return;
}
};
SettingsStatus SettingsStorage::loadSettings() {
SimpleFOCDebug::println("Loading settings...");
beforeLoad();
uint8_t magic; readByte(&magic);
if (magic != SIMPLEFOC_SETTINGS_MAGIC_BYTE) {
SimpleFOCDebug::println("No settings found ");
return SFOC_SETTINGS_NONE;
}
uint8_t rversion; readByte(&rversion);
if (rversion != SIMPLEFOC_REGISTERS_VERSION) {
SimpleFOCDebug::println("Registers version mismatch");
return SFOC_SETTINGS_OLD;
}
uint8_t version; readByte(&version);
if (version != settings_version) {
SimpleFOCDebug::println("Settings version mismatch");
return SFOC_SETTINGS_OLD;
}
for (int m = 0; m < numMotors; m++) {
if (numMotors>1)
SimpleFOCDebug::println("Loading settings for motor ", m);
startLoadMotor(m);
for (int i = 0; i < numRegisters; i++) {
SimpleFOCRegister reg = registers[i];
startLoadRegister(reg);
setRegister(reg, motors[m]);
endLoadRegister();
}
endLoadMotor();
}
afterLoad();
SimpleFOCDebug::println("Settings loaded");
return SFOC_SETTINGS_SUCCESS;
};
SettingsStatus SettingsStorage::saveSettings() {
SimpleFOCDebug::println("Saving settings...");
beforeSave();
writeByte(SIMPLEFOC_SETTINGS_MAGIC_BYTE);
writeByte(SIMPLEFOC_REGISTERS_VERSION);
writeByte(settings_version);
for (int m = 0; m < numMotors; m++) {
if (numMotors>1)
SimpleFOCDebug::println("Saving settings for motor ", m);
startSaveMotor(m);
for (int i = 0; i < numRegisters; i++) {
SimpleFOCRegister reg = registers[i];
startSaveRegister(reg);
sendRegister(reg, motors[m]);
endSaveRegister();
}
endSaveMotor();
}
afterSave();
SimpleFOCDebug::println("Settings saved");
return SFOC_SETTINGS_SUCCESS;
};
// empty implementation for these
void SettingsStorage::startSaveMotor(uint8_t num) {};
void SettingsStorage::endSaveMotor() {};
void SettingsStorage::startSaveRegister(SimpleFOCRegister reg) {};
void SettingsStorage::endSaveRegister() {};
void SettingsStorage::startLoadMotor(uint8_t num) {};
void SettingsStorage::endLoadMotor() {};
void SettingsStorage::startLoadRegister(SimpleFOCRegister reg) {};
void SettingsStorage::endLoadRegister() {};
void SettingsStorage::beforeLoad() {};
void SettingsStorage::afterLoad() {};
void SettingsStorage::beforeSave() {};
void SettingsStorage::afterSave() {};