1
0
forked from me/IronOS

Unify behavior of menu items with questions/warnings (#157)

This commit is contained in:
Jan Krupička
2017-12-15 23:31:50 +01:00
committed by Ben V. Brown
parent 4c0ba72542
commit 538a741912
6 changed files with 138 additions and 118 deletions

View File

@@ -9,6 +9,7 @@
#include "cmsis_os.h"
#include "hardware.h"
#include "string.h"
static void settings_setInputVRange(void);
static void settings_displayInputVRange(void);
static void settings_setSleepTemp(void);
@@ -43,7 +44,6 @@ static void settings_displayCalibrate(void);
static void settings_setCalibrateVIN(void);
static void settings_displayCalibrateVIN(void);
bool settingsResetRequest = false;
const menuitem settingsMenu[] = {
/*Struct used for all settings options in the settings menu*/
{(const char*)SettingsLongNames[0],
@@ -132,6 +132,42 @@ static void printShortDescription(uint32_t shortDescIndex,
lcd.setCharCursor(cursorCharPosition, 0);
}
static int userConfirmation(const char* message) {
uint8_t maxOffset = strlen(message) + 7;
uint32_t messageStart = HAL_GetTick();
lcd.setFont(0);
lcd.setCursor(0, 0);
for (;;) {
int16_t messageOffset = (((HAL_GetTick() - messageStart) / 150) % maxOffset);
lcd.clearScreen();
lcd.setCursor(12 * (7 - messageOffset), 0);
lcd.print(message);
ButtonState buttons = getButtonState();
switch (buttons) {
case BUTTON_F_SHORT:
//User confirmed
return 1;
case BUTTON_BOTH:
case BUTTON_B_SHORT:
case BUTTON_F_LONG:
case BUTTON_B_LONG:
return 0;
case BUTTON_NONE:
break;
}
lcd.refresh();
osDelay(50);
}
}
static void settings_setInputVRange(void) {
systemSettings.cutoutSetting = (systemSettings.cutoutSetting + 1) % 5;
}
@@ -147,6 +183,7 @@ static void settings_displayInputVRange(void) {
}
}
static void settings_setSleepTemp(void) {
systemSettings.SleepTemp += 10;
if (systemSettings.SleepTemp > 300) systemSettings.SleepTemp = 50;
@@ -157,6 +194,7 @@ static void settings_displaySleepTemp(void) {
lcd.printNumber(systemSettings.SleepTemp, 3);
}
static void settings_setSleepTime(void) {
systemSettings.SleepTime++; // Go up 1 minute at a time
if (systemSettings.SleepTime >= 16) {
@@ -177,6 +215,7 @@ static void settings_displaySleepTime(void) {
}
}
static void settings_setShutdownTime(void) {
systemSettings.ShutdownTime++;
if (systemSettings.ShutdownTime > 60) {
@@ -189,6 +228,7 @@ static void settings_displayShutdownTime(void) {
lcd.printNumber(systemSettings.ShutdownTime, 2);
}
static void settings_setTempF(void) {
systemSettings.temperatureInF = !systemSettings.temperatureInF;
}
@@ -199,6 +239,7 @@ static void settings_displayTempF(void) {
lcd.drawChar((systemSettings.temperatureInF) ? 'F' : 'C');
}
static void settings_setSensitivity(void) {
systemSettings.sensitivity++;
systemSettings.sensitivity = systemSettings.sensitivity % 10;
@@ -209,6 +250,7 @@ static void settings_displaySensitivity(void) {
lcd.printNumber(systemSettings.sensitivity, 1);
}
static void settings_setAdvancedSolderingScreens(void) {
systemSettings.detailedSoldering = !systemSettings.detailedSoldering;
}
@@ -220,6 +262,7 @@ static void settings_displayAdvancedSolderingScreens(void) {
: SettingFalseChar);
}
static void settings_setAdvancedIDLEScreens(void) {
systemSettings.detailedIDLE = !systemSettings.detailedIDLE;
}
@@ -231,6 +274,7 @@ static void settings_displayAdvancedIDLEScreens(void) {
: SettingFalseChar);
}
static void settings_setDisplayRotation(void) {
systemSettings.OrientationMode++;
systemSettings.OrientationMode = systemSettings.OrientationMode % 3;
@@ -255,6 +299,7 @@ static void settings_displayDisplayRotation(void) {
}
}
static void settings_setBoostModeEnabled(void) {
systemSettings.boostModeEnabled = !systemSettings.boostModeEnabled;
}
@@ -266,6 +311,7 @@ static void settings_displayBoostModeEnabled(void) {
: SettingFalseChar);
}
static void settings_setBoostTemp(void) {
systemSettings.BoostTemp += 10; // Go up 10 at a time
if (systemSettings.temperatureInF) {
@@ -284,6 +330,7 @@ static void settings_displayBoostTemp(void) {
lcd.printNumber(systemSettings.BoostTemp, 3);
}
static void settings_setAutomaticStartMode(void) {
systemSettings.autoStartMode++;
systemSettings.autoStartMode %= 2;
@@ -296,6 +343,7 @@ static void settings_displayAutomaticStartMode(void) {
: SettingFalseChar);
}
static void settings_setCoolingBlinkEnabled(void) {
systemSettings.coolingTempBlink = !systemSettings.coolingTempBlink;
}
@@ -307,81 +355,56 @@ static void settings_displayCoolingBlinkEnabled(void) {
: SettingFalseChar);
}
static void settings_setResetSettings(void) {
settingsResetRequest = !settingsResetRequest;
if(userConfirmation(SettingsResetWarning)) {
resetSettings();
lcd.setFont(0);
lcd.setCursor(0, 0);
lcd.print("RESET OK");
lcd.refresh();
waitForButtonPressOrTimeout(2000);
}
}
static void settings_displayResetSettings(void) {
printShortDescription(13, 7);
lcd.drawChar((settingsResetRequest) ? SettingTrueChar : SettingFalseChar);
}
static void settings_setCalibrate(void) {
// Calibrate the offset
// We split off here to confirm with the user
uint8_t maxOffset = strlen(SettingsCalibrationWarning) + 5;
uint32_t descriptionStart = HAL_GetTick();
lcd.setFont(0);
lcd.clearScreen();
lcd.setCursor(0, 0);
for (;;) {
int16_t descriptionOffset =
(((HAL_GetTick() - descriptionStart) / 150) % maxOffset);
lcd.setCursor(12 * (7 - descriptionOffset), 0);
lcd.print(SettingsCalibrationWarning);
ButtonState buttons = getButtonState();
switch (buttons) {
case BUTTON_F_SHORT: {
// User confirmed
// So we now perform the actual calculation
lcd.clearScreen();
lcd.setCursor(0, 0);
lcd.print(".....");
lcd.refresh();
setCalibrationOffset(0); // turn off the current offset
for (uint8_t i = 0; i < 20; i++) {
getTipRawTemp(1); // cycle through the filter a fair bit to ensure
// we're stable.
osDelay(20);
}
osDelay(100);
uint16_t rawTempC = tipMeasurementToC(getTipRawTemp(0));
// We now measure the current reported tip temperature
uint16_t handleTempC = getHandleTemperature() / 10;
// We now have an error between these that we want to store as the
// offset
rawTempC = rawTempC - handleTempC;
systemSettings.CalibrationOffset = rawTempC;
setCalibrationOffset(rawTempC); // store the error
osDelay(100);
return;
}
case BUTTON_BOTH:
case BUTTON_B_SHORT:
case BUTTON_F_LONG:
case BUTTON_B_LONG:
return;
case BUTTON_NONE:
break;
default:
break;
}
if(userConfirmation(SettingsCalibrationWarning)) {
//User confirmed
//So we now perform the actual calculation
lcd.clearScreen();
lcd.setCursor(0, 0);
lcd.print(".....");
lcd.refresh();
osDelay(50);
setCalibrationOffset(0); //turn off the current offset
for (uint8_t i = 0; i < 20; i++) {
getTipRawTemp(1); //cycle through the filter a fair bit to ensure we're stable.
osDelay(20);
}
osDelay(100);
uint16_t rawTempC = tipMeasurementToC(getTipRawTemp(0));
//We now measure the current reported tip temperature
uint16_t handleTempC = getHandleTemperature() / 10;
//We now have an error between these that we want to store as the offset
rawTempC = rawTempC - handleTempC;
systemSettings.CalibrationOffset = rawTempC;
setCalibrationOffset(rawTempC); //store the error
osDelay(100);
}
}
static void settings_displayCalibrate(void) { printShortDescription(12, 5); }
static void settings_displayCalibrate(void) {
printShortDescription(12, 5);
}
static void settings_setCalibrateVIN(void) {
// Jump to the voltage calibration subscreen
@@ -429,4 +452,6 @@ static void settings_setCalibrateVIN(void) {
}
}
static void settings_displayCalibrateVIN(void) { printShortDescription(14, 5); }
static void settings_displayCalibrateVIN(void) {
printShortDescription(14, 5);
}