Split DC input and QC from being an OR :)

This commit is contained in:
Ben V. Brown
2020-11-01 14:28:12 +11:00
parent 3aeab055bf
commit 3146343bbb
7 changed files with 241 additions and 359 deletions

View File

@@ -18,6 +18,7 @@
#endif #endif
#ifdef MODEL_TS100 #ifdef MODEL_TS100
#define POW_DC
#define ACCEL_MMA #define ACCEL_MMA
#define ACCEL_LIS #define ACCEL_LIS
#define TEMP_TMP36 #define TEMP_TMP36

View File

@@ -18,6 +18,8 @@
#ifdef MODEL_Pinecil #ifdef MODEL_Pinecil
#define POW_PD #define POW_PD
#define POW_QC #define POW_QC
#define POW_DC
#define POW_QC_20V
#define TEMP_TMP36 #define TEMP_TMP36
#define ACCEL_BMA #define ACCEL_BMA
#define HALL_SENSOR #define HALL_SENSOR

View File

@@ -53,6 +53,13 @@ uint8_t QC_DM_PulledDown() {
#endif #endif
void QC_resync() { void QC_resync() {
#ifdef POW_QC #ifdef POW_QC
seekQC((systemSettings.cutoutSetting) ? 120 : 90, systemSettings.voltageDiv); // Run the QC seek again if we have drifted too much uint8_t targetvoltage = 90;
if (systemSettings.QCIdealVoltage == 1) {
targetvoltage = 120;
} else if (systemSettings.QCIdealVoltage == 2) {
targetvoltage = 200;
}
seekQC(targetvoltage, systemSettings.voltageDiv); // Run the QC seek again if we have drifted too much
#endif #endif
} }

View File

@@ -19,15 +19,15 @@
* This struct must be a multiple of 2 bytes as it is saved / restored from * This struct must be a multiple of 2 bytes as it is saved / restored from
* flash in uint16_t chunks * flash in uint16_t chunks
*/ */
typedef struct typedef struct {
{
uint8_t version; // Used to track if a reset is needed on firmware upgrade uint8_t version; // Used to track if a reset is needed on firmware upgrade
uint16_t SolderingTemp; // current set point for the iron uint16_t SolderingTemp; // current set point for the iron
uint16_t SleepTemp; // temp to drop to in sleep uint16_t SleepTemp; // temp to drop to in sleep
uint8_t SleepTime; // minutes timeout to sleep uint8_t SleepTime; // minutes timeout to sleep
uint8_t cutoutSetting; // The voltage we cut out at for under voltage OR Power level for TS80 uint8_t minDCVoltageCells; // The voltage we cut out at for under voltage when powered by DC jack
uint8_t OrientationMode : 2; // If true we want to invert the display for lefties uint8_t QCIdealVoltage; // Desired QC3.0 voltage (9,12,20V)
uint8_t OrientationMode :2; // Selects between Auto,Right and left handed layouts
uint8_t sensitivity :4; // Sensitivity of accelerometer (5 bits) uint8_t sensitivity :4; // Sensitivity of accelerometer (5 bits)
uint8_t autoStartMode :2; // Should the unit automatically jump straight uint8_t autoStartMode :2; // Should the unit automatically jump straight
// into soldering mode when power is applied // into soldering mode when power is applied
@@ -68,7 +68,7 @@ extern volatile systemSettingsType systemSettings;
void saveSettings(); void saveSettings();
bool restoreSettings(); bool restoreSettings();
uint8_t lookupVoltageLevel(uint8_t level); uint8_t lookupVoltageLevel();
uint16_t lookupHallEffectThreshold(); uint16_t lookupHallEffectThreshold();
void resetSettings(); void resetSettings();

View File

@@ -42,11 +42,11 @@ bool restoreSettings() {
* 3=5S * 3=5S
* 4=6S * 4=6S
*/ */
uint8_t lookupVoltageLevel(uint8_t level) { uint8_t lookupVoltageLevel() {
if (level == 0) if (systemSettings.minDCVoltageCells == 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 (systemSettings.minDCVoltageCells * 33) + (33 * 2);
} }
void resetSettings() { void resetSettings() {
memset((void*) &systemSettings, 0, sizeof(systemSettingsType)); memset((void*) &systemSettings, 0, sizeof(systemSettingsType));
@@ -54,9 +54,9 @@ void resetSettings() {
systemSettings.SleepTime = SLEEP_TIME; // How many seconds/minutes we wait until going systemSettings.SleepTime = SLEEP_TIME; // How many seconds/minutes we wait until going
// to sleep - default 1 min // to sleep - default 1 min
systemSettings.SolderingTemp = SOLDERING_TEMP; // Default soldering temp is 320.0 C 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.minDCVoltageCells = CUT_OUT_SETTING; // default to no cut-off voltage
systemSettings.version = systemSettings.QCIdealVoltage = 0; // Default to 9V for QC3.0 Voltage
SETTINGSVERSION; // Store the version number to allow for easier upgrades systemSettings.version = SETTINGSVERSION; // Store the version number to allow for easier upgrades
systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen
systemSettings.detailedIDLE = DETAILED_IDLE; // Detailed idle screen (off for first time users) systemSettings.detailedIDLE = DETAILED_IDLE; // Detailed idle screen (off for first time users)
systemSettings.OrientationMode = ORIENTATION_MODE; // Default to automatic systemSettings.OrientationMode = ORIENTATION_MODE; // Default to automatic

View File

@@ -17,12 +17,13 @@
void gui_Menu(const menuitem *menu); void gui_Menu(const menuitem *menu);
#ifdef MODEL_TS100 #ifdef POW_DC
static bool settings_setInputVRange(void); static bool settings_setInputVRange(void);
static void settings_displayInputVRange(void); static void settings_displayInputVRange(void);
#else #endif
static bool settings_setInputPRange(void); #ifdef POW_QC
static void settings_displayInputPRange(void); static bool settings_setQCInputV(void);
static void settings_displayQCInputV(void);
#endif #endif
static bool settings_setSleepTemp(void); static bool settings_setSleepTemp(void);
static void settings_displaySleepTemp(void); static void settings_displaySleepTemp(void);
@@ -130,11 +131,11 @@ const menuitem rootSettingsMenu[]{
* Advanced Menu * Advanced Menu
* Exit * Exit
*/ */
#ifdef MODEL_TS100 #ifdef POW_DC
{(const char *)SettingsDescriptions[0], settings_setInputVRange, { (const char *) SettingsDescriptions[0], settings_setInputVRange, settings_displayInputVRange }, /*Voltage input*/
settings_displayInputVRange}, /*Voltage input*/ #endif
#else #ifdef POW_QC
{(const char *)SettingsDescriptions[19], settings_setInputPRange, settings_displayInputPRange}, /*Voltage input*/ { (const char *) SettingsDescriptions[19], settings_setQCInputV, settings_displayQCInputV }, /*Voltage input*/
#endif #endif
{ (const char *) NULL, settings_enterSolderingMenu, settings_displaySolderingMenu }, /*Soldering*/ { (const char *) NULL, settings_enterSolderingMenu, settings_displaySolderingMenu }, /*Soldering*/
{ (const char *) NULL, settings_enterPowerMenu, settings_displayPowerMenu }, /*Sleep Options Menu*/ { (const char *) NULL, settings_enterPowerMenu, settings_displayPowerMenu }, /*Sleep Options Menu*/
@@ -215,8 +216,7 @@ const menuitem advancedMenu[] = {
{ NULL, NULL, NULL } // end of menu marker. DO NOT REMOVE { NULL, NULL, NULL } // end of menu marker. DO NOT REMOVE
}; };
static void printShortDescriptionDoubleLine(uint32_t shortDescIndex) static void printShortDescriptionDoubleLine(uint32_t shortDescIndex) {
{
OLED::setFont(1); OLED::setFont(1);
OLED::setCharCursor(0, 0); OLED::setCharCursor(0, 0);
OLED::print(SettingsShortNames[shortDescIndex][0]); OLED::print(SettingsShortNames[shortDescIndex][0]);
@@ -231,8 +231,7 @@ static void printShortDescriptionDoubleLine(uint32_t shortDescIndex)
* @param cursorCharPosition Custom cursor char position to set after printing * @param cursorCharPosition Custom cursor char position to set after printing
* description. * description.
*/ */
static void printShortDescription(uint32_t shortDescIndex, uint16_t cursorCharPosition) static void printShortDescription(uint32_t shortDescIndex, uint16_t cursorCharPosition) {
{
// print short description (default single line, explicit double line) // print short description (default single line, explicit double line)
printShortDescriptionDoubleLine(shortDescIndex); printShortDescriptionDoubleLine(shortDescIndex);
@@ -243,8 +242,7 @@ static void printShortDescription(uint32_t shortDescIndex, uint16_t cursorCharPo
OLED::setCursor(OLED::getCursorX() - 2, 0); OLED::setCursor(OLED::getCursorX() - 2, 0);
} }
static int userConfirmation(const char *message) static int userConfirmation(const char *message) {
{
uint16_t messageWidth = FONT_12_WIDTH * (strlen(message) + 7); uint16_t messageWidth = FONT_12_WIDTH * (strlen(message) + 7);
uint32_t messageStart = xTaskGetTickCount(); uint32_t messageStart = xTaskGetTickCount();
@@ -253,13 +251,11 @@ static int userConfirmation(const char *message)
int16_t lastOffset = -1; int16_t lastOffset = -1;
bool lcdRefresh = true; bool lcdRefresh = true;
for (;;) for (;;) {
{
int16_t messageOffset = ((xTaskGetTickCount() - messageStart) / (systemSettings.descriptionScrollSpeed == 1 ? 10 : 20)); int16_t messageOffset = ((xTaskGetTickCount() - messageStart) / (systemSettings.descriptionScrollSpeed == 1 ? 10 : 20));
messageOffset %= messageWidth; // Roll around at the end messageOffset %= messageWidth; // Roll around at the end
if (lastOffset != messageOffset) if (lastOffset != messageOffset) {
{
OLED::clearScreen(); OLED::clearScreen();
//^ Rolling offset based on time //^ Rolling offset based on time
@@ -270,8 +266,7 @@ static int userConfirmation(const char *message)
} }
ButtonState buttons = getButtonState(); ButtonState buttons = getButtonState();
switch (buttons) switch (buttons) {
{
case BUTTON_F_SHORT: case BUTTON_F_SHORT:
// User confirmed // User confirmed
return 1; return 1;
@@ -286,8 +281,7 @@ static int userConfirmation(const char *message)
return 0; return 0;
} }
if (lcdRefresh) if (lcdRefresh) {
{
OLED::refresh(); OLED::refresh();
osDelay(40); osDelay(40);
lcdRefresh = false; lcdRefresh = false;
@@ -295,43 +289,39 @@ static int userConfirmation(const char *message)
} }
return 0; return 0;
} }
#ifdef MODEL_TS100 #ifdef POW_DC
static bool settings_setInputVRange(void) static bool settings_setInputVRange(void) {
{ systemSettings.minDCVoltageCells = (systemSettings.minDCVoltageCells + 1) % 5;
systemSettings.cutoutSetting = (systemSettings.cutoutSetting + 1) % 5; return systemSettings.minDCVoltageCells == 4;
if (systemSettings.cutoutSetting)
systemSettings.powerLimit = 0; // disable power limit if switching to a lipo power source
return systemSettings.cutoutSetting == 4;
} }
static void settings_displayInputVRange(void) static void settings_displayInputVRange(void) {
{
printShortDescription(0, 6); printShortDescription(0, 6);
if (systemSettings.cutoutSetting) if (systemSettings.minDCVoltageCells) {
{ OLED::printNumber(2 + systemSettings.minDCVoltageCells, 1);
OLED::printNumber(2 + systemSettings.cutoutSetting, 1);
OLED::print(SymbolCellCount); OLED::print(SymbolCellCount);
} } else {
else
{
OLED::print(SymbolDC); OLED::print(SymbolDC);
} }
} }
#endif
#ifdef POW_QC
static bool settings_setQCInputV(void) {
#ifdef POW_QC_20V
systemSettings.QCIdealVoltage = (systemSettings.QCIdealVoltage + 1) % 3;
return systemSettings.QCIdealVoltage == 2;
#else #else
static bool settings_setInputPRange(void) systemSettings.QCIdealVoltage = (systemSettings.QCIdealVoltage + 1) % 2;
{ return systemSettings.QCIdealVoltage == 1;
systemSettings.cutoutSetting = (systemSettings.cutoutSetting + 1) % 2; #endif
return false;
} }
static void settings_displayInputPRange(void) static void settings_displayQCInputV(void) {
{
printShortDescription(0, 5); printShortDescription(0, 5);
//0 = 9V, 1=12V (Fixed Voltages, these imply 1.5A limits) //0 = 9V, 1=12V, 2=20V (Fixed Voltages)
// These are only used in QC3.0 modes // These are only used in QC modes
switch (systemSettings.cutoutSetting) switch (systemSettings.QCIdealVoltage) {
{
case 0: case 0:
OLED::printNumber(9, 2); OLED::printNumber(9, 2);
OLED::print(SymbolVolts); OLED::print(SymbolVolts);
@@ -340,14 +330,17 @@ static void settings_displayInputPRange(void)
OLED::printNumber(12, 2); OLED::printNumber(12, 2);
OLED::print(SymbolVolts); OLED::print(SymbolVolts);
break; break;
case 2:
OLED::printNumber(20, 2);
OLED::print(SymbolVolts);
break;
default: default:
break; break;
} }
} }
#endif #endif
static bool settings_setSleepTemp(void) static bool settings_setSleepTemp(void) {
{
// If in C, 10 deg, if in F 20 deg // If in C, 10 deg, if in F 20 deg
#ifdef ENABLED_FAHRENHEIT_SUPPORT #ifdef ENABLED_FAHRENHEIT_SUPPORT
if (systemSettings.temperatureInF) if (systemSettings.temperatureInF)
@@ -367,17 +360,14 @@ static bool settings_setSleepTemp(void)
} }
} }
static void settings_displaySleepTemp(void) static void settings_displaySleepTemp(void) {
{
printShortDescription(1, 5); printShortDescription(1, 5);
OLED::printNumber(systemSettings.SleepTemp, 3); OLED::printNumber(systemSettings.SleepTemp, 3);
} }
static bool settings_setSleepTime(void) static bool settings_setSleepTime(void) {
{
systemSettings.SleepTime++; // Go up 1 minute at a time systemSettings.SleepTime++; // Go up 1 minute at a time
if (systemSettings.SleepTime >= 16) if (systemSettings.SleepTime >= 16) {
{
systemSettings.SleepTime = 0; // can't set time over 10 mins systemSettings.SleepTime = 0; // can't set time over 10 mins
} }
// Remember that ^ is the time of no movement // Remember that ^ is the time of no movement
@@ -386,30 +376,22 @@ static bool settings_setSleepTime(void)
return systemSettings.SleepTime == 15; return systemSettings.SleepTime == 15;
} }
static void settings_displaySleepTime(void) static void settings_displaySleepTime(void) {
{
printShortDescription(2, 5); printShortDescription(2, 5);
if (systemSettings.SleepTime == 0) if (systemSettings.SleepTime == 0) {
{
OLED::print(OffString); OLED::print(OffString);
} } else if (systemSettings.SleepTime < 6) {
else if (systemSettings.SleepTime < 6)
{
OLED::printNumber(systemSettings.SleepTime * 10, 2); OLED::printNumber(systemSettings.SleepTime * 10, 2);
OLED::print(SymbolSeconds); OLED::print(SymbolSeconds);
} } else {
else
{
OLED::printNumber(systemSettings.SleepTime - 5, 2); OLED::printNumber(systemSettings.SleepTime - 5, 2);
OLED::print(SymbolMinutes); OLED::print(SymbolMinutes);
} }
} }
static bool settings_setShutdownTime(void) static bool settings_setShutdownTime(void) {
{
systemSettings.ShutdownTime++; systemSettings.ShutdownTime++;
if (systemSettings.ShutdownTime > 60) if (systemSettings.ShutdownTime > 60) {
{
systemSettings.ShutdownTime = 0; // wrap to off systemSettings.ShutdownTime = 0; // wrap to off
} }
if (PCBVersion == 3) if (PCBVersion == 3)
@@ -417,15 +399,11 @@ static bool settings_setShutdownTime(void)
return systemSettings.ShutdownTime == 60; return systemSettings.ShutdownTime == 60;
} }
static void settings_displayShutdownTime(void) static void settings_displayShutdownTime(void) {
{
printShortDescription(3, 5); printShortDescription(3, 5);
if (systemSettings.ShutdownTime == 0) if (systemSettings.ShutdownTime == 0) {
{
OLED::print(OffString); OLED::print(OffString);
} } else {
else
{
OLED::printNumber(systemSettings.ShutdownTime, 2); OLED::printNumber(systemSettings.ShutdownTime, 2);
OLED::print(SymbolMinutes); OLED::print(SymbolMinutes);
} }
@@ -469,69 +447,57 @@ static void settings_displayTempF(void)
} }
#endif #endif
static bool settings_setSensitivity(void) static bool settings_setSensitivity(void) {
{
systemSettings.sensitivity++; systemSettings.sensitivity++;
systemSettings.sensitivity = systemSettings.sensitivity % 10; systemSettings.sensitivity = systemSettings.sensitivity % 10;
return systemSettings.sensitivity == 9; return systemSettings.sensitivity == 9;
} }
static void settings_displaySensitivity(void) static void settings_displaySensitivity(void) {
{
printShortDescription(4, 7); printShortDescription(4, 7);
OLED::printNumber(systemSettings.sensitivity, 1, false); OLED::printNumber(systemSettings.sensitivity, 1, false);
} }
static bool settings_setAdvancedSolderingScreens(void) static bool settings_setAdvancedSolderingScreens(void) {
{
systemSettings.detailedSoldering = !systemSettings.detailedSoldering; systemSettings.detailedSoldering = !systemSettings.detailedSoldering;
return false; return false;
} }
static void settings_displayAdvancedSolderingScreens(void) static void settings_displayAdvancedSolderingScreens(void) {
{
printShortDescription(14, 7); printShortDescription(14, 7);
OLED::drawCheckbox(systemSettings.detailedSoldering); OLED::drawCheckbox(systemSettings.detailedSoldering);
} }
static bool settings_setAdvancedIDLEScreens(void) static bool settings_setAdvancedIDLEScreens(void) {
{
systemSettings.detailedIDLE = !systemSettings.detailedIDLE; systemSettings.detailedIDLE = !systemSettings.detailedIDLE;
return false; return false;
} }
static void settings_displayAdvancedIDLEScreens(void) static void settings_displayAdvancedIDLEScreens(void) {
{
printShortDescription(6, 7); printShortDescription(6, 7);
OLED::drawCheckbox(systemSettings.detailedIDLE); OLED::drawCheckbox(systemSettings.detailedIDLE);
} }
static bool settings_setPowerLimit(void) static bool settings_setPowerLimit(void) {
{
systemSettings.powerLimit += POWER_LIMIT_STEPS; systemSettings.powerLimit += POWER_LIMIT_STEPS;
if (systemSettings.powerLimit > MAX_POWER_LIMIT) if (systemSettings.powerLimit > MAX_POWER_LIMIT)
systemSettings.powerLimit = 0; systemSettings.powerLimit = 0;
return systemSettings.powerLimit + POWER_LIMIT_STEPS > MAX_POWER_LIMIT; return systemSettings.powerLimit + POWER_LIMIT_STEPS > MAX_POWER_LIMIT;
} }
static void settings_displayPowerLimit(void) static void settings_displayPowerLimit(void) {
{
printShortDescription(20, 5); printShortDescription(20, 5);
if (systemSettings.powerLimit == 0) if (systemSettings.powerLimit == 0) {
{
OLED::print(OffString); OLED::print(OffString);
} } else {
else
{
OLED::printNumber(systemSettings.powerLimit, 2); OLED::printNumber(systemSettings.powerLimit, 2);
OLED::print(SymbolWatts); OLED::print(SymbolWatts);
} }
} }
static bool settings_setScrollSpeed(void) static bool settings_setScrollSpeed(void) {
{
if (systemSettings.descriptionScrollSpeed == 0) if (systemSettings.descriptionScrollSpeed == 0)
systemSettings.descriptionScrollSpeed = 1; systemSettings.descriptionScrollSpeed = 1;
else else
@@ -539,18 +505,15 @@ static bool settings_setScrollSpeed(void)
return false; return false;
} }
static void settings_displayScrollSpeed(void) static void settings_displayScrollSpeed(void) {
{
printShortDescription(15, 7); printShortDescription(15, 7);
OLED::print((systemSettings.descriptionScrollSpeed) ? SettingFastChar : SettingSlowChar); OLED::print((systemSettings.descriptionScrollSpeed) ? SettingFastChar : SettingSlowChar);
} }
static bool settings_setDisplayRotation(void) static bool settings_setDisplayRotation(void) {
{
systemSettings.OrientationMode++; systemSettings.OrientationMode++;
systemSettings.OrientationMode = systemSettings.OrientationMode % 3; systemSettings.OrientationMode = systemSettings.OrientationMode % 3;
switch (systemSettings.OrientationMode) switch (systemSettings.OrientationMode) {
{
case 0: case 0:
OLED::setRotation(false); OLED::setRotation(false);
break; break;
@@ -566,12 +529,10 @@ static bool settings_setDisplayRotation(void)
return systemSettings.OrientationMode == 2; return systemSettings.OrientationMode == 2;
} }
static void settings_displayDisplayRotation(void) static void settings_displayDisplayRotation(void) {
{
printShortDescription(7, 7); printShortDescription(7, 7);
switch (systemSettings.OrientationMode) switch (systemSettings.OrientationMode) {
{
case 0: case 0:
OLED::print(SettingRightChar); OLED::print(SettingRightChar);
break; break;
@@ -587,8 +548,7 @@ static void settings_displayDisplayRotation(void)
} }
} }
static bool settings_setBoostTemp(void) static bool settings_setBoostTemp(void) {
{
#ifdef ENABLED_FAHRENHEIT_SUPPORT #ifdef ENABLED_FAHRENHEIT_SUPPORT
if (systemSettings.temperatureInF) if (systemSettings.temperatureInF)
{ {
@@ -610,48 +570,37 @@ static bool settings_setBoostTemp(void)
else else
#endif #endif
{ {
if (systemSettings.BoostTemp == 0) if (systemSettings.BoostTemp == 0) {
{
systemSettings.BoostTemp = 250; // loop back at 250 systemSettings.BoostTemp = 250; // loop back at 250
} } else {
else
{
systemSettings.BoostTemp += 10; // Go up 10C at a time systemSettings.BoostTemp += 10; // Go up 10C at a time
} }
if (systemSettings.BoostTemp > 450) if (systemSettings.BoostTemp > 450) {
{
systemSettings.BoostTemp = 0; //Go to off state systemSettings.BoostTemp = 0; //Go to off state
} }
return systemSettings.BoostTemp == 450; return systemSettings.BoostTemp == 450;
} }
} }
static void settings_displayBoostTemp(void) static void settings_displayBoostTemp(void) {
{
printShortDescription(8, 5); printShortDescription(8, 5);
if (systemSettings.BoostTemp) if (systemSettings.BoostTemp) {
{
OLED::printNumber(systemSettings.BoostTemp, 3); OLED::printNumber(systemSettings.BoostTemp, 3);
} } else {
else
{
OLED::print(OffString); OLED::print(OffString);
} }
} }
static bool settings_setAutomaticStartMode(void) static bool settings_setAutomaticStartMode(void) {
{
systemSettings.autoStartMode++; systemSettings.autoStartMode++;
systemSettings.autoStartMode %= 4; systemSettings.autoStartMode %= 4;
return systemSettings.autoStartMode == 3; return systemSettings.autoStartMode == 3;
} }
static void settings_displayAutomaticStartMode(void) static void settings_displayAutomaticStartMode(void) {
{
printShortDescription(9, 7); printShortDescription(9, 7);
switch (systemSettings.autoStartMode) switch (systemSettings.autoStartMode) {
{
case 0: case 0:
OLED::print(SettingStartNoneChar); OLED::print(SettingStartNoneChar);
break; break;
@@ -670,19 +619,16 @@ static void settings_displayAutomaticStartMode(void)
} }
} }
static bool settings_setLockingMode(void) static bool settings_setLockingMode(void) {
{
systemSettings.lockingMode++; systemSettings.lockingMode++;
systemSettings.lockingMode %= 3; systemSettings.lockingMode %= 3;
return systemSettings.lockingMode == 2; return systemSettings.lockingMode == 2;
} }
static void settings_displayLockingMode(void) static void settings_displayLockingMode(void) {
{
printShortDescription(26, 7); printShortDescription(26, 7);
switch (systemSettings.lockingMode) switch (systemSettings.lockingMode) {
{
case 0: case 0:
OLED::print (SettingLockDisableChar); OLED::print (SettingLockDisableChar);
break; break;
@@ -698,23 +644,19 @@ static void settings_displayLockingMode(void)
} }
} }
static bool settings_setCoolingBlinkEnabled(void) static bool settings_setCoolingBlinkEnabled(void) {
{
systemSettings.coolingTempBlink = !systemSettings.coolingTempBlink; systemSettings.coolingTempBlink = !systemSettings.coolingTempBlink;
return false; return false;
} }
static void settings_displayCoolingBlinkEnabled(void) static void settings_displayCoolingBlinkEnabled(void) {
{
printShortDescription(10, 7); printShortDescription(10, 7);
OLED::drawCheckbox(systemSettings.coolingTempBlink); OLED::drawCheckbox(systemSettings.coolingTempBlink);
} }
static bool settings_setResetSettings(void) static bool settings_setResetSettings(void) {
{ if (userConfirmation(SettingsResetWarning)) {
if (userConfirmation(SettingsResetWarning))
{
resetSettings(); resetSettings();
OLED::setFont(0); OLED::setFont(0);
@@ -727,23 +669,19 @@ static bool settings_setResetSettings(void)
return false; return false;
} }
static void settings_displayResetSettings(void) static void settings_displayResetSettings(void) {
{
printShortDescription(12, 7); printShortDescription(12, 7);
} }
static void setTipOffset() static void setTipOffset() {
{
systemSettings.CalibrationOffset = 0; systemSettings.CalibrationOffset = 0;
// If the thermo-couple at the end of the tip, and the handle are at // If the thermo-couple at the end of the tip, and the handle are at
// equilibrium, then the output should be zero, as there is no temperature // equilibrium, then the output should be zero, as there is no temperature
// differential. // differential.
while (systemSettings.CalibrationOffset == 0) while (systemSettings.CalibrationOffset == 0) {
{
uint32_t offset = 0; uint32_t offset = 0;
for (uint8_t i = 0; i < 16; i++) for (uint8_t i = 0; i < 16; i++) {
{
offset += getTipRawTemp(1); offset += getTipRawTemp(1);
// cycle through the filter a fair bit to ensure we're stable. // cycle through the filter a fair bit to ensure we're stable.
OLED::clearScreen(); OLED::clearScreen();
@@ -766,11 +704,9 @@ static void setTipOffset()
//Provide the user the option to tune their own tip if custom is selected //Provide the user the option to tune their own tip if custom is selected
//If not only do single point tuning as per usual //If not only do single point tuning as per usual
static bool settings_setCalibrate(void) static bool settings_setCalibrate(void) {
{
if (userConfirmation(SettingsCalibrationWarning)) if (userConfirmation(SettingsCalibrationWarning)) {
{
// User confirmed // User confirmed
// So we now perform the actual calculation // So we now perform the actual calculation
setTipOffset(); setTipOffset();
@@ -778,20 +714,17 @@ static bool settings_setCalibrate(void)
return false; return false;
} }
static void settings_displayCalibrate(void) static void settings_displayCalibrate(void) {
{
printShortDescription(11, 5); printShortDescription(11, 5);
} }
static bool settings_setCalibrateVIN(void) static bool settings_setCalibrateVIN(void) {
{
// Jump to the voltage calibration subscreen // Jump to the voltage calibration subscreen
OLED::setFont(0); OLED::setFont(0);
OLED::clearScreen(); OLED::clearScreen();
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
for (;;) for (;;) {
{
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
OLED::printNumber(getInputVoltageX10(systemSettings.voltageDiv, 0) / 10, 2); OLED::printNumber(getInputVoltageX10(systemSettings.voltageDiv, 0) / 10, 2);
OLED::print(SymbolDot); OLED::print(SymbolDot);
@@ -799,8 +732,7 @@ static bool settings_setCalibrateVIN(void)
OLED::print(SymbolVolts); OLED::print(SymbolVolts);
ButtonState buttons = getButtonState(); ButtonState buttons = getButtonState();
switch (buttons) switch (buttons) {
{
case BUTTON_F_SHORT: case BUTTON_F_SHORT:
systemSettings.voltageDiv++; systemSettings.voltageDiv++;
break; break;
@@ -837,12 +769,9 @@ static bool settings_setCalibrateVIN(void)
systemSettings.voltageDiv = 900; systemSettings.voltageDiv = 900;
} }
#else #else
if (systemSettings.voltageDiv < 360) if (systemSettings.voltageDiv < 360) {
{
systemSettings.voltageDiv = 360; systemSettings.voltageDiv = 360;
} } else if (systemSettings.voltageDiv > 520) {
else if (systemSettings.voltageDiv > 520)
{
systemSettings.voltageDiv = 520; systemSettings.voltageDiv = 520;
} }
#endif #endif
@@ -850,21 +779,18 @@ static bool settings_setCalibrateVIN(void)
return false; return false;
} }
static bool settings_setTipGain(void) static bool settings_setTipGain(void) {
{
OLED::setFont(0); OLED::setFont(0);
OLED::clearScreen(); OLED::clearScreen();
for (;;) for (;;) {
{
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
OLED::printNumber(systemSettings.TipGain / 10, 2); OLED::printNumber(systemSettings.TipGain / 10, 2);
OLED::print(SymbolDot); OLED::print(SymbolDot);
OLED::printNumber(systemSettings.TipGain % 10, 1); OLED::printNumber(systemSettings.TipGain % 10, 1);
ButtonState buttons = getButtonState(); ButtonState buttons = getButtonState();
switch (buttons) switch (buttons) {
{
case BUTTON_F_SHORT: case BUTTON_F_SHORT:
systemSettings.TipGain -= 1; systemSettings.TipGain -= 1;
break; break;
@@ -887,94 +813,75 @@ static bool settings_setTipGain(void)
osDelay(40); osDelay(40);
// Cap to sensible values // Cap to sensible values
if (systemSettings.TipGain < 150) if (systemSettings.TipGain < 150) {
{
systemSettings.TipGain = 150; systemSettings.TipGain = 150;
} } else if (systemSettings.TipGain > 300) {
else if (systemSettings.TipGain > 300)
{
systemSettings.TipGain = 300; systemSettings.TipGain = 300;
} }
} }
return false; return false;
} }
static void settings_displayTipGain(void) static void settings_displayTipGain(void) {
{
printShortDescription(25, 5); printShortDescription(25, 5);
} }
static bool settings_setReverseButtonTempChangeEnabled(void) static bool settings_setReverseButtonTempChangeEnabled(void) {
{
systemSettings.ReverseButtonTempChangeEnabled = !systemSettings.ReverseButtonTempChangeEnabled; systemSettings.ReverseButtonTempChangeEnabled = !systemSettings.ReverseButtonTempChangeEnabled;
return false; return false;
} }
static void settings_displayReverseButtonTempChangeEnabled(void) static void settings_displayReverseButtonTempChangeEnabled(void) {
{
printShortDescription(21, 7); printShortDescription(21, 7);
OLED::drawCheckbox(systemSettings.ReverseButtonTempChangeEnabled); OLED::drawCheckbox(systemSettings.ReverseButtonTempChangeEnabled);
} }
static bool settings_setTempChangeShortStep(void) static bool settings_setTempChangeShortStep(void) {
{
systemSettings.TempChangeShortStep += TEMP_CHANGE_SHORT_STEP; systemSettings.TempChangeShortStep += TEMP_CHANGE_SHORT_STEP;
if (systemSettings.TempChangeShortStep > TEMP_CHANGE_SHORT_STEP_MAX) if (systemSettings.TempChangeShortStep > TEMP_CHANGE_SHORT_STEP_MAX) {
{
systemSettings.TempChangeShortStep = TEMP_CHANGE_SHORT_STEP; // loop back at TEMP_CHANGE_SHORT_STEP_MAX systemSettings.TempChangeShortStep = TEMP_CHANGE_SHORT_STEP; // loop back at TEMP_CHANGE_SHORT_STEP_MAX
} }
return systemSettings.TempChangeShortStep == TEMP_CHANGE_SHORT_STEP_MAX; return systemSettings.TempChangeShortStep == TEMP_CHANGE_SHORT_STEP_MAX;
} }
static void settings_displayTempChangeShortStep(void) static void settings_displayTempChangeShortStep(void) {
{
printShortDescription(22, 6); printShortDescription(22, 6);
OLED::printNumber(systemSettings.TempChangeShortStep, 2); OLED::printNumber(systemSettings.TempChangeShortStep, 2);
} }
static bool settings_setTempChangeLongStep(void) static bool settings_setTempChangeLongStep(void) {
{
systemSettings.TempChangeLongStep += TEMP_CHANGE_LONG_STEP; systemSettings.TempChangeLongStep += TEMP_CHANGE_LONG_STEP;
if (systemSettings.TempChangeLongStep > TEMP_CHANGE_LONG_STEP_MAX) if (systemSettings.TempChangeLongStep > TEMP_CHANGE_LONG_STEP_MAX) {
{
systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP; // loop back at TEMP_CHANGE_LONG_STEP_MAX systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP; // loop back at TEMP_CHANGE_LONG_STEP_MAX
} }
return systemSettings.TempChangeLongStep == TEMP_CHANGE_LONG_STEP_MAX; return systemSettings.TempChangeLongStep == TEMP_CHANGE_LONG_STEP_MAX;
} }
static void settings_displayTempChangeLongStep(void) static void settings_displayTempChangeLongStep(void) {
{
printShortDescription(23, 6); printShortDescription(23, 6);
OLED::printNumber(systemSettings.TempChangeLongStep, 2); OLED::printNumber(systemSettings.TempChangeLongStep, 2);
} }
static bool settings_setPowerPulse(void) static bool settings_setPowerPulse(void) {
{
systemSettings.KeepAwakePulse += POWER_PULSE_INCREMENT; systemSettings.KeepAwakePulse += POWER_PULSE_INCREMENT;
systemSettings.KeepAwakePulse %= POWER_PULSE_MAX; systemSettings.KeepAwakePulse %= POWER_PULSE_MAX;
return systemSettings.KeepAwakePulse == POWER_PULSE_MAX - 1; return systemSettings.KeepAwakePulse == POWER_PULSE_MAX - 1;
} }
static void settings_displayPowerPulse(void) static void settings_displayPowerPulse(void) {
{
printShortDescription(24, 5); printShortDescription(24, 5);
if (systemSettings.KeepAwakePulse) if (systemSettings.KeepAwakePulse) {
{
OLED::printNumber(systemSettings.KeepAwakePulse / 10, 1); OLED::printNumber(systemSettings.KeepAwakePulse / 10, 1);
OLED::print(SymbolDot); OLED::print(SymbolDot);
OLED::printNumber(systemSettings.KeepAwakePulse % 10, 1); OLED::printNumber(systemSettings.KeepAwakePulse % 10, 1);
} } else {
else
{
OLED::print(OffString); OLED::print(OffString);
} }
} }
#ifdef HALL_SENSOR #ifdef HALL_SENSOR
static void settings_displayHallEffect(void) static void settings_displayHallEffect(void) {
{
printShortDescription(26, 7); printShortDescription(26, 7);
switch (systemSettings.hallEffectSensitivity) switch (systemSettings.hallEffectSensitivity) {
{
case 1: case 1:
OLED::print(SettingSensitivityLow); OLED::print(SettingSensitivityLow);
break; break;
@@ -990,8 +897,7 @@ static void settings_displayHallEffect(void)
break; break;
} }
} }
static bool settings_setHallEffect(void) static bool settings_setHallEffect(void) {
{
//To keep life simpler for now, we have a few preset sensitivity levels //To keep life simpler for now, we have a few preset sensitivity levels
// Off, Low, Medium, High // Off, Low, Medium, High
systemSettings.hallEffectSensitivity++; systemSettings.hallEffectSensitivity++;
@@ -999,8 +905,7 @@ static bool settings_setHallEffect(void)
return systemSettings.hallEffectSensitivity == 3; return systemSettings.hallEffectSensitivity == 3;
} }
#endif #endif
static void displayMenu(size_t index) static void displayMenu(size_t index) {
{
// Call into the menu // Call into the menu
OLED::setFont(1); OLED::setFont(1);
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
@@ -1012,49 +917,39 @@ static void displayMenu(size_t index)
OLED::drawArea(96 - 16 - 2, 0, 16, 16, (&SettingsMenuIcons[(16 * 2) * index])); OLED::drawArea(96 - 16 - 2, 0, 16, 16, (&SettingsMenuIcons[(16 * 2) * index]));
} }
static void settings_displayCalibrateVIN(void) static void settings_displayCalibrateVIN(void) {
{
printShortDescription(13, 5); printShortDescription(13, 5);
} }
static void settings_displaySolderingMenu(void) static void settings_displaySolderingMenu(void) {
{
displayMenu(0); displayMenu(0);
} }
static bool settings_enterSolderingMenu(void) static bool settings_enterSolderingMenu(void) {
{
gui_Menu(solderingMenu); gui_Menu(solderingMenu);
return false; return false;
} }
static void settings_displayPowerMenu(void) static void settings_displayPowerMenu(void) {
{
displayMenu(1); displayMenu(1);
} }
static bool settings_enterPowerMenu(void) static bool settings_enterPowerMenu(void) {
{
gui_Menu(PowerMenu); gui_Menu(PowerMenu);
return false; return false;
} }
static void settings_displayUIMenu(void) static void settings_displayUIMenu(void) {
{
displayMenu(2); displayMenu(2);
} }
static bool settings_enterUIMenu(void) static bool settings_enterUIMenu(void) {
{
gui_Menu(UIMenu); gui_Menu(UIMenu);
return false; return false;
} }
static void settings_displayAdvancedMenu(void) static void settings_displayAdvancedMenu(void) {
{
displayMenu(3); displayMenu(3);
} }
static bool settings_enterAdvancedMenu(void) static bool settings_enterAdvancedMenu(void) {
{
gui_Menu(advancedMenu); gui_Menu(advancedMenu);
return false; return false;
} }
void gui_Menu(const menuitem *menu) void gui_Menu(const menuitem *menu) {
{
// Draw the settings menu and provide iteration support etc // Draw the settings menu and provide iteration support etc
uint8_t currentScreen = 0; uint8_t currentScreen = 0;
uint32_t autoRepeatTimer = 0; uint32_t autoRepeatTimer = 0;
@@ -1070,14 +965,12 @@ void gui_Menu(const menuitem *menu)
bool scrollBlink = false; bool scrollBlink = false;
bool lastValue = false; bool lastValue = false;
for (uint8_t i = 0; menu[i].draw != NULL; i++) for (uint8_t i = 0; menu[i].draw != NULL; i++) {
{
scrollContentSize += 1; scrollContentSize += 1;
} }
// Animated menu opening. // Animated menu opening.
if (menu[currentScreen].draw != NULL) if (menu[currentScreen].draw != NULL) {
{
// This menu is drawn in a secondary framebuffer. // This menu is drawn in a secondary framebuffer.
// Then we play a transition from the current primary // Then we play a transition from the current primary
// framebuffer to the new buffer. // framebuffer to the new buffer.
@@ -1091,14 +984,12 @@ void gui_Menu(const menuitem *menu)
OLED::transitionSecondaryFramebuffer(true); OLED::transitionSecondaryFramebuffer(true);
} }
while ((menu[currentScreen].draw != NULL) && earlyExit == false) while ((menu[currentScreen].draw != NULL) && earlyExit == false) {
{
OLED::setFont(0); OLED::setFont(0);
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
// If the user has hesitated for >=3 seconds, show the long text // If the user has hesitated for >=3 seconds, show the long text
// Otherwise "draw" the option // Otherwise "draw" the option
if ((xTaskGetTickCount() - lastButtonTime < 3000) || menu[currentScreen].description == NULL) if ((xTaskGetTickCount() - lastButtonTime < 3000) || menu[currentScreen].description == NULL) {
{
OLED::clearScreen(); OLED::clearScreen();
menu[currentScreen].draw(); menu[currentScreen].draw();
uint8_t indicatorHeight = OLED_HEIGHT / scrollContentSize; uint8_t indicatorHeight = OLED_HEIGHT / scrollContentSize;
@@ -1109,9 +1000,7 @@ void gui_Menu(const menuitem *menu)
OLED::drawScrollIndicator(position, indicatorHeight); OLED::drawScrollIndicator(position, indicatorHeight);
lastOffset = -1; lastOffset = -1;
lcdRefresh = true; lcdRefresh = true;
} } else {
else
{
// Draw description // Draw description
if (descriptionStart == 0) if (descriptionStart == 0)
descriptionStart = xTaskGetTickCount(); descriptionStart = xTaskGetTickCount();
@@ -1120,8 +1009,7 @@ void gui_Menu(const menuitem *menu)
FONT_12_WIDTH * (strlen(menu[currentScreen].description) + 7); FONT_12_WIDTH * (strlen(menu[currentScreen].description) + 7);
int16_t descriptionOffset = ((xTaskGetTickCount() - descriptionStart) / (systemSettings.descriptionScrollSpeed == 1 ? 10 : 20)); int16_t descriptionOffset = ((xTaskGetTickCount() - descriptionStart) / (systemSettings.descriptionScrollSpeed == 1 ? 10 : 20));
descriptionOffset %= descriptionWidth; // Roll around at the end descriptionOffset %= descriptionWidth; // Roll around at the end
if (lastOffset != descriptionOffset) if (lastOffset != descriptionOffset) {
{
OLED::clearScreen(); OLED::clearScreen();
OLED::setCursor((OLED_WIDTH - descriptionOffset), 0); OLED::setCursor((OLED_WIDTH - descriptionOffset), 0);
OLED::print(menu[currentScreen].description); OLED::print(menu[currentScreen].description);
@@ -1132,29 +1020,24 @@ void gui_Menu(const menuitem *menu)
ButtonState buttons = getButtonState(); ButtonState buttons = getButtonState();
if (buttons != lastButtonState) if (buttons != lastButtonState) {
{
autoRepeatAcceleration = 0; autoRepeatAcceleration = 0;
lastButtonState = buttons; lastButtonState = buttons;
} }
switch (buttons) switch (buttons) {
{
case BUTTON_BOTH: case BUTTON_BOTH:
earlyExit = true; // will make us exit next loop earlyExit = true; // will make us exit next loop
descriptionStart = 0; descriptionStart = 0;
break; break;
case BUTTON_F_SHORT: case BUTTON_F_SHORT:
// increment // increment
if (descriptionStart == 0) if (descriptionStart == 0) {
{ if (menu[currentScreen].incrementHandler != NULL) {
if (menu[currentScreen].incrementHandler != NULL)
{
enterGUIMenu = false; enterGUIMenu = false;
lastValue = menu[currentScreen].incrementHandler(); lastValue = menu[currentScreen].incrementHandler();
if (enterGUIMenu) if (enterGUIMenu) {
{
OLED::useSecondaryFramebuffer(true); OLED::useSecondaryFramebuffer(true);
OLED::setFont(0); OLED::setFont(0);
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
@@ -1164,28 +1047,22 @@ void gui_Menu(const menuitem *menu)
OLED::transitionSecondaryFramebuffer(false); OLED::transitionSecondaryFramebuffer(false);
} }
enterGUIMenu = true; enterGUIMenu = true;
} } else {
else
{
earlyExit = true; earlyExit = true;
} }
} } else
else
descriptionStart = 0; descriptionStart = 0;
break; break;
case BUTTON_B_SHORT: case BUTTON_B_SHORT:
if (descriptionStart == 0) if (descriptionStart == 0) {
{
currentScreen++; currentScreen++;
lastValue = false; lastValue = false;
} } else
else
descriptionStart = 0; descriptionStart = 0;
break; break;
case BUTTON_F_LONG: case BUTTON_F_LONG:
if ((int) (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration) > if ((int) (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration) >
PRESS_ACCEL_INTERVAL_MAX) PRESS_ACCEL_INTERVAL_MAX) {
{
if ((lastValue = menu[currentScreen].incrementHandler())) if ((lastValue = menu[currentScreen].incrementHandler()))
autoRepeatTimer = 1000; autoRepeatTimer = 1000;
else else
@@ -1200,8 +1077,7 @@ void gui_Menu(const menuitem *menu)
break; break;
case BUTTON_B_LONG: case BUTTON_B_LONG:
if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration > if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration >
PRESS_ACCEL_INTERVAL_MAX) PRESS_ACCEL_INTERVAL_MAX) {
{
currentScreen++; currentScreen++;
autoRepeatTimer = xTaskGetTickCount(); autoRepeatTimer = xTaskGetTickCount();
descriptionStart = 0; descriptionStart = 0;
@@ -1215,20 +1091,17 @@ void gui_Menu(const menuitem *menu)
} }
if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration) < if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration) <
PRESS_ACCEL_INTERVAL_MIN) PRESS_ACCEL_INTERVAL_MIN) {
{
autoRepeatAcceleration = autoRepeatAcceleration =
PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN; PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN;
} }
if (lcdRefresh) if (lcdRefresh) {
{
OLED::refresh(); // update the LCD OLED::refresh(); // update the LCD
osDelay(40); osDelay(40);
lcdRefresh = false; lcdRefresh = false;
} }
if ((xTaskGetTickCount() - lastButtonTime) > (1000 * 30)) if ((xTaskGetTickCount() - lastButtonTime) > (1000 * 30)) {
{
// If user has not pressed any buttons in 30 seconds, exit back a menu layer // If user has not pressed any buttons in 30 seconds, exit back a menu layer
// This will trickle the user back to the main screen eventually // This will trickle the user back to the main screen eventually
earlyExit = true; earlyExit = true;
@@ -1237,8 +1110,7 @@ void gui_Menu(const menuitem *menu)
} }
} }
void enterSettingsMenu() void enterSettingsMenu() {
{
gui_Menu(rootSettingsMenu); // Call the root menu gui_Menu(rootSettingsMenu); // Call the root menu
saveSettings(); saveSettings();
} }

View File

@@ -87,7 +87,7 @@
#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
#define CUT_OUT_SETTING 0 // default to no cut-off voltage (or 18W for TS80) #define CUT_OUT_SETTING 0 // default to no cut-off voltage
#define TEMPERATURE_INF 0 // default to 0 #define TEMPERATURE_INF 0 // default to 0
#define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow #define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow