From dbdc0d1ef110387b1ffa0b1bb9f7f97675b153e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 23 Apr 2023 17:50:02 +0200 Subject: [PATCH 01/19] add settings for soldering profile --- Translations/translation_EN.json | 56 +++++++++++ Translations/translations_definitions.json | 84 ++++++++++++++++ source/Core/Inc/Settings.h | 16 ++- source/Core/Inc/Translation.h | 14 +++ source/Core/Src/Settings.cpp | 14 +++ source/Core/Src/settingsGUI.cpp | 108 +++++++++++++++++++++ 6 files changed, 291 insertions(+), 1 deletion(-) diff --git a/Translations/translation_EN.json b/Translations/translation_EN.json index b071d01db7..1c4fb67b8d 100644 --- a/Translations/translation_EN.json +++ b/Translations/translation_EN.json @@ -143,6 +143,62 @@ "displayText": "Allow locking\nbuttons", "description": "While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (s=seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Motion\nsensitivity", "description": "0=off | 1=least sensitive | ... | 9=most sensitive" diff --git a/Translations/translations_definitions.json b/Translations/translations_definitions.json index 9548b7df37..3ab7177a16 100644 --- a/Translations/translations_definitions.json +++ b/Translations/translations_definitions.json @@ -253,6 +253,90 @@ "maxLen2": 13, "description": "If locking the buttons against accidental presses is enabled." }, + { + "id": "ProfilePhases", + "maxLen": 6, + "maxLen2": 13, + "description": "Enable / set the number of phases for the soldering profile." + }, + { + "id": "ProfilePreheatTemp", + "maxLen": 6, + "maxLen2": 13, + "description": "For the soldering profile, preheat to this temperature before proceeding with phase 1." + }, + { + "id": "ProfilePreheatSpeed", + "maxLen": 6, + "maxLen2": 13, + "description": "How fast the temperature is allowed to rise during the heatup phase of the soldering profile." + }, + { + "id": "ProfilePhase1Temp", + "maxLen": 6, + "maxLen2": 13, + "description": "Target temperature for the end of phase 1 of the soldering profile." + }, + { + "id": "ProfilePhase1Duration", + "maxLen": 6, + "maxLen2": 13, + "description": "Duration of phase 1 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + }, + { + "id": "ProfilePhase2Temp", + "maxLen": 6, + "maxLen2": 13, + "description": "Target temperature for the end of phase 2 of the soldering profile." + }, + { + "id": "ProfilePhase2Duration", + "maxLen": 6, + "maxLen2": 13, + "description": "Duration of phase 2 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + }, + { + "id": "ProfilePhase3Temp", + "maxLen": 6, + "maxLen2": 13, + "description": "Target temperature for the end of phase 3 of the soldering profile." + }, + { + "id": "ProfilePhase3Duration", + "maxLen": 6, + "maxLen2": 13, + "description": "Duration of phase 3 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + }, + { + "id": "ProfilePhase4Temp", + "maxLen": 6, + "maxLen2": 13, + "description": "Target temperature for the end of phase 5 of the soldering profile." + }, + { + "id": "ProfilePhase4Duration", + "maxLen": 6, + "maxLen2": 13, + "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + }, + { + "id": "ProfilePhase5Temp", + "maxLen": 6, + "maxLen2": 13, + "description": "Target temperature for the end of phase 5 of the soldering profile." + }, + { + "id": "ProfilePhase5Duration", + "maxLen": 6, + "maxLen2": 13, + "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + }, + { + "id": "ProfileCooldownSpeed", + "maxLen": 6, + "maxLen2": 13, + "description": "How fast the temperature is allowed to drop after the last phase of the soldering profile." + }, { "id": "MotionSensitivity", "maxLen": 6, diff --git a/source/Core/Inc/Settings.h b/source/Core/Inc/Settings.h index e1be959c21..3b3ed0ab4f 100644 --- a/source/Core/Inc/Settings.h +++ b/source/Core/Inc/Settings.h @@ -53,8 +53,22 @@ enum SettingsOptions { CalibrateCJC = 36, // Toggle calibrate CJC at next boot BluetoothLE = 37, // Toggle BLE if present PDVpdo = 38, // Toggle PPS & EPR + ProfilePhases = 39, // Number of Reflow Profile Phases + ProfilePreheatTemp = 40, + ProfilePreheatSpeed = 41, + ProfilePhase1Temp = 42, + ProfilePhase1Duration = 43, + ProfilePhase2Temp = 44, + ProfilePhase2Duration = 45, + ProfilePhase3Temp = 46, + ProfilePhase3Duration = 47, + ProfilePhase4Temp = 48, + ProfilePhase4Duration = 49, + ProfilePhase5Temp = 50, + ProfilePhase5Duration = 51, + ProfileCooldownSpeed = 52, // - SettingsOptionsLength = 39, // + SettingsOptionsLength = 53, // }; typedef enum { diff --git a/source/Core/Inc/Translation.h b/source/Core/Inc/Translation.h index abb877edae..9aa017f2ac 100644 --- a/source/Core/Inc/Translation.h +++ b/source/Core/Inc/Translation.h @@ -61,6 +61,20 @@ enum class SettingsItemIndex : uint8_t { TempChangeShortStep, TempChangeLongStep, LockingMode, + ProfilePhases, + ProfilePreheatTemp, + ProfilePreheatSpeed, + ProfilePhase1Temp, + ProfilePhase1Duration, + ProfilePhase2Temp, + ProfilePhase2Duration, + ProfilePhase3Temp, + ProfilePhase3Duration, + ProfilePhase4Temp, + ProfilePhase4Duration, + ProfilePhase5Temp, + ProfilePhase5Duration, + ProfileCooldownSpeed, MotionSensitivity, SleepTemperature, SleepTimeout, diff --git a/source/Core/Src/Settings.cpp b/source/Core/Src/Settings.cpp index d097609a21..812c7a4947 100644 --- a/source/Core/Src/Settings.cpp +++ b/source/Core/Src/Settings.cpp @@ -88,6 +88,20 @@ static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOp {0, 1, 1, 0}, // CalibrateCJC {0, 1, 1, 1}, // BluetoothLE {0, 1, 1, 1}, // PDVpdo + {0, 5, 1, 4}, // ProfilePhases + {MIN_TEMP_C, MAX_TEMP_F, 5, 90}, // ProfilePreheatTemp + {1, 10, 1, 1}, // ProfilePreheatSpeed + {MIN_TEMP_C, MAX_TEMP_F, 5, 130}, // ProfilePhase1Temp + {10, 120, 5, 90}, // ProfilePhase1Duration + {MIN_TEMP_C, MAX_TEMP_F, 5, 140}, // ProfilePhase2Temp + {10, 120, 5, 30}, // ProfilePhase2Duration + {MIN_TEMP_C, MAX_TEMP_F, 5, 165}, // ProfilePhase3Temp + {10, 120, 5, 30}, // ProfilePhase3Duration + {MIN_TEMP_C, MAX_TEMP_F, 5, 140}, // ProfilePhase4Temp + {10, 120, 5, 30}, // ProfilePhase4Duration + {MIN_TEMP_C, MAX_TEMP_F, 5, 90}, // ProfilePhase5Temp + {10, 120, 5, 30}, // ProfilePhase5Duration + {1, 10, 1, 2}, // ProfileCooldownSpeed }; static_assert((sizeof(settingsConstants) / sizeof(SettingConstants)) == ((int)SettingsOptions::SettingsOptionsLength)); diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index e5234b0887..becf6b8b1c 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -52,6 +52,31 @@ static void displayDisplayRotation(void); static bool setBoostTemp(void); static void displayBoostTemp(void); +static bool setProfilePreheatTemp(); +static bool setProfilePhase1Temp(); +static bool setProfilePhase2Temp(); +static bool setProfilePhase3Temp(); +static bool setProfilePhase4Temp(); +static bool setProfilePhase5Temp(); +static void displayProfilePhases(void); +static void displayProfilePreheatTemp(void); +static void displayProfilePreheatSpeed(void); +static void displayProfilePhase1Temp(void); +static void displayProfilePhase1Duration(void); +static void displayProfilePhase2Temp(void); +static void displayProfilePhase2Duration(void); +static void displayProfilePhase3Temp(void); +static void displayProfilePhase3Duration(void); +static void displayProfilePhase4Temp(void); +static void displayProfilePhase4Duration(void); +static void displayProfilePhase5Temp(void); +static void displayProfilePhase5Duration(void); +static void displayProfileCooldownSpeed(void); +static bool showProfileOptions(void); +static bool showProfilePhase2Options(void); +static bool showProfilePhase3Options(void); +static bool showProfilePhase4Options(void); +static bool showProfilePhase5Options(void); static void displayAutomaticStartMode(void); static void displayLockingMode(void); static void displayCoolingBlinkEnabled(void); @@ -109,6 +134,22 @@ static bool enterAdvancedMenu(void); * Temp Change Short Step * Temp Change Long Step * Locking Mode + * Profile Phases + * Profile Preheat Temperature + * Profile Preheat Max Temperature Change Per Second + * Profile Phase 1 Temperature + * Profile Phase 1 Duration (s) + * Profile Phase 2 Temperature + * Profile Phase 2 Duration (s) + * Profile Phase 3 Temperature + * Profile Phase 3 Duration (s) + * Profile Phase 4 Temperature + * Profile Phase 4 Duration (s) + * Profile Phase 5 Temperature + * Profile Phase 5 Duration (s) + * Profile Phase 6 Temperature + * Profile Phase 6 Duration (s) + * Profile Cooldown Max Temperature Change Per Second * * Power Saving * Motion Sensitivity @@ -203,6 +244,20 @@ const menuitem solderingMenu[] = { {SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, 6}, /*Temp change long step*/ {SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7}, /*Locking Mode*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatTemp), setProfilePreheatTemp, displayProfilePreheatTemp, showProfileOptions, SettingsOptions::ProfilePreheatTemp, SettingsItemIndex::ProfilePreheatTemp, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatSpeed), nullptr, displayProfilePreheatSpeed, showProfileOptions, SettingsOptions::ProfilePreheatSpeed, SettingsItemIndex::ProfilePreheatSpeed, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase1Temp, displayProfilePhase1Temp, showProfileOptions, SettingsOptions::ProfilePhase1Temp, SettingsItemIndex::ProfilePhase1Temp, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase1Duration, showProfileOptions, SettingsOptions::ProfilePhase1Duration, SettingsItemIndex::ProfilePhase1Duration, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase2Temp, displayProfilePhase2Temp, showProfilePhase2Options, SettingsOptions::ProfilePhase2Temp, SettingsItemIndex::ProfilePhase2Temp, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase2Duration, showProfilePhase2Options, SettingsOptions::ProfilePhase2Duration, SettingsItemIndex::ProfilePhase2Duration, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase3Temp, displayProfilePhase3Temp, showProfilePhase3Options, SettingsOptions::ProfilePhase3Temp, SettingsItemIndex::ProfilePhase3Temp, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase3Duration, showProfilePhase3Options, SettingsOptions::ProfilePhase3Duration, SettingsItemIndex::ProfilePhase3Duration, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase4Temp, displayProfilePhase4Temp, showProfilePhase4Options, SettingsOptions::ProfilePhase4Temp, SettingsItemIndex::ProfilePhase4Temp, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase4Duration, showProfilePhase4Options, SettingsOptions::ProfilePhase4Duration, SettingsItemIndex::ProfilePhase4Duration, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase5Temp, displayProfilePhase5Temp, showProfilePhase5Options, SettingsOptions::ProfilePhase5Temp, SettingsItemIndex::ProfilePhase5Temp, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5}, /*Boost Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5}, /*Boost Temp*/ {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE }; const menuitem PowerSavingMenu[] = { @@ -463,6 +518,59 @@ static void displayLockingMode(void) { } } +static void displayProfilePhases(void) { + if (getSettingValue(SettingsOptions::ProfilePhases)) { + OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhases), 1, FontStyle::LARGE); + } else { + OLED::print(translatedString(Tr->OffString), FontStyle::LARGE); + } +} + +static bool setProfileTemp(const enum SettingsOptions option) { + // If in C, 10 deg, if in F 20 deg + uint16_t temp = getSettingValue(option); + if (getSettingValue(SettingsOptions::TemperatureInF)) { + temp += 10; + if (temp > MAX_TEMP_F) + temp = MIN_TEMP_F; + setSettingValue(option, temp); + return temp == MAX_TEMP_F; + } else { + temp += 5; + if (temp > MAX_TEMP_C) + temp = MIN_TEMP_C; + setSettingValue(option, temp); + return temp == MAX_TEMP_C; + } +} + +static bool setProfilePreheatTemp(void) { return setProfileTemp(SettingsOptions::ProfilePreheatTemp); } +static bool setProfilePhase1Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase1Temp); } +static bool setProfilePhase2Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase2Temp); } +static bool setProfilePhase3Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase3Temp); } +static bool setProfilePhase4Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase4Temp); } +static bool setProfilePhase5Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase5Temp); } + +static void displayProfilePreheatTemp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePreheatTemp), 3, FontStyle::LARGE); } +static void displayProfilePhase1Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Temp), 3, FontStyle::LARGE); } +static void displayProfilePhase2Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase2Temp), 3, FontStyle::LARGE); } +static void displayProfilePhase3Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase3Temp), 3, FontStyle::LARGE); } +static void displayProfilePhase4Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase4Temp), 3, FontStyle::LARGE); } +static void displayProfilePhase5Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase5Temp), 3, FontStyle::LARGE); } +static void displayProfilePreheatSpeed(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePreheatSpeed), 2, FontStyle::LARGE); } +static void displayProfileCooldownSpeed(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfileCooldownSpeed), 2, FontStyle::LARGE); } +static void displayProfilePhase1Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase2Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase3Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase4Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase5Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } + +static bool showProfileOptions(void) { return getSettingValue(SettingsOptions::ProfilePhases); } +static bool showProfilePhase2Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 2; } +static bool showProfilePhase3Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 3; } +static bool showProfilePhase4Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 4; } +static bool showProfilePhase5Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 5; } + static void displaySensitivity(void) { OLED::printNumber(getSettingValue(SettingsOptions::Sensitivity), 1, FontStyle::LARGE, false); } static bool showSleepOptions(void) { return getSettingValue(SettingsOptions::Sensitivity) > 0; } From 5c69458f1a7f564480ca0e1293fd636722c6a952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 23 Apr 2023 18:35:34 +0200 Subject: [PATCH 02/19] refactor fahrenheit conversion to save some space --- source/Core/Src/settingsGUI.cpp | 60 ++++++++++++++++----------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index becf6b8b1c..931d516699 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -527,7 +527,7 @@ static void displayProfilePhases(void) { } static bool setProfileTemp(const enum SettingsOptions option) { - // If in C, 10 deg, if in F 20 deg + // If in C, 5 deg, if in F 10 deg uint16_t temp = getSettingValue(option); if (getSettingValue(SettingsOptions::TemperatureInF)) { temp += 10; @@ -625,36 +625,36 @@ static void displayHallEffect(void) { OLED::printNumber(getSettingValue(Settings static bool showHallEffect(void) { return getHallSensorFitted(); } #endif -static bool setTempF(void) { - bool res = nextSettingValue(SettingsOptions::TemperatureInF); - uint16_t BoostTemp = getSettingValue(SettingsOptions::BoostTemp); - uint16_t SolderingTemp = getSettingValue(SettingsOptions::SolderingTemp); - uint16_t SleepTemp = getSettingValue(SettingsOptions::SleepTemp); - - if (getSettingValue(SettingsOptions::TemperatureInF)) { - // Change sleep, boost and soldering temps to the F equiv - // C to F == F= ( (C*9) +160)/5 - BoostTemp = ((BoostTemp * 9) + 160) / 5; - SolderingTemp = ((SolderingTemp * 9) + 160) / 5; - SleepTemp = ((SleepTemp * 9) + 160) / 5; - } else { - // Change sleep, boost and soldering temps to the C equiv - // F->C == C = ((F-32)*5)/9 - BoostTemp = ((BoostTemp - 32) * 5) / 9; - SolderingTemp = ((SolderingTemp - 32) * 5) / 9; - SleepTemp = ((SleepTemp - 32) * 5) / 9; - } - // Rescale both to be multiples of 10 - BoostTemp = BoostTemp / 10; - BoostTemp *= 10; - SolderingTemp = SolderingTemp / 10; - SolderingTemp *= 10; - SleepTemp = SleepTemp / 10; - SleepTemp *= 10; - setSettingValue(SettingsOptions::BoostTemp, BoostTemp); - setSettingValue(SettingsOptions::SolderingTemp, SolderingTemp); - setSettingValue(SettingsOptions::SleepTemp, SleepTemp); +static void setTempF(const enum SettingsOptions option) { + uint16_t Temp = getSettingValue(option); + if (getSettingValue(SettingsOptions::TemperatureInF)) { + // Change temp to the F equiv + // C to F == F= ( (C*9) +160)/5 + Temp = ((Temp * 9) + 160) / 5; + } else { + // Change temp to the C equiv + // F->C == C = ((F-32)*5)/9 + Temp = ((Temp - 32) * 5) / 9; + } + // Rescale to be multiples of 10 + Temp = BoostTemp / 10; + Temp *= 10; + setSettingValue(option, Temp); +} +static bool setTempF(void) { + bool res = nextSettingValue(SettingsOptions::TemperatureInF); + setTempF(SettingsOptions::BoostTemp); + setTempF(SettingsOptions::SolderingTemp); +#ifndef NO_SLEEP_MODE + setTempF(SettingsOptions::SleepTemp); +#endif + setTempF(SettingsOptions::ProfilePreheatTemp); + setTempF(SettingsOptions::ProfilePhase1Temp); + setTempF(SettingsOptions::ProfilePhase2Temp); + setTempF(SettingsOptions::ProfilePhase3Temp); + setTempF(SettingsOptions::ProfilePhase4Temp); + setTempF(SettingsOptions::ProfilePhase5Temp); return res; } From 448e5c8ad18e5ec4292df0a0b362f9b3bcaf092a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 23 Apr 2023 18:36:07 +0200 Subject: [PATCH 03/19] profile mode is optional --- source/Core/BSP/MHP30/configuration.h | 2 ++ source/Core/Src/settingsGUI.cpp | 12 ++++++++++++ source/Core/Threads/OperatingModes/HomeScreen.cpp | 4 ++++ .../Threads/OperatingModes/TemperatureAdjust.cpp | 10 +++++++++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/source/Core/BSP/MHP30/configuration.h b/source/Core/BSP/MHP30/configuration.h index c3ecd12764..af5bae5286 100644 --- a/source/Core/BSP/MHP30/configuration.h +++ b/source/Core/BSP/MHP30/configuration.h @@ -155,6 +155,8 @@ #define ACCEL_SC7 #define ACCEL_MSA +#define PROFILE_MODE + #define POW_PD 1 #define TEMP_NTC #define I2C_SOFT diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index 931d516699..33d64ab03d 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -52,6 +52,8 @@ static void displayDisplayRotation(void); static bool setBoostTemp(void); static void displayBoostTemp(void); + +#ifdef PROFILE_MODE static bool setProfilePreheatTemp(); static bool setProfilePhase1Temp(); static bool setProfilePhase2Temp(); @@ -77,6 +79,8 @@ static bool showProfilePhase2Options(void); static bool showProfilePhase3Options(void); static bool showProfilePhase4Options(void); static bool showProfilePhase5Options(void); +#endif + static void displayAutomaticStartMode(void); static void displayLockingMode(void); static void displayCoolingBlinkEnabled(void); @@ -244,6 +248,7 @@ const menuitem solderingMenu[] = { {SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, 6}, /*Temp change long step*/ {SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7}, /*Locking Mode*/ +#ifdef PROFILE_MODE {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 5}, /*Boost Temp*/ {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatTemp), setProfilePreheatTemp, displayProfilePreheatTemp, showProfileOptions, SettingsOptions::ProfilePreheatTemp, SettingsItemIndex::ProfilePreheatTemp, 5}, /*Boost Temp*/ {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatSpeed), nullptr, displayProfilePreheatSpeed, showProfileOptions, SettingsOptions::ProfilePreheatSpeed, SettingsItemIndex::ProfilePreheatSpeed, 5}, /*Boost Temp*/ @@ -259,6 +264,7 @@ const menuitem solderingMenu[] = { {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5}, /*Boost Temp*/ {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5}, /*Boost Temp*/ {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE +#endif }; const menuitem PowerSavingMenu[] = { /* @@ -518,6 +524,8 @@ static void displayLockingMode(void) { } } +#ifdef PROFILE_MODE + static void displayProfilePhases(void) { if (getSettingValue(SettingsOptions::ProfilePhases)) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhases), 1, FontStyle::LARGE); @@ -574,6 +582,8 @@ static bool showProfilePhase5Options(void) { return getSettingValue(SettingsOpti static void displaySensitivity(void) { OLED::printNumber(getSettingValue(SettingsOptions::Sensitivity), 1, FontStyle::LARGE, false); } static bool showSleepOptions(void) { return getSettingValue(SettingsOptions::Sensitivity) > 0; } +#endif + #ifndef NO_SLEEP_MODE static bool setSleepTemp(void) { @@ -649,12 +659,14 @@ static bool setTempF(void) { #ifndef NO_SLEEP_MODE setTempF(SettingsOptions::SleepTemp); #endif +#ifdef PROFILE_MODE setTempF(SettingsOptions::ProfilePreheatTemp); setTempF(SettingsOptions::ProfilePhase1Temp); setTempF(SettingsOptions::ProfilePhase2Temp); setTempF(SettingsOptions::ProfilePhase3Temp); setTempF(SettingsOptions::ProfilePhase4Temp); setTempF(SettingsOptions::ProfilePhase5Temp); +#endif return res; } diff --git a/source/Core/Threads/OperatingModes/HomeScreen.cpp b/source/Core/Threads/OperatingModes/HomeScreen.cpp index 602a185961..d9dbc7bfd5 100644 --- a/source/Core/Threads/OperatingModes/HomeScreen.cpp +++ b/source/Core/Threads/OperatingModes/HomeScreen.cpp @@ -55,8 +55,12 @@ void drawHomeScreen(bool buttonLockout) { showDebugMenu(); break; case BUTTON_F_LONG: +#ifdef PROFILE_MODE + // todo: add profile mode +#else gui_solderingTempAdjust(); saveSettings(); +#endif break; case BUTTON_F_SHORT: if (!isTipDisconnected()) { diff --git a/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp b/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp index 7f17f4e7ac..3593b82df1 100644 --- a/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp +++ b/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp @@ -4,23 +4,31 @@ void gui_solderingTempAdjust(void) { currentTempTargetDegC = 0; // Turn off heater while adjusting temp TickType_t autoRepeatTimer = 0; uint8_t autoRepeatAcceleration = 0; +#ifndef PROFILE_MODE bool waitForRelease = false; ButtonState buttons = getButtonState(); + if (buttons != BUTTON_NONE) { // Temp adjust entered by long-pressing F button. waitForRelease = true; } +#else + ButtonState buttons; +#endif + for (;;) { OLED::setCursor(0, 0); OLED::clearScreen(); buttons = getButtonState(); if (buttons) { + lastChange = xTaskGetTickCount(); +#ifndef PROFILE_MODE if (waitForRelease) { buttons = BUTTON_NONE; } - lastChange = xTaskGetTickCount(); } else { waitForRelease = false; +#endif } int16_t delta = 0; switch (buttons) { From cb2e8af7006dafd9db076a88c84efc4837b40c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 23 Apr 2023 23:48:24 +0200 Subject: [PATCH 04/19] full profile support --- Translations/make_translation.py | 2 + Translations/translation_EN.json | 9 + Translations/translations_definitions.json | 69 ++++-- source/Core/BSP/BSP.h | 2 +- source/Core/BSP/MHP30/BSP.cpp | 10 +- source/Core/BSP/MHP30/configuration.h | 2 +- source/Core/BSP/Miniware/BSP.cpp | 2 +- source/Core/BSP/Pinecil/BSP.cpp | 2 +- source/Core/BSP/Pinecilv2/BSP.cpp | 2 +- source/Core/Inc/Translation.h | 6 + source/Core/Src/Settings.cpp | 12 +- source/Core/Src/settingsGUI.cpp | 50 ++-- .../Threads/OperatingModes/HomeScreen.cpp | 19 +- .../Core/Threads/OperatingModes/Soldering.cpp | 230 +++++++++++++++++- .../OperatingModes/TemperatureAdjust.cpp | 4 +- 15 files changed, 334 insertions(+), 87 deletions(-) diff --git a/Translations/make_translation.py b/Translations/make_translation.py index 9a6341c67d..dbe4c9a4dc 100755 --- a/Translations/make_translation.py +++ b/Translations/make_translation.py @@ -101,6 +101,8 @@ def get_constants() -> List[Tuple[str, str]]: ("SmallSymbolSpace", " "), ("LargeSymbolDot", "."), ("SmallSymbolDot", "."), + ("SmallSymbolSlash", "/"), + ("SmallSymbolColon", ":"), ("LargeSymbolDegC", "C"), ("SmallSymbolDegC", "C"), ("LargeSymbolDegF", "F"), diff --git a/Translations/translation_EN.json b/Translations/translation_EN.json index 1c4fb67b8d..29eefd10e3 100644 --- a/Translations/translation_EN.json +++ b/Translations/translation_EN.json @@ -60,8 +60,17 @@ "OffString": { "message": "Off" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { diff --git a/Translations/translations_definitions.json b/Translations/translations_definitions.json index 3ab7177a16..875dd2cb2b 100644 --- a/Translations/translations_definitions.json +++ b/Translations/translations_definitions.json @@ -62,6 +62,16 @@ "note": "Preferably end with a space", "description": "Prefix text for 'Input Voltage' shown before showing the input voltage reading." }, + { + "id": "ProfilePreheatString", + "maxLen": 9, + "description": "Shown when the soldering profile is preheating" + }, + { + "id": "ProfileCooldownString", + "maxLen": 9, + "description": "Shown when the soldering profile is done and cooling down" + }, { "id": "SleepingSimpleString", "maxLen": 4, @@ -86,6 +96,11 @@ "id": "DeviceFailedValidationWarning", "default": "Device may be\ncounterfeit", "description": "Warning shown if the device may be a clone or counterfeit unit." + }, + { + "id": "TooHotToStartProfileWarning", + "default": "Too hot to\nstart profile", + "description": "Shown when profile mode is started while the device is too hot." } ], "characters": [{ @@ -257,84 +272,84 @@ "id": "ProfilePhases", "maxLen": 6, "maxLen2": 13, - "description": "Enable / set the number of phases for the soldering profile." + "description": "set the number of phases for the soldering profile." }, { "id": "ProfilePreheatTemp", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "For the soldering profile, preheat to this temperature before proceeding with phase 1." }, { "id": "ProfilePreheatSpeed", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 5, + "maxLen2": 11, "description": "How fast the temperature is allowed to rise during the heatup phase of the soldering profile." }, { "id": "ProfilePhase1Temp", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Target temperature for the end of phase 1 of the soldering profile." }, { "id": "ProfilePhase1Duration", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Duration of phase 1 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase2Temp", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Target temperature for the end of phase 2 of the soldering profile." }, { "id": "ProfilePhase2Duration", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Duration of phase 2 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase3Temp", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Target temperature for the end of phase 3 of the soldering profile." }, { "id": "ProfilePhase3Duration", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Duration of phase 3 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase4Temp", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Target temperature for the end of phase 5 of the soldering profile." }, { "id": "ProfilePhase4Duration", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase5Temp", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Target temperature for the end of phase 5 of the soldering profile." }, { "id": "ProfilePhase5Duration", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 4, + "maxLen2": 9, "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfileCooldownSpeed", - "maxLen": 6, - "maxLen2": 13, + "maxLen": 5, + "maxLen2": 11, "description": "How fast the temperature is allowed to drop after the last phase of the soldering profile." }, { diff --git a/source/Core/BSP/BSP.h b/source/Core/BSP/BSP.h index 574d98d276..ae94911316 100644 --- a/source/Core/BSP/BSP.h +++ b/source/Core/BSP/BSP.h @@ -92,7 +92,7 @@ enum StatusLED { LED_COOLING_STILL_HOT, // The unit is off and cooling but still hot LED_UNKNOWN, // }; -void setStatusLED(const enum StatusLED state); +void setStatusLED(enum StatusLED state, bool buzzer); // preStartChecks are run until they return 0 // By the PID, after each ADC sample comes in diff --git a/source/Core/BSP/MHP30/BSP.cpp b/source/Core/BSP/MHP30/BSP.cpp index a9e686d90a..a269bcc423 100644 --- a/source/Core/BSP/MHP30/BSP.cpp +++ b/source/Core/BSP/MHP30/BSP.cpp @@ -436,7 +436,7 @@ void setBuzzer(bool on) { htim3.Instance->PSC = 1; // revert back out of hearing range } } -void setStatusLED(const enum StatusLED state) { +void setStatusLED(const enum StatusLED state, bool buzzer) { static enum StatusLED lastState = LED_UNKNOWN; static TickType_t buzzerEnd = 0; @@ -455,17 +455,19 @@ void setStatusLED(const enum StatusLED state) { } break; case LED_HOT: ws2812.led_set_color(0, 0xFF, 0, 0); // red - // We have hit the right temp, run buzzer for a short period - buzzerEnd = xTaskGetTickCount() + TICKS_SECOND / 3; break; case LED_COOLING_STILL_HOT: ws2812.led_set_color(0, 0xFF, 0x8C, 0x00); // Orange break; } + if (buzzer) { + // Buzzer requested + buzzerEnd = xTaskGetTickCount() + TICKS_SECOND / 3; + } ws2812.led_update(); lastState = state; } - if (state == LED_HOT && xTaskGetTickCount() < buzzerEnd) { + if (xTaskGetTickCount() < buzzerEnd) { setBuzzer(true); } else { setBuzzer(false); diff --git a/source/Core/BSP/MHP30/configuration.h b/source/Core/BSP/MHP30/configuration.h index af5bae5286..7cb7e1bdd1 100644 --- a/source/Core/BSP/MHP30/configuration.h +++ b/source/Core/BSP/MHP30/configuration.h @@ -155,7 +155,7 @@ #define ACCEL_SC7 #define ACCEL_MSA -#define PROFILE_MODE +#define PROFILE_SUPPORT #define POW_PD 1 #define TEMP_NTC diff --git a/source/Core/BSP/Miniware/BSP.cpp b/source/Core/BSP/Miniware/BSP.cpp index 2cc36e6e42..55c06c8207 100644 --- a/source/Core/BSP/Miniware/BSP.cpp +++ b/source/Core/BSP/Miniware/BSP.cpp @@ -245,7 +245,7 @@ bool isTipDisconnected() { return tipTemp > tipDisconnectedThres; } -void setStatusLED(const enum StatusLED state) {} +void setStatusLED(const enum StatusLED state, bool buzzer) {} uint8_t preStartChecks() { return 1; } uint64_t getDeviceID() { // diff --git a/source/Core/BSP/Pinecil/BSP.cpp b/source/Core/BSP/Pinecil/BSP.cpp index 5bac313d43..96b880d108 100644 --- a/source/Core/BSP/Pinecil/BSP.cpp +++ b/source/Core/BSP/Pinecil/BSP.cpp @@ -86,7 +86,7 @@ bool isTipDisconnected() { return tipTemp > tipDisconnectedThres; } -void setStatusLED(const enum StatusLED state) {} +void setStatusLED(const enum StatusLED state, bool buzzer) {} uint8_t preStartChecks() { return 1; } uint64_t getDeviceID() { return dbg_id_get(); } diff --git a/source/Core/BSP/Pinecilv2/BSP.cpp b/source/Core/BSP/Pinecilv2/BSP.cpp index eb996bd8db..14b58f0dad 100644 --- a/source/Core/BSP/Pinecilv2/BSP.cpp +++ b/source/Core/BSP/Pinecilv2/BSP.cpp @@ -145,7 +145,7 @@ bool isTipDisconnected() { return tipTemp > tipDisconnectedThres; } -void setStatusLED(const enum StatusLED state) { +void setStatusLED(const enum StatusLED state, bool buzzer) { // Dont have one } diff --git a/source/Core/Inc/Translation.h b/source/Core/Inc/Translation.h index 9aa017f2ac..4ff9ae88dc 100644 --- a/source/Core/Inc/Translation.h +++ b/source/Core/Inc/Translation.h @@ -23,6 +23,8 @@ extern const char *SmallSymbolAmps; extern const char *LargeSymbolAmps; extern const char *SmallSymbolDot; extern const char *LargeSymbolDot; +extern const char *SmallSymbolSlash; +extern const char *SmallSymbolColon; extern const char *SmallSymbolDegC; extern const char *LargeSymbolDegC; extern const char *SmallSymbolDegF; @@ -121,12 +123,15 @@ struct TranslationIndexTable { uint16_t UVLOWarningString; uint16_t UndervoltageString; uint16_t InputVoltageString; + uint16_t ProfilePreheatString; + uint16_t ProfileCooldownString; uint16_t SleepingSimpleString; uint16_t SleepingAdvancedString; uint16_t SleepingTipAdvancedString; uint16_t OffString; uint16_t DeviceFailedValidationWarning; + uint16_t TooHotToStartProfileWarning; uint16_t SettingRightChar; uint16_t SettingLeftChar; @@ -142,6 +147,7 @@ struct TranslationIndexTable { uint16_t SettingLockDisableChar; uint16_t SettingLockBoostChar; uint16_t SettingLockFullChar; + uint16_t SolderingPhaseChar; uint16_t SettingsDescriptions[static_cast(SettingsItemIndex::NUM_ITEMS)]; uint16_t SettingsShortNames[static_cast(SettingsItemIndex::NUM_ITEMS)]; diff --git a/source/Core/Src/Settings.cpp b/source/Core/Src/Settings.cpp index 812c7a4947..9a06592ba4 100644 --- a/source/Core/Src/Settings.cpp +++ b/source/Core/Src/Settings.cpp @@ -88,19 +88,19 @@ static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOp {0, 1, 1, 0}, // CalibrateCJC {0, 1, 1, 1}, // BluetoothLE {0, 1, 1, 1}, // PDVpdo - {0, 5, 1, 4}, // ProfilePhases + {1, 5, 1, 4}, // ProfilePhases {MIN_TEMP_C, MAX_TEMP_F, 5, 90}, // ProfilePreheatTemp {1, 10, 1, 1}, // ProfilePreheatSpeed {MIN_TEMP_C, MAX_TEMP_F, 5, 130}, // ProfilePhase1Temp - {10, 120, 5, 90}, // ProfilePhase1Duration + {10, 180, 5, 90}, // ProfilePhase1Duration {MIN_TEMP_C, MAX_TEMP_F, 5, 140}, // ProfilePhase2Temp - {10, 120, 5, 30}, // ProfilePhase2Duration + {10, 180, 5, 30}, // ProfilePhase2Duration {MIN_TEMP_C, MAX_TEMP_F, 5, 165}, // ProfilePhase3Temp - {10, 120, 5, 30}, // ProfilePhase3Duration + {10, 180, 5, 30}, // ProfilePhase3Duration {MIN_TEMP_C, MAX_TEMP_F, 5, 140}, // ProfilePhase4Temp - {10, 120, 5, 30}, // ProfilePhase4Duration + {10, 180, 5, 30}, // ProfilePhase4Duration {MIN_TEMP_C, MAX_TEMP_F, 5, 90}, // ProfilePhase5Temp - {10, 120, 5, 30}, // ProfilePhase5Duration + {10, 180, 5, 30}, // ProfilePhase5Duration {1, 10, 1, 2}, // ProfileCooldownSpeed }; static_assert((sizeof(settingsConstants) / sizeof(SettingConstants)) == ((int)SettingsOptions::SettingsOptionsLength)); diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index 33d64ab03d..5af8d2d338 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -53,7 +53,7 @@ static void displayDisplayRotation(void); static bool setBoostTemp(void); static void displayBoostTemp(void); -#ifdef PROFILE_MODE +#ifdef PROFILE_SUPPORT static bool setProfilePreheatTemp(); static bool setProfilePhase1Temp(); static bool setProfilePhase2Temp(); @@ -248,21 +248,21 @@ const menuitem solderingMenu[] = { {SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, 6}, /*Temp change long step*/ {SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7}, /*Locking Mode*/ -#ifdef PROFILE_MODE - {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatTemp), setProfilePreheatTemp, displayProfilePreheatTemp, showProfileOptions, SettingsOptions::ProfilePreheatTemp, SettingsItemIndex::ProfilePreheatTemp, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatSpeed), nullptr, displayProfilePreheatSpeed, showProfileOptions, SettingsOptions::ProfilePreheatSpeed, SettingsItemIndex::ProfilePreheatSpeed, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase1Temp, displayProfilePhase1Temp, showProfileOptions, SettingsOptions::ProfilePhase1Temp, SettingsItemIndex::ProfilePhase1Temp, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase1Duration, showProfileOptions, SettingsOptions::ProfilePhase1Duration, SettingsItemIndex::ProfilePhase1Duration, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase2Temp, displayProfilePhase2Temp, showProfilePhase2Options, SettingsOptions::ProfilePhase2Temp, SettingsItemIndex::ProfilePhase2Temp, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase2Duration, showProfilePhase2Options, SettingsOptions::ProfilePhase2Duration, SettingsItemIndex::ProfilePhase2Duration, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase3Temp, displayProfilePhase3Temp, showProfilePhase3Options, SettingsOptions::ProfilePhase3Temp, SettingsItemIndex::ProfilePhase3Temp, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase3Duration, showProfilePhase3Options, SettingsOptions::ProfilePhase3Duration, SettingsItemIndex::ProfilePhase3Duration, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase4Temp, displayProfilePhase4Temp, showProfilePhase4Options, SettingsOptions::ProfilePhase4Temp, SettingsItemIndex::ProfilePhase4Temp, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase4Duration, showProfilePhase4Options, SettingsOptions::ProfilePhase4Duration, SettingsItemIndex::ProfilePhase4Duration, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase5Temp, displayProfilePhase5Temp, showProfilePhase5Options, SettingsOptions::ProfilePhase5Temp, SettingsItemIndex::ProfilePhase5Temp, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5}, /*Boost Temp*/ +#ifdef PROFILE_SUPPORT + {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 7}, /*Profile Phases*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatTemp), setProfilePreheatTemp, displayProfilePreheatTemp, showProfileOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePreheatTemp, 5}, /*Profile Preheat Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatSpeed), nullptr, displayProfilePreheatSpeed, showProfileOptions, SettingsOptions::ProfilePreheatSpeed, SettingsItemIndex::ProfilePreheatSpeed, 5}, /*Profile Preheat Speed*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase1Temp, displayProfilePhase1Temp, showProfileOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase1Temp, 5}, /*Phase 1 Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase1Duration, showProfileOptions, SettingsOptions::ProfilePhase1Duration, SettingsItemIndex::ProfilePhase1Duration, 5}, /*Phase 1 Duration*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase2Temp, displayProfilePhase2Temp, showProfilePhase2Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase2Temp, 5}, /*Phase 2 Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase2Duration, showProfilePhase2Options, SettingsOptions::ProfilePhase2Duration, SettingsItemIndex::ProfilePhase2Duration, 5}, /*Phase 2 Duration*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase3Temp, displayProfilePhase3Temp, showProfilePhase3Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase3Temp, 5}, /*Phase 3 Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase3Duration, showProfilePhase3Options, SettingsOptions::ProfilePhase3Duration, SettingsItemIndex::ProfilePhase3Duration, 5}, /*Phase 3 Duration*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase4Temp, displayProfilePhase4Temp, showProfilePhase4Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase4Temp, 5}, /*Phase 4 Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase4Duration, showProfilePhase4Options, SettingsOptions::ProfilePhase4Duration, SettingsItemIndex::ProfilePhase4Duration, 5}, /*Phase 4 Duration*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase5Temp, displayProfilePhase5Temp, showProfilePhase5Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase5Temp, 5}, /*Phase 5 Temp*/ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5}, /*Phase 5 Duration*/ + {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5}, /*Profile Cooldown Speed*/ {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE #endif }; @@ -524,14 +524,10 @@ static void displayLockingMode(void) { } } -#ifdef PROFILE_MODE +#ifdef PROFILE_SUPPORT static void displayProfilePhases(void) { - if (getSettingValue(SettingsOptions::ProfilePhases)) { - OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhases), 1, FontStyle::LARGE); - } else { - OLED::print(translatedString(Tr->OffString), FontStyle::LARGE); - } + OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhases), 1, FontStyle::LARGE); } static bool setProfileTemp(const enum SettingsOptions option) { @@ -568,10 +564,10 @@ static void displayProfilePhase5Temp(void) { OLED::printNumber(getSettingValue(S static void displayProfilePreheatSpeed(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePreheatSpeed), 2, FontStyle::LARGE); } static void displayProfileCooldownSpeed(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfileCooldownSpeed), 2, FontStyle::LARGE); } static void displayProfilePhase1Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } -static void displayProfilePhase2Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } -static void displayProfilePhase3Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } -static void displayProfilePhase4Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } -static void displayProfilePhase5Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase2Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase2Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase3Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase3Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase4Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase4Duration), 3, FontStyle::LARGE); } +static void displayProfilePhase5Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase5Duration), 3, FontStyle::LARGE); } static bool showProfileOptions(void) { return getSettingValue(SettingsOptions::ProfilePhases); } static bool showProfilePhase2Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 2; } @@ -659,7 +655,7 @@ static bool setTempF(void) { #ifndef NO_SLEEP_MODE setTempF(SettingsOptions::SleepTemp); #endif -#ifdef PROFILE_MODE +#ifdef PROFILE_SUPPORT setTempF(SettingsOptions::ProfilePreheatTemp); setTempF(SettingsOptions::ProfilePhase1Temp); setTempF(SettingsOptions::ProfilePhase2Temp); diff --git a/source/Core/Threads/OperatingModes/HomeScreen.cpp b/source/Core/Threads/OperatingModes/HomeScreen.cpp index d9dbc7bfd5..7874bf8541 100644 --- a/source/Core/Threads/OperatingModes/HomeScreen.cpp +++ b/source/Core/Threads/OperatingModes/HomeScreen.cpp @@ -55,8 +55,11 @@ void drawHomeScreen(bool buttonLockout) { showDebugMenu(); break; case BUTTON_F_LONG: -#ifdef PROFILE_MODE - // todo: add profile mode +#ifdef PROFILE_SUPPORT + if (!isTipDisconnected()) { + gui_solderingMode(0); // enter soldering mode + buttonLockout = true; + } #else gui_solderingTempAdjust(); saveSettings(); @@ -84,11 +87,6 @@ void drawHomeScreen(bool buttonLockout) { currentTempTargetDegC = 0; // ensure tip is off getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0); uint32_t tipTemp = TipThermoModel::getTipInC(); - if (tipTemp > 55) { - setStatusLED(LED_COOLING_STILL_HOT); - } else { - setStatusLED(LED_STANDBY); - } // Preemptively turn the display on. Turn it off if and only if // the tip temperature is below 50 degrees C *and* motion sleep // detection is enabled *and* there has been no activity (movement or @@ -99,9 +97,14 @@ void drawHomeScreen(bool buttonLockout) { if ((tipTemp < 50) && getSettingValue(SettingsOptions::Sensitivity) && (((xTaskGetTickCount() - lastMovementTime) > MOVEMENT_INACTIVITY_TIME) && ((xTaskGetTickCount() - lastButtonTime) > BUTTON_INACTIVITY_TIME))) { OLED::setDisplayState(OLED::DisplayState::OFF); - setStatusLED(LED_OFF); + setStatusLED(LED_OFF, false); } else { OLED::setDisplayState(OLED::DisplayState::ON); + if (tipTemp > 55) { + setStatusLED(LED_COOLING_STILL_HOT, false); + } else { + setStatusLED(LED_STANDBY, false); + } } // Clear the lcd buffer OLED::clearScreen(); diff --git a/source/Core/Threads/OperatingModes/Soldering.cpp b/source/Core/Threads/OperatingModes/Soldering.cpp index aa0416d205..96b9b877bd 100644 --- a/source/Core/Threads/OperatingModes/Soldering.cpp +++ b/source/Core/Threads/OperatingModes/Soldering.cpp @@ -23,6 +23,35 @@ void gui_solderingMode(uint8_t jumpToSleep) { bool buttonsLocked = false; currentMode = OperatingMode::soldering; +#ifdef PROFILE_SUPPORT + bool waitForRelease = false; + TickType_t profileStartTime = 0; + TickType_t phaseStartTime = 0; + + uint16_t tipTemp = 0; + uint8_t profilePhase = 0; + + uint16_t phaseElapsedSeconds = 0; + uint16_t phaseTotalSeconds = 0; + uint16_t phaseStartTemp = 0; + uint16_t phaseEndTemp = 0; + uint16_t phaseTicksPerDegree = 0; + uint16_t profileCurrentTargetTemp = 0; + + ButtonState buttons = getButtonState(); + + if (buttons != BUTTON_NONE) { + // Soldering entered by long-pressing F button, profile mode + waitForRelease = true; + profileStartTime = xTaskGetTickCount(); + phaseStartTime = xTaskGetTickCount(); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePreheatTemp); + phaseTicksPerDegree = TICKS_SECOND / getSettingValue(SettingsOptions::ProfilePreheatSpeed); + } +#else + ButtonState buttons; +#endif + if (jumpToSleep) { if (gui_SolderingSleepingMode(jumpToSleep == 2, true) == 1) { lastButtonTime = xTaskGetTickCount(); @@ -30,7 +59,14 @@ void gui_solderingMode(uint8_t jumpToSleep) { } } for (;;) { - ButtonState buttons = getButtonState(); + buttons = getButtonState(); +#ifdef PROFILE_SUPPORT + if (buttons) { + if (waitForRelease) buttons = BUTTON_NONE; + } else { + waitForRelease = false; + } +#endif if (buttonsLocked && (getSettingValue(SettingsOptions::LockingMode) != 0)) { // If buttons locked switch (buttons) { case BUTTON_NONE: @@ -43,6 +79,9 @@ void gui_solderingMode(uint8_t jumpToSleep) { break; case BUTTON_F_LONG: // if boost mode is enabled turn it on +#ifdef PROFILE_SUPPORT + if (profileStartTime != 0) break; // no boost in profile mode +#endif if (getSettingValue(SettingsOptions::BoostTemp) && (getSettingValue(SettingsOptions::LockingMode) == 1)) { boostModeOn = true; currentMode = OperatingMode::boost; @@ -70,6 +109,9 @@ void gui_solderingMode(uint8_t jumpToSleep) { case BUTTON_B_LONG: return; // exit on back long hold case BUTTON_F_LONG: +#ifdef PROFILE_SUPPORT + if (profileStartTime != 0) break; // no manual temp change in profile mode +#endif // if boost mode is enabled turn it on if (getSettingValue(SettingsOptions::BoostTemp)) { boostModeOn = true; @@ -78,6 +120,9 @@ void gui_solderingMode(uint8_t jumpToSleep) { break; case BUTTON_F_SHORT: case BUTTON_B_SHORT: { +#ifdef PROFILE_SUPPORT + if (profileStartTime != 0) break; // no manual temp change in profile mode +#endif uint16_t oldTemp = getSettingValue(SettingsOptions::SolderingTemp); gui_solderingTempAdjust(); // goto adjust temp mode if (oldTemp != getSettingValue(SettingsOptions::SolderingTemp)) { @@ -97,8 +142,92 @@ void gui_solderingMode(uint8_t jumpToSleep) { } // else we update the screen information - OLED::clearScreen(); +#ifdef PROFILE_SUPPORT + if (profileStartTime != 0) { + if (getSettingValue(SettingsOptions::TemperatureInF)) { + tipTemp = TipThermoModel::getTipInF(); + } else { + tipTemp = TipThermoModel::getTipInC(); + } + + // if start temp is unknown (preheat), we're setting it now + if (phaseStartTemp == 0) { + phaseStartTemp = tipTemp; + // if this is hotter than the preheat temperature, we should fail + if (phaseStartTemp >= 55) { + warnUser(translatedString(Tr->TooHotToStartProfileWarning), 10 * TICKS_SECOND); + return; + } + } + + phaseElapsedSeconds = (xTaskGetTickCount() - phaseStartTime) / TICKS_SECOND; + + // have we finished this phase? + if (phaseElapsedSeconds >= phaseTotalSeconds && tipTemp == phaseEndTemp) { + profilePhase++; + phaseStartTemp = phaseEndTemp; + phaseStartTime = xTaskGetTickCount(); + phaseElapsedSeconds = 0; + if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + // done with all phases, lets go to cooldown + phaseTotalSeconds = 0; + phaseEndTemp = 0; + phaseTicksPerDegree = TICKS_SECOND / getSettingValue(SettingsOptions::ProfileCooldownSpeed); + } else { + // set up next phase + switch(profilePhase) { + case 1: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase1Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase1Temp); + break; + case 2: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase2Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase2Temp); + break; + case 3: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase3Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase3Temp); + break; + case 4: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase4Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase4Temp); + break; + case 5: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase5Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase5Temp); + break; + } + if (phaseStartTemp < phaseEndTemp) { + phaseTicksPerDegree = (phaseTotalSeconds * TICKS_SECOND) / (phaseEndTemp - phaseStartTemp); + } else { + phaseTicksPerDegree = (phaseTotalSeconds * TICKS_SECOND) / (phaseStartTemp - phaseEndTemp); + } + } + } + + // cooldown phase done? + if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + if (TipThermoModel::getTipInC() < 55) { + // we're done, let the buzzer beep too + setStatusLED(LED_STANDBY, true); + return; + } + } + + // determine current target temp + if (phaseStartTemp < phaseEndTemp) { + if (profileCurrentTargetTemp < phaseEndTemp) { + profileCurrentTargetTemp = phaseStartTemp + ((xTaskGetTickCount() - phaseStartTime) / phaseTicksPerDegree); + } + } else { + if (profileCurrentTargetTemp > phaseEndTemp) { + profileCurrentTargetTemp = phaseStartTemp - ((xTaskGetTickCount() - phaseStartTime) / phaseTicksPerDegree); + } + } + } +#endif + OLED::clearScreen(); // Draw in the screen details if (getSettingValue(SettingsOptions::DetailedSoldering)) { if (OLED::getRotation()) { @@ -106,7 +235,67 @@ void gui_solderingMode(uint8_t jumpToSleep) { } else { OLED::setCursor(-1, 0); } + +#ifdef PROFILE_SUPPORT + if (profileStartTime != 0) { + // print temperature + if (OLED::getRotation()) { + OLED::setCursor(48, 0); + } else { + OLED::setCursor(0, 0); + } + + OLED::printNumber(tipTemp, 3, FontStyle::SMALL); + OLED::print(SmallSymbolSlash, FontStyle::SMALL); + OLED::printNumber(profileCurrentTargetTemp, 3, FontStyle::SMALL); + + if (getSettingValue(SettingsOptions::TemperatureInF)) + OLED::print(SmallSymbolDegF, FontStyle::SMALL); + else + OLED::print(SmallSymbolDegC, FontStyle::SMALL); + + // print phase + if (profilePhase > 0 && profilePhase <= getSettingValue(SettingsOptions::ProfilePhases)) { + if (OLED::getRotation()) { + OLED::setCursor(36, 0); + } else { + OLED::setCursor(55, 0); + } + OLED::printNumber(profilePhase, 1, FontStyle::SMALL); + } + + // print time progress / preheat / cooldown + if (OLED::getRotation()) { + OLED::setCursor(42, 8); + } else { + OLED::setCursor(0, 8); + } + + if (profilePhase == 0) { + OLED::print(translatedString(Tr->ProfilePreheatString), FontStyle::SMALL); + } else if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + OLED::print(translatedString(Tr->ProfileCooldownString), FontStyle::SMALL); + } else { + OLED::printNumber(phaseElapsedSeconds / 60, 1, FontStyle::SMALL); + OLED::print(SmallSymbolColon, FontStyle::SMALL); + OLED::printNumber(phaseElapsedSeconds % 60, 2, FontStyle::SMALL, false); + + OLED::print(SmallSymbolSlash, FontStyle::SMALL); + + // blink if we can't keep up with the time goal + if (phaseElapsedSeconds < phaseTotalSeconds+2 || (xTaskGetTickCount() / TICKS_SECOND) % 2 == 0) { + OLED::printNumber(phaseTotalSeconds / 60, 1, FontStyle::SMALL); + OLED::print(SmallSymbolColon, FontStyle::SMALL); + OLED::printNumber(phaseTotalSeconds % 60, 2, FontStyle::SMALL, false); + } + } + + } else { +#endif gui_drawTipTemp(true, FontStyle::LARGE); +#ifdef PROFILE_SUPPORT + } +#endif #ifndef NO_SLEEP_MODE if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) { @@ -188,8 +377,18 @@ void gui_solderingMode(uint8_t jumpToSleep) { gui_drawBatteryIcon(); } } + OLED::refresh(); // Update the setpoints for the temperature +#ifdef PROFILE_SUPPORT + if (profileStartTime != 0) { + if (getSettingValue(SettingsOptions::TemperatureInF)) { + currentTempTargetDegC = TipThermoModel::convertFtoC(profileCurrentTargetTemp); + } else { + currentTempTargetDegC = profileCurrentTargetTemp; + } + } else +#endif if (boostModeOn) { if (getSettingValue(SettingsOptions::TemperatureInF)) currentTempTargetDegC = TipThermoModel::convertFtoC(getSettingValue(SettingsOptions::BoostTemp)); @@ -242,14 +441,29 @@ void gui_solderingMode(uint8_t jumpToSleep) { return; // If the function returns non-0 then exit } } - // Update LED status - int error = currentTempTargetDegC - TipThermoModel::getTipInC(); - if (error >= -10 && error <= 10) { - // converged - setStatusLED(LED_HOT); +#ifdef PROFILE_SUPPORT + if (profileStartTime == 0) { +#endif + // Update LED status (manual mode) + int error = currentTempTargetDegC - TipThermoModel::getTipInC(); + if (error >= -10 && error <= 10) { + // converged + setStatusLED(LED_HOT, true); + } else { + setStatusLED(LED_HEATING, false); + } +#ifdef PROFILE_SUPPORT } else { - setStatusLED(LED_HEATING); + // Update LED status (profile mode) + if (profilePhase == 0) { + setStatusLED(LED_HEATING, false); + } else if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + setStatusLED(LED_COOLING_STILL_HOT, false); + } else { + setStatusLED(LED_HOT, false); + } } +#endif // If we have tripped thermal runaway, turn off heater and show warning if (heaterThermalRunaway) { currentTempTargetDegC = 0; // heater control off diff --git a/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp b/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp index 3593b82df1..5c05a52049 100644 --- a/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp +++ b/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp @@ -4,7 +4,7 @@ void gui_solderingTempAdjust(void) { currentTempTargetDegC = 0; // Turn off heater while adjusting temp TickType_t autoRepeatTimer = 0; uint8_t autoRepeatAcceleration = 0; -#ifndef PROFILE_MODE +#ifndef PROFILE_SUPPORT bool waitForRelease = false; ButtonState buttons = getButtonState(); @@ -22,7 +22,7 @@ void gui_solderingTempAdjust(void) { buttons = getButtonState(); if (buttons) { lastChange = xTaskGetTickCount(); -#ifndef PROFILE_MODE +#ifndef PROFILE_SUPPORT if (waitForRelease) { buttons = BUTTON_NONE; } From 4f400460e864323d46dade303cd1a11501c8cfe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 23 Apr 2023 23:58:36 +0200 Subject: [PATCH 05/19] add german translation --- Translations/translation_DE.json | 65 ++++++++++++++++++++++++++++++++ Translations/translation_EN.json | 2 +- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/Translations/translation_DE.json b/Translations/translation_DE.json index 07c10399ab..559301b468 100644 --- a/Translations/translation_DE.json +++ b/Translations/translation_DE.json @@ -60,8 +60,17 @@ "OffString": { "message": "Aus" }, + "ProfilePreheatString": { + "message": "Vorwärmen\n" + }, + "ProfileCooldownString": { + "message": "Abkühlen\n" + }, "DeviceFailedValidationWarning": { "message": "Höchstwahrscheinlich ist das Gerät eine Fälschung!" + }, + "TooHotToStartProfileWarning": { + "message": "Zu heiß zum\nProfil Starten" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Tasten-\nsperre", "description": "Langes drücken beider Tasten im Lötmodus sperrt diese (A=aus | B=nur Boost | V=vollständig)" }, + "ProfilePhases": { + "displayText": "Profile\nPhasen", + "description": "Anzahl an Phasen für das Lötprofil" + }, + "ProfilePreheatTemp": { + "displayText": "Vorheiz-\ntemperatur", + "description": "Auf diese Temperatur vorheizen zum Start des Profils" + }, + "ProfilePreheatSpeed": { + "displayText": "Vorheiz-\nrate", + "description": "Mit dieser Geschwindigkeit vorheizen (Grad pro Sekunde)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemperatur", + "description": "Zieltemperatur zum Ende dieser Phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDauer", + "description": "Zieldauer dieser Phase (Sekunden)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemperatur", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDauer", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemperatur", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDauer", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemperatur", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDauer", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemperatur", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDauer", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Abkühl-\nrate", + "description": "Abkühlenen nach der letzten Phase mit dieser Geschwindigkeit (Grad pro Sekunde)" + }, "MotionSensitivity": { "displayText": "Bewegungs-\nempfindlichk.", "description": "0=aus | 1=minimal | ... | 9=maximal" diff --git a/Translations/translation_EN.json b/Translations/translation_EN.json index 29eefd10e3..1842bd1231 100644 --- a/Translations/translation_EN.json +++ b/Translations/translation_EN.json @@ -170,7 +170,7 @@ }, "ProfilePhase1Duration": { "displayText": "Phase 1\nDuration", - "description": "Target duration of this phase (s=seconds)" + "description": "Target duration of this phase (seconds)" }, "ProfilePhase2Temp": { "displayText": "Phase 2\nTemp", From c783fb545a5f8ac8cb92bb43c1930d541dcb0c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 00:20:31 +0200 Subject: [PATCH 06/19] fix build on TS100 --- source/Core/Inc/Translation.h | 1 - source/Core/Src/settingsGUI.cpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/source/Core/Inc/Translation.h b/source/Core/Inc/Translation.h index 4ff9ae88dc..1f1f39649d 100644 --- a/source/Core/Inc/Translation.h +++ b/source/Core/Inc/Translation.h @@ -147,7 +147,6 @@ struct TranslationIndexTable { uint16_t SettingLockDisableChar; uint16_t SettingLockBoostChar; uint16_t SettingLockFullChar; - uint16_t SolderingPhaseChar; uint16_t SettingsDescriptions[static_cast(SettingsItemIndex::NUM_ITEMS)]; uint16_t SettingsShortNames[static_cast(SettingsItemIndex::NUM_ITEMS)]; diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index 5af8d2d338..0b02228410 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -575,11 +575,11 @@ static bool showProfilePhase3Options(void) { return getSettingValue(SettingsOpti static bool showProfilePhase4Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 4; } static bool showProfilePhase5Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 5; } +#endif + static void displaySensitivity(void) { OLED::printNumber(getSettingValue(SettingsOptions::Sensitivity), 1, FontStyle::LARGE, false); } static bool showSleepOptions(void) { return getSettingValue(SettingsOptions::Sensitivity) > 0; } -#endif - #ifndef NO_SLEEP_MODE static bool setSleepTemp(void) { From 9dfb5cfb4bfcf0d27008aa288feaef99ae5593b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 00:24:18 +0200 Subject: [PATCH 07/19] revert unneeded change --- source/Core/BSP/BSP.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Core/BSP/BSP.h b/source/Core/BSP/BSP.h index ae94911316..3d07a51962 100644 --- a/source/Core/BSP/BSP.h +++ b/source/Core/BSP/BSP.h @@ -92,7 +92,7 @@ enum StatusLED { LED_COOLING_STILL_HOT, // The unit is off and cooling but still hot LED_UNKNOWN, // }; -void setStatusLED(enum StatusLED state, bool buzzer); +void setStatusLED(const enum StatusLED state, bool buzzer); // preStartChecks are run until they return 0 // By the PID, after each ADC sample comes in From 8cc722e494b4e9fc92a9c0368ebcae5bd73560ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 01:37:40 +0200 Subject: [PATCH 08/19] add missing comments in Settings.h --- source/Core/Inc/Settings.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/source/Core/Inc/Settings.h b/source/Core/Inc/Settings.h index 3b3ed0ab4f..be983f73db 100644 --- a/source/Core/Inc/Settings.h +++ b/source/Core/Inc/Settings.h @@ -53,20 +53,20 @@ enum SettingsOptions { CalibrateCJC = 36, // Toggle calibrate CJC at next boot BluetoothLE = 37, // Toggle BLE if present PDVpdo = 38, // Toggle PPS & EPR - ProfilePhases = 39, // Number of Reflow Profile Phases - ProfilePreheatTemp = 40, - ProfilePreheatSpeed = 41, - ProfilePhase1Temp = 42, - ProfilePhase1Duration = 43, - ProfilePhase2Temp = 44, - ProfilePhase2Duration = 45, - ProfilePhase3Temp = 46, - ProfilePhase3Duration = 47, - ProfilePhase4Temp = 48, - ProfilePhase4Duration = 49, - ProfilePhase5Temp = 50, - ProfilePhase5Duration = 51, - ProfileCooldownSpeed = 52, + ProfilePhases = 39, // Number of Soldering Profile Phases + ProfilePreheatTemp = 40, // Temperature to preheat to before the first phase + ProfilePreheatSpeed = 41, // Maximum allowed preheat speed in degrees per second + ProfilePhase1Temp = 42, // Temperature to target for the end of phase 1 + ProfilePhase1Duration = 43, // Target duration for phase 1 + ProfilePhase2Temp = 44, // Temperature to target for the end of phase 2 + ProfilePhase2Duration = 45, // Target duration for phase 2 + ProfilePhase3Temp = 46, // Temperature to target for the end of phase 3 + ProfilePhase3Duration = 47, // Target duration for phase 3 + ProfilePhase4Temp = 48, // Temperature to target for the end of phase 4 + ProfilePhase4Duration = 49, // Target duration for phase 4 + ProfilePhase5Temp = 50, // Temperature to target for the end of phase 5 + ProfilePhase5Duration = 51, // Target duration for phase 5 + ProfileCooldownSpeed = 52, // Maximum allowed cooldown speed in degrees per second // SettingsOptionsLength = 53, // }; From f1879353b8bdad62a7fd9f88abbd48ff9cfff5fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 02:34:02 +0200 Subject: [PATCH 09/19] put soldering profile mode into its own file, put common functions in utils --- source/Core/BSP/BSP.h | 4 +- source/Core/BSP/MHP30/BSP.cpp | 11 +- source/Core/BSP/Miniware/BSP.cpp | 3 +- source/Core/BSP/Pinecil/BSP.cpp | 3 +- source/Core/BSP/Pinecilv2/BSP.cpp | 3 +- .../Threads/OperatingModes/HomeScreen.cpp | 8 +- .../Threads/OperatingModes/OperatingModes.h | 1 + .../Core/Threads/OperatingModes/Soldering.cpp | 340 ++---------------- .../OperatingModes/SolderingProfile.cpp | 228 ++++++++++++ .../OperatingModes/utils/SolderingCommon.cpp | 123 +++++++ .../OperatingModes/utils/SolderingCommon.h | 8 + 11 files changed, 397 insertions(+), 335 deletions(-) create mode 100644 source/Core/Threads/OperatingModes/SolderingProfile.cpp create mode 100644 source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp create mode 100644 source/Core/Threads/OperatingModes/utils/SolderingCommon.h diff --git a/source/Core/BSP/BSP.h b/source/Core/BSP/BSP.h index 3d07a51962..732a3adcf2 100644 --- a/source/Core/BSP/BSP.h +++ b/source/Core/BSP/BSP.h @@ -92,7 +92,9 @@ enum StatusLED { LED_COOLING_STILL_HOT, // The unit is off and cooling but still hot LED_UNKNOWN, // }; -void setStatusLED(const enum StatusLED state, bool buzzer); +void setStatusLED(const enum StatusLED state); + +void setBuzzer(bool on); // preStartChecks are run until they return 0 // By the PID, after each ADC sample comes in diff --git a/source/Core/BSP/MHP30/BSP.cpp b/source/Core/BSP/MHP30/BSP.cpp index a269bcc423..2c4b338126 100644 --- a/source/Core/BSP/MHP30/BSP.cpp +++ b/source/Core/BSP/MHP30/BSP.cpp @@ -436,7 +436,7 @@ void setBuzzer(bool on) { htim3.Instance->PSC = 1; // revert back out of hearing range } } -void setStatusLED(const enum StatusLED state, bool buzzer) { +void setStatusLED(const enum StatusLED state) { static enum StatusLED lastState = LED_UNKNOWN; static TickType_t buzzerEnd = 0; @@ -460,18 +460,9 @@ void setStatusLED(const enum StatusLED state, bool buzzer) { ws2812.led_set_color(0, 0xFF, 0x8C, 0x00); // Orange break; } - if (buzzer) { - // Buzzer requested - buzzerEnd = xTaskGetTickCount() + TICKS_SECOND / 3; - } ws2812.led_update(); lastState = state; } - if (xTaskGetTickCount() < buzzerEnd) { - setBuzzer(true); - } else { - setBuzzer(false); - } } uint64_t getDeviceID() { // diff --git a/source/Core/BSP/Miniware/BSP.cpp b/source/Core/BSP/Miniware/BSP.cpp index 55c06c8207..beb83c343b 100644 --- a/source/Core/BSP/Miniware/BSP.cpp +++ b/source/Core/BSP/Miniware/BSP.cpp @@ -245,7 +245,8 @@ bool isTipDisconnected() { return tipTemp > tipDisconnectedThres; } -void setStatusLED(const enum StatusLED state, bool buzzer) {} +void setStatusLED(const enum StatusLED state) {} +void setBuzzer(bool on) {} uint8_t preStartChecks() { return 1; } uint64_t getDeviceID() { // diff --git a/source/Core/BSP/Pinecil/BSP.cpp b/source/Core/BSP/Pinecil/BSP.cpp index 96b880d108..9c918b6271 100644 --- a/source/Core/BSP/Pinecil/BSP.cpp +++ b/source/Core/BSP/Pinecil/BSP.cpp @@ -86,7 +86,8 @@ bool isTipDisconnected() { return tipTemp > tipDisconnectedThres; } -void setStatusLED(const enum StatusLED state, bool buzzer) {} +void setStatusLED(const enum StatusLED state) {} +void setBuzzer(bool on) {} uint8_t preStartChecks() { return 1; } uint64_t getDeviceID() { return dbg_id_get(); } diff --git a/source/Core/BSP/Pinecilv2/BSP.cpp b/source/Core/BSP/Pinecilv2/BSP.cpp index 14b58f0dad..0ca2d10ccd 100644 --- a/source/Core/BSP/Pinecilv2/BSP.cpp +++ b/source/Core/BSP/Pinecilv2/BSP.cpp @@ -145,9 +145,10 @@ bool isTipDisconnected() { return tipTemp > tipDisconnectedThres; } -void setStatusLED(const enum StatusLED state, bool buzzer) { +void setStatusLED(const enum StatusLED state) { // Dont have one } +void setBuzzer(bool on) {} uint8_t lastTipResistance = 0; // default to unknown const uint8_t numTipResistanceReadings = 3; diff --git a/source/Core/Threads/OperatingModes/HomeScreen.cpp b/source/Core/Threads/OperatingModes/HomeScreen.cpp index 7874bf8541..fa2388e24c 100644 --- a/source/Core/Threads/OperatingModes/HomeScreen.cpp +++ b/source/Core/Threads/OperatingModes/HomeScreen.cpp @@ -57,7 +57,7 @@ void drawHomeScreen(bool buttonLockout) { case BUTTON_F_LONG: #ifdef PROFILE_SUPPORT if (!isTipDisconnected()) { - gui_solderingMode(0); // enter soldering mode + gui_solderingProfileMode(); // enter soldering profile mode buttonLockout = true; } #else @@ -97,13 +97,13 @@ void drawHomeScreen(bool buttonLockout) { if ((tipTemp < 50) && getSettingValue(SettingsOptions::Sensitivity) && (((xTaskGetTickCount() - lastMovementTime) > MOVEMENT_INACTIVITY_TIME) && ((xTaskGetTickCount() - lastButtonTime) > BUTTON_INACTIVITY_TIME))) { OLED::setDisplayState(OLED::DisplayState::OFF); - setStatusLED(LED_OFF, false); + setStatusLED(LED_OFF); } else { OLED::setDisplayState(OLED::DisplayState::ON); if (tipTemp > 55) { - setStatusLED(LED_COOLING_STILL_HOT, false); + setStatusLED(LED_COOLING_STILL_HOT); } else { - setStatusLED(LED_STANDBY, false); + setStatusLED(LED_STANDBY); } } // Clear the lcd buffer diff --git a/source/Core/Threads/OperatingModes/OperatingModes.h b/source/Core/Threads/OperatingModes/OperatingModes.h index 06f7070ec0..9e9e73cd34 100644 --- a/source/Core/Threads/OperatingModes/OperatingModes.h +++ b/source/Core/Threads/OperatingModes/OperatingModes.h @@ -37,6 +37,7 @@ void performCJCC(void); // Used to ca void gui_solderingTempAdjust(void); // For adjusting the setpoint temperature of the iron int gui_SolderingSleepingMode(bool stayOff, bool autoStarted); // Sleep mode void gui_solderingMode(uint8_t jumpToSleep); // Main mode for hot pointy tool +void gui_solderingProfileMode(); // Profile mode for hot likely-not-so-pointy tool void showDebugMenu(void); // Debugging values void showPDDebug(void); // Debugging menu that hows PD adaptor info void showWarnings(void); // Shows user warnings if required diff --git a/source/Core/Threads/OperatingModes/Soldering.cpp b/source/Core/Threads/OperatingModes/Soldering.cpp index 96b9b877bd..5cdd2c1f72 100644 --- a/source/Core/Threads/OperatingModes/Soldering.cpp +++ b/source/Core/Threads/OperatingModes/Soldering.cpp @@ -1,7 +1,7 @@ #include "OperatingModes.h" +#include "SolderingCommon.h" -extern bool heaterThermalRunaway; extern OperatingMode currentMode; void gui_solderingMode(uint8_t jumpToSleep) { @@ -21,36 +21,10 @@ void gui_solderingMode(uint8_t jumpToSleep) { */ bool boostModeOn = false; bool buttonsLocked = false; + bool converged = false; currentMode = OperatingMode::soldering; -#ifdef PROFILE_SUPPORT - bool waitForRelease = false; - TickType_t profileStartTime = 0; - TickType_t phaseStartTime = 0; - - uint16_t tipTemp = 0; - uint8_t profilePhase = 0; - - uint16_t phaseElapsedSeconds = 0; - uint16_t phaseTotalSeconds = 0; - uint16_t phaseStartTemp = 0; - uint16_t phaseEndTemp = 0; - uint16_t phaseTicksPerDegree = 0; - uint16_t profileCurrentTargetTemp = 0; - - ButtonState buttons = getButtonState(); - - if (buttons != BUTTON_NONE) { - // Soldering entered by long-pressing F button, profile mode - waitForRelease = true; - profileStartTime = xTaskGetTickCount(); - phaseStartTime = xTaskGetTickCount(); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePreheatTemp); - phaseTicksPerDegree = TICKS_SECOND / getSettingValue(SettingsOptions::ProfilePreheatSpeed); - } -#else - ButtonState buttons; -#endif + TickType_t buzzerEnd = 0; if (jumpToSleep) { if (gui_SolderingSleepingMode(jumpToSleep == 2, true) == 1) { @@ -59,14 +33,7 @@ void gui_solderingMode(uint8_t jumpToSleep) { } } for (;;) { - buttons = getButtonState(); -#ifdef PROFILE_SUPPORT - if (buttons) { - if (waitForRelease) buttons = BUTTON_NONE; - } else { - waitForRelease = false; - } -#endif + ButtonState buttons = getButtonState(); if (buttonsLocked && (getSettingValue(SettingsOptions::LockingMode) != 0)) { // If buttons locked switch (buttons) { case BUTTON_NONE: @@ -79,9 +46,6 @@ void gui_solderingMode(uint8_t jumpToSleep) { break; case BUTTON_F_LONG: // if boost mode is enabled turn it on -#ifdef PROFILE_SUPPORT - if (profileStartTime != 0) break; // no boost in profile mode -#endif if (getSettingValue(SettingsOptions::BoostTemp) && (getSettingValue(SettingsOptions::LockingMode) == 1)) { boostModeOn = true; currentMode = OperatingMode::boost; @@ -109,9 +73,6 @@ void gui_solderingMode(uint8_t jumpToSleep) { case BUTTON_B_LONG: return; // exit on back long hold case BUTTON_F_LONG: -#ifdef PROFILE_SUPPORT - if (profileStartTime != 0) break; // no manual temp change in profile mode -#endif // if boost mode is enabled turn it on if (getSettingValue(SettingsOptions::BoostTemp)) { boostModeOn = true; @@ -120,9 +81,6 @@ void gui_solderingMode(uint8_t jumpToSleep) { break; case BUTTON_F_SHORT: case BUTTON_B_SHORT: { -#ifdef PROFILE_SUPPORT - if (profileStartTime != 0) break; // no manual temp change in profile mode -#endif uint16_t oldTemp = getSettingValue(SettingsOptions::SolderingTemp); gui_solderingTempAdjust(); // goto adjust temp mode if (oldTemp != getSettingValue(SettingsOptions::SolderingTemp)) { @@ -142,91 +100,6 @@ void gui_solderingMode(uint8_t jumpToSleep) { } // else we update the screen information -#ifdef PROFILE_SUPPORT - if (profileStartTime != 0) { - if (getSettingValue(SettingsOptions::TemperatureInF)) { - tipTemp = TipThermoModel::getTipInF(); - } else { - tipTemp = TipThermoModel::getTipInC(); - } - - // if start temp is unknown (preheat), we're setting it now - if (phaseStartTemp == 0) { - phaseStartTemp = tipTemp; - // if this is hotter than the preheat temperature, we should fail - if (phaseStartTemp >= 55) { - warnUser(translatedString(Tr->TooHotToStartProfileWarning), 10 * TICKS_SECOND); - return; - } - } - - phaseElapsedSeconds = (xTaskGetTickCount() - phaseStartTime) / TICKS_SECOND; - - // have we finished this phase? - if (phaseElapsedSeconds >= phaseTotalSeconds && tipTemp == phaseEndTemp) { - profilePhase++; - phaseStartTemp = phaseEndTemp; - phaseStartTime = xTaskGetTickCount(); - phaseElapsedSeconds = 0; - if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { - // done with all phases, lets go to cooldown - phaseTotalSeconds = 0; - phaseEndTemp = 0; - phaseTicksPerDegree = TICKS_SECOND / getSettingValue(SettingsOptions::ProfileCooldownSpeed); - } else { - // set up next phase - switch(profilePhase) { - case 1: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase1Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase1Temp); - break; - case 2: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase2Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase2Temp); - break; - case 3: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase3Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase3Temp); - break; - case 4: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase4Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase4Temp); - break; - case 5: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase5Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase5Temp); - break; - } - if (phaseStartTemp < phaseEndTemp) { - phaseTicksPerDegree = (phaseTotalSeconds * TICKS_SECOND) / (phaseEndTemp - phaseStartTemp); - } else { - phaseTicksPerDegree = (phaseTotalSeconds * TICKS_SECOND) / (phaseStartTemp - phaseEndTemp); - } - } - } - - // cooldown phase done? - if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { - if (TipThermoModel::getTipInC() < 55) { - // we're done, let the buzzer beep too - setStatusLED(LED_STANDBY, true); - return; - } - } - - // determine current target temp - if (phaseStartTemp < phaseEndTemp) { - if (profileCurrentTargetTemp < phaseEndTemp) { - profileCurrentTargetTemp = phaseStartTemp + ((xTaskGetTickCount() - phaseStartTime) / phaseTicksPerDegree); - } - } else { - if (profileCurrentTargetTemp > phaseEndTemp) { - profileCurrentTargetTemp = phaseStartTemp - ((xTaskGetTickCount() - phaseStartTime) / phaseTicksPerDegree); - } - } - } -#endif - OLED::clearScreen(); // Draw in the screen details if (getSettingValue(SettingsOptions::DetailedSoldering)) { @@ -236,66 +109,7 @@ void gui_solderingMode(uint8_t jumpToSleep) { OLED::setCursor(-1, 0); } -#ifdef PROFILE_SUPPORT - if (profileStartTime != 0) { - // print temperature - if (OLED::getRotation()) { - OLED::setCursor(48, 0); - } else { - OLED::setCursor(0, 0); - } - - OLED::printNumber(tipTemp, 3, FontStyle::SMALL); - OLED::print(SmallSymbolSlash, FontStyle::SMALL); - OLED::printNumber(profileCurrentTargetTemp, 3, FontStyle::SMALL); - - if (getSettingValue(SettingsOptions::TemperatureInF)) - OLED::print(SmallSymbolDegF, FontStyle::SMALL); - else - OLED::print(SmallSymbolDegC, FontStyle::SMALL); - - // print phase - if (profilePhase > 0 && profilePhase <= getSettingValue(SettingsOptions::ProfilePhases)) { - if (OLED::getRotation()) { - OLED::setCursor(36, 0); - } else { - OLED::setCursor(55, 0); - } - OLED::printNumber(profilePhase, 1, FontStyle::SMALL); - } - - // print time progress / preheat / cooldown - if (OLED::getRotation()) { - OLED::setCursor(42, 8); - } else { - OLED::setCursor(0, 8); - } - - if (profilePhase == 0) { - OLED::print(translatedString(Tr->ProfilePreheatString), FontStyle::SMALL); - } else if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { - OLED::print(translatedString(Tr->ProfileCooldownString), FontStyle::SMALL); - } else { - OLED::printNumber(phaseElapsedSeconds / 60, 1, FontStyle::SMALL); - OLED::print(SmallSymbolColon, FontStyle::SMALL); - OLED::printNumber(phaseElapsedSeconds % 60, 2, FontStyle::SMALL, false); - - OLED::print(SmallSymbolSlash, FontStyle::SMALL); - - // blink if we can't keep up with the time goal - if (phaseElapsedSeconds < phaseTotalSeconds+2 || (xTaskGetTickCount() / TICKS_SECOND) % 2 == 0) { - OLED::printNumber(phaseTotalSeconds / 60, 1, FontStyle::SMALL); - OLED::print(SmallSymbolColon, FontStyle::SMALL); - OLED::printNumber(phaseTotalSeconds % 60, 2, FontStyle::SMALL, false); - } - } - - } else { -#endif gui_drawTipTemp(true, FontStyle::LARGE); -#ifdef PROFILE_SUPPORT - } -#endif #ifndef NO_SLEEP_MODE if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) { @@ -317,78 +131,14 @@ void gui_solderingMode(uint8_t jumpToSleep) { OLED::print(SmallSymbolPlus, FontStyle::SMALL); } - if (OLED::getRotation()) { - OLED::setCursor(0, 0); - } else { - OLED::setCursor(67, 0); - } - // Print wattage - { - uint32_t x10Watt = x10WattHistory.average(); - if (x10Watt > 999) { // If we exceed 99.9W we drop the decimal place to keep it all fitting - OLED::print(SmallSymbolSpace, FontStyle::SMALL); - OLED::printNumber(x10WattHistory.average() / 10, 3, FontStyle::SMALL); - } else { - OLED::printNumber(x10WattHistory.average() / 10, 2, FontStyle::SMALL); - OLED::print(SmallSymbolDot, FontStyle::SMALL); - OLED::printNumber(x10WattHistory.average() % 10, 1, FontStyle::SMALL); - } - OLED::print(SmallSymbolWatts, FontStyle::SMALL); - } + detailedPowerStatus(); - if (OLED::getRotation()) { - OLED::setCursor(0, 8); - } else { - OLED::setCursor(67, 8); - } - printVoltage(); - OLED::print(SmallSymbolVolts, FontStyle::SMALL); } else { - OLED::setCursor(0, 0); - // We switch the layout direction depending on the orientation of the oled - if (OLED::getRotation()) { - // battery - gui_drawBatteryIcon(); - OLED::print(LargeSymbolSpace, FontStyle::LARGE); // Space out gap between battery <-> temp - gui_drawTipTemp(true, FontStyle::LARGE); // Draw current tip temp - - // We draw boost arrow if boosting, or else gap temp <-> heat - // indicator - if (boostModeOn) - OLED::drawSymbol(2); - else - OLED::print(LargeSymbolSpace, FontStyle::LARGE); - - // Draw heating/cooling symbols - OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average())); - } else { - // Draw heating/cooling symbols - OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average())); - // We draw boost arrow if boosting, or else gap temp <-> heat - // indicator - if (boostModeOn) - OLED::drawSymbol(2); - else - OLED::print(LargeSymbolSpace, FontStyle::LARGE); - gui_drawTipTemp(true, FontStyle::LARGE); // Draw current tip temp - - OLED::print(LargeSymbolSpace, FontStyle::LARGE); // Space out gap between battery <-> temp - - gui_drawBatteryIcon(); - } + basicSolderingStatus(boostModeOn); } OLED::refresh(); // Update the setpoints for the temperature -#ifdef PROFILE_SUPPORT - if (profileStartTime != 0) { - if (getSettingValue(SettingsOptions::TemperatureInF)) { - currentTempTargetDegC = TipThermoModel::convertFtoC(profileCurrentTargetTemp); - } else { - currentTempTargetDegC = profileCurrentTargetTemp; - } - } else -#endif if (boostModeOn) { if (getSettingValue(SettingsOptions::TemperatureInF)) currentTempTargetDegC = TipThermoModel::convertFtoC(getSettingValue(SettingsOptions::BoostTemp)); @@ -403,75 +153,31 @@ void gui_solderingMode(uint8_t jumpToSleep) { } } -#ifdef POW_DC - // Undervoltage test - if (checkForUnderVoltage()) { - lastButtonTime = xTaskGetTickCount(); + if (checkExitSoldering()) { + setBuzzer(false); return; } -#endif - -#ifdef ACCEL_EXITS_ON_MOVEMENT - // If the accel works in reverse where movement will cause exiting the soldering mode - if (getSettingValue(SettingsOptions::Sensitivity)) { - if (lastMovementTime) { - if (lastMovementTime > TICKS_SECOND * 10) { - // If we have moved recently; in the last second - // Then exit soldering mode - if (((TickType_t)(xTaskGetTickCount() - lastMovementTime)) < (TickType_t)(TICKS_SECOND)) { - currentTempTargetDegC = 0; - return; - } - } + // Update status + int error = currentTempTargetDegC - TipThermoModel::getTipInC(); + if (error >= -10 && error <= 10) { + // converged + if (!converged) { + setBuzzer(true); + buzzerEnd = xTaskGetTickCount() + TICKS_SECOND / 3; + converged = true; } - } -#endif -#ifdef NO_SLEEP_MODE - // No sleep mode, but still want shutdown timeout - - if (shouldShutdown()) { - // shutdown - currentTempTargetDegC = 0; - return; // we want to exit soldering mode - } -#endif - if (shouldBeSleeping(false)) { - if (gui_SolderingSleepingMode(false, false)) { - return; // If the function returns non-0 then exit - } - } -#ifdef PROFILE_SUPPORT - if (profileStartTime == 0) { -#endif - // Update LED status (manual mode) - int error = currentTempTargetDegC - TipThermoModel::getTipInC(); - if (error >= -10 && error <= 10) { - // converged - setStatusLED(LED_HOT, true); - } else { - setStatusLED(LED_HEATING, false); - } -#ifdef PROFILE_SUPPORT + setStatusLED(LED_HOT); } else { - // Update LED status (profile mode) - if (profilePhase == 0) { - setStatusLED(LED_HEATING, false); - } else if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { - setStatusLED(LED_COOLING_STILL_HOT, false); - } else { - setStatusLED(LED_HOT, false); - } + setStatusLED(LED_HEATING); + converged = false; } -#endif - // If we have tripped thermal runaway, turn off heater and show warning - if (heaterThermalRunaway) { - currentTempTargetDegC = 0; // heater control off - warnUser(translatedString(Tr->WarningThermalRunaway), 10 * TICKS_SECOND); - heaterThermalRunaway = false; - return; + if (buzzerEnd != 0 && xTaskGetTickCount() >= buzzerEnd) { + setBuzzer(false); } + // slow down ui update rate GUIDelay(); } } + diff --git a/source/Core/Threads/OperatingModes/SolderingProfile.cpp b/source/Core/Threads/OperatingModes/SolderingProfile.cpp new file mode 100644 index 0000000000..70c206a46f --- /dev/null +++ b/source/Core/Threads/OperatingModes/SolderingProfile.cpp @@ -0,0 +1,228 @@ + +#include "OperatingModes.h" +#include "SolderingCommon.h" + +extern OperatingMode currentMode; + +void gui_solderingProfileMode() { + /* + * * Soldering (gui_solderingMode) + * -> Main loop where we draw temp, and animations + * PID control + * --> Long hold back button to exit + * --> Double button to exit + */ + currentMode = OperatingMode::soldering; + + TickType_t buzzerEnd = 0; + + bool waitForRelease = true; + TickType_t phaseStartTime = xTaskGetTickCount(); + + uint16_t tipTemp = 0; + uint8_t profilePhase = 0; + + uint16_t phaseElapsedSeconds = 0; + uint16_t phaseTotalSeconds = 0; + uint16_t phaseStartTemp = 0; + uint16_t phaseEndTemp = getSettingValue(SettingsOptions::ProfilePreheatTemp); + uint16_t phaseTicksPerDegree = TICKS_SECOND / getSettingValue(SettingsOptions::ProfilePreheatSpeed); + uint16_t profileCurrentTargetTemp = 0; + + for (;;) { + ButtonState buttons = getButtonState(); + if (buttons) { + if (waitForRelease) buttons = BUTTON_NONE; + } else { + waitForRelease = false; + } + + switch (buttons) { + case BUTTON_NONE: + break; + case BUTTON_BOTH: + case BUTTON_B_LONG: + return; // exit on back long hold + case BUTTON_F_LONG: + case BUTTON_F_SHORT: + case BUTTON_B_SHORT: + // Not used yet + break; + default: + break; + } + + if (getSettingValue(SettingsOptions::TemperatureInF)) { + tipTemp = TipThermoModel::getTipInF(); + } else { + tipTemp = TipThermoModel::getTipInC(); + } + + // if start temp is unknown (preheat), we're setting it now + if (phaseStartTemp == 0) { + phaseStartTemp = tipTemp; + // if this is hotter than the preheat temperature, we should fail + if (phaseStartTemp >= 55) { + warnUser(translatedString(Tr->TooHotToStartProfileWarning), 10 * TICKS_SECOND); + return; + } + } + + phaseElapsedSeconds = (xTaskGetTickCount() - phaseStartTime) / TICKS_SECOND; + + // have we finished this phase? + if (phaseElapsedSeconds >= phaseTotalSeconds && tipTemp == phaseEndTemp) { + profilePhase++; + phaseStartTemp = phaseEndTemp; + phaseStartTime = xTaskGetTickCount(); + phaseElapsedSeconds = 0; + if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + // done with all phases, lets go to cooldown + phaseTotalSeconds = 0; + phaseEndTemp = 0; + phaseTicksPerDegree = TICKS_SECOND / getSettingValue(SettingsOptions::ProfileCooldownSpeed); + } else { + // set up next phase + switch(profilePhase) { + case 1: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase1Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase1Temp); + break; + case 2: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase2Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase2Temp); + break; + case 3: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase3Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase3Temp); + break; + case 4: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase4Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase4Temp); + break; + case 5: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase5Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase5Temp); + break; + default: + break; + } + if (phaseStartTemp < phaseEndTemp) { + phaseTicksPerDegree = (phaseTotalSeconds * TICKS_SECOND) / (phaseEndTemp - phaseStartTemp); + } else { + phaseTicksPerDegree = (phaseTotalSeconds * TICKS_SECOND) / (phaseStartTemp - phaseEndTemp); + } + } + } + + // cooldown phase done? + if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + if (TipThermoModel::getTipInC() < 55) { + // we're done, let the buzzer beep too + setStatusLED(LED_STANDBY); + if (buzzerEnd == 0) { + setBuzzer(true); + buzzerEnd = xTaskGetTickCount() + TICKS_SECOND / 3; + } + } + } + + // determine current target temp + if (phaseStartTemp < phaseEndTemp) { + if (profileCurrentTargetTemp < phaseEndTemp) { + profileCurrentTargetTemp = phaseStartTemp + ((xTaskGetTickCount() - phaseStartTime) / phaseTicksPerDegree); + } + } else { + if (profileCurrentTargetTemp > phaseEndTemp) { + profileCurrentTargetTemp = phaseStartTemp - ((xTaskGetTickCount() - phaseStartTime) / phaseTicksPerDegree); + } + } + + OLED::clearScreen(); + // Draw in the screen details + if (getSettingValue(SettingsOptions::DetailedSoldering)) { + // print temperature + if (OLED::getRotation()) { + OLED::setCursor(48, 0); + } else { + OLED::setCursor(0, 0); + } + + OLED::printNumber(tipTemp, 3, FontStyle::SMALL); + OLED::print(SmallSymbolSlash, FontStyle::SMALL); + OLED::printNumber(profileCurrentTargetTemp, 3, FontStyle::SMALL); + + if (getSettingValue(SettingsOptions::TemperatureInF)) + OLED::print(SmallSymbolDegF, FontStyle::SMALL); + else + OLED::print(SmallSymbolDegC, FontStyle::SMALL); + + // print phase + if (profilePhase > 0 && profilePhase <= getSettingValue(SettingsOptions::ProfilePhases)) { + if (OLED::getRotation()) { + OLED::setCursor(36, 0); + } else { + OLED::setCursor(55, 0); + } + OLED::printNumber(profilePhase, 1, FontStyle::SMALL); + } + + // print time progress / preheat / cooldown + if (OLED::getRotation()) { + OLED::setCursor(42, 8); + } else { + OLED::setCursor(0, 8); + } + + if (profilePhase == 0) { + OLED::print(translatedString(Tr->ProfilePreheatString), FontStyle::SMALL); + } else if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + OLED::print(translatedString(Tr->ProfileCooldownString), FontStyle::SMALL); + } else { + OLED::printNumber(phaseElapsedSeconds / 60, 1, FontStyle::SMALL); + OLED::print(SmallSymbolColon, FontStyle::SMALL); + OLED::printNumber(phaseElapsedSeconds % 60, 2, FontStyle::SMALL, false); + + OLED::print(SmallSymbolSlash, FontStyle::SMALL); + + // blink if we can't keep up with the time goal + if (phaseElapsedSeconds < phaseTotalSeconds+2 || (xTaskGetTickCount() / TICKS_SECOND) % 2 == 0) { + OLED::printNumber(phaseTotalSeconds / 60, 1, FontStyle::SMALL); + OLED::print(SmallSymbolColon, FontStyle::SMALL); + OLED::printNumber(phaseTotalSeconds % 60, 2, FontStyle::SMALL, false); + } + } + + detailedPowerStatus(); + + } else { + basicSolderingStatus(false); + } + + OLED::refresh(); + // Update the setpoints for the temperature + if (getSettingValue(SettingsOptions::TemperatureInF)) { + currentTempTargetDegC = TipThermoModel::convertFtoC(profileCurrentTargetTemp); + } else { + currentTempTargetDegC = profileCurrentTargetTemp; + } + + if (checkExitSoldering() || (buzzerEnd != 0 && xTaskGetTickCount() >= buzzerEnd)) { + setBuzzer(false); + return; + } + + // Update LED status + if (profilePhase == 0) { + setStatusLED(LED_HEATING); + } else if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { + setStatusLED(LED_COOLING_STILL_HOT); + } else { + setStatusLED(LED_HOT); + } + + // slow down ui update rate + GUIDelay(); + } +} + diff --git a/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp b/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp new file mode 100644 index 0000000000..0feb65d3eb --- /dev/null +++ b/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp @@ -0,0 +1,123 @@ +// +// Created by laura on 24.04.23. +// + +#include "OperatingModes.h" +#include "SolderingCommon.h" + +extern bool heaterThermalRunaway; + +void detailedPowerStatus() { + if (OLED::getRotation()) { + OLED::setCursor(0, 0); + } else { + OLED::setCursor(67, 0); + } + // Print wattage + { + uint32_t x10Watt = x10WattHistory.average(); + if (x10Watt > 999) { // If we exceed 99.9W we drop the decimal place to keep it all fitting + OLED::print(SmallSymbolSpace, FontStyle::SMALL); + OLED::printNumber(x10WattHistory.average() / 10, 3, FontStyle::SMALL); + } else { + OLED::printNumber(x10WattHistory.average() / 10, 2, FontStyle::SMALL); + OLED::print(SmallSymbolDot, FontStyle::SMALL); + OLED::printNumber(x10WattHistory.average() % 10, 1, FontStyle::SMALL); + } + OLED::print(SmallSymbolWatts, FontStyle::SMALL); + } + + if (OLED::getRotation()) { + OLED::setCursor(0, 8); + } else { + OLED::setCursor(67, 8); + } + printVoltage(); + OLED::print(SmallSymbolVolts, FontStyle::SMALL); +} + +void basicSolderingStatus(bool boostModeOn) { + OLED::setCursor(0, 0); + // We switch the layout direction depending on the orientation of the oled + if (OLED::getRotation()) { + // battery + gui_drawBatteryIcon(); + OLED::print(LargeSymbolSpace, FontStyle::LARGE); // Space out gap between battery <-> temp + gui_drawTipTemp(true, FontStyle::LARGE); // Draw current tip temp + + // We draw boost arrow if boosting, or else gap temp <-> heat + // indicator + if (boostModeOn) + OLED::drawSymbol(2); + else + OLED::print(LargeSymbolSpace, FontStyle::LARGE); + + // Draw heating/cooling symbols + OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average())); + } else { + // Draw heating/cooling symbols + OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average())); + // We draw boost arrow if boosting, or else gap temp <-> heat + // indicator + if (boostModeOn) + OLED::drawSymbol(2); + else + OLED::print(LargeSymbolSpace, FontStyle::LARGE); + gui_drawTipTemp(true, FontStyle::LARGE); // Draw current tip temp + + OLED::print(LargeSymbolSpace, FontStyle::LARGE); // Space out gap between battery <-> temp + + gui_drawBatteryIcon(); + } +} + +bool checkExitSoldering(void) { +#ifdef POW_DC + // Undervoltage test + if (checkForUnderVoltage()) { + lastButtonTime = xTaskGetTickCount(); + return true; + } +#endif + +#ifdef ACCEL_EXITS_ON_MOVEMENT + // If the accel works in reverse where movement will cause exiting the soldering mode + if (getSettingValue(Sensitivity)) { + if (lastMovementTime) { + if (lastMovementTime > TICKS_SECOND * 10) { + // If we have moved recently; in the last second + // Then exit soldering mode + + if (((TickType_t)(xTaskGetTickCount() - lastMovementTime)) < (TickType_t)(TICKS_SECOND)) { + currentTempTargetDegC = 0; + return true; + } + } + } + } +#endif +#ifdef NO_SLEEP_MODE + // No sleep mode, but still want shutdown timeout + + if (shouldShutdown()) { + // shutdown + currentTempTargetDegC = 0; + return true; // we want to exit soldering mode + } +#endif + if (shouldBeSleeping(false)) { + if (gui_SolderingSleepingMode(false, false)) { + return true; // If the function returns non-0 then exit + } + } + + // If we have tripped thermal runaway, turn off heater and show warning + if (heaterThermalRunaway) { + currentTempTargetDegC = 0; // heater control off + warnUser(translatedString(Tr->WarningThermalRunaway), 10 * TICKS_SECOND); + heaterThermalRunaway = false; + return true; + } + + return false; +} \ No newline at end of file diff --git a/source/Core/Threads/OperatingModes/utils/SolderingCommon.h b/source/Core/Threads/OperatingModes/utils/SolderingCommon.h new file mode 100644 index 0000000000..13443e6cce --- /dev/null +++ b/source/Core/Threads/OperatingModes/utils/SolderingCommon.h @@ -0,0 +1,8 @@ +#ifndef SOLDERING_COMMON_H +#define SOLDERING_COMMON_H + +void detailedPowerStatus(); +void basicSolderingStatus(bool boostModeOn); +bool checkExitSoldering(); + +#endif //SOLDERING_COMMON_H From d053c387403bdb810a7c6f4f119bd23d55bd349f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 02:48:31 +0200 Subject: [PATCH 10/19] add english defaults to all translations --- Translations/translation_BE.json | 65 +++++++++++++++++++++++++++ Translations/translation_BG.json | 65 +++++++++++++++++++++++++++ Translations/translation_CS.json | 65 +++++++++++++++++++++++++++ Translations/translation_DA.json | 65 +++++++++++++++++++++++++++ Translations/translation_EL.json | 65 +++++++++++++++++++++++++++ Translations/translation_ES.json | 65 +++++++++++++++++++++++++++ Translations/translation_FI.json | 65 +++++++++++++++++++++++++++ Translations/translation_FR.json | 65 +++++++++++++++++++++++++++ Translations/translation_HR.json | 65 +++++++++++++++++++++++++++ Translations/translation_HU.json | 65 +++++++++++++++++++++++++++ Translations/translation_IT.json | 65 +++++++++++++++++++++++++++ Translations/translation_JA_JP.json | 65 +++++++++++++++++++++++++++ Translations/translation_LT.json | 65 +++++++++++++++++++++++++++ Translations/translation_NB.json | 65 +++++++++++++++++++++++++++ Translations/translation_NL.json | 65 +++++++++++++++++++++++++++ Translations/translation_NL_BE.json | 65 +++++++++++++++++++++++++++ Translations/translation_PL.json | 65 +++++++++++++++++++++++++++ Translations/translation_PT.json | 65 +++++++++++++++++++++++++++ Translations/translation_RO.json | 65 +++++++++++++++++++++++++++ Translations/translation_RU.json | 65 +++++++++++++++++++++++++++ Translations/translation_SK.json | 65 +++++++++++++++++++++++++++ Translations/translation_SL.json | 65 +++++++++++++++++++++++++++ Translations/translation_SR_CYRL.json | 65 +++++++++++++++++++++++++++ Translations/translation_SR_LATN.json | 65 +++++++++++++++++++++++++++ Translations/translation_SV.json | 65 +++++++++++++++++++++++++++ Translations/translation_TR.json | 65 +++++++++++++++++++++++++++ Translations/translation_UK.json | 65 +++++++++++++++++++++++++++ Translations/translation_VI.json | 65 +++++++++++++++++++++++++++ Translations/translation_YUE_HK.json | 65 +++++++++++++++++++++++++++ Translations/translation_ZH_CN.json | 65 +++++++++++++++++++++++++++ Translations/translation_ZH_TW.json | 65 +++++++++++++++++++++++++++ 31 files changed, 2015 insertions(+) diff --git a/Translations/translation_BE.json b/Translations/translation_BE.json index e901ab092e..9d180ebd62 100644 --- a/Translations/translation_BE.json +++ b/Translations/translation_BE.json @@ -60,8 +60,17 @@ "OffString": { "message": "Выкл." }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Ваша прылада, хутчэй за ўсё, падробка!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Дазволіць\nблок. кнопак", "description": "Пры рабоце падоўжаны націск дзьвух кнопак блакуе іх (А=Адключана | Т=Толькі турба | П=Поўная блакіроўка)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Адчувальнасць\nакселерометра", "description": "Адчувальнасць акселерометра (0=Выкл. | 1=Мін. | ... | 9=Макс.)" diff --git a/Translations/translation_BG.json b/Translations/translation_BG.json index af386423ff..e32b83f1c7 100644 --- a/Translations/translation_BG.json +++ b/Translations/translation_BG.json @@ -60,8 +60,17 @@ "OffString": { "message": "Изкл." }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Allow locking\nbuttons", "description": "While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Усещане\nза движение", "description": "Усещане за движение (0=Изключено | 1=Слабо | ... | 9=Силно)" diff --git a/Translations/translation_CS.json b/Translations/translation_CS.json index 43dbf35dde..90739a29ca 100644 --- a/Translations/translation_CS.json +++ b/Translations/translation_CS.json @@ -60,8 +60,17 @@ "OffString": { "message": "Vyp" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Vaše zařízení je s nejvyšší pravděpodobností padělek!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Povolit zamč.\ntlačítek", "description": "Při pájení podržte obě tlačítka pro jejich zamčení (Z=zakázáno | B=pouze v režimu boost | U=úplné zamčení)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Citlivost\nna pohyb", "description": "0=vyp | 1=nejméně citlivé | ... | 9=nejvíce citlivé" diff --git a/Translations/translation_DA.json b/Translations/translation_DA.json index 1b665ede36..fbdd348cc9 100644 --- a/Translations/translation_DA.json +++ b/Translations/translation_DA.json @@ -60,8 +60,17 @@ "OffString": { "message": "Off" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Din enhed er højst sandsyneligt en Kopivare!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Tillad låsning\naf knapperne", "description": "Hold begge knapper nede under lodning for at låse dem (D=deaktiver | B=kun boost-tilstand | F=fuld låsning)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Bevægelses\nfølsomhed", "description": "Bevægelsesfølsomhed (0=Slukket | 1=Mindst følsom | ... | 9=Mest følsom)" diff --git a/Translations/translation_EL.json b/Translations/translation_EL.json index ae0fe45414..2791444b66 100644 --- a/Translations/translation_EL.json +++ b/Translations/translation_EL.json @@ -60,8 +60,17 @@ "OffString": { "message": "Απ." }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Η συσκευή σας ίσως να μην είναι αυθεντική!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Κλείδωμα\nπλήκτρων", "description": "Κατά την κόλληση, κρατήστε και τα δύο πλήκτρα για κλείδωμα (A=απενεργοποίηση | B=μόνο λειτ. boost | Π=πλήρες κλείδωμα)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Ευαισθησία\nκίνησης", "description": "0=off | 1=λιγότερο ευαίσθητο | ... | 9=περισσότερο ευαίσθητο" diff --git a/Translations/translation_ES.json b/Translations/translation_ES.json index 81f00026cc..7c17fe660b 100644 --- a/Translations/translation_ES.json +++ b/Translations/translation_ES.json @@ -60,8 +60,17 @@ "OffString": { "message": "No" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "¡Lo más probable es que su dispositivo sea una falsificación!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Permitir botones\nbloqueo", "description": "Mientras suelda, mantenga pulsados ambos botones para alternar su bloqueo (D=desactivar | B=sólo modo boost | F=bloqueo total)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Detección de\nmovimiento", "description": "Tiempo de reacción al agarrar (0=no | 1=menos sensible | ... | 9=más sensible)" diff --git a/Translations/translation_FI.json b/Translations/translation_FI.json index 751ff7c7b2..0831af0af3 100644 --- a/Translations/translation_FI.json +++ b/Translations/translation_FI.json @@ -60,8 +60,17 @@ "OffString": { "message": "Off" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Salli nappien\nlukitus", "description": "Kolvatessa paina molempia näppäimiä lukitaksesi ne (P=pois | V=vain tehostus | K=kaikki)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Liikkeen\nherkkyys", "description": "0=pois päältä | 1=vähäinen herkkyys | ... | 9=suurin herkkyys" diff --git a/Translations/translation_FR.json b/Translations/translation_FR.json index 2805938819..ea7984cb38 100644 --- a/Translations/translation_FR.json +++ b/Translations/translation_FR.json @@ -60,8 +60,17 @@ "OffString": { "message": "Off" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Votre appareil semble être une contrefaçon !" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Verrouiller\nles boutons", "description": "Pendant la soudure, appuyer sur les deux boutons pour les verrouiller (D=désactivé | B=boost seulement | V=verr. total)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Sensibilité\nau mouvement", "description": "0=désactivé | 1=peu sensible | ... | 9=très sensible" diff --git a/Translations/translation_HR.json b/Translations/translation_HR.json index b1e555427c..7256ef8843 100644 --- a/Translations/translation_HR.json +++ b/Translations/translation_HR.json @@ -60,8 +60,17 @@ "OffString": { "message": "Off" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Vaš uređaj je najvjerojatnije krivotvoren!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Zaključavanje\ntipki", "description": "Tokom lemljenja, držite obje tipke kako biste ih zaključali ili otključali (O=otključano | B=zaključan boost | Z=zaključano sve)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Osjetljivost\npokreta", "description": "Osjetljivost prepoznavanja pokreta. (0=ugašeno | 1=najmanje osjetljivo | ... | 9=najosjetljivije)" diff --git a/Translations/translation_HU.json b/Translations/translation_HU.json index db9259565e..74e0a0c459 100644 --- a/Translations/translation_HU.json +++ b/Translations/translation_HU.json @@ -60,8 +60,17 @@ "OffString": { "message": "Ki" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Az eszköz valószínűleg nem eredeti!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Lezárás\nengedélyezés", "description": "Forrasztás közben mindkét gombot hosszan lenyomva lezárja a kezelést (K=ki | B=csak \"boost\" módban | T=teljes lezárás)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Mozgás\nérzékenység", "description": "Mozgás érzékenység beállítása (0=kikapcsolva | 1=legkevésbé érzékeny | ... | 9=legérzékenyebb)" diff --git a/Translations/translation_IT.json b/Translations/translation_IT.json index 209f6a3b70..f5bfea2564 100644 --- a/Translations/translation_IT.json +++ b/Translations/translation_IT.json @@ -60,8 +60,17 @@ "OffString": { "message": "OFF" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "È probabile che questo dispositivo sia contraffatto!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Blocco\ntasti", "description": "Blocca i tasti durante la modalità Saldatura; tieni premuto entrambi per bloccare o sbloccare [D: disattiva; T: consenti Turbo; C: blocco completo]" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Sensibilità\nal movimento", "description": "Imposta la sensibilità al movimento per uscire dalla modalità Riposo [0: nessuna; 1: minima; 9: massima]" diff --git a/Translations/translation_JA_JP.json b/Translations/translation_JA_JP.json index aa7f2a5f3c..92f0fa20e3 100755 --- a/Translations/translation_JA_JP.json +++ b/Translations/translation_JA_JP.json @@ -60,8 +60,17 @@ "OffString": { "message": "オフ" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "このデバイスはおそらく偽造品です" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "ボタンロック", "description": "半田付けモード時に両方のボタンを長押しし、ボタンロックする <×=オフ | ブ=ブーストのみ許可 | 全=すべてをロック>" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "動きの感度", "description": "0=オフ | 1=最低感度 | ... | 9=最高感度" diff --git a/Translations/translation_LT.json b/Translations/translation_LT.json index 1eb71aceb3..0dd08c10e2 100644 --- a/Translations/translation_LT.json +++ b/Translations/translation_LT.json @@ -60,8 +60,17 @@ "OffString": { "message": "Išj" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Mygtukų\nužraktas", "description": "Lituodami, ilgai paspauskite abu mygtukus, kad juos užrakintumėte (I=Išjungta | T=leidžiamas tik Turbo režimas | V=Visiškas užrakinimas)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Judesio\njautrumas", "description": "Judesio jautrumas (0=Išjungta | 1=Mažiausias | ... | 9=Didžiausias)" diff --git a/Translations/translation_NB.json b/Translations/translation_NB.json index b471813797..c0c383a0c4 100644 --- a/Translations/translation_NB.json +++ b/Translations/translation_NB.json @@ -60,8 +60,17 @@ "OffString": { "message": "Av" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Enheten din er sannsynligvis en forfalskning!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Tillat å låse\nknapper", "description": "Mens du lodder, hold nede begge knapper for å bytte mellom låsemodus (D=deaktiver | B=kun boost | F=full lås)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "BSensr\n", "description": "Bevegelsesfølsomhet (0=Inaktiv | 1=Minst følsom | ... | 9=Mest følsom)" diff --git a/Translations/translation_NL.json b/Translations/translation_NL.json index 02a3c1f10e..f848c26b71 100644 --- a/Translations/translation_NL.json +++ b/Translations/translation_NL.json @@ -60,8 +60,17 @@ "OffString": { "message": "Uit" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Jouw toestel is wellicht een namaak-versie!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Knopblokkering\ninschakelen", "description": "Tijdens solderen lang op beide knoppen drukken blokkeert de knoppen (U=Uit | B=Alleen boost mode | V=Volledig blokkeren)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Bewegings-\ngevoeligheid", "description": "Bewegingsgevoeligheid (0=uit | 1=minst gevoelig | ... | 9=meest gevoelig)" diff --git a/Translations/translation_NL_BE.json b/Translations/translation_NL_BE.json index 9f7f82c6da..1db7230821 100644 --- a/Translations/translation_NL_BE.json +++ b/Translations/translation_NL_BE.json @@ -60,8 +60,17 @@ "OffString": { "message": "Uit" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Allow locking\nbuttons", "description": "While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Bewegings-\ngevoeligheid", "description": "Bewegingsgevoeligheid (0=uit | 1=minst gevoelig | ... | 9=meest gevoelig)" diff --git a/Translations/translation_PL.json b/Translations/translation_PL.json index 9526f8b522..312767f3ad 100644 --- a/Translations/translation_PL.json +++ b/Translations/translation_PL.json @@ -60,8 +60,17 @@ "OffString": { "message": "Wył" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Twoje urządzenie jest najprawdopodobniej podróbką!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Blokada\nprzycisków", "description": "W trybie lutowania, wciśnij oba przyciski aby je zablokować (O=Wyłączona | B=tylko Boost | P=pełna blokada)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Czułość\nwykr. ruchu", "description": "Czułość wykrywania ruchu (0: Wyłączona | 1: Minimalna | ... | 9: Maksymalna)" diff --git a/Translations/translation_PT.json b/Translations/translation_PT.json index 883a967788..22835448bb 100644 --- a/Translations/translation_PT.json +++ b/Translations/translation_PT.json @@ -60,8 +60,17 @@ "OffString": { "message": "Off" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Seu dispositivo provavelmente é falsificado!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Permitir bloquear\nbutões", "description": "Durante a solda primir os dois butões para alternar entre (D=disativas | B=boost mode | F=bloqueio total)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Sensibilidade\nmovimento", "description": "Sensibilidade ao movimento (0=Desligado | 1=Menor | ... | 9=Maior)" diff --git a/Translations/translation_RO.json b/Translations/translation_RO.json index eff6ac37ac..bf04a3df5d 100644 --- a/Translations/translation_RO.json +++ b/Translations/translation_RO.json @@ -60,8 +60,17 @@ "OffString": { "message": "Nu" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Dispozitivul dvs. este cel mai probabil un fals!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Blocare\nbutoane", "description": "Când lipiţi, apăsaţi lung ambele butoane, pentru a le bloca (D=dezactivare | B=numai \"modul boost\" | F=blocare completă)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Sensibilitate\nla miscare", "description": "Sensibilitate senzor miscare (0=oprit | 1=puţin sensibil | ... | 9=cel mai sensibil)" diff --git a/Translations/translation_RU.json b/Translations/translation_RU.json index fe52dc9a72..9a2803e0b6 100644 --- a/Translations/translation_RU.json +++ b/Translations/translation_RU.json @@ -60,8 +60,17 @@ "OffString": { "message": "Вык" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Скорее всего, это устройство подделка!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Разрешить\nблок. кнопок", "description": "При работе длинное нажатие обеих кнопок блокирует их (О=Отключено | Т=Только турбо | П=Полная блокировка)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Чувствительн.\nакселерометра", "description": "Чувствительность акселерометра (0=Выкл. | 1=мин. | ... | 9=макс.)" diff --git a/Translations/translation_SK.json b/Translations/translation_SK.json index 1642a2fc5e..8ec31214b2 100644 --- a/Translations/translation_SK.json +++ b/Translations/translation_SK.json @@ -60,8 +60,17 @@ "OffString": { "message": "Vyp" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Vaše zariadenie je pravdepodobne falzifikát!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Povoliť zámok\ntlačidiel", "description": "Zamknutie tlačidiel - dlhé stlačenie oboch naraz počas spájkovania (Z=Zakázať | B=Okrem boost | P=Plné zamknutie)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Citlivosť\npohybu", "description": "Citlivosť detekcie pohybu (0=Vyp | 1=Min | ... | 9=Max)" diff --git a/Translations/translation_SL.json b/Translations/translation_SL.json index 5e775923de..0cb2053168 100644 --- a/Translations/translation_SL.json +++ b/Translations/translation_SL.json @@ -60,8 +60,17 @@ "OffString": { "message": "Off" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Omogoči\nzaklep gumbov", "description": "Za zaklep med spajkanjem drži oba gumba (O=onemogoči | L=le pospešeno | P=polno)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Občutljivost\npremikanja", "description": "0=izklopljeno | 1=najmanjša | ... | 9=največja" diff --git a/Translations/translation_SR_CYRL.json b/Translations/translation_SR_CYRL.json index bca7ab6281..e1b552808f 100644 --- a/Translations/translation_SR_CYRL.json +++ b/Translations/translation_SR_CYRL.json @@ -60,8 +60,17 @@ "OffString": { "message": "Иск" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Allow locking\nbuttons", "description": "While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Осетљивост\nна покрет", "description": "Осетљивост сензора покрета. (0=искључено | 1=најмање осетљиво | ... | 9=најосетљивије)" diff --git a/Translations/translation_SR_LATN.json b/Translations/translation_SR_LATN.json index 83774e181b..38698ca7c6 100644 --- a/Translations/translation_SR_LATN.json +++ b/Translations/translation_SR_LATN.json @@ -60,8 +60,17 @@ "OffString": { "message": "Isk" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Allow locking\nbuttons", "description": "While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Osetljivost\nna pokret", "description": "Osetljivost senzora pokreta. (0=isključeno | 1=najmanje osetljivo | ... | 9=najosetljivije)" diff --git a/Translations/translation_SV.json b/Translations/translation_SV.json index 075bcd3029..6b9ac56282 100644 --- a/Translations/translation_SV.json +++ b/Translations/translation_SV.json @@ -60,8 +60,17 @@ "OffString": { "message": "Av" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Tillåt lås\nvia knappar", "description": "Vid lödning, håll nere bägge knappar för att slå på lås (A=Av | T=Bara turbo | F=Fullt lås)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Rörelse-\nkänslighet", "description": "Rörelsekänslighet (0=Av | 1=minst känslig | ... | 9=mest känslig)" diff --git a/Translations/translation_TR.json b/Translations/translation_TR.json index e22aa7e5d2..36a33937f2 100644 --- a/Translations/translation_TR.json +++ b/Translations/translation_TR.json @@ -60,8 +60,17 @@ "OffString": { "message": "Kapalı" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Allow locking\nbuttons", "description": "While soldering, hold down both buttons to toggle locking them (K=Kapalı | B=boost mode only | F=full locking)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "HARHAS\n", "description": "Hareket Hassasiyeti (0=Kapalı | 1=En az duyarlı | ... | 9=En duyarlı)" diff --git a/Translations/translation_UK.json b/Translations/translation_UK.json index 873c3f160b..55dee6552c 100644 --- a/Translations/translation_UK.json +++ b/Translations/translation_UK.json @@ -60,8 +60,17 @@ "OffString": { "message": "Вимк" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Вірогідно ваш пристрій підробний!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Дозволити\nблок. кнопок", "description": "Під час пайки тривале натискання обох кнопок заблокує їх (В=Вимк | Т=Тільки турбо | П=Повне)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Чутливість\nсенсору руху", "description": "Акселерометр (0=Вимк. | 1=мін. чутливості | ... | 9=макс. чутливості)" diff --git a/Translations/translation_VI.json b/Translations/translation_VI.json index e4dbeb3df3..d77ee97eed 100644 --- a/Translations/translation_VI.json +++ b/Translations/translation_VI.json @@ -60,8 +60,17 @@ "OffString": { "message": "Tat" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "Your device is most likely a counterfeit!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "Cho phép khóa\ncác nút", "description": "Trong khi hàn, giu ca 2 nút đe khóa(D=tat | B=chi che đo tăng cuong | F=khóa hoàn toàn)" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "Cam bien\ncu đong", "description": "- 0=tat | 1=đo nhay thap nhat| ... | 9=đo nhay cao nhat" diff --git a/Translations/translation_YUE_HK.json b/Translations/translation_YUE_HK.json index 069671b430..127e555dae 100644 --- a/Translations/translation_YUE_HK.json +++ b/Translations/translation_YUE_HK.json @@ -60,8 +60,17 @@ "OffString": { "message": "關" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "依支焫雞好有可能係冒牌貨!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "撳掣鎖定", "description": "喺焊接模式時,同時長撳兩粒掣啓用撳掣鎖定 <無=停用 | 增=淨係容許增熱模式 | 全=鎖定全部>" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "動作敏感度", "description": "0=停用 | 1=最低敏感度 | ... | 9=最高敏感度" diff --git a/Translations/translation_ZH_CN.json b/Translations/translation_ZH_CN.json index 5ef18c924d..48da8c1d4b 100644 --- a/Translations/translation_ZH_CN.json +++ b/Translations/translation_ZH_CN.json @@ -60,8 +60,17 @@ "OffString": { "message": "关" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "这支电烙铁很有可能是冒牌货!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "按键锁定", "description": "焊接模式时,同时长按两个按键启用按键锁定 <无=禁用 | 增=只容许增热模式 | 全=完全锁定>" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "动作灵敏度", "description": "0=禁用 | 1=最低灵敏度 | ... | 9=最高灵敏度" diff --git a/Translations/translation_ZH_TW.json b/Translations/translation_ZH_TW.json index 0be42f53ba..30e9bd0cce 100644 --- a/Translations/translation_ZH_TW.json +++ b/Translations/translation_ZH_TW.json @@ -60,8 +60,17 @@ "OffString": { "message": "關" }, + "ProfilePreheatString": { + "message": "Preheat\n" + }, + "ProfileCooldownString": { + "message": "Cooldown\n" + }, "DeviceFailedValidationWarning": { "message": "這支電烙鐵很有可能是冒牌貨!" + }, + "TooHotToStartProfileWarning": { + "message": "Too hot to\nstart profile" } }, "characters": { @@ -143,6 +152,62 @@ "displayText": "按鍵鎖定", "description": "於焊接模式時,同時長按兩個按鍵啟用按鍵鎖定 <無=停用 | 增=只容許增熱模式 | 全=鎖定全部>" }, + "ProfilePhases": { + "displayText": "Profile\nPhases", + "description": "Number of phases for the soldering profile" + }, + "ProfilePreheatTemp": { + "displayText": "Preheat\nTemp", + "description": "Preheat to this temperature when starting the profile" + }, + "ProfilePreheatSpeed": { + "displayText": "Preheat\nSpeed", + "description": "Preheat at this rate (degrees per second)" + }, + "ProfilePhase1Temp": { + "displayText": "Phase 1\nTemp", + "description": "Target temperature for the end of this phase" + }, + "ProfilePhase1Duration": { + "displayText": "Phase 1\nDuration", + "description": "Target duration of this phase (seconds)" + }, + "ProfilePhase2Temp": { + "displayText": "Phase 2\nTemp", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "Phase 2\nDuration", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "Phase 3\nTemp", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "Phase 3\nDuration", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "Phase 4\nTemp", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "Phase 4\nDuration", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "Phase 5\nTemp", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "Phase 5\nDuration", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Cooldown\nSpeed", + "description": "Cooldown at this rate after the last phase (degrees per second)" + }, "MotionSensitivity": { "displayText": "動作敏感度", "description": "0=停用 | 1=最低敏感度 | ... | 9=最高敏感度" From 366cfbd79442a4ae0316c8142cf54cb0859710cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 13:46:18 +0200 Subject: [PATCH 11/19] add missing comment and exclude sleep code if sleep is disabled --- source/Core/Src/settingsGUI.cpp | 16 ++++++++++++++++ source/Core/Threads/OperatingModes/Sleep.cpp | 2 ++ 2 files changed, 18 insertions(+) diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index 0b02228410..8f752bc5a0 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -240,6 +240,22 @@ const menuitem solderingMenu[] = { * Temp Change Short Step * Temp Change Long Step * Locking Mode + * Profile Phases + * Profile Preheat Temperature + * Profile Preheat Max Temperature Change Per Second + * Profile Phase 1 Temperature + * Profile Phase 1 Duration (s) + * Profile Phase 2 Temperature + * Profile Phase 2 Duration (s) + * Profile Phase 3 Temperature + * Profile Phase 3 Duration (s) + * Profile Phase 4 Temperature + * Profile Phase 4 Duration (s) + * Profile Phase 5 Temperature + * Profile Phase 5 Duration (s) + * Profile Phase 6 Temperature + * Profile Phase 6 Duration (s) + * Profile Cooldown Max Temperature Change Per Second */ {SETTINGS_DESC(SettingsItemIndex::BoostTemperature), setBoostTemp, displayBoostTemp, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::BoostTemperature, 5}, /*Boost Temp*/ {SETTINGS_DESC(SettingsItemIndex::AutoStart), nullptr, displayAutomaticStartMode, nullptr, SettingsOptions::AutoStartMode, SettingsItemIndex::AutoStart, 7}, /*Auto start*/ diff --git a/source/Core/Threads/OperatingModes/Sleep.cpp b/source/Core/Threads/OperatingModes/Sleep.cpp index 09b00b8f2f..f94891b7b0 100644 --- a/source/Core/Threads/OperatingModes/Sleep.cpp +++ b/source/Core/Threads/OperatingModes/Sleep.cpp @@ -3,6 +3,7 @@ extern OperatingMode currentMode; int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) { +#ifndef NO_SLEEP_MODE // Drop to sleep temperature and display until movement or button press currentMode = OperatingMode::sleeping; @@ -66,5 +67,6 @@ int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) { return 1; // we want to exit soldering mode } } +#endif return 0; } From 5fcdda16f6816e95e4e79ff99a4899c2338673ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 13:48:34 +0200 Subject: [PATCH 12/19] filter translation strings and only include the ones needed --- Translations/make_translation.py | 46 +++++++++++++++++++--- Translations/translations_definitions.json | 35 ++++++++++++++++ build.sh | 0 source/Makefile | 21 +++++++--- 4 files changed, 91 insertions(+), 11 deletions(-) mode change 100644 => 100755 build.sh diff --git a/Translations/make_translation.py b/Translations/make_translation.py index dbe4c9a4dc..6af0d6e0a5 100755 --- a/Translations/make_translation.py +++ b/Translations/make_translation.py @@ -66,6 +66,29 @@ def read_translation(json_root: Union[str, Path], lang_code: str) -> dict: return lang +def filter_translation(lang: dict, defs: dict, macros: frozenset): + def check_excluded(record): + if "include" in record and not any(m in macros for m in record["include"]): + return True + + if "exclude" in record and any(m in macros for m in record["exclude"]): + return True + + return False + + for category in ("menuOptions", "menuGroups"): + for index, record in enumerate(defs[category]): + if check_excluded(record): + lang[category][record["id"]]["displayText"] = "" + lang[category][record["id"]]["description"] = "" + + for index, record in enumerate(defs["messagesWarn"]): + if check_excluded(record): + lang["messagesWarn"][record["id"]]["message"] = "" + + return lang + + def validate_langcode_matches_content(filename: str, content: dict) -> None: # Extract lang code from file name lang_code = filename[12:-5].upper() @@ -252,7 +275,6 @@ def get_letter_counts(defs: dict, lang: dict, build_version: str) -> Dict: # collapse all strings down into the composite letters and store totals for these # Doing this seperately for small and big font def sort_and_count(list_in: List[str]): - symbol_counts: dict[str, int] = {} for line in list_in: line = line.replace("\n", "").replace("\r", "") @@ -441,7 +463,6 @@ class FontMapsPerFont: def get_font_map_per_font( text_list_small_font: List[str], text_list_large_font: List[str] ) -> FontMapsPerFont: - pending_small_symbols = set(text_list_small_font) pending_large_symbols = set(text_list_large_font) @@ -1031,7 +1052,6 @@ def get_translation_strings_and_indices_text( large_font_symbol_conversion_table: Dict[str, bytes], suffix: str = "", ) -> str: - # For all strings; we want to convert them to their byte encoded form (using font index lookups) # Then we want to sort by their reversed format to see if we can remove any duplicates by combining the tails (last n bytes;n>0) # Finally we look for any that are contained inside one another, and if they are we update them to point to this @@ -1120,7 +1140,6 @@ def encode_string_and_add( translation_strings_text = " /* .strings = */ {\n" for i, encoded_bytes in enumerate(byte_encoded_strings): - if i > 0: translation_strings_text += ' "\\0"\n' @@ -1287,6 +1306,13 @@ def parse_args() -> argparse.Namespace: required=False, dest="compress_font", ) + parser.add_argument( + "--macros", + help="Extracted macros to filter translation strings by", + type=argparse.FileType("r"), + required=True, + dest="macros", + ) parser.add_argument( "--output", "-o", help="Target file", type=argparse.FileType("w"), required=True ) @@ -1307,6 +1333,12 @@ def main() -> None: logging.error("error: Both --output-pickled and --input-pickled are specified") sys.exit(1) + macros = ( + frozenset(re.findall(r"#define ([^ ]+)", args.macros.read())) + if args.macros + else frozenset() + ) + language_data: LanguageData if args.input_pickled: logging.info(f"Reading pickled language data from {args.input_pickled.name}...") @@ -1331,11 +1363,13 @@ def main() -> None: defs_ = load_json(os.path.join(json_dir, "translations_definitions.json")) if len(args.languageCodes) == 1: - lang_ = read_translation(json_dir, args.languageCodes[0]) + lang_ = filter_translation( + read_translation(json_dir, args.languageCodes[0]), defs_, macros + ) language_data = prepare_language(lang_, defs_, build_version) else: langs_ = [ - read_translation(json_dir, lang_code) + filter_translation(read_translation(json_dir, lang_code), defs_, macros) for lang_code in args.languageCodes ] language_data = prepare_languages(langs_, defs_, build_version) diff --git a/Translations/translations_definitions.json b/Translations/translations_definitions.json index 875dd2cb2b..2229ddf9f8 100644 --- a/Translations/translations_definitions.json +++ b/Translations/translations_definitions.json @@ -17,6 +17,7 @@ }, { "id": "NoPowerDeliveryMessage", + "include": ["POW_PD"], "description": "The IC required for USB-PD could not be communicated with. This is an error warning that USB-PD WILL NOT FUNCTION. Generally indicative of either a hardware or software issues." }, { @@ -49,42 +50,50 @@ { "id": "UVLOWarningString", "maxLen": 8, + "include": ["POW_DC"], "description": "Warning text shown when the unit turns off due to undervoltage in simple mode." }, { "id": "UndervoltageString", "maxLen": 15, + "include": ["POW_DC"], "description": "Warning text shown when the unit turns off due to undervoltage in advanced mode." }, { "id": "InputVoltageString", "maxLen": 11, "note": "Preferably end with a space", + "include": ["POW_DC"], "description": "Prefix text for 'Input Voltage' shown before showing the input voltage reading." }, { "id": "ProfilePreheatString", "maxLen": 9, + "include": ["PROFILE_SUPPORT"], "description": "Shown when the soldering profile is preheating" }, { "id": "ProfileCooldownString", "maxLen": 9, + "include": ["PROFILE_SUPPORT"], "description": "Shown when the soldering profile is done and cooling down" }, { "id": "SleepingSimpleString", "maxLen": 4, + "exclude": ["NO_SLEEP_MODE"], "description": "The text shown to indicate the unit is in sleep mode when the advanced view is NOT on." }, { "id": "SleepingAdvancedString", "maxLen": 15, + "exclude": ["NO_SLEEP_MODE"], "description": "The text shown to indicate the unit is in sleep mode when the advanced view is turned on." }, { "id": "SleepingTipAdvancedString", "maxLen": 6, + "exclude": ["NO_SLEEP_MODE"], "description": "The prefix text shown before tip temperature when the unit is sleeping with advanced view on." }, { @@ -100,6 +109,7 @@ { "id": "TooHotToStartProfileWarning", "default": "Too hot to\nstart profile", + "include": ["PROFILE_SUPPORT"], "description": "Shown when profile mode is started while the device is too hot." } ], @@ -181,6 +191,7 @@ "id": "PowerMenu", "maxLen": 5, "maxLen2": 11, + "include": ["POW_DC", "POW_QC"], "description": "Menu for settings related to power. Main settings to do with the input voltage." }, { @@ -212,30 +223,35 @@ "id": "DCInCutoff", "maxLen": 5, "maxLen2": 11, + "include": ["POW_DC"], "description": "When the device is powered by a battery, this adjusts the low voltage threshold for when the unit should turn off the heater to protect the battery." }, { "id": "MinVolCell", "maxLen": 4, "maxLen2": 9, + "include": ["POW_DC"], "description": "When powered by a battery, this adjusts the minimum voltage per cell before shutdown. (This is multiplied by the cell count.)" }, { "id": "QCMaxVoltage", "maxLen": 8, "maxLen2": 15, + "include": ["POW_QC"], "description": "This adjusts the maximum voltage the QC negotiation will adjust to. Does NOT affect USB-PD. Should be set safely based on the current rating of your power supply." }, { "id": "PDNegTimeout", "maxLen": 8, "maxLen2": 15, + "include": ["POW_PD"], "description": "How long until firmware stops trying to negotiate for USB-PD and tries QC instead. Longer times may help dodgy / old PD adapters, faster times move onto PD quickly. Units of 100ms. Recommended to keep small values." }, { "id": "PDVpdo", "maxLen": 7, "maxLen2": 15, + "include": ["POW_PD"], "description": "Enabled PPS & EPR modes." }, { @@ -272,84 +288,98 @@ "id": "ProfilePhases", "maxLen": 6, "maxLen2": 13, + "include": ["PROFILE_SUPPORT"], "description": "set the number of phases for the soldering profile." }, { "id": "ProfilePreheatTemp", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "For the soldering profile, preheat to this temperature before proceeding with phase 1." }, { "id": "ProfilePreheatSpeed", "maxLen": 5, "maxLen2": 11, + "include": ["PROFILE_SUPPORT"], "description": "How fast the temperature is allowed to rise during the heatup phase of the soldering profile." }, { "id": "ProfilePhase1Temp", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Target temperature for the end of phase 1 of the soldering profile." }, { "id": "ProfilePhase1Duration", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Duration of phase 1 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase2Temp", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Target temperature for the end of phase 2 of the soldering profile." }, { "id": "ProfilePhase2Duration", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Duration of phase 2 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase3Temp", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Target temperature for the end of phase 3 of the soldering profile." }, { "id": "ProfilePhase3Duration", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Duration of phase 3 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase4Temp", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Target temperature for the end of phase 5 of the soldering profile." }, { "id": "ProfilePhase4Duration", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase5Temp", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Target temperature for the end of phase 5 of the soldering profile." }, { "id": "ProfilePhase5Duration", "maxLen": 4, "maxLen2": 9, + "include": ["PROFILE_SUPPORT"], "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfileCooldownSpeed", "maxLen": 5, "maxLen2": 11, + "include": ["PROFILE_SUPPORT"], "description": "How fast the temperature is allowed to drop after the last phase of the soldering profile." }, { @@ -362,12 +392,14 @@ "id": "SleepTemperature", "maxLen": 4, "maxLen2": 9, + "exclude": ["NO_SLEEP_MODE"], "description": "Temperature the device will drop down to while asleep. Typically around halfway between off and soldering temperature." }, { "id": "SleepTimeout", "maxLen": 4, "maxLen2": 9, + "exclude": ["NO_SLEEP_MODE"], "description": "How long of a period without movement / button-pressing is required before the device drops down to the sleep temperature." }, { @@ -380,6 +412,7 @@ "id": "HallEffSensitivity", "maxLen": 6, "maxLen2": 13, + "include": ["HALL_SENSOR"], "description": "If the unit has a hall effect sensor (Pinecil), this adjusts how sensitive it is at detecting a magnet to put the device into sleep mode." }, { @@ -392,6 +425,7 @@ "id": "DisplayRotation", "maxLen": 6, "maxLen2": 13, + "exclude": ["NO_DISPLAY_ROTATE"], "description": "If the display should rotate automatically or if it should be fixed for left- or right-handed mode." }, { @@ -458,6 +492,7 @@ "id": "BluetoothLE", "maxLen": 7, "maxLen2": 15, + "include": ["BLE_ENABLED"], "description": "Should BLE be enabled at boot time." }, { diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/source/Makefile b/source/Makefile index b6b663a3f0..4668d72971 100644 --- a/source/Makefile +++ b/source/Makefile @@ -608,15 +608,21 @@ Core/Gen/Translation.%.cpp $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle: .. ../Translations/make_translation.py \ ../Translations/translations_definitions.json \ ../Translations/font_tables.py \ - Makefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf + Makefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf \ + Core/Gen/macros.txt @test -d Core/Gen || mkdir -p Core/Gen @test -d $(OUTPUT_DIR)/Core/Gen/translation.files || mkdir -p $(OUTPUT_DIR)/Core/Gen/translation.files @echo 'Generating translations for language $*' @python3 ../Translations/make_translation.py \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation.$*.cpp \ --output-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle \ $* +Core/Gen/macros.txt: Makefile + @test -d Core/Gen || mkdir -p Core/Gen + echo "#include " | $(CC) -dM -E $(CFLAGS) - > $(PWD)/Core/Gen/macros.txt + # # The recipes to produce compressed translation data: # @@ -636,19 +642,21 @@ $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so: Core/brieflz/brieflz.c Core/brieflz/de @echo Building host brieflz shared library $@ @$(HOST_CC) -fPIC -shared -DBLZ_DLL -DBLZ_DLL_EXPORTS -O $^ -o $@ -Core/Gen/Translation_brieflz.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.o $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so +Core/Gen/Translation_brieflz.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.o $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so Core/Gen/macros.txt @test -d $(@D) || mkdir -p $(@D) @echo Generating BriefLZ compressed translation for $* @OBJCOPY=$(OBJCOPY) python3 ../Translations/make_translation.py \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_brieflz.$*.cpp \ --input-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle \ --strings-obj $(OUTPUT_DIR)/Core/Gen/translation.files/$*.o \ $* -Core/Gen/Translation_brieflz_font.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so +Core/Gen/Translation_brieflz_font.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so Core/Gen/macros.txt @test -d $(@D) || mkdir -p $(@D) @echo Generating BriefLZ compressed translation for $* @python3 ../Translations/make_translation.py \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_brieflz_font.$*.cpp \ --input-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle \ --compress-font \ @@ -689,21 +697,24 @@ Core/Gen/Translation_multi.$(1).cpp: $(patsubst %,../Translations/translation_%. ../Translations/make_translation.py \ ../Translations/translations_definitions.json \ ../Translations/font_tables.py \ - Makefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf + Makefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf \ + Core/Gen/macros.txt @test -d Core/Gen || mkdir -p Core/Gen @test -d $(OUTPUT_DIR)/Core/Gen/translation.files || mkdir -p $(OUTPUT_DIR)/Core/Gen/translation.files @echo 'Generating translations for multi-language $(2)' @python3 ../Translations/make_translation.py \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_multi.$(1).cpp \ --output-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle \ $(3) $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle: Core/Gen/Translation_multi.$(1).cpp -Core/Gen/Translation_brieflz_multi.$(1).cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).o $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so +Core/Gen/Translation_brieflz_multi.$(1).cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).o $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so Core/Gen/macros.txt @test -d $$(@D) || mkdir -p $$(@D) @echo Generating BriefLZ compressed translation for multi-language $(2) @OBJCOPY=$(OBJCOPY) python3 ../Translations/make_translation.py \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_brieflz_multi.$(1).cpp \ --input-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle \ --strings-obj $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).o \ From 9559af39f7b3b71dc2046836ae08380865ffca3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 14:28:34 +0200 Subject: [PATCH 13/19] add documentation for soldering profile mode --- Documentation/GettingStarted.md | 19 ++++++++++++++++++- Documentation/Menu.md | 6 ++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Documentation/GettingStarted.md b/Documentation/GettingStarted.md index 7793b106cb..8952fd9dc7 100644 --- a/Documentation/GettingStarted.md +++ b/Documentation/GettingStarted.md @@ -42,7 +42,7 @@ This OLED screen features burn-in protection; if no buttons or movement have bee Additionally to the two icons shown, there are two "hidden" actions that can be performed on this menu. -If you press and hold the button near the tip (`+/A`), this enters the temperature adjustment screen. Normally this is not required; but if you would like to adjust the set temperature _before_ the tip starts to heat, this can be useful. +On devices that do not support Soldering profile mode, if you press and hold the button near the tip (`+/A`), this enters the temperature adjustment screen. Normally this is not required; but if you would like to adjust the set temperature _before_ the tip starts to heat, this can be useful. If you press and hold the button near the rear of the iron (`-/B`), it will take you into the [debug menu](https://ralim.github.io/IronOS/DebugMenu/). @@ -74,6 +74,23 @@ Pinecil has an unpopulated footprint (U14) for a hall effect sensor (Si7210-B-00 If, after entering sleep mode, the iron still does not see movement for a much longer time (default=10 minutes); it will shut down and return to the home screen. +## Soldering Profile Mode (MHP30 only) + +On devices that support it, wehn you long press the button to enter the soldering mode, the iron will play out the configured soldering profile. In this mode, you cannot adjust the temperature as it is configured according to the soldering profile you can configure through the settings menu. + +The soldering profile plays out as follows: + +1. Check if the temperature is below 55C. If not, you will get a warning and cannot enter soldering profile mode. +2. Preheat by raising the target temperature to the configured preheat temperature with the configured preheat speed. +3. Wait for the iron to reach the preheat temperature. +4. Gradually move the target temperature to the configured end temperature of the first phase over the configured duration. +5. Wait for the iron to reach the end temperature. +6. Repeat steps 4 and 5 for the next phases until there are no more phases configured. +7. Cool down by lowering the target temperature to 0 with the configured cooldown speed. +8. Once the temperature is below 55C, sound the buzzer (if avaialable) and exit soldering profile mode. + +You can manually exit soldering profile mode manually in the same way as the soldering mode, by pressing and holding the rear button or pressing both buttons at once. + ## Settings Menu The settings menu is the most evolving aspect of the firmware, so each option is not documented here. However, do not panic, as every menu option has an on-screen description so you don't _need_ to come back here to figure them all out. diff --git a/Documentation/Menu.md b/Documentation/Menu.md index b9cebe7483..5424f55e02 100644 --- a/Documentation/Menu.md +++ b/Documentation/Menu.md @@ -9,6 +9,12 @@ In this mode the iron works as you would expect, pressing either button will tak - Pressing both buttons or holding the rear button (`-/B`) will exit Soldering Mode. - Holding the front button (`+/A`) will enter [Boost mode](https://ralim.github.io/IronOS/Menu/#boost-mode) (if enabled). +## Soldering profile mode (MHP30 only) + +In this mode, accessible by long pressing the button that brings you into soldering mode, the iron will play out the configured soldering profile. +- You cannot adjust the temperature or enter boost mode. +- Pressing both buttons or holding the rear button (`-/B`) will exit Soldering Profile Mode as well. + ## Settings mode This mode allows you to cycle through all the options and set custom values. From 252287c4dde3e040caa24c18f0259a9e3d852039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 24 Apr 2023 17:11:25 +0200 Subject: [PATCH 14/19] fix soldering menu on devices without soldering profiles --- source/Core/Src/settingsGUI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index 8f752bc5a0..e98cd59115 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -279,8 +279,8 @@ const menuitem solderingMenu[] = { {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase5Temp, displayProfilePhase5Temp, showProfilePhase5Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase5Temp, 5}, /*Phase 5 Temp*/ {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5}, /*Phase 5 Duration*/ {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5}, /*Profile Cooldown Speed*/ - {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE #endif + {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE }; const menuitem PowerSavingMenu[] = { /* From 578fd544639f015eeec3ed929f389a44b4ddee80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 25 Apr 2023 01:31:49 +0200 Subject: [PATCH 15/19] =?UTF-8?q?soldering=20profile=20mode=20=E2=86=92=20?= =?UTF-8?q?profile=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation/GettingStarted.md | 14 ++++---- Documentation/Menu.md | 6 ++-- Translations/translation_BE.json | 6 ++-- Translations/translation_BG.json | 6 ++-- Translations/translation_CS.json | 6 ++-- Translations/translation_DA.json | 6 ++-- Translations/translation_DE.json | 6 ++-- Translations/translation_EL.json | 6 ++-- Translations/translation_EN.json | 6 ++-- Translations/translation_ES.json | 6 ++-- Translations/translation_FI.json | 6 ++-- Translations/translation_FR.json | 6 ++-- Translations/translation_HR.json | 6 ++-- Translations/translation_HU.json | 6 ++-- Translations/translation_IT.json | 6 ++-- Translations/translation_JA_JP.json | 6 ++-- Translations/translation_LT.json | 6 ++-- Translations/translation_NB.json | 6 ++-- Translations/translation_NL.json | 6 ++-- Translations/translation_NL_BE.json | 6 ++-- Translations/translation_PL.json | 6 ++-- Translations/translation_PT.json | 6 ++-- Translations/translation_RO.json | 6 ++-- Translations/translation_RU.json | 6 ++-- Translations/translation_SK.json | 6 ++-- Translations/translation_SL.json | 6 ++-- Translations/translation_SR_CYRL.json | 6 ++-- Translations/translation_SR_LATN.json | 6 ++-- Translations/translation_SV.json | 6 ++-- Translations/translation_TR.json | 6 ++-- Translations/translation_UK.json | 6 ++-- Translations/translation_VI.json | 6 ++-- Translations/translation_YUE_HK.json | 6 ++-- Translations/translation_ZH_CN.json | 6 ++-- Translations/translation_ZH_TW.json | 6 ++-- Translations/translations_definitions.json | 32 +++++++++---------- source/Core/Inc/Settings.h | 2 +- .../Threads/OperatingModes/HomeScreen.cpp | 2 +- 38 files changed, 127 insertions(+), 127 deletions(-) diff --git a/Documentation/GettingStarted.md b/Documentation/GettingStarted.md index 8952fd9dc7..cf31df5210 100644 --- a/Documentation/GettingStarted.md +++ b/Documentation/GettingStarted.md @@ -42,7 +42,7 @@ This OLED screen features burn-in protection; if no buttons or movement have bee Additionally to the two icons shown, there are two "hidden" actions that can be performed on this menu. -On devices that do not support Soldering profile mode, if you press and hold the button near the tip (`+/A`), this enters the temperature adjustment screen. Normally this is not required; but if you would like to adjust the set temperature _before_ the tip starts to heat, this can be useful. +On devices that do not support profile mode, if you press and hold the button near the tip (`+/A`), this enters the temperature adjustment screen. Normally this is not required; but if you would like to adjust the set temperature _before_ the tip starts to heat, this can be useful. If you press and hold the button near the rear of the iron (`-/B`), it will take you into the [debug menu](https://ralim.github.io/IronOS/DebugMenu/). @@ -74,22 +74,22 @@ Pinecil has an unpopulated footprint (U14) for a hall effect sensor (Si7210-B-00 If, after entering sleep mode, the iron still does not see movement for a much longer time (default=10 minutes); it will shut down and return to the home screen. -## Soldering Profile Mode (MHP30 only) +## Profile Mode (MHP30 only) -On devices that support it, wehn you long press the button to enter the soldering mode, the iron will play out the configured soldering profile. In this mode, you cannot adjust the temperature as it is configured according to the soldering profile you can configure through the settings menu. +On devices that support it, when you long press the button to enter the soldering mode, you enter profile mode which will adjust the temperature according to the profile mode settings. -The soldering profile plays out as follows: +Profile mode plays out as follows: -1. Check if the temperature is below 55C. If not, you will get a warning and cannot enter soldering profile mode. +1. Check if the temperature is below 55C. If not, you will get a warning and cannot enter profile mode. 2. Preheat by raising the target temperature to the configured preheat temperature with the configured preheat speed. 3. Wait for the iron to reach the preheat temperature. 4. Gradually move the target temperature to the configured end temperature of the first phase over the configured duration. 5. Wait for the iron to reach the end temperature. 6. Repeat steps 4 and 5 for the next phases until there are no more phases configured. 7. Cool down by lowering the target temperature to 0 with the configured cooldown speed. -8. Once the temperature is below 55C, sound the buzzer (if avaialable) and exit soldering profile mode. +8. Once the temperature is below 55C, sound the buzzer (if available) and exit profile mode. -You can manually exit soldering profile mode manually in the same way as the soldering mode, by pressing and holding the rear button or pressing both buttons at once. +You can manually exit profile mode manually in the same way as the soldering mode, by pressing and holding the rear button or pressing both buttons at once. ## Settings Menu diff --git a/Documentation/Menu.md b/Documentation/Menu.md index 5424f55e02..9a349da35d 100644 --- a/Documentation/Menu.md +++ b/Documentation/Menu.md @@ -9,11 +9,11 @@ In this mode the iron works as you would expect, pressing either button will tak - Pressing both buttons or holding the rear button (`-/B`) will exit Soldering Mode. - Holding the front button (`+/A`) will enter [Boost mode](https://ralim.github.io/IronOS/Menu/#boost-mode) (if enabled). -## Soldering profile mode (MHP30 only) +## Profile mode (MHP30 only) -In this mode, accessible by long pressing the button that brings you into soldering mode, the iron will play out the configured soldering profile. +In this mode, accessible by long pressing the button that brings you into soldering mode, the iron will play out the configured profile. - You cannot adjust the temperature or enter boost mode. -- Pressing both buttons or holding the rear button (`-/B`) will exit Soldering Profile Mode as well. +- Pressing both buttons or holding the rear button (`-/B`) will exit Profile Mode as well. ## Settings mode diff --git a/Translations/translation_BE.json b/Translations/translation_BE.json index 9d180ebd62..72ddf0f511 100644 --- a/Translations/translation_BE.json +++ b/Translations/translation_BE.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Адчувальнасць\nакселерометра", diff --git a/Translations/translation_BG.json b/Translations/translation_BG.json index e32b83f1c7..72b4f49fe4 100644 --- a/Translations/translation_BG.json +++ b/Translations/translation_BG.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Усещане\nза движение", diff --git a/Translations/translation_CS.json b/Translations/translation_CS.json index 90739a29ca..fb4c4d1f05 100644 --- a/Translations/translation_CS.json +++ b/Translations/translation_CS.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Citlivost\nna pohyb", diff --git a/Translations/translation_DA.json b/Translations/translation_DA.json index fbdd348cc9..12625a67ce 100644 --- a/Translations/translation_DA.json +++ b/Translations/translation_DA.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Bevægelses\nfølsomhed", diff --git a/Translations/translation_DE.json b/Translations/translation_DE.json index 559301b468..d04c57c22b 100644 --- a/Translations/translation_DE.json +++ b/Translations/translation_DE.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhasen", - "description": "Anzahl an Phasen für das Lötprofil" + "description": "Anzahl an Phasen im Profilmodus" }, "ProfilePreheatTemp": { "displayText": "Vorheiz-\ntemperatur", - "description": "Auf diese Temperatur vorheizen zum Start des Profils" + "description": "Zu Beginn des Profilmodus auf diese Temperatur vorheizen" }, "ProfilePreheatSpeed": { "displayText": "Vorheiz-\nrate", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Abkühl-\nrate", - "description": "Abkühlenen nach der letzten Phase mit dieser Geschwindigkeit (Grad pro Sekunde)" + "description": "Am Ende des Profilmodus mit dieser Geschwindigkeit abkühlen (Grad pro Sekunde)" }, "MotionSensitivity": { "displayText": "Bewegungs-\nempfindlichk.", diff --git a/Translations/translation_EL.json b/Translations/translation_EL.json index 2791444b66..ae81203d90 100644 --- a/Translations/translation_EL.json +++ b/Translations/translation_EL.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Ευαισθησία\nκίνησης", diff --git a/Translations/translation_EN.json b/Translations/translation_EN.json index 1842bd1231..2c044e3399 100644 --- a/Translations/translation_EN.json +++ b/Translations/translation_EN.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Motion\nsensitivity", diff --git a/Translations/translation_ES.json b/Translations/translation_ES.json index 7c17fe660b..575ddf1a5f 100644 --- a/Translations/translation_ES.json +++ b/Translations/translation_ES.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Detección de\nmovimiento", diff --git a/Translations/translation_FI.json b/Translations/translation_FI.json index 0831af0af3..9bb4e90c5a 100644 --- a/Translations/translation_FI.json +++ b/Translations/translation_FI.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Liikkeen\nherkkyys", diff --git a/Translations/translation_FR.json b/Translations/translation_FR.json index ea7984cb38..4aca77b042 100644 --- a/Translations/translation_FR.json +++ b/Translations/translation_FR.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Sensibilité\nau mouvement", diff --git a/Translations/translation_HR.json b/Translations/translation_HR.json index 7256ef8843..093e66f781 100644 --- a/Translations/translation_HR.json +++ b/Translations/translation_HR.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Osjetljivost\npokreta", diff --git a/Translations/translation_HU.json b/Translations/translation_HU.json index 74e0a0c459..449a28c310 100644 --- a/Translations/translation_HU.json +++ b/Translations/translation_HU.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Mozgás\nérzékenység", diff --git a/Translations/translation_IT.json b/Translations/translation_IT.json index f5bfea2564..672061d746 100644 --- a/Translations/translation_IT.json +++ b/Translations/translation_IT.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Sensibilità\nal movimento", diff --git a/Translations/translation_JA_JP.json b/Translations/translation_JA_JP.json index 92f0fa20e3..f2db8ef0ea 100755 --- a/Translations/translation_JA_JP.json +++ b/Translations/translation_JA_JP.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "動きの感度", diff --git a/Translations/translation_LT.json b/Translations/translation_LT.json index 0dd08c10e2..96387be6d9 100644 --- a/Translations/translation_LT.json +++ b/Translations/translation_LT.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Judesio\njautrumas", diff --git a/Translations/translation_NB.json b/Translations/translation_NB.json index c0c383a0c4..f716171fbd 100644 --- a/Translations/translation_NB.json +++ b/Translations/translation_NB.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "BSensr\n", diff --git a/Translations/translation_NL.json b/Translations/translation_NL.json index f848c26b71..4a1d2d5633 100644 --- a/Translations/translation_NL.json +++ b/Translations/translation_NL.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Bewegings-\ngevoeligheid", diff --git a/Translations/translation_NL_BE.json b/Translations/translation_NL_BE.json index 1db7230821..9d8414498b 100644 --- a/Translations/translation_NL_BE.json +++ b/Translations/translation_NL_BE.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Bewegings-\ngevoeligheid", diff --git a/Translations/translation_PL.json b/Translations/translation_PL.json index 312767f3ad..604e8e29e5 100644 --- a/Translations/translation_PL.json +++ b/Translations/translation_PL.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Czułość\nwykr. ruchu", diff --git a/Translations/translation_PT.json b/Translations/translation_PT.json index 22835448bb..47be541a56 100644 --- a/Translations/translation_PT.json +++ b/Translations/translation_PT.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Sensibilidade\nmovimento", diff --git a/Translations/translation_RO.json b/Translations/translation_RO.json index bf04a3df5d..b40e8d16f4 100644 --- a/Translations/translation_RO.json +++ b/Translations/translation_RO.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Sensibilitate\nla miscare", diff --git a/Translations/translation_RU.json b/Translations/translation_RU.json index 9a2803e0b6..2488aaef81 100644 --- a/Translations/translation_RU.json +++ b/Translations/translation_RU.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Чувствительн.\nакселерометра", diff --git a/Translations/translation_SK.json b/Translations/translation_SK.json index 8ec31214b2..b0b550ad23 100644 --- a/Translations/translation_SK.json +++ b/Translations/translation_SK.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Citlivosť\npohybu", diff --git a/Translations/translation_SL.json b/Translations/translation_SL.json index 0cb2053168..5e7d2d6dd0 100644 --- a/Translations/translation_SL.json +++ b/Translations/translation_SL.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Občutljivost\npremikanja", diff --git a/Translations/translation_SR_CYRL.json b/Translations/translation_SR_CYRL.json index e1b552808f..35f8579314 100644 --- a/Translations/translation_SR_CYRL.json +++ b/Translations/translation_SR_CYRL.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Осетљивост\nна покрет", diff --git a/Translations/translation_SR_LATN.json b/Translations/translation_SR_LATN.json index 38698ca7c6..6906b7be7c 100644 --- a/Translations/translation_SR_LATN.json +++ b/Translations/translation_SR_LATN.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Osetljivost\nna pokret", diff --git a/Translations/translation_SV.json b/Translations/translation_SV.json index 6b9ac56282..58d6f6d8c4 100644 --- a/Translations/translation_SV.json +++ b/Translations/translation_SV.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Rörelse-\nkänslighet", diff --git a/Translations/translation_TR.json b/Translations/translation_TR.json index 36a33937f2..3a22cd1960 100644 --- a/Translations/translation_TR.json +++ b/Translations/translation_TR.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "HARHAS\n", diff --git a/Translations/translation_UK.json b/Translations/translation_UK.json index 55dee6552c..4302a65053 100644 --- a/Translations/translation_UK.json +++ b/Translations/translation_UK.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Чутливість\nсенсору руху", diff --git a/Translations/translation_VI.json b/Translations/translation_VI.json index d77ee97eed..10c36e0b06 100644 --- a/Translations/translation_VI.json +++ b/Translations/translation_VI.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "Cam bien\ncu đong", diff --git a/Translations/translation_YUE_HK.json b/Translations/translation_YUE_HK.json index 127e555dae..3b990f9c22 100644 --- a/Translations/translation_YUE_HK.json +++ b/Translations/translation_YUE_HK.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "動作敏感度", diff --git a/Translations/translation_ZH_CN.json b/Translations/translation_ZH_CN.json index 48da8c1d4b..a4c8bbb469 100644 --- a/Translations/translation_ZH_CN.json +++ b/Translations/translation_ZH_CN.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "动作灵敏度", diff --git a/Translations/translation_ZH_TW.json b/Translations/translation_ZH_TW.json index 30e9bd0cce..ec0ec2e364 100644 --- a/Translations/translation_ZH_TW.json +++ b/Translations/translation_ZH_TW.json @@ -154,11 +154,11 @@ }, "ProfilePhases": { "displayText": "Profile\nPhases", - "description": "Number of phases for the soldering profile" + "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { "displayText": "Preheat\nTemp", - "description": "Preheat to this temperature when starting the profile" + "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { "displayText": "Preheat\nSpeed", @@ -206,7 +206,7 @@ }, "ProfileCooldownSpeed": { "displayText": "Cooldown\nSpeed", - "description": "Cooldown at this rate after the last phase (degrees per second)" + "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { "displayText": "動作敏感度", diff --git a/Translations/translations_definitions.json b/Translations/translations_definitions.json index 2229ddf9f8..96d237b7e9 100644 --- a/Translations/translations_definitions.json +++ b/Translations/translations_definitions.json @@ -70,13 +70,13 @@ "id": "ProfilePreheatString", "maxLen": 9, "include": ["PROFILE_SUPPORT"], - "description": "Shown when the soldering profile is preheating" + "description": "Shown in profile mode while preheating" }, { "id": "ProfileCooldownString", "maxLen": 9, "include": ["PROFILE_SUPPORT"], - "description": "Shown when the soldering profile is done and cooling down" + "description": "Shown in profile mode while cooling down" }, { "id": "SleepingSimpleString", @@ -289,98 +289,98 @@ "maxLen": 6, "maxLen2": 13, "include": ["PROFILE_SUPPORT"], - "description": "set the number of phases for the soldering profile." + "description": "set the number of phases for profile mode." }, { "id": "ProfilePreheatTemp", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "For the soldering profile, preheat to this temperature before proceeding with phase 1." + "description": "Preheat to this temperature at the start of profile mode." }, { "id": "ProfilePreheatSpeed", "maxLen": 5, "maxLen2": 11, "include": ["PROFILE_SUPPORT"], - "description": "How fast the temperature is allowed to rise during the heatup phase of the soldering profile." + "description": "How fast the temperature is allowed to rise during the preheat phase at the start of profile mode." }, { "id": "ProfilePhase1Temp", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Target temperature for the end of phase 1 of the soldering profile." + "description": "Target temperature for the end of phase 1 of profile mode." }, { "id": "ProfilePhase1Duration", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Duration of phase 1 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + "description": "Duration of phase 1 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase2Temp", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Target temperature for the end of phase 2 of the soldering profile." + "description": "Target temperature for the end of phase 2 of profile mode." }, { "id": "ProfilePhase2Duration", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Duration of phase 2 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + "description": "Duration of phase 2 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase3Temp", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Target temperature for the end of phase 3 of the soldering profile." + "description": "Target temperature for the end of phase 3 of profile mode." }, { "id": "ProfilePhase3Duration", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Duration of phase 3 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + "description": "Duration of phase 3 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase4Temp", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Target temperature for the end of phase 5 of the soldering profile." + "description": "Target temperature for the end of phase 5 of profile mode." }, { "id": "ProfilePhase4Duration", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + "description": "Duration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfilePhase5Temp", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Target temperature for the end of phase 5 of the soldering profile." + "description": "Target temperature for the end of phase 5 of profile mode." }, { "id": "ProfilePhase5Duration", "maxLen": 4, "maxLen2": 9, "include": ["PROFILE_SUPPORT"], - "description": "Duration of phase 5 of the soldering profile. The phase might actually take longer if it takes longer to reach the target temperature." + "description": "Duration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature." }, { "id": "ProfileCooldownSpeed", "maxLen": 5, "maxLen2": 11, "include": ["PROFILE_SUPPORT"], - "description": "How fast the temperature is allowed to drop after the last phase of the soldering profile." + "description": "How fast the temperature is allowed to drop during the cooldown phase at the end of profile mode." }, { "id": "MotionSensitivity", diff --git a/source/Core/Inc/Settings.h b/source/Core/Inc/Settings.h index be983f73db..de96970344 100644 --- a/source/Core/Inc/Settings.h +++ b/source/Core/Inc/Settings.h @@ -53,7 +53,7 @@ enum SettingsOptions { CalibrateCJC = 36, // Toggle calibrate CJC at next boot BluetoothLE = 37, // Toggle BLE if present PDVpdo = 38, // Toggle PPS & EPR - ProfilePhases = 39, // Number of Soldering Profile Phases + ProfilePhases = 39, // Number of profile mode phases ProfilePreheatTemp = 40, // Temperature to preheat to before the first phase ProfilePreheatSpeed = 41, // Maximum allowed preheat speed in degrees per second ProfilePhase1Temp = 42, // Temperature to target for the end of phase 1 diff --git a/source/Core/Threads/OperatingModes/HomeScreen.cpp b/source/Core/Threads/OperatingModes/HomeScreen.cpp index fa2388e24c..c1ee685468 100644 --- a/source/Core/Threads/OperatingModes/HomeScreen.cpp +++ b/source/Core/Threads/OperatingModes/HomeScreen.cpp @@ -57,7 +57,7 @@ void drawHomeScreen(bool buttonLockout) { case BUTTON_F_LONG: #ifdef PROFILE_SUPPORT if (!isTipDisconnected()) { - gui_solderingProfileMode(); // enter soldering profile mode + gui_solderingProfileMode(); // enter profile mode buttonLockout = true; } #else From d94978f1cec62f8f3c01d324aa8baa4881dec607 Mon Sep 17 00:00:00 2001 From: discip <53649486+discip@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:43:59 +0200 Subject: [PATCH 16/19] Adjusted CJK and generalized some descriptions --- Documentation/GettingStarted.md | 4 ++-- Translations/translation_JA_JP.json | 34 ++++++++++++++-------------- Translations/translation_YUE_HK.json | 34 ++++++++++++++-------------- Translations/translation_ZH_CN.json | 34 ++++++++++++++-------------- Translations/translation_ZH_TW.json | 34 ++++++++++++++-------------- 5 files changed, 70 insertions(+), 70 deletions(-) diff --git a/Documentation/GettingStarted.md b/Documentation/GettingStarted.md index cf31df5210..7bc3d91042 100644 --- a/Documentation/GettingStarted.md +++ b/Documentation/GettingStarted.md @@ -82,9 +82,9 @@ Profile mode plays out as follows: 1. Check if the temperature is below 55C. If not, you will get a warning and cannot enter profile mode. 2. Preheat by raising the target temperature to the configured preheat temperature with the configured preheat speed. -3. Wait for the iron to reach the preheat temperature. +3. Wait for the device to reach the preheat temperature. 4. Gradually move the target temperature to the configured end temperature of the first phase over the configured duration. -5. Wait for the iron to reach the end temperature. +5. Wait for the device to reach the end temperature. 6. Repeat steps 4 and 5 for the next phases until there are no more phases configured. 7. Cool down by lowering the target temperature to 0 with the configured cooldown speed. 8. Once the temperature is below 55C, sound the buzzer (if available) and exit profile mode. diff --git a/Translations/translation_JA_JP.json b/Translations/translation_JA_JP.json index f2db8ef0ea..74a3cd0cfb 100755 --- a/Translations/translation_JA_JP.json +++ b/Translations/translation_JA_JP.json @@ -61,16 +61,16 @@ "message": "オフ" }, "ProfilePreheatString": { - "message": "Preheat\n" + "message": "Preheat" }, "ProfileCooldownString": { - "message": "Cooldown\n" + "message": "Cooldown" }, "DeviceFailedValidationWarning": { "message": "このデバイスはおそらく偽造品です" }, "TooHotToStartProfileWarning": { - "message": "Too hot to\nstart profile" + "message": "Too hot to start profile" } }, "characters": { @@ -153,59 +153,59 @@ "description": "半田付けモード時に両方のボタンを長押しし、ボタンロックする <×=オフ | ブ=ブーストのみ許可 | 全=すべてをロック>" }, "ProfilePhases": { - "displayText": "Profile\nPhases", + "displayText": "Profile Phases", "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { - "displayText": "Preheat\nTemp", + "displayText": "Preheat Temp", "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { - "displayText": "Preheat\nSpeed", + "displayText": "Preheat Speed", "description": "Preheat at this rate (degrees per second)" }, "ProfilePhase1Temp": { - "displayText": "Phase 1\nTemp", + "displayText": "Phase 1 Temp", "description": "Target temperature for the end of this phase" }, "ProfilePhase1Duration": { - "displayText": "Phase 1\nDuration", + "displayText": "Phase 1 Duration", "description": "Target duration of this phase (seconds)" }, "ProfilePhase2Temp": { - "displayText": "Phase 2\nTemp", + "displayText": "Phase 2 Temp", "description": "" }, "ProfilePhase2Duration": { - "displayText": "Phase 2\nDuration", + "displayText": "Phase 2 Duration", "description": "" }, "ProfilePhase3Temp": { - "displayText": "Phase 3\nTemp", + "displayText": "Phase 3 Temp", "description": "" }, "ProfilePhase3Duration": { - "displayText": "Phase 3\nDuration", + "displayText": "Phase 3 Duration", "description": "" }, "ProfilePhase4Temp": { - "displayText": "Phase 4\nTemp", + "displayText": "Phase 4 Temp", "description": "" }, "ProfilePhase4Duration": { - "displayText": "Phase 4\nDuration", + "displayText": "Phase 4 Duration", "description": "" }, "ProfilePhase5Temp": { - "displayText": "Phase 5\nTemp", + "displayText": "Phase 5 Temp", "description": "" }, "ProfilePhase5Duration": { - "displayText": "Phase 5\nDuration", + "displayText": "Phase 5 Duration", "description": "" }, "ProfileCooldownSpeed": { - "displayText": "Cooldown\nSpeed", + "displayText": "Cooldown Speed", "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { diff --git a/Translations/translation_YUE_HK.json b/Translations/translation_YUE_HK.json index 3b990f9c22..745e6801aa 100644 --- a/Translations/translation_YUE_HK.json +++ b/Translations/translation_YUE_HK.json @@ -61,16 +61,16 @@ "message": "關" }, "ProfilePreheatString": { - "message": "Preheat\n" + "message": "Preheat" }, "ProfileCooldownString": { - "message": "Cooldown\n" + "message": "Cooldown" }, "DeviceFailedValidationWarning": { "message": "依支焫雞好有可能係冒牌貨!" }, "TooHotToStartProfileWarning": { - "message": "Too hot to\nstart profile" + "message": "Too hot to start profile" } }, "characters": { @@ -153,59 +153,59 @@ "description": "喺焊接模式時,同時長撳兩粒掣啓用撳掣鎖定 <無=停用 | 增=淨係容許增熱模式 | 全=鎖定全部>" }, "ProfilePhases": { - "displayText": "Profile\nPhases", + "displayText": "Profile Phases", "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { - "displayText": "Preheat\nTemp", + "displayText": "Preheat Temp", "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { - "displayText": "Preheat\nSpeed", + "displayText": "Preheat Speed", "description": "Preheat at this rate (degrees per second)" }, "ProfilePhase1Temp": { - "displayText": "Phase 1\nTemp", + "displayText": "Phase 1 Temp", "description": "Target temperature for the end of this phase" }, "ProfilePhase1Duration": { - "displayText": "Phase 1\nDuration", + "displayText": "Phase 1 Duration", "description": "Target duration of this phase (seconds)" }, "ProfilePhase2Temp": { - "displayText": "Phase 2\nTemp", + "displayText": "Phase 2 Temp", "description": "" }, "ProfilePhase2Duration": { - "displayText": "Phase 2\nDuration", + "displayText": "Phase 2 Duration", "description": "" }, "ProfilePhase3Temp": { - "displayText": "Phase 3\nTemp", + "displayText": "Phase 3 Temp", "description": "" }, "ProfilePhase3Duration": { - "displayText": "Phase 3\nDuration", + "displayText": "Phase 3 Duration", "description": "" }, "ProfilePhase4Temp": { - "displayText": "Phase 4\nTemp", + "displayText": "Phase 4 Temp", "description": "" }, "ProfilePhase4Duration": { - "displayText": "Phase 4\nDuration", + "displayText": "Phase 4 Duration", "description": "" }, "ProfilePhase5Temp": { - "displayText": "Phase 5\nTemp", + "displayText": "Phase 5 Temp", "description": "" }, "ProfilePhase5Duration": { - "displayText": "Phase 5\nDuration", + "displayText": "Phase 5 Duration", "description": "" }, "ProfileCooldownSpeed": { - "displayText": "Cooldown\nSpeed", + "displayText": "Cooldown Speed", "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { diff --git a/Translations/translation_ZH_CN.json b/Translations/translation_ZH_CN.json index a4c8bbb469..de08f69672 100644 --- a/Translations/translation_ZH_CN.json +++ b/Translations/translation_ZH_CN.json @@ -61,16 +61,16 @@ "message": "关" }, "ProfilePreheatString": { - "message": "Preheat\n" + "message": "Preheat" }, "ProfileCooldownString": { - "message": "Cooldown\n" + "message": "Cooldown" }, "DeviceFailedValidationWarning": { "message": "这支电烙铁很有可能是冒牌货!" }, "TooHotToStartProfileWarning": { - "message": "Too hot to\nstart profile" + "message": "Too hot to start profile" } }, "characters": { @@ -153,59 +153,59 @@ "description": "焊接模式时,同时长按两个按键启用按键锁定 <无=禁用 | 增=只容许增热模式 | 全=完全锁定>" }, "ProfilePhases": { - "displayText": "Profile\nPhases", + "displayText": "Profile Phases", "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { - "displayText": "Preheat\nTemp", + "displayText": "Preheat Temp", "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { - "displayText": "Preheat\nSpeed", + "displayText": "Preheat Speed", "description": "Preheat at this rate (degrees per second)" }, "ProfilePhase1Temp": { - "displayText": "Phase 1\nTemp", + "displayText": "Phase 1 Temp", "description": "Target temperature for the end of this phase" }, "ProfilePhase1Duration": { - "displayText": "Phase 1\nDuration", + "displayText": "Phase 1 Duration", "description": "Target duration of this phase (seconds)" }, "ProfilePhase2Temp": { - "displayText": "Phase 2\nTemp", + "displayText": "Phase 2 Temp", "description": "" }, "ProfilePhase2Duration": { - "displayText": "Phase 2\nDuration", + "displayText": "Phase 2 Duration", "description": "" }, "ProfilePhase3Temp": { - "displayText": "Phase 3\nTemp", + "displayText": "Phase 3 Temp", "description": "" }, "ProfilePhase3Duration": { - "displayText": "Phase 3\nDuration", + "displayText": "Phase 3 Duration", "description": "" }, "ProfilePhase4Temp": { - "displayText": "Phase 4\nTemp", + "displayText": "Phase 4 Temp", "description": "" }, "ProfilePhase4Duration": { - "displayText": "Phase 4\nDuration", + "displayText": "Phase 4 Duration", "description": "" }, "ProfilePhase5Temp": { - "displayText": "Phase 5\nTemp", + "displayText": "Phase 5 Temp", "description": "" }, "ProfilePhase5Duration": { - "displayText": "Phase 5\nDuration", + "displayText": "Phase 5 Duration", "description": "" }, "ProfileCooldownSpeed": { - "displayText": "Cooldown\nSpeed", + "displayText": "Cooldown Speed", "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { diff --git a/Translations/translation_ZH_TW.json b/Translations/translation_ZH_TW.json index ec0ec2e364..1094e3aab0 100644 --- a/Translations/translation_ZH_TW.json +++ b/Translations/translation_ZH_TW.json @@ -61,16 +61,16 @@ "message": "關" }, "ProfilePreheatString": { - "message": "Preheat\n" + "message": "Preheat" }, "ProfileCooldownString": { - "message": "Cooldown\n" + "message": "Cooldown" }, "DeviceFailedValidationWarning": { "message": "這支電烙鐵很有可能是冒牌貨!" }, "TooHotToStartProfileWarning": { - "message": "Too hot to\nstart profile" + "message": "Too hot to start profile" } }, "characters": { @@ -153,59 +153,59 @@ "description": "於焊接模式時,同時長按兩個按鍵啟用按鍵鎖定 <無=停用 | 增=只容許增熱模式 | 全=鎖定全部>" }, "ProfilePhases": { - "displayText": "Profile\nPhases", + "displayText": "Profile Phases", "description": "Number of phases in profile mode" }, "ProfilePreheatTemp": { - "displayText": "Preheat\nTemp", + "displayText": "Preheat Temp", "description": "Preheat to this temperature at the start of profile mode" }, "ProfilePreheatSpeed": { - "displayText": "Preheat\nSpeed", + "displayText": "Preheat Speed", "description": "Preheat at this rate (degrees per second)" }, "ProfilePhase1Temp": { - "displayText": "Phase 1\nTemp", + "displayText": "Phase 1 Temp", "description": "Target temperature for the end of this phase" }, "ProfilePhase1Duration": { - "displayText": "Phase 1\nDuration", + "displayText": "Phase 1 Duration", "description": "Target duration of this phase (seconds)" }, "ProfilePhase2Temp": { - "displayText": "Phase 2\nTemp", + "displayText": "Phase 2 Temp", "description": "" }, "ProfilePhase2Duration": { - "displayText": "Phase 2\nDuration", + "displayText": "Phase 2 Duration", "description": "" }, "ProfilePhase3Temp": { - "displayText": "Phase 3\nTemp", + "displayText": "Phase 3 Temp", "description": "" }, "ProfilePhase3Duration": { - "displayText": "Phase 3\nDuration", + "displayText": "Phase 3 Duration", "description": "" }, "ProfilePhase4Temp": { - "displayText": "Phase 4\nTemp", + "displayText": "Phase 4 Temp", "description": "" }, "ProfilePhase4Duration": { - "displayText": "Phase 4\nDuration", + "displayText": "Phase 4 Duration", "description": "" }, "ProfilePhase5Temp": { - "displayText": "Phase 5\nTemp", + "displayText": "Phase 5 Temp", "description": "" }, "ProfilePhase5Duration": { - "displayText": "Phase 5\nDuration", + "displayText": "Phase 5 Duration", "description": "" }, "ProfileCooldownSpeed": { - "displayText": "Cooldown\nSpeed", + "displayText": "Cooldown Speed", "description": "Cooldown at this rate at the end of profile mode (degrees per second)" }, "MotionSensitivity": { From 2745221643c0d1bc82f5171c4fba18c7f708a593 Mon Sep 17 00:00:00 2001 From: Laura <3868507+codingcatgirl@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:09:36 +0200 Subject: [PATCH 17/19] Update Documentation/GettingStarted.md Co-authored-by: discip <53649486+discip@users.noreply.github.com> --- Documentation/GettingStarted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/GettingStarted.md b/Documentation/GettingStarted.md index 7bc3d91042..e269a88194 100644 --- a/Documentation/GettingStarted.md +++ b/Documentation/GettingStarted.md @@ -76,7 +76,7 @@ If, after entering sleep mode, the iron still does not see movement for a much l ## Profile Mode (MHP30 only) -On devices that support it, when you long press the button to enter the soldering mode, you enter profile mode which will adjust the temperature according to the profile mode settings. +On devices that support it, a long press on `(+/A)` takes you into profile mode, which initiates the profile selected in the relevant settings. Profile mode plays out as follows: From 366b3356da5c1e8d3f3c72ecaa7c55d0d8731658 Mon Sep 17 00:00:00 2001 From: Laura <3868507+codingcatgirl@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:11:06 +0200 Subject: [PATCH 18/19] Update Documentation/Menu.md Co-authored-by: discip <53649486+discip@users.noreply.github.com> --- Documentation/Menu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Menu.md b/Documentation/Menu.md index 9a349da35d..458656a35c 100644 --- a/Documentation/Menu.md +++ b/Documentation/Menu.md @@ -11,7 +11,7 @@ In this mode the iron works as you would expect, pressing either button will tak ## Profile mode (MHP30 only) -In this mode, accessible by long pressing the button that brings you into soldering mode, the iron will play out the configured profile. +In this mode, accessible by long pressing `(+/A)`, the configured profile will be initiated. - You cannot adjust the temperature or enter boost mode. - Pressing both buttons or holding the rear button (`-/B`) will exit Profile Mode as well. From 27498d2573ec554138bf9eb8000c5f2852c927a0 Mon Sep 17 00:00:00 2001 From: Laura <3868507+codingcatgirl@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:29:22 +0200 Subject: [PATCH 19/19] Update Translations/translation_DE.json Co-authored-by: discip <53649486+discip@users.noreply.github.com> --- Translations/translation_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Translations/translation_DE.json b/Translations/translation_DE.json index d04c57c22b..1b2ac2502c 100644 --- a/Translations/translation_DE.json +++ b/Translations/translation_DE.json @@ -70,7 +70,7 @@ "message": "Höchstwahrscheinlich ist das Gerät eine Fälschung!" }, "TooHotToStartProfileWarning": { - "message": "Zu heiß zum\nProfil Starten" + "message": "Zu heiß um\nProfil zu starten!" } }, "characters": {