// // Created by robtor on 05.01.23. // #ifndef FLOATPUMP_CONFIG_STORE_H #define FLOATPUMP_CONFIG_STORE_H #include #include "stm32f4xx_hal.h" namespace floatpump { class Config_Store { public: Config_Store(); static uint32_t Flash_Write (uint32_t StartPageAddress, uint32_t Data, uint16_t n_words) { static FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PAGEError; int sofar=0; HAL_FLASH_Unlock(); FLASH_Erase_Sector(FLASH_SECTOR_7, VOLTAGE_RANGE_1); HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, StartPageAddress, Data); HAL_FLASH_Lock(); return 0; } void saveToFlash() { Flash_Write(0x08060000, this->RefillBelow.getValue(), 0); }; void resetDefaults(); void loadFromFlash() { this->RefillBelow.setValue(*(uint32_t *)0x08060000); }; template class Config_Object { public: Config_Object(T initialValue) : m_data(initialValue) {}; T getValue() { return m_data; } void setValue(T newValue) { m_data = newValue; } T *getLink() { return &m_data; } private: T m_data; }; Config_Object TankCalibLow = Config_Object(0); Config_Object TankCalibHigh = Config_Object(65535); Config_Object TankMinLevel = Config_Object(20); Config_Object TankHysteresis = Config_Object(5); Config_Object TankCooldown = Config_Object(5); Config_Object TankZeroLevelCM = Config_Object(0); Config_Object TankFullLevelCM = Config_Object(200); Config_Object TankPumpInvert = Config_Object(false); Config_Object RefillEnable = Config_Object(false); Config_Object RefillBlockInvert = Config_Object(false); Config_Object RefillBlockEnable = Config_Object(true); Config_Object RefillBelow = Config_Object(false); Config_Object RefillHysteresis = Config_Object(false); Config_Object RefillCooldown = Config_Object(60); }; } // floatpump #endif //FLOATPUMP_CONFIG_STORE_H