1
0
forked from me/IronOS

Return if settings were reset

This commit is contained in:
Ben V. Brown
2019-12-28 12:00:18 +11:00
parent e6a562f8f4
commit 2032e8a2f3
2 changed files with 69 additions and 72 deletions

View File

@@ -11,7 +11,7 @@
#define SETTINGS_H_ #define SETTINGS_H_
#include <stdint.h> #include <stdint.h>
#include "stm32f1xx_hal.h" #include "stm32f1xx_hal.h"
#define SETTINGSVERSION ( 0x1A ) #define SETTINGSVERSION ( 0x1B )
/*Change this if you change the struct below to prevent people getting \ /*Change this if you change the struct below to prevent people getting \
out of sync*/ out of sync*/
@@ -53,7 +53,7 @@ typedef struct {
extern volatile systemSettingsType systemSettings; extern volatile systemSettingsType systemSettings;
void saveSettings(); void saveSettings();
void restoreSettings(); bool restoreSettings();
uint8_t lookupVoltageLevel(uint8_t level); uint8_t lookupVoltageLevel(uint8_t level);
void resetSettings(); void resetSettings();
bool showBootLogoIfavailable(); bool showBootLogoIfavailable();

View File

@@ -17,47 +17,49 @@
volatile systemSettingsType systemSettings; volatile systemSettingsType systemSettings;
void saveSettings() { void saveSettings() {
// First we erase the flash // First we erase the flash
FLASH_EraseInitTypeDef pEraseInit; FLASH_EraseInitTypeDef pEraseInit;
pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES; pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
pEraseInit.Banks = FLASH_BANK_1; pEraseInit.Banks = FLASH_BANK_1;
pEraseInit.NbPages = 1; pEraseInit.NbPages = 1;
pEraseInit.PageAddress = FLASH_ADDR; pEraseInit.PageAddress = FLASH_ADDR;
uint32_t failingAddress = 0; uint32_t failingAddress = 0;
HAL_IWDG_Refresh(&hiwdg); HAL_IWDG_Refresh(&hiwdg);
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | __HAL_FLASH_CLEAR_FLAG(
FLASH_FLAG_BSY); FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | FLASH_FLAG_BSY);
HAL_FLASH_Unlock(); HAL_FLASH_Unlock();
HAL_Delay(10); HAL_Delay(10);
HAL_IWDG_Refresh(&hiwdg); HAL_IWDG_Refresh(&hiwdg);
HAL_FLASHEx_Erase(&pEraseInit, &failingAddress); HAL_FLASHEx_Erase(&pEraseInit, &failingAddress);
//^ Erase the page of flash (1024 bytes on this stm32) //^ Erase the page of flash (1024 bytes on this stm32)
// erased the chunk // erased the chunk
// now we program it // now we program it
uint16_t *data = (uint16_t *)&systemSettings; uint16_t *data = (uint16_t*) &systemSettings;
HAL_FLASH_Unlock(); HAL_FLASH_Unlock();
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) { for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
HAL_IWDG_Refresh(&hiwdg); HAL_IWDG_Refresh(&hiwdg);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_ADDR + (i * 2), HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_ADDR + (i * 2),
data[i]); data[i]);
} }
HAL_FLASH_Lock(); HAL_FLASH_Lock();
} }
void restoreSettings() { bool restoreSettings() {
// We read the flash // We read the flash
uint16_t *data = (uint16_t *)&systemSettings; uint16_t *data = (uint16_t*) &systemSettings;
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) { for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
data[i] = *((uint16_t *)(FLASH_ADDR + (i * 2))); data[i] = *((uint16_t*) (FLASH_ADDR + (i * 2)));
} }
// if the version is correct were done // if the version is correct were done
// if not we reset and save // if not we reset and save
if (systemSettings.version != SETTINGSVERSION) { if (systemSettings.version != SETTINGSVERSION) {
// probably not setup // probably not setup
resetSettings(); resetSettings();
} return true;
}
return false;
} }
// Lookup function for cutoff setting -> X10 voltage // Lookup function for cutoff setting -> X10 voltage
/* /*
@@ -68,52 +70,47 @@ void restoreSettings() {
* 4=6S * 4=6S
*/ */
uint8_t lookupVoltageLevel(uint8_t level) { uint8_t lookupVoltageLevel(uint8_t level) {
if (level == 0) if (level == 0)
return 90; // 9V since iron does not function effectively below this return 90; // 9V since iron does not function effectively below this
else else
return (level * 33) + (33 * 2); return (level * 33) + (33 * 2);
} }
void resetSettings() { void resetSettings() {
memset((void *)&systemSettings, 0, sizeof(systemSettingsType)); memset((void*) &systemSettings, 0, sizeof(systemSettingsType));
systemSettings.SleepTemp = systemSettings.SleepTemp = 150; // Temperature the iron sleeps at - default 150.0 C
150; // Temperature the iron sleeps at - default 150.0 C systemSettings.SleepTime = 6; // How many seconds/minutes we wait until going
systemSettings.SleepTime = 6; // How many seconds/minutes we wait until going // to sleep - default 1 min
// to sleep - default 1 min systemSettings.SolderingTemp = 320; // Default soldering temp is 320.0 C
systemSettings.SolderingTemp = 320; // Default soldering temp is 320.0 C systemSettings.cutoutSetting = 0; // default to no cut-off voltage (or 18W for TS80)
systemSettings.cutoutSetting = 0; // default to no cut-off voltage (or 18W for TS80) systemSettings.version =
systemSettings.version = SETTINGSVERSION; // Store the version number to allow for easier upgrades
SETTINGSVERSION; // Store the version number to allow for easier upgrades systemSettings.detailedSoldering = 0; // Detailed soldering screen
systemSettings.detailedSoldering = 0; // Detailed soldering screen systemSettings.detailedIDLE = 0; // Detailed idle screen (off for first time users)
systemSettings.detailedIDLE = systemSettings.OrientationMode = 2; // Default to automatic
0; // Detailed idle screen (off for first time users) systemSettings.sensitivity = 7; // Default high sensitivity
systemSettings.OrientationMode = 2; // Default to automatic
systemSettings.sensitivity = 7; // Default high sensitivity
#ifdef MODEL_TS80 #ifdef MODEL_TS80
systemSettings.voltageDiv = 780; // Default divider from schematic systemSettings.voltageDiv = 780; // Default divider from schematic
#else #else
systemSettings.voltageDiv = 467; // Default divider from schematic systemSettings.voltageDiv = 467; // Default divider from schematic
#endif #endif
systemSettings.ShutdownTime = systemSettings.ShutdownTime = 10; // How many minutes until the unit turns itself off
10; // How many minutes until the unit turns itself off systemSettings.boostModeEnabled = 1; // Default to having boost mode on as most people prefer it
systemSettings.boostModeEnabled = systemSettings.BoostTemp = 420; // default to 400C
1; // Default to having boost mode on as most people prefer it systemSettings.autoStartMode = 0; // Auto start off for safety
systemSettings.BoostTemp = 420; // default to 400C systemSettings.coolingTempBlink = 0; // Blink the temperature on the cooling screen when its > 50C
systemSettings.autoStartMode = 0; // Auto start off for safety systemSettings.temperatureInF = 0; // default to 0
systemSettings.coolingTempBlink = systemSettings.descriptionScrollSpeed = 0; // default to slow
0; // Blink the temperature on the cooling screen when its > 50C
systemSettings.temperatureInF = 0; // default to 0
systemSettings.descriptionScrollSpeed = 0; // default to slow
#ifdef MODEL_TS100 #ifdef MODEL_TS100
systemSettings.CalibrationOffset = 850; // the adc offset in uV systemSettings.CalibrationOffset = 900; // the adc offset in uV
systemSettings.pidPowerLimit=70; // Sets the max pwm power limit systemSettings.pidPowerLimit=70; // Sets the max pwm power limit
#endif #endif
#ifdef MODEL_TS80 #ifdef MODEL_TS80
systemSettings.pidPowerLimit=24; // Sets the max pwm power limit systemSettings.pidPowerLimit = 24; // Sets the max pwm power limit
systemSettings.CalibrationOffset = 300; // the adc offset in uV systemSettings.CalibrationOffset = 900; // the adc offset in uV
#endif #endif
saveSettings(); // Save defaults saveSettings(); // Save defaults
} }