1
0
forked from me/IronOS

Merge branch 'master' into alpine

This commit is contained in:
Ben V. Brown
2022-01-07 22:05:07 +11:00
committed by GitHub
4 changed files with 161 additions and 56 deletions

View File

@@ -1,7 +1,9 @@
#!/bin/sh #!/bin/bash
# TS100 Flasher for Linux by Alex Wigen (https://github.com/awigen) # TS100 Flasher for Linux by Alex Wigen (https://github.com/awigen)
# Jan 2021 - Update by Ysard (https://github.com/ysard)
DIR_TMP="/tmp/ts100" DIR_TMP="/tmp/ts100"
HEX_FIRMWARE="$DIR_TMP/ts100.hex"
usage() { usage() {
echo echo
@@ -69,13 +71,28 @@ mount_ts100() {
} }
umount_ts100() { umount_ts100() {
if ! mountpoint "$DIR_TMP" > /dev/null && sudo umount "$DIR_TMP"; then if ! (mountpoint "$DIR_TMP" > /dev/null && sudo umount "$DIR_TMP"); then
echo "Failed to unmount $DIR_TMP" echo "Failed to unmount $DIR_TMP"
exit 1 exit 1
fi fi
rmdir "$DIR_TMP" rmdir "$DIR_TMP"
} }
check_flash() {
RDY_FIRMWARE="${HEX_FIRMWARE%.*}.rdy"
ERR_FIRMWARE="${HEX_FIRMWARE%.*}.err"
if [ -f "$RDY_FIRMWARE" ]; then
echo -e "\e[92mFlash is done\e[0m"
echo "Disconnect the USB and power up the iron. You're good to go."
elif [ -f "$ERR_FIRMWARE" ]; then
echo -e "\e[91mFlash error; Please retry!\e[0m"
else
echo -e "\e[91mUNKNOWN error\e[0m"
echo "Flash result: "
ls "$DIR_TMP"/ts100*
fi
}
cleanup() { cleanup() {
enable_gautomount enable_gautomount
if [ -d "$DIR_TMP" ]; then if [ -d "$DIR_TMP" ]; then
@@ -109,7 +126,7 @@ echo "Found TS100 config disk device on $DEVICE"
mount_ts100 mount_ts100
echo "Mounted config disk drive, flashing..." echo "Mounted config disk drive, flashing..."
cp -v "$1" "$DIR_TMP/ts100.hex" cp -v "$1" "$HEX_FIRMWARE"
sync sync
echo "Waiting for TS100 to flash" echo "Waiting for TS100 to flash"
@@ -119,6 +136,5 @@ echo "Remounting config disk drive"
umount_ts100 umount_ts100
wait_for_ts100 wait_for_ts100
mount_ts100 mount_ts100
check_flash
echo "Flash result: "
ls "$DIR_TMP"/ts100*

View File

@@ -194,7 +194,7 @@
}, },
"LanguageSwitch": { "LanguageSwitch": {
"text2": ["Sprache:", " DE Deutsch"], "text2": ["Sprache:", " DE Deutsch"],
"desc": "" "desc": "Sprache der Firmware ändern"
}, },
"Brightness": { "Brightness": {
"text2": ["Bildschirm-", "kontrast"], "text2": ["Bildschirm-", "kontrast"],

View File

@@ -29,7 +29,7 @@ typedef struct {
uint16_t versionMarker; uint16_t versionMarker;
uint16_t length; // Length of valid bytes following uint16_t length; // Length of valid bytes following
uint16_t settingsValues[SettingsOptionsLength]; uint16_t settingsValues[SettingsOptionsLength];
// used to make this nicely "good enough" aligned to 32 butes to make driver code trivial // used to make this nicely "good enough" aligned to 32 bytes to make driver code trivial
uint32_t padding; uint32_t padding;
} systemSettingsType; } systemSettingsType;

View File

@@ -202,36 +202,23 @@ static void gui_solderingTempAdjust() {
break; break;
case BUTTON_B_LONG: case BUTTON_B_LONG:
if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration > PRESS_ACCEL_INTERVAL_MAX) { if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration > PRESS_ACCEL_INTERVAL_MAX) {
if (getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled)) { delta = -getSettingValue(SettingsOptions::TempChangeLongStep);
delta = getSettingValue(SettingsOptions::TempChangeLongStep);
} else
delta = -getSettingValue(SettingsOptions::TempChangeLongStep);
autoRepeatTimer = xTaskGetTickCount(); autoRepeatTimer = xTaskGetTickCount();
autoRepeatAcceleration += PRESS_ACCEL_STEP; autoRepeatAcceleration += PRESS_ACCEL_STEP;
} }
break; break;
case BUTTON_B_SHORT: case BUTTON_B_SHORT:
if (getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled)) { delta = -getSettingValue(SettingsOptions::TempChangeShortStep);
delta = getSettingValue(SettingsOptions::TempChangeShortStep);
} else
delta = -getSettingValue(SettingsOptions::TempChangeShortStep);
break; break;
case BUTTON_F_LONG: case BUTTON_F_LONG:
if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration > PRESS_ACCEL_INTERVAL_MAX) { if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration > PRESS_ACCEL_INTERVAL_MAX) {
if (getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled)) { delta = getSettingValue(SettingsOptions::TempChangeLongStep);
delta = -getSettingValue(SettingsOptions::TempChangeLongStep);
} else
delta = getSettingValue(SettingsOptions::TempChangeLongStep);
autoRepeatTimer = xTaskGetTickCount(); autoRepeatTimer = xTaskGetTickCount();
autoRepeatAcceleration += PRESS_ACCEL_STEP; autoRepeatAcceleration += PRESS_ACCEL_STEP;
} }
break; break;
case BUTTON_F_SHORT: case BUTTON_F_SHORT:
if (getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled)) { delta = getSettingValue(SettingsOptions::TempChangeShortStep);
delta = -getSettingValue(SettingsOptions::TempChangeShortStep);
} else
delta = getSettingValue(SettingsOptions::TempChangeShortStep);
break; break;
default: default:
break; break;
@@ -239,22 +226,31 @@ static void gui_solderingTempAdjust() {
if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration) < PRESS_ACCEL_INTERVAL_MIN) { if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration) < PRESS_ACCEL_INTERVAL_MIN) {
autoRepeatAcceleration = PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN; autoRepeatAcceleration = PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN;
} }
// constrain between 10-450 C // If buttons are flipped; flip the delta
uint16_t newTemp = getSettingValue(SettingsOptions::SolderingTemp); if (getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled)) {
newTemp += delta; delta = -delta;
if (getSettingValue(SettingsOptions::TemperatureInF)) {
if (newTemp > MAX_TEMP_F)
newTemp = MAX_TEMP_F;
if (newTemp < MIN_TEMP_F)
newTemp = MIN_TEMP_F;
} else {
if (newTemp > MAX_TEMP_C)
newTemp = MAX_TEMP_C;
if (newTemp < MIN_TEMP_C)
newTemp = MIN_TEMP_C;
} }
setSettingValue(SettingsOptions::SolderingTemp, newTemp); if (delta != 0) {
// constrain between the set temp limits, i.e. 10-450 C
int16_t newTemp = getSettingValue(SettingsOptions::SolderingTemp);
newTemp += delta;
// Round to nearest increment of delta
delta = abs(delta);
newTemp = (newTemp / delta) * delta;
if (getSettingValue(SettingsOptions::TemperatureInF)) {
if (newTemp > MAX_TEMP_F)
newTemp = MAX_TEMP_F;
if (newTemp < MIN_TEMP_F)
newTemp = MIN_TEMP_F;
} else {
if (newTemp > MAX_TEMP_C)
newTemp = MAX_TEMP_C;
if (newTemp < MIN_TEMP_C)
newTemp = MIN_TEMP_C;
}
setSettingValue(SettingsOptions::SolderingTemp, (uint16_t)newTemp);
}
if (xTaskGetTickCount() - lastChange > (TICKS_SECOND * 2)) if (xTaskGetTickCount() - lastChange > (TICKS_SECOND * 2))
return; // exit if user just doesn't press anything for a bit return; // exit if user just doesn't press anything for a bit
@@ -508,7 +504,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
case BUTTON_B_LONG: case BUTTON_B_LONG:
case BUTTON_F_SHORT: case BUTTON_F_SHORT:
case BUTTON_B_SHORT: case BUTTON_B_SHORT:
// Do nothing and display a lock warming // Do nothing and display a lock warning
warnUser(translatedString(Tr->WarningKeysLockedString), TICKS_SECOND / 2); warnUser(translatedString(Tr->WarningKeysLockedString), TICKS_SECOND / 2);
break; break;
default: default:
@@ -552,7 +548,15 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
} }
} }
// else we update the screen information // else we update the screen information
OLED::setCursor(0, 0); #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(50, 0);
} else {
OLED::setCursor(-1, 0);
}
OLED::clearScreen(); OLED::clearScreen();
// Draw in the screen details // Draw in the screen details
if (getSettingValue(SettingsOptions::DetailedSoldering)) { if (getSettingValue(SettingsOptions::DetailedSoldering)) {
@@ -560,23 +564,55 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
#ifndef NO_SLEEP_MODE #ifndef NO_SLEEP_MODE
if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) { if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) {
OLED::setCursor(47, 0); #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(32, 0);
} else {
OLED::setCursor(47, 0);
}
display_countdown(getSleepTimeout()); display_countdown(getSleepTimeout());
} }
#endif #endif
if (boostModeOn) { if (boostModeOn) {
OLED::setCursor(54, 8); #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(38, 8);
} else {
OLED::setCursor(55, 8);
}
OLED::print(SymbolPlus, FontStyle::SMALL); OLED::print(SymbolPlus, FontStyle::SMALL);
} }
OLED::setCursor(67, 0); #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(0, 0);
} else {
OLED::setCursor(67, 0);
}
OLED::printNumber(x10WattHistory.average() / 10, 2, FontStyle::SMALL); OLED::printNumber(x10WattHistory.average() / 10, 2, FontStyle::SMALL);
OLED::print(SymbolDot, FontStyle::SMALL); OLED::print(SymbolDot, FontStyle::SMALL);
OLED::printNumber(x10WattHistory.average() % 10, 1, FontStyle::SMALL); OLED::printNumber(x10WattHistory.average() % 10, 1, FontStyle::SMALL);
OLED::print(SymbolWatts, FontStyle::SMALL); OLED::print(SymbolWatts, FontStyle::SMALL);
OLED::setCursor(67, 8); #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(0, 8);
} else {
OLED::setCursor(67, 8);
}
printVoltage(); printVoltage();
OLED::print(SymbolVolts, FontStyle::SMALL); OLED::print(SymbolVolts, FontStyle::SMALL);
} else { } else {
@@ -649,9 +685,9 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
} else { } else {
setStatusLED(LED_HEATING); setStatusLED(LED_HEATING);
} }
// If we have tripped thermal runaway, turn off header and show warning // If we have tripped thermal runaway, turn off heater and show warning
if (heaterThermalRunaway) { if (heaterThermalRunaway) {
currentTempTargetDegC = 0; // heaater control off currentTempTargetDegC = 0; // heater control off
// TODO WARNING // TODO WARNING
warnUser(translatedString(Tr->WarningThermalRunaway), 10 * TICKS_SECOND); warnUser(translatedString(Tr->WarningThermalRunaway), 10 * TICKS_SECOND);
@@ -910,28 +946,83 @@ void startGUITask(void const *argument) {
} }
// Clear the lcd buffer // Clear the lcd buffer
OLED::clearScreen(); OLED::clearScreen();
OLED::setCursor(0, 0); #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(50, 0);
} else {
OLED::setCursor(-1, 0);
}
if (getSettingValue(SettingsOptions::DetailedIDLE)) { if (getSettingValue(SettingsOptions::DetailedIDLE)) {
if (isTipDisconnected()) { if (isTipDisconnected()) {
OLED::drawArea(0, 0, 41, 16, disconnectedTipIcon); #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
// in right handed mode we want to draw over the first part
OLED::drawArea(55, 0, 41, 16, disconnectedTipIconFlip);
} else {
OLED::drawArea(0, 0, 41, 16, disconnectedTipIcon);
}
#ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(-1, 0);
} else {
OLED::setCursor(42, 0);
}
uint32_t Vlt = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);
OLED::printNumber(Vlt / 10, 2, FontStyle::LARGE);
OLED::print(SymbolDot, FontStyle::LARGE);
OLED::printNumber(Vlt % 10, 1, FontStyle::LARGE);
#ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(48, 8);
} else {
OLED::setCursor(91, 8);
}
OLED::print(SymbolVolts, FontStyle::SMALL);
} else { } else {
if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300))) if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300)))
// Blink temp if setting enable and temp < 55° // Blink temp if setting enable and temp < 55°
// 1000 tick/sec // 1000 tick/sec
// OFF 300ms ON 700ms // OFF 300ms ON 700ms
gui_drawTipTemp(true, FontStyle::LARGE); // draw in the temp gui_drawTipTemp(true, FontStyle::LARGE); // draw in the temp
OLED::setCursor(73, 0); // top right #ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(6, 0);
} else {
OLED::setCursor(73, 0); // top right
}
OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::SMALL); // draw set temp OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::SMALL); // draw set temp
if (getSettingValue(SettingsOptions::TemperatureInF)) if (getSettingValue(SettingsOptions::TemperatureInF))
OLED::print(SymbolDegF, FontStyle::SMALL); OLED::print(SymbolDegF, FontStyle::SMALL);
else else
OLED::print(SymbolDegC, FontStyle::SMALL); OLED::print(SymbolDegC, FontStyle::SMALL);
#ifdef OLED_FLIP
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
#endif
OLED::setCursor(0, 8);
} else {
OLED::setCursor(67, 8); // bottom right
}
printVoltage(); // draw voltage then symbol (v)
OLED::print(SymbolVolts, FontStyle::SMALL);
} }
OLED::setCursor(67, 8); // bottom right
printVoltage(); // draw voltage then symbol (v)
OLED::print(SymbolVolts, FontStyle::SMALL);
} else { } else {
#ifdef OLED_FLIP #ifdef OLED_FLIP
if (!OLED::getRotation()) { if (!OLED::getRotation()) {
@@ -967,7 +1058,6 @@ void startGUITask(void const *argument) {
// in right handed mode we want to draw over the first part // in right handed mode we want to draw over the first part
OLED::fillArea(55, 0, 41, 16, 0); // clear the area for the temp OLED::fillArea(55, 0, 41, 16, 0); // clear the area for the temp
OLED::setCursor(56, 0); OLED::setCursor(56, 0);
} else { } else {
OLED::fillArea(0, 0, 41, 16, 0); // clear the area OLED::fillArea(0, 0, 41, 16, 0); // clear the area
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
@@ -987,7 +1077,6 @@ void startGUITask(void const *argument) {
#endif #endif
// in right handed mode we want to draw over the first part // in right handed mode we want to draw over the first part
OLED::drawArea(55, 0, 41, 16, disconnectedTipIconFlip); OLED::drawArea(55, 0, 41, 16, disconnectedTipIconFlip);
} else { } else {
OLED::drawArea(0, 0, 41, 16, disconnectedTipIcon); OLED::drawArea(0, 0, 41, 16, disconnectedTipIcon);
} }