aboutsummaryrefslogtreecommitdiffhomepage
path: root/workspace/TS100/src/Settings.cpp
blob: 223894043f057d1070666d00ba0585e2232f3baa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
 * 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"
volatile systemSettingsType systemSettings;

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();

	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();

}

void restoreSettings() {
	//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 the version is correct were done
	//if not we reset and save
	if (systemSettings.version != SETTINGSVERSION) {
		//probably not setup
		resetSettings();
	}

}
//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)
		return 90;    //9V since iron does not function effectively below this
	else
		return (level * 33) + (33 * 2);
}
void resetSettings() {
	memset((void*)&systemSettings,0,sizeof(systemSettingsType));
	systemSettings.SleepTemp = 150;    //Temperature the iron sleeps at - default 150.0 C
	systemSettings.SleepTime = 6;    //How many seconds/minutes we wait until going to sleep - default 1 min
	systemSettings.SolderingTemp = 320;    //Default soldering temp is 320.0 C
	systemSettings.cutoutSetting = 0;			//default to no cut-off voltage
	systemSettings.version = SETTINGSVERSION;			//Store the version number to allow for easier upgrades
	systemSettings.detailedSoldering = 0;			// Detailed soldering screen
	systemSettings.detailedIDLE=0;					// Detailed idle screen (off for first time users)
	systemSettings.OrientationMode = 2;				//Default to automatic
	systemSettings.sensitivity = 7;				//Default high sensitivity
	systemSettings.voltageDiv = 117;			//Default divider from schematic
	systemSettings.ShutdownTime = 10;			//How many minutes until the unit turns itself off
	systemSettings.boostModeEnabled = 1;		//Default to safe, with no boost mode
	systemSettings.BoostTemp = 420;				//default to 400C
	systemSettings.autoStartMode = 0;				//Auto start off for safety
	systemSettings.coolingTempBlink = 0;				//Blink the temperature on the cooling screen when its > 50C
	systemSettings.CalibrationOffset = 10;		//This appears to be quite close for both of my tips, in both of my handles
	systemSettings.temperatureInF = 0;			//default to 0
	systemSettings.descriptionScrollSpeed=0;//default to slow
	saveSettings();
}