forked from Ralim/IronOS
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
…00-Logo-Left
- Loading branch information
Showing
2 changed files
with
85 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,130 +1,107 @@ | ||
/** | ||
/* | ||
* Settings.c | ||
* | ||
* Created on: 29 Sep 2016 | ||
* Author: Ralim | ||
* | ||
* This file holds the users settings and saves / restores them to the | ||
* devices flash | ||
*/ | ||
|
||
#include "Settings.h" | ||
#include "Setup.h" | ||
#define FLASH_ADDR \ | ||
(0x8000000 | \ | ||
0xFC00) /*Flash start OR'ed with the maximum amount of flash - 1024 bytes*/ | ||
#include "string.h" | ||
#include "../../configuration.h" | ||
|
||
volatile systemSettingsType systemSettings; | ||
|
||
/** | ||
* Flash start OR'ed with the maximum amount of flash - 1024 bytes | ||
*/ | ||
#define FLASH_ADDR (0x8000000 | 0xFC00) | ||
|
||
|
||
/** | ||
* Save Settings to flash | ||
*/ | ||
void saveSettings() { | ||
// First we erase the flash | ||
FLASH_EraseInitTypeDef pEraseInit; | ||
pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES; | ||
pEraseInit.Banks = FLASH_BANK_1; | ||
pEraseInit.NbPages = 1; | ||
pEraseInit.PageAddress = FLASH_ADDR; | ||
|
||
uint32_t failingAddress = 0; | ||
HAL_IWDG_Refresh(&hiwdg); | ||
__HAL_FLASH_CLEAR_FLAG( FLASH_FLAG_EOP | | ||
FLASH_FLAG_WRPERR | | ||
FLASH_FLAG_PGERR | | ||
FLASH_FLAG_BSY ); | ||
HAL_FLASH_Unlock(); | ||
HAL_Delay(10); | ||
HAL_IWDG_Refresh(&hiwdg); | ||
HAL_FLASHEx_Erase(&pEraseInit, &failingAddress); | ||
//^ Erase the page of flash (1024 bytes on this stm32) | ||
// erased the chunk | ||
// now we program it | ||
uint16_t *data = (uint16_t*) &systemSettings; | ||
HAL_FLASH_Unlock(); | ||
// First we erase the flash | ||
FLASH_EraseInitTypeDef pEraseInit; | ||
pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES; | ||
pEraseInit.Banks = FLASH_BANK_1; | ||
pEraseInit.NbPages = 1; | ||
pEraseInit.PageAddress = FLASH_ADDR; | ||
uint32_t failingAddress = 0; | ||
HAL_IWDG_Refresh(&hiwdg); | ||
__HAL_FLASH_CLEAR_FLAG( | ||
FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | FLASH_FLAG_BSY); | ||
HAL_FLASH_Unlock(); | ||
HAL_Delay(10); | ||
HAL_IWDG_Refresh(&hiwdg); | ||
HAL_FLASHEx_Erase(&pEraseInit, &failingAddress); | ||
//^ Erase the page of flash (1024 bytes on this stm32) | ||
// erased the chunk | ||
// now we program it | ||
uint16_t *data = (uint16_t*) &systemSettings; | ||
HAL_FLASH_Unlock(); | ||
|
||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) { | ||
HAL_IWDG_Refresh(&hiwdg); | ||
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_ADDR + (i * 2), | ||
data[i]); | ||
} | ||
HAL_FLASH_Lock(); | ||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) { | ||
HAL_IWDG_Refresh(&hiwdg); | ||
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_ADDR + (i * 2), | ||
data[i]); | ||
} | ||
HAL_FLASH_Lock(); | ||
} | ||
|
||
/** | ||
* RestoreSettings from flash | ||
* Return: | ||
* false - if restore from flash is successfull | ||
* true - if settings are reset to its defaults | ||
*/ | ||
bool restoreSettings() { | ||
// We read from flash | ||
uint16_t *data = (uint16_t*) &systemSettings; | ||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) { | ||
data[i] = *((uint16_t*) (FLASH_ADDR + (i * 2))); | ||
} | ||
// We read the flash | ||
uint16_t *data = (uint16_t*) &systemSettings; | ||
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) { | ||
data[i] = *((uint16_t*) (FLASH_ADDR + (i * 2))); | ||
} | ||
|
||
if (systemSettings.version != SETTINGSVERSION) { | ||
// The settings version does not match. | ||
// Resetting the settings to its default. | ||
resetSettings(); | ||
return true; | ||
} | ||
return false; // Settings version from flash is correct were done | ||
// if the version is correct were done | ||
// if not we reset and save | ||
if (systemSettings.version != SETTINGSVERSION) { | ||
// probably not setup | ||
resetSettings(); | ||
return true; | ||
} | ||
return false; | ||
} | ||
|
||
/** | ||
* lookupVoltageLevel | ||
* | ||
* Lookup function for cutoff setting -> X10 voltage | ||
* 0=DC 1=3S 2=4S 3=5S 4=6S | ||
* | ||
// Lookup function for cutoff setting -> X10 voltage | ||
/* | ||
* 0=DC | ||
* 1=3S | ||
* 2=4S | ||
* 3=5S | ||
* 4=6S | ||
*/ | ||
uint8_t lookupVoltageLevel(uint8_t level) { | ||
if (level == 0) { | ||
// 9V - Since iron does not function effectively below this | ||
return 90; | ||
} else { | ||
return (level * 33) + (33 * 2); | ||
} | ||
if (level == 0) | ||
return 90; // 9V since iron does not function effectively below this | ||
else | ||
return (level * 33) + (33 * 2); | ||
} | ||
|
||
/** | ||
* Reset Settings to its default values. | ||
*/ | ||
void resetSettings() { | ||
memset((void*) &systemSettings, 0, sizeof(systemSettingsType)); | ||
|
||
systemSettings.SleepTemp = SLEEP_TEMP; // Temperature the iron sleeps at - default 150.0 C | ||
systemSettings.SleepTime = SLEEP_TIME; // How many seconds/minutes we wait until going to sleep - default 1 min | ||
systemSettings.SolderingTemp = SOLDERING_TEMP; // Default soldering temp is 320.0 C | ||
systemSettings.cutoutSetting = CUT_OUT_SETTING; // default to no cut-off voltage (or 18W for TS80) | ||
systemSettings.version = SETTINGSVERSION; // Store the version number to allow for easier upgrades | ||
systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen | ||
systemSettings.detailedIDLE = DETAILED_IDLE; // Detailed idle screen (off for first time users) | ||
systemSettings.OrientationMode = ORIENTATION_MODE; // Default to automatic | ||
systemSettings.sensitivity = SENSITIVITY; // Default high sensitivity | ||
systemSettings.voltageDiv = VOLTAGE_DIV; // Default divider from schematic | ||
systemSettings.ShutdownTime = SHUTDOWN_TIME; // How many minutes until the unit turns itself off | ||
systemSettings.boostModeEnabled = BOOST_MODE_ENABLED; // Default to having boost mode on as most people prefer it | ||
systemSettings.BoostTemp = BOOST_TEMP; // default to 400C | ||
systemSettings.autoStartMode = AUTO_START_MODE; // Auto start off for safety | ||
systemSettings.coolingTempBlink = COOLING_TEMP_BLINK; // Blink the temperature on the cooling screen when its > 50C | ||
systemSettings.temperatureInF = TEMPERATURE_INF; // default to 0 | ||
systemSettings.descriptionScrollSpeed = DESCRIPTION_SCROLL_SPEED; // default to slow | ||
systemSettings.powerLimitEnable = POWER_LIMIT_ENABLE; // Default to no power limit | ||
systemSettings.CalibrationOffset = CALIBRATION_OFFSET; // the adc offset in uV | ||
systemSettings.pidPowerLimit = PID_POWER_LIMIT; // Sets the max pwm power limit | ||
systemSettings.powerLimit = POWER_LIMIT; // 30 watts default limit | ||
systemSettings.ReverseButtonTempChangeEnabled = REVERSE_BUTTON_TEMP_CHANGE; // | ||
systemSettings.TempChangeShortStep = TEMP_CHANGE_SHORT_STEP; // | ||
systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP; // | ||
|
||
|
||
saveSettings(); // Save default settings | ||
memset((void*) &systemSettings, 0, sizeof(systemSettingsType)); | ||
systemSettings.SleepTemp = SLEEP_TEMP; // Temperature the iron sleeps at - default 150.0 C | ||
systemSettings.SleepTime = SLEEP_TIME; // How many seconds/minutes we wait until going | ||
// to sleep - default 1 min | ||
systemSettings.SolderingTemp = SOLDERING_TEMP; // Default soldering temp is 320.0 C | ||
systemSettings.cutoutSetting = CUT_OUT_SETTING; // default to no cut-off voltage (or 18W for TS80) | ||
systemSettings.version = | ||
SETTINGSVERSION; // Store the version number to allow for easier upgrades | ||
systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen | ||
systemSettings.detailedIDLE = DETAILED_IDLE; // Detailed idle screen (off for first time users) | ||
systemSettings.OrientationMode = ORIENTATION_MODE; // Default to automatic | ||
systemSettings.sensitivity = SENSITIVITY; // Default high sensitivity | ||
systemSettings.voltageDiv = VOLTAGE_DIV; // Default divider from schematic | ||
systemSettings.ShutdownTime = SHUTDOWN_TIME; // How many minutes until the unit turns itself off | ||
systemSettings.boostModeEnabled = BOOST_MODE_ENABLED; // Default to having boost mode on as most people prefer it | ||
systemSettings.BoostTemp = BOOST_TEMP; // default to 400C | ||
systemSettings.autoStartMode = AUTO_START_MODE; // Auto start off for safety | ||
systemSettings.coolingTempBlink = COOLING_TEMP_BLINK; // Blink the temperature on the cooling screen when its > 50C | ||
systemSettings.temperatureInF = TEMPERATURE_INF; // default to 0 | ||
systemSettings.descriptionScrollSpeed = DESCRIPTION_SCROLL_SPEED; // default to slow | ||
systemSettings.powerLimitEnable = POWER_LIMIT_ENABLE; // Default to no power limit | ||
systemSettings.CalibrationOffset = CALIBRATION_OFFSET; // the adc offset in uV | ||
systemSettings.pidPowerLimit = PID_POWER_LIMIT; // Sets the max pwm power limit | ||
systemSettings.powerLimit = POWER_LIMIT; // 30 watts default limit | ||
systemSettings.ReverseButtonTempChangeEnabled = REVERSE_BUTTON_TEMP_CHANGE; // | ||
systemSettings.TempChangeShortStep = TEMP_CHANGE_SHORT_STEP; // | ||
systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP; // | ||
saveSettings(); // Save defaults | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters