Merge branch 'dev' into dev

This commit is contained in:
discip
2025-01-13 22:20:48 +01:00
committed by GitHub
21 changed files with 250 additions and 172 deletions

1
.gitignore vendored
View File

@@ -215,3 +215,4 @@ Logo GUI/TS100 Logo Editor/TS100 Logo Editor/bin/
# Tests/linters/sanitizers # Tests/linters/sanitizers
source/check-style.log source/check-style.log
.ash_history

View File

@@ -39,7 +39,7 @@ The model should be replaced by one of the following options:
- `pinecilv1` for the Pinecil V1 - `pinecilv1` for the Pinecil V1
- `pinecilv2` for the Pinecil V2 - `pinecilv2` for the Pinecil V2
- `ts101` for the Miniware TS101 [^1] [^2] - `ts101` for the Miniware TS101 [^1] [^2]
- `s60` for the Squire S60 [^1] - `s60` for the Sequre S60 [^1]
- `mhp30` for the Miniware MHP30 - `mhp30` for the Miniware MHP30
Different models are used for different flash locations for the image storage. Different models are used for different flash locations for the image storage.

View File

@@ -65,13 +65,12 @@ For notes on installation for your device, please refer to the flashing guide fo
## Builds ## Builds
The links in the table below allow to download available builds directly. The links in the table below allow to download available builds directly:
- current _Stable Release_ is **`v2.22`**;
- _Development Build_ **dynamically** provides _**the latest successful build**_ from **`dev`** branch.
Current stable release is `v2.22`. | Device | Stable Release | Development Build |
_Devel builds_ **dynamically** provide _**the latest successful build**_ from **`dev`** branch. |:---------------------:|:--------------:|:-----------------:|
| Device | Stable Release | Devel Build |
|:---------------------:|:--------------:|:-----------:|
| Pinecil V1 | [Pinecil.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/Pinecil.zip) | [Pinecil.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil.zip) | | Pinecil V1 | [Pinecil.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/Pinecil.zip) | [Pinecil.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil.zip) |
| Pinecil V1/multilang | [Pinecil_multi-lang.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/Pinecil_multi-lang.zip) | [Pinecil_multi-lang.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil_multi-lang.zip) | | Pinecil V1/multilang | [Pinecil_multi-lang.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/Pinecil_multi-lang.zip) | [Pinecil_multi-lang.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil_multi-lang.zip) |
| Pinecil V2 | [PinecilV2.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/PinecilV2.zip) | [PinecilV2.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecilv2.zip) | | Pinecil V2 | [PinecilV2.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/PinecilV2.zip) | [PinecilV2.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecilv2.zip) |

View File

@@ -340,8 +340,8 @@
"description": "" "description": ""
}, },
"SolderingTipType": { "SolderingTipType": {
"displayText": "Soldering\nTip Type", "displayText": "Löt-\nspitzentyp",
"description": "Select the tip type fitted" "description": "Wählen Sie den Typ der eingesetzten Spitze"
} }
} }
} }

View File

@@ -116,13 +116,13 @@
"displayText": "Modalità\nsicura" "displayText": "Modalità\nsicura"
}, },
"TipTypeAuto": { "TipTypeAuto": {
"displayText": "Auto\nSense" "displayText": "Rilevaz.\nauto"
}, },
"TipTypeT12Long": { "TipTypeT12Long": {
"displayText": "TS100\nLong" "displayText": "TS100\nlunga"
}, },
"TipTypeT12Short": { "TipTypeT12Short": {
"displayText": "Pine\nShort" "displayText": "Pine\ncorta"
}, },
"TipTypeT12PTS": { "TipTypeT12PTS": {
"displayText": "PTS\n200" "displayText": "PTS\n200"
@@ -149,7 +149,7 @@
}, },
"PDNegTimeout": { "PDNegTimeout": {
"displayText": "Abilitazione\nUSB PD", "displayText": "Abilitazione\nUSB PD",
"description": "Regola il massimo tempo utile per la negoziazione del protocollo USB Power Delivery con alimentatori compatibili [0: disattiva; multipli di 100 ms]" "description": "Imposta il tempo di negoziazione del protocollo USB Power Delivery con alimentatori compatibili [0: disattiva; multipli di 100 ms]"
}, },
"USBPDMode": { "USBPDMode": {
"displayText": "PD\nMode", "displayText": "PD\nMode",
@@ -177,7 +177,7 @@
}, },
"ProfilePhases": { "ProfilePhases": {
"displayText": "Fasi modalità\nprofilo", "displayText": "Fasi modalità\nprofilo",
"description": "Imposta il numero di fasi da attuare per un profilo di riscaldamento personalizzato" "description": "Imposta il numero di fasi da implementare per un profilo di riscaldamento personalizzato"
}, },
"ProfilePreheatTemp": { "ProfilePreheatTemp": {
"displayText": "Temperatura\npreriscaldamento", "displayText": "Temperatura\npreriscaldamento",
@@ -340,8 +340,8 @@
"description": "" "description": ""
}, },
"SolderingTipType": { "SolderingTipType": {
"displayText": "Soldering\nTip Type", "displayText": "Tipo di\npunta",
"description": "Select the tip type fitted" "description": "Seleziona il modello della punta in uso"
} }
} }
} }

View File

@@ -4,7 +4,7 @@
"tempUnitFahrenheit": false, "tempUnitFahrenheit": false,
"messagesWarn": { "messagesWarn": {
"CalibrationDone": { "CalibrationDone": {
"message": "Kalibracja\nwykonana!" "message": "Skalibrowano!"
}, },
"ResetOKMessage": { "ResetOKMessage": {
"message": "Reset OK" "message": "Reset OK"
@@ -19,7 +19,7 @@
"message": "Nie rozpoznano\nkont. USB-PD IC!" "message": "Nie rozpoznano\nkont. USB-PD IC!"
}, },
"LockingKeysString": { "LockingKeysString": {
"message": " ZABLOK." "message": "ZABLOK."
}, },
"UnlockingKeysString": { "UnlockingKeysString": {
"message": "ODBLOK." "message": "ODBLOK."
@@ -31,7 +31,7 @@
"message": "Ucieczka\ntermiczna" "message": "Ucieczka\ntermiczna"
}, },
"WarningTipShorted": { "WarningTipShorted": {
"message": "!Tip Shorted!" "message": "!Zwarty grot!"
}, },
"SettingsCalibrationWarning": { "SettingsCalibrationWarning": {
"message": "Upewnij się, że końcówka i uchwyt mają temperaturę pokojową podczas następnego rozruchu!" "message": "Upewnij się, że końcówka i uchwyt mają temperaturę pokojową podczas następnego rozruchu!"
@@ -58,16 +58,16 @@
"message": "Grot: \n" "message": "Grot: \n"
}, },
"ProfilePreheatString": { "ProfilePreheatString": {
"message": "Preheat\n" "message": "Rozgrzewanie\n"
}, },
"ProfileCooldownString": { "ProfileCooldownString": {
"message": "Cooldown\n" "message": "Schładzanie\n"
}, },
"DeviceFailedValidationWarning": { "DeviceFailedValidationWarning": {
"message": "Twoje urządzenie jest najprawdopodobniej podróbką!" "message": "Twoje urządzenie jest najprawdopodobniej podróbką!"
}, },
"TooHotToStartProfileWarning": { "TooHotToStartProfileWarning": {
"message": "Too hot to\nstart profile" "message": "Zbyt gorące, aby\nuruchomić profil"
} }
}, },
"characters": { "characters": {
@@ -107,22 +107,22 @@
}, },
"menuValues": { "menuValues": {
"USBPDModeDefault": { "USBPDModeDefault": {
"displayText": "Default\nMode" "displayText": "Tryb\ndomyślny"
}, },
"USBPDModeNoDynamic": { "USBPDModeNoDynamic": {
"displayText": "No\nDynamic" "displayText": "Nie\ndynamiczny"
}, },
"USBPDModeSafe": { "USBPDModeSafe": {
"displayText": "Safe\nMode" "displayText": "Tryb\nbezpieczny"
}, },
"TipTypeAuto": { "TipTypeAuto": {
"displayText": "Auto\nSense" "displayText": "Auto\nwykrycie"
}, },
"TipTypeT12Long": { "TipTypeT12Long": {
"displayText": "TS100\nLong" "displayText": "Długi\nTS100"
}, },
"TipTypeT12Short": { "TipTypeT12Short": {
"displayText": "Pine\nShort" "displayText": "Krótki\nPine"
}, },
"TipTypeT12PTS": { "TipTypeT12PTS": {
"displayText": "PTS\n200" "displayText": "PTS\n200"
@@ -137,27 +137,27 @@
"menuOptions": { "menuOptions": {
"DCInCutoff": { "DCInCutoff": {
"displayText": "Źródło\nzasilania", "displayText": "Źródło\nzasilania",
"description": "Źródło zasilania. Ustaw napięcie odcięcia. (DC 10V) (S 3.3V dla ogniw Li, wyłącz limit mocy)" "description": "Źródło zasilania. Ustaw napięcie odcięcia. (DC 10V) (S=3.3V dla ogniw Li, wyłącz limit mocy)"
}, },
"MinVolCell": { "MinVolCell": {
"displayText": "Minimalne\nnapięcie", "displayText": "Minimalne\nnapięcie",
"description": "Minimalne dozwolone napięcie na komórkę (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)" "description": "Minimalne dozwolone napięcie na komórkę (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)"
}, },
"QCMaxVoltage": { "QCMaxVoltage": {
"displayText": "QC\nnapięcie", "displayText": "Napięcie QC",
"description": "Maksymalne napięcie, które lutownica będzie próbowała wynegocjować z ładowarką Quick Charge (V)" "description": "Maksymalne napięcie, które lutownica będzie próbowała wynegocjować z ładowarką Quick Charge (V)"
}, },
"PDNegTimeout": { "PDNegTimeout": {
"displayText": "Limit czasu\nPD", "displayText": "Limit czasu\nPD",
"description": "Limit czasu negocjacji PD w krokach co 100 ms dla zgodności z niektórymi ładowarkami QC (0: wyłączone)" "description": "Limit czasu negocjacji PD w krokach co 100ms dla zgodności z niektórymi ładowarkami QC (0: wyłączone)"
}, },
"USBPDMode": { "USBPDMode": {
"displayText": "PD\nMode", "displayText": "Tryb PD",
"description": "Włącza tryby PPS & EPR." "description": "Włącza tryby PPS & EPR."
}, },
"BoostTemperature": { "BoostTemperature": {
"displayText": "Temp.\nboost", "displayText": "Temp.\nboost",
"description": "Temperatura w trybie \"boost\" " "description": "Temp. w trybie \"boost\" "
}, },
"AutoStart": { "AutoStart": {
"displayText": "Aut. uruch.\ntr. lutowania", "displayText": "Aut. uruch.\ntr. lutowania",
@@ -176,60 +176,60 @@
"description": "W trybie lutowania, wciśnij oba przyciski aby je zablokować (B=tylko Boost | P=pełna blokada)" "description": "W trybie lutowania, wciśnij oba przyciski aby je zablokować (B=tylko Boost | P=pełna blokada)"
}, },
"ProfilePhases": { "ProfilePhases": {
"displayText": "Profile\nPhases", "displayText": "Fazy\nprofilu",
"description": "Number of phases in profile mode" "description": "Liczba faz w trybie profilu"
}, },
"ProfilePreheatTemp": { "ProfilePreheatTemp": {
"displayText": "Preheat\nTemp", "displayText": "Temp.\nrozgrzewania",
"description": "Preheat to this temperature at the start of profile mode" "description": "Rozgrzanie do tej temp. na początku trybu profilu"
}, },
"ProfilePreheatSpeed": { "ProfilePreheatSpeed": {
"displayText": "Preheat\nSpeed", "displayText": "Prędk.\nrozgrzewania",
"description": "Preheat at this rate (degrees per second)" "description": "Tempo rozgrzewania (stopnie na sekundę)"
}, },
"ProfilePhase1Temp": { "ProfilePhase1Temp": {
"displayText": "Phase 1\nTemp", "displayText": "Temp.\nfazy 1",
"description": "Target temperature for the end of this phase" "description": "Docelowa temp. na koniec tej fazy"
}, },
"ProfilePhase1Duration": { "ProfilePhase1Duration": {
"displayText": "Phase 1\nDuration", "displayText": "Dług.\nfazy 1",
"description": "Target duration of this phase (seconds)" "description": "Docelowy czas trwania tej fazy (sekundy)"
}, },
"ProfilePhase2Temp": { "ProfilePhase2Temp": {
"displayText": "Phase 2\nTemp", "displayText": "Temp.\nfazy 2",
"description": "" "description": ""
}, },
"ProfilePhase2Duration": { "ProfilePhase2Duration": {
"displayText": "Phase 2\nDuration", "displayText": "Dług.\nfazy 2",
"description": "" "description": ""
}, },
"ProfilePhase3Temp": { "ProfilePhase3Temp": {
"displayText": "Phase 3\nTemp", "displayText": "Temp.\nfazy 3",
"description": "" "description": ""
}, },
"ProfilePhase3Duration": { "ProfilePhase3Duration": {
"displayText": "Phase 3\nDuration", "displayText": "Dług.\nfazy 3",
"description": "" "description": ""
}, },
"ProfilePhase4Temp": { "ProfilePhase4Temp": {
"displayText": "Phase 4\nTemp", "displayText": "Temp.\nfazy 4",
"description": "" "description": ""
}, },
"ProfilePhase4Duration": { "ProfilePhase4Duration": {
"displayText": "Phase 4\nDuration", "displayText": "Dług.\nfazy 4",
"description": "" "description": ""
}, },
"ProfilePhase5Temp": { "ProfilePhase5Temp": {
"displayText": "Phase 5\nTemp", "displayText": "Temp.\nfazy 5",
"description": "" "description": ""
}, },
"ProfilePhase5Duration": { "ProfilePhase5Duration": {
"displayText": "Phase 5\nDuration", "displayText": "Dług.\nfazy 5",
"description": "" "description": ""
}, },
"ProfileCooldownSpeed": { "ProfileCooldownSpeed": {
"displayText": "Cooldown\nSpeed", "displayText": "Prędk.\nschładzania",
"description": "Cooldown at this rate at the end of profile mode (degrees per second)" "description": "Tempo schładzania na koniec trybu profilu (stopnie na sekundę)"
}, },
"MotionSensitivity": { "MotionSensitivity": {
"displayText": "Czułość\nwykr. ruchu", "displayText": "Czułość\nwykr. ruchu",
@@ -264,8 +264,8 @@
"description": "Obrót ekranu (P: dla praworęcznych | L: dla leworęcznych | A: automatycznie)" "description": "Obrót ekranu (P: dla praworęcznych | L: dla leworęcznych | A: automatycznie)"
}, },
"CooldownBlink": { "CooldownBlink": {
"displayText": "Mig. podczas\nwychładzania", "displayText": "Mig. podczas\nschładzania",
"description": "Temperatura miga podczas wychładzania, gdy grot jest wciąż gorący" "description": "Temperatura miga podczas schładzania, gdy grot jest wciąż gorący"
}, },
"ScrollingSpeed": { "ScrollingSpeed": {
"displayText": "Sz. przew.\ntekstu", "displayText": "Sz. przew.\ntekstu",
@@ -296,7 +296,7 @@
"description": "Ustawia czas wyświetlania loga podczas uruchamiania (s=sekund)" "description": "Ustawia czas wyświetlania loga podczas uruchamiania (s=sekund)"
}, },
"AdvancedIdle": { "AdvancedIdle": {
"displayText": "Szeczegółowy\nekran bezczy.", "displayText": "Szczegółowy\nekran bezczyn.",
"description": "Wyświetla szczegółowe informacje za pomocą mniejszej czcionki na ekranie bezczynności" "description": "Wyświetla szczegółowe informacje za pomocą mniejszej czcionki na ekranie bezczynności"
}, },
"AdvancedSoldering": { "AdvancedSoldering": {
@@ -305,7 +305,7 @@
}, },
"BluetoothLE": { "BluetoothLE": {
"displayText": "Bluetooth\n", "displayText": "Bluetooth\n",
"description": "Enables BLE" "description": "Włącza Bluetooth Low Energy"
}, },
"PowerLimit": { "PowerLimit": {
"displayText": "Ogr.\nmocy", "displayText": "Ogr.\nmocy",
@@ -340,8 +340,8 @@
"description": "" "description": ""
}, },
"SolderingTipType": { "SolderingTipType": {
"displayText": "Soldering\nTip Type", "displayText": "Typ grotu",
"description": "Select the tip type fitted" "description": "Wybierz typ zamontowanego grotu"
} }
} }
} }

View File

@@ -116,19 +116,19 @@
"displayText": "Вкл.без\nзапроса" "displayText": "Вкл.без\nзапроса"
}, },
"TipTypeAuto": { "TipTypeAuto": {
"displayText": "Auto\nSense" "displayText": "Авто\nопред-е"
}, },
"TipTypeT12Long": { "TipTypeT12Long": {
"displayText": "TS100\nLong" "displayText": "TS100\nстанд."
}, },
"TipTypeT12Short": { "TipTypeT12Short": {
"displayText": "Pine\nShort" "displayText": "Pine\nкоротк."
}, },
"TipTypeT12PTS": { "TipTypeT12PTS": {
"displayText": "PTS\n200" "displayText": "PTS\n200"
}, },
"TipTypeTS80": { "TipTypeTS80": {
"displayText": "TS80\n" "displayText": "TS80(P)\n"
}, },
"TipTypeJBCC210": { "TipTypeJBCC210": {
"displayText": "JBC\nC210" "displayText": "JBC\nC210"
@@ -252,8 +252,8 @@
"description": "Чувствительность датчика Холла к магнитному полю (1=мин. | ... | 9=макс.)" "description": "Чувствительность датчика Холла к магнитному полю (1=мин. | ... | 9=макс.)"
}, },
"HallEffSleepTimeout": { "HallEffSleepTimeout": {
"displayText": "HallSensor\nSleepTime", "displayText": "Интервал\nдатчика Холла",
"description": "Интервал перед запуском \"спящего режима\", когда эффект Холла превышает пороговое значение" "description": "Время между превышением датчиком Холла порогового значения и режимом сна"
}, },
"TemperatureUnit": { "TemperatureUnit": {
"displayText": "Единицы\nизмерения", "displayText": "Единицы\nизмерения",
@@ -340,8 +340,8 @@
"description": "" "description": ""
}, },
"SolderingTipType": { "SolderingTipType": {
"displayText": "Soldering\nTip Type", "displayText": "Тип\nжала",
"description": "Select the tip type fitted" "description": "Выбор типа установленного жала"
} }
} }
} }

View File

@@ -46,10 +46,10 @@
"message": "电压过低" "message": "电压过低"
}, },
"UndervoltageString": { "UndervoltageString": {
"message": "Undervoltage" "message": "欠压"
}, },
"InputVoltageString": { "InputVoltageString": {
"message": "VIN: " "message": "VIN: \n"
}, },
"SleepingAdvancedString": { "SleepingAdvancedString": {
"message": "Zzzz..." "message": "Zzzz..."
@@ -58,16 +58,16 @@
"message": "<--- " "message": "<--- "
}, },
"ProfilePreheatString": { "ProfilePreheatString": {
"message": "Preheat" "message": "预热中"
}, },
"ProfileCooldownString": { "ProfileCooldownString": {
"message": "Cooldown" "message": "冷却"
}, },
"DeviceFailedValidationWarning": { "DeviceFailedValidationWarning": {
"message": "这支电烙铁很有可能是冒牌货!" "message": "这支电烙铁很有可能是冒牌货!"
}, },
"TooHotToStartProfileWarning": { "TooHotToStartProfileWarning": {
"message": "Too hot to start profile" "message": "设备过热"
} }
}, },
"characters": { "characters": {
@@ -107,16 +107,16 @@
}, },
"menuValues": { "menuValues": {
"USBPDModeDefault": { "USBPDModeDefault": {
"displayText": "Default\nMode" "displayText": "默认模式"
}, },
"USBPDModeNoDynamic": { "USBPDModeNoDynamic": {
"displayText": "No\nDynamic" "displayText": "No\nDynamic"
}, },
"USBPDModeSafe": { "USBPDModeSafe": {
"displayText": "Safe\nMode" "displayText": "安全模式"
}, },
"TipTypeAuto": { "TipTypeAuto": {
"displayText": "Auto\nSense" "displayText": "自动检测"
}, },
"TipTypeT12Long": { "TipTypeT12Long": {
"displayText": "TS100\nLong" "displayText": "TS100\nLong"
@@ -152,7 +152,7 @@
"description": "设定USB-PD协议交涉的超时时限为兼容某些QC电源而设 <x100ms亳秒>" "description": "设定USB-PD协议交涉的超时时限为兼容某些QC电源而设 <x100ms亳秒>"
}, },
"USBPDMode": { "USBPDMode": {
"displayText": "PD VPDO", "displayText": "PD\nVPDO",
"description": "启用PPS和EPR快充支持" "description": "启用PPS和EPR快充支持"
}, },
"BoostTemperature": { "BoostTemperature": {
@@ -176,60 +176,60 @@
"description": "焊接模式时,同时长按两个按键启用按键锁定 <增=只容许增热模式 | 全=完全锁定>" "description": "焊接模式时,同时长按两个按键启用按键锁定 <增=只容许增热模式 | 全=完全锁定>"
}, },
"ProfilePhases": { "ProfilePhases": {
"displayText": "Profile Phases", "displayText": "配置阶数",
"description": "Number of phases in profile mode" "description": "配置模式下的阶段数量"
}, },
"ProfilePreheatTemp": { "ProfilePreheatTemp": {
"displayText": "Preheat Temp", "displayText": "预热温度",
"description": "Preheat to this temperature at the start of profile mode" "description": "配置开始时的目标温度"
}, },
"ProfilePreheatSpeed": { "ProfilePreheatSpeed": {
"displayText": "Preheat Speed", "displayText": "预热速度",
"description": "Preheat at this rate (degrees per second)" "description": "将以此速度进行预热 (度/秒)"
}, },
"ProfilePhase1Temp": { "ProfilePhase1Temp": {
"displayText": "Phase 1 Temp", "displayText": "阶段1温度",
"description": "Target temperature for the end of this phase" "description": "此阶段结束时的目标温度"
}, },
"ProfilePhase1Duration": { "ProfilePhase1Duration": {
"displayText": "Phase 1 Duration", "displayText": "阶段1时间",
"description": "Target duration of this phase (seconds)" "description": "此阶段的目标持续时间(秒)"
}, },
"ProfilePhase2Temp": { "ProfilePhase2Temp": {
"displayText": "Phase 2 Temp", "displayText": "阶段2温度",
"description": "" "description": "此阶段结束时的目标温度"
}, },
"ProfilePhase2Duration": { "ProfilePhase2Duration": {
"displayText": "Phase 2 Duration", "displayText": "阶段2时间",
"description": "" "description": "此阶段的目标持续时间(秒)"
}, },
"ProfilePhase3Temp": { "ProfilePhase3Temp": {
"displayText": "Phase 3 Temp", "displayText": "阶段3温度",
"description": "" "description": "此阶段结束时的目标温度"
}, },
"ProfilePhase3Duration": { "ProfilePhase3Duration": {
"displayText": "Phase 3 Duration", "displayText": "阶段3时间",
"description": "" "description": "此阶段的目标持续时间(秒)"
}, },
"ProfilePhase4Temp": { "ProfilePhase4Temp": {
"displayText": "Phase 4 Temp", "displayText": "阶段4温度",
"description": "" "description": "此阶段结束时的目标温度"
}, },
"ProfilePhase4Duration": { "ProfilePhase4Duration": {
"displayText": "Phase 4 Duration", "displayText": "阶段4时间",
"description": "" "description": "此阶段的目标持续时间(秒)"
}, },
"ProfilePhase5Temp": { "ProfilePhase5Temp": {
"displayText": "Phase 5 Temp", "displayText": "阶段5温度",
"description": "" "description": "此阶段结束时的目标温度"
}, },
"ProfilePhase5Duration": { "ProfilePhase5Duration": {
"displayText": "Phase 5 Duration", "displayText": "阶段5时间",
"description": "" "description": "此阶段的目标持续时间(秒)"
}, },
"ProfileCooldownSpeed": { "ProfileCooldownSpeed": {
"displayText": "Cooldown Speed", "displayText": "冷却速度",
"description": "Cooldown at this rate at the end of profile mode (degrees per second)" "description": "在配置模式结束时以此速度进行冷却(度/秒)"
}, },
"MotionSensitivity": { "MotionSensitivity": {
"displayText": "动作灵敏度", "displayText": "动作灵敏度",
@@ -252,8 +252,8 @@
"description": "霍尔效应传感器用作启动待机模式的灵敏度 <1=最低灵敏度 | ... | 9=最高灵敏度>" "description": "霍尔效应传感器用作启动待机模式的灵敏度 <1=最低灵敏度 | ... | 9=最高灵敏度>"
}, },
"HallEffSleepTimeout": { "HallEffSleepTimeout": {
"displayText": "HallSensor\nSleepTime", "displayText": "霍尔传感器休眠时间",
"description": "Interval before \"sleep mode\" starts when hall effect is above threshold" "description": "当霍尔传感器检测值高于阈值时,进入“睡眠模式”前的间隔时间"
}, },
"TemperatureUnit": { "TemperatureUnit": {
"displayText": "温度单位", "displayText": "温度单位",
@@ -316,7 +316,7 @@
"description": "在下次重启时校正烙铁头热电偶冷接点补偿值CJC温差小于5摄氏度时无需校正" "description": "在下次重启时校正烙铁头热电偶冷接点补偿值CJC温差小于5摄氏度时无需校正"
}, },
"VoltageCalibration": { "VoltageCalibration": {
"displayText": "输入电压校正", "displayText": "输入电压校正",
"description": "开始校正输入电压VIN<长按以退出>" "description": "开始校正输入电压VIN<长按以退出>"
}, },
"PowerPulsePower": { "PowerPulsePower": {
@@ -332,7 +332,7 @@
"description": "为保持电源处于唤醒状态,每次通电脉冲的时间长度 <x250ms亳秒>" "description": "为保持电源处于唤醒状态,每次通电脉冲的时间长度 <x250ms亳秒>"
}, },
"SettingsReset": { "SettingsReset": {
"displayText": "全部重置", "displayText": "全部重置",
"description": "将所有设定重置为默认值" "description": "将所有设定重置为默认值"
}, },
"LanguageSwitch": { "LanguageSwitch": {
@@ -340,8 +340,8 @@
"description": "" "description": ""
}, },
"SolderingTipType": { "SolderingTipType": {
"displayText": "Soldering\nTip Type", "displayText": "焊接头类型",
"description": "Select the tip type fitted" "description": "选择安装合适的尖端类型"
} }
} }
} }

View File

@@ -90,6 +90,20 @@ docs_history()
return "${ret}" return "${ret}"
} }
# Check for links to release builds in README.md
docs_links()
{
ver_git="$(git tag -l | sort | grep -e "^v" | grep -v "rc" | tail -1)"
md="README.md"
ver_md="$(grep -c "${ver_git}" "${md}")"
ret=0
if [ "${ver_md}" -ne 0 ]; then
ret=1
echo "Please, update mention & links in ${md} inside Builds section for release builds with version ${ver_git}."
fi;
return "${ret}"
}
# source/Makefile:ALL_LANGUAGES & Translations/*.json automagical routine # source/Makefile:ALL_LANGUAGES & Translations/*.json automagical routine
build_langs() build_langs()
{ {
@@ -191,7 +205,9 @@ if [ "docs" = "${cmd}" ]; then
hist="${?}" hist="${?}"
build_langs build_langs
langs="${?}" langs="${?}"
if [ "${readme}" -eq 0 ] && [ "${hist}" -eq 0 ] && [ "${langs}" -eq 0 ]; then docs_links
links="${?}"
if [ "${readme}" -eq 0 ] && [ "${hist}" -eq 0 ] && [ "${langs}" -eq 0 ] && [ "${links}" -eq 0 ]; then
ret=0 ret=0
else else
ret=1 ret=1
@@ -218,6 +234,11 @@ if [ "build_langs" = "${cmd}" ]; then
exit "${?}" exit "${?}"
fi; fi;
if [ "docs_links" = "${cmd}" ]; then
docs_links
exit "${?}"
fi;
if [ "check_style_file" = "${cmd}" ]; then if [ "check_style_file" = "${cmd}" ]; then
check_style_file "${2}" check_style_file "${2}"
exit "${?}" exit "${?}"

View File

@@ -103,8 +103,8 @@
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
// Due to large thermal mass of the PCB being heated we need to pull this back a bit // Due to large thermal mass of the PCB being heated we need to pull this back a bit
#define THERMAL_RUNAWAY_TIME_SEC 45 #define THERMAL_RUNAWAY_TIME_SEC 20
#define THERMAL_RUNAWAY_TEMP_C 3 #define THERMAL_RUNAWAY_TEMP_C 2
#define CUT_OUT_SETTING 0 // default to no cut-off voltage #define CUT_OUT_SETTING 0 // default to no cut-off voltage
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))

View File

@@ -63,8 +63,13 @@
* OLED Brightness * OLED Brightness
* *
*/ */
#define MIN_BRIGHTNESS 0 // Min OLED brightness selectable #if defined(MODEL_TS101)
#define MAX_BRIGHTNESS 100 // Max OLED brightness selectable #define MIN_BRIGHTNESS 1 // Min OLED brightness selectable
#define MAX_BRIGHTNESS 101 // Max OLED brightness selectable
#else
#define MIN_BRIGHTNESS 0 // Min OLED brightness selectable
#define MAX_BRIGHTNESS 100 // Max OLED brightness selectable
#endif
#define BRIGHTNESS_STEP 25 // OLED brightness increment #define BRIGHTNESS_STEP 25 // OLED brightness increment
#define DEFAULT_BRIGHTNESS 25 // default OLED brightness #define DEFAULT_BRIGHTNESS 25 // default OLED brightness
@@ -104,7 +109,7 @@
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
#define THERMAL_RUNAWAY_TIME_SEC 20 #define THERMAL_RUNAWAY_TIME_SEC 20
#define THERMAL_RUNAWAY_TEMP_C 10 #define THERMAL_RUNAWAY_TEMP_C 3
#define CUT_OUT_SETTING 0 // default to no cut-off voltage #define CUT_OUT_SETTING 0 // default to no cut-off voltage
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))
@@ -214,6 +219,7 @@
#define TEMP_NTC 1 #define TEMP_NTC 1
#define ACCEL_I2CBB1 1 #define ACCEL_I2CBB1 1
#define POW_EPR 1 #define POW_EPR 1
#define TIP_TYPE_SUPPORT 1 // Support for tips of different types, i.e. resistance
#define AUTO_TIP_SELECTION 1 // Can auto-select the tip #define AUTO_TIP_SELECTION 1 // Can auto-select the tip
#define TIPTYPE_T12 1 // Can manually pick a T12 tip #define TIPTYPE_T12 1 // Can manually pick a T12 tip
#define HAS_POWER_DEBUG_MENU #define HAS_POWER_DEBUG_MENU

View File

@@ -104,7 +104,7 @@
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
#define THERMAL_RUNAWAY_TIME_SEC 20 #define THERMAL_RUNAWAY_TIME_SEC 20
#define THERMAL_RUNAWAY_TEMP_C 20 #define THERMAL_RUNAWAY_TEMP_C 3
#define CUT_OUT_SETTING 0 // default to no cut-off voltage #define CUT_OUT_SETTING 0 // default to no cut-off voltage
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))

View File

@@ -105,7 +105,7 @@
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
#define THERMAL_RUNAWAY_TIME_SEC 20 #define THERMAL_RUNAWAY_TIME_SEC 20
#define THERMAL_RUNAWAY_TEMP_C 20 #define THERMAL_RUNAWAY_TEMP_C 3
#define CUT_OUT_SETTING 0 // default to no cut-off voltage #define CUT_OUT_SETTING 0 // default to no cut-off voltage
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))
@@ -155,6 +155,7 @@
#define POW_EPR 1 #define POW_EPR 1
#define ENABLE_QC2 1 #define ENABLE_QC2 1
#define MAG_SLEEP_SUPPORT 1 #define MAG_SLEEP_SUPPORT 1
#define TIP_TYPE_SUPPORT 1 // Support for tips of different types, i.e. resistance
#define AUTO_TIP_SELECTION 1 // Can auto-select the tip #define AUTO_TIP_SELECTION 1 // Can auto-select the tip
#define TIPTYPE_T12 1 // Can manually pick a T12 tip #define TIPTYPE_T12 1 // Can manually pick a T12 tip
#define DEVICE_HAS_VALIDATION_SUPPORT #define DEVICE_HAS_VALIDATION_SUPPORT

View File

@@ -133,7 +133,7 @@
#define TEMP_uV_LOOKUP_S60 #define TEMP_uV_LOOKUP_S60
#define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate #define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate
#define THERMAL_RUNAWAY_TIME_SEC 20 #define THERMAL_RUNAWAY_TIME_SEC 20
#define THERMAL_RUNAWAY_TEMP_C 10 #define THERMAL_RUNAWAY_TEMP_C 3
#define USB_PD_TIMEOUT 1 // Default Timeout for USB-PD Protocol negotiation in x100ms #define USB_PD_TIMEOUT 1 // Default Timeout for USB-PD Protocol negotiation in x100ms
#define HARDWARE_MAX_WATTAGE_X10 600 #define HARDWARE_MAX_WATTAGE_X10 600
@@ -168,7 +168,7 @@
#define TEMP_uV_LOOKUP_S60 #define TEMP_uV_LOOKUP_S60
#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate #define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate
#define THERMAL_RUNAWAY_TIME_SEC 20 #define THERMAL_RUNAWAY_TIME_SEC 20
#define THERMAL_RUNAWAY_TEMP_C 10 #define THERMAL_RUNAWAY_TEMP_C 3
#define USB_PD_TIMEOUT 1 // Default Timeout for USB-PD Protocol negotiation in x100ms #define USB_PD_TIMEOUT 1 // Default Timeout for USB-PD Protocol negotiation in x100ms
#define HARDWARE_MAX_WATTAGE_X10 600 #define HARDWARE_MAX_WATTAGE_X10 600
@@ -225,8 +225,8 @@
#define TIP_THERMAL_MASS 30 // X10 watts to raise 1 deg C in 1 second #define TIP_THERMAL_MASS 30 // X10 watts to raise 1 deg C in 1 second
#define TIP_THERMAL_INERTIA 10 // We use a large inertia value to smooth out the drive to the tip since its stupidly sensitive #define TIP_THERMAL_INERTIA 10 // We use a large inertia value to smooth out the drive to the tip since its stupidly sensitive
#define THERMAL_RUNAWAY_TIME_SEC 60 #define THERMAL_RUNAWAY_TIME_SEC 30
#define THERMAL_RUNAWAY_TEMP_C 3 #define THERMAL_RUNAWAY_TEMP_C 2
#define COPPER_HEATER_COIL 1 // Have a heater coil that changes resistance on us #define COPPER_HEATER_COIL 1 // Have a heater coil that changes resistance on us
#define TIP_RESISTANCE 52 // PCB heater, measured at ~19C. Will shift by temp a decent amount #define TIP_RESISTANCE 52 // PCB heater, measured at ~19C. Will shift by temp a decent amount

View File

@@ -123,6 +123,7 @@ typedef enum {
* Some devices allow multiple types of tips to be fitted, this allows selecting them or overriding the logic * Some devices allow multiple types of tips to be fitted, this allows selecting them or overriding the logic
* The first type will be the default (gets value of 0) * The first type will be the default (gets value of 0)
*/ */
#ifdef TIP_TYPE_SUPPORT
typedef enum { typedef enum {
#ifdef AUTO_TIP_SELECTION #ifdef AUTO_TIP_SELECTION
TIP_TYPE_AUTO, // If the hardware supports automatic detection TIP_TYPE_AUTO, // If the hardware supports automatic detection
@@ -142,7 +143,15 @@ typedef enum {
// #endif // #endif
TIP_TYPE_MAX, // Max value marker TIP_TYPE_MAX, // Max value marker
} tipType_t; } tipType_t;
uint8_t getUserSelectedTipResistance(); // returns the resistance matching the selected tip type or 0 for auto #else
typedef enum {
TIP_TYPE_AUTO = 0, // value for the default case
TIP_TYPE_MAX = 0, // marker for settings when not supported
} tipType_t;
#endif /* TIP_TYPE_SUPPORT */
// returns the resistance matching the selected tip type or 0 for auto and when not supported
uint8_t getUserSelectedTipResistance();
// Settings wide operations // Settings wide operations
void saveSettings(); void saveSettings();
@@ -162,5 +171,7 @@ void setSettingValue(const enum SettingsOptions option, const uint16_t newValue)
// Special access helpers, to reduce logic duplication // Special access helpers, to reduce logic duplication
uint8_t lookupVoltageLevel(); uint8_t lookupVoltageLevel();
uint16_t lookupHallEffectThreshold(); uint16_t lookupHallEffectThreshold();
#ifdef TIP_TYPE_SUPPORT
const char *lookupTipName(); // Get the name string for the current soldering tip const char *lookupTipName(); // Get the name string for the current soldering tip
#endif /* TIP_TYPE_SUPPORT */
#endif /* SETTINGS_H_ */ #endif /* SETTINGS_H_ */

View File

@@ -298,16 +298,12 @@ uint8_t lookupVoltageLevel() {
} }
} }
#ifdef TIP_TYPE_SUPPORT
const char *lookupTipName() { const char *lookupTipName() {
// Get the name string for the current soldering tip // Get the name string for the current soldering tip
tipType_t value = (tipType_t)getSettingValue(SettingsOptions::SolderingTipType); tipType_t value = (tipType_t)getSettingValue(SettingsOptions::SolderingTipType);
switch (value) { switch (value) {
#ifdef AUTO_TIP_SELECTION
case tipType_t::TIP_TYPE_AUTO:
return translatedString(Tr->TipTypeAuto);
break;
#endif
#ifdef TIPTYPE_T12 #ifdef TIPTYPE_T12
case tipType_t::T12_8_OHM: case tipType_t::T12_8_OHM:
return translatedString(Tr->TipTypeT12Long); return translatedString(Tr->TipTypeT12Long);
@@ -319,7 +315,7 @@ const char *lookupTipName() {
return translatedString(Tr->TipTypeT12PTS); return translatedString(Tr->TipTypeT12PTS);
break; break;
#endif #endif
#ifdef TIPTYE_TS80 #ifdef TIPTYPE_TS80
case tipType_t::TS80_4_5_OHM: case tipType_t::TS80_4_5_OHM:
return translatedString(Tr->TipTypeTS80); return translatedString(Tr->TipTypeTS80);
break; break;
@@ -328,13 +324,19 @@ const char *lookupTipName() {
case tipType_t::JBC_210_2_5_OHM: case tipType_t::JBC_210_2_5_OHM:
return translatedString(Tr->TipTypeJBCC210); return translatedString(Tr->TipTypeJBCC210);
break; break;
#endif
#ifdef AUTO_TIP_SELECTION
case tipType_t::TIP_TYPE_AUTO:
#endif #endif
default: default:
return nullptr; return translatedString(Tr->TipTypeAuto);
break; break;
} }
} }
#endif /* TIP_TYPE_SUPPORT */
// Returns the resistance for the current tip selected by the user or 0 for auto // Returns the resistance for the current tip selected by the user or 0 for auto
#ifdef TIP_TYPE_SUPPORT
uint8_t getUserSelectedTipResistance() { uint8_t getUserSelectedTipResistance() {
tipType_t value = (tipType_t)getSettingValue(SettingsOptions::SolderingTipType); tipType_t value = (tipType_t)getSettingValue(SettingsOptions::SolderingTipType);
@@ -370,3 +372,6 @@ uint8_t getUserSelectedTipResistance() {
break; break;
} }
} }
#else
uint8_t getUserSelectedTipResistance() { return tipType_t::TIP_TYPE_AUTO; }
#endif /* TIP_TYPE_SUPPORT */

View File

@@ -116,8 +116,10 @@ static bool showHallEffect(void);
#endif /* HALL_SENSOR */ #endif /* HALL_SENSOR */
// Tip type selection // Tip type selection
#ifdef TIP_TYPE_SUPPORT
static void displaySolderingTipType(void); static void displaySolderingTipType(void);
static bool showSolderingTipType(void); static bool showSolderingTipType(void);
#endif /* TIP_TYPE_SUPPORT */
// Menu functions // Menu functions
@@ -267,12 +269,12 @@ const menuitem powerMenu[] = {
const menuitem solderingMenu[] = { const menuitem solderingMenu[] = {
/* /*
* Tip Type
* Boost Mode Temp * Boost Mode Temp
* Auto Start * Auto Start
* Temp Change Short Step * Temp Change Short Step
* Temp Change Long Step * Temp Change Long Step
* Locking Mode * Locking Mode
* Tip Type
* Profile Phases * Profile Phases
* Profile Preheat Temperature * Profile Preheat Temperature
* Profile Preheat Max Temperature Change Per Second * Profile Preheat Max Temperature Change Per Second
@@ -288,8 +290,6 @@ const menuitem solderingMenu[] = {
* Profile Phase 5 Duration (s) * Profile Phase 5 Duration (s)
* Profile Cooldown Max Temperature Change Per Second * Profile Cooldown Max Temperature Change Per Second
*/ */
/* Tip Type */
{SETTINGS_DESC(SettingsItemIndex::SolderingTipType), nullptr, displaySolderingTipType, showSolderingTipType, SettingsOptions::SolderingTipType, SettingsItemIndex::SolderingTipType, 5},
/* Boost Temp */ /* Boost Temp */
{SETTINGS_DESC(SettingsItemIndex::BoostTemperature), setBoostTemp, displayBoostTemp, nullptr, SettingsOptions::BoostTemp, SettingsItemIndex::BoostTemperature, 5}, {SETTINGS_DESC(SettingsItemIndex::BoostTemperature), setBoostTemp, displayBoostTemp, nullptr, SettingsOptions::BoostTemp, SettingsItemIndex::BoostTemperature, 5},
/* Auto start */ /* Auto start */
@@ -300,6 +300,10 @@ const menuitem solderingMenu[] = {
{SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, 6}, {SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, 6},
/* Locking Mode */ /* Locking Mode */
{SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7}, {SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7},
#ifdef TIP_TYPE_SUPPORT
/* Tip Type */
{SETTINGS_DESC(SettingsItemIndex::SolderingTipType), nullptr, displaySolderingTipType, showSolderingTipType, SettingsOptions::SolderingTipType, SettingsItemIndex::SolderingTipType, 5},
#endif /* TIP_TYPE_SUPPORT */
#ifdef PROFILE_SUPPORT #ifdef PROFILE_SUPPORT
/* Profile Phases */ /* Profile Phases */
{SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 7}, {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 7},
@@ -763,12 +767,16 @@ static void displayHallEffectSleepTime(void) {
} }
} }
#endif /* HALL_SENSOR */ #endif /* HALL_SENSOR */
#ifdef TIP_TYPE_SUPPORT
static void displaySolderingTipType(void) { static void displaySolderingTipType(void) {
// TODO wrapping X value // TODO wrapping X value
OLED::print(lookupTipName(), FontStyle::SMALL, 255, OLED::getCursorX()); OLED::print(lookupTipName(), FontStyle::SMALL, 255, OLED::getCursorX());
} }
// If there is no detection, and no options, max is 0 // If there is no detection, and no options, max is 0
static bool showSolderingTipType(void) { return tipType_t::TIP_TYPE_MAX != 0; } static bool showSolderingTipType(void) { return tipType_t::TIP_TYPE_MAX != 0; }
#endif /* TIP_TYPE_SUPPORT */
static void setTempF(const enum SettingsOptions option) { static void setTempF(const enum SettingsOptions option) {
uint16_t Temp = getSettingValue(option); uint16_t Temp = getSettingValue(option);
if (getSettingValue(SettingsOptions::TemperatureInF)) { if (getSettingValue(SettingsOptions::TemperatureInF)) {

View File

@@ -30,7 +30,7 @@ int32_t powerSupplyWattageLimit = 0;
bool heaterThermalRunaway = false; bool heaterThermalRunaway = false;
static int32_t getPIDResultX10Watts(TemperatureType_t set_point, TemperatureType_t current_value); static int32_t getPIDResultX10Watts(TemperatureType_t set_point, TemperatureType_t current_value);
static void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const TemperatureType_t tError); static void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const uint32_t x10WattsOut);
static void setOutputx10WattsViaFilters(int32_t x10Watts); static void setOutputx10WattsViaFilters(int32_t x10Watts);
static int32_t getX10WattageLimits(); static int32_t getX10WattageLimits();
@@ -92,8 +92,8 @@ void startPIDTask(void const *argument __unused) {
PIDTempTarget = TipThermoModel::getTipMaxInC(); PIDTempTarget = TipThermoModel::getTipMaxInC();
} }
detectThermalRunaway(currentTipTempInC, PIDTempTarget - currentTipTempInC);
x10WattsOut = getPIDResultX10Watts(PIDTempTarget, currentTipTempInC); x10WattsOut = getPIDResultX10Watts(PIDTempTarget, currentTipTempInC);
detectThermalRunaway(currentTipTempInC, x10WattsOut);
} else { } else {
detectThermalRunaway(currentTipTempInC, 0); detectThermalRunaway(currentTipTempInC, 0);
} }
@@ -228,31 +228,59 @@ int32_t getPIDResultX10Watts(TemperatureType_t set_point, TemperatureType_t curr
#endif #endif
} }
void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const TemperatureType_t tError) { /*
static TemperatureType_t tipTempCRunawayTemp = 0; * Detection of thermal runaway
static TickType_t runawaylastChangeTime = 0; * The goal of this is to handle cases where something has gone wrong
* 1. The tip MOSFET is broken, so power is being constantly applied to the tip
* a. This can show as temp being stuck at max
* b. Or temp rising when the heater is off
* 2. Broken temperature sense
* a. Temp is stuck at a value
* These boil down to either a constantly rising temperature or a temperature that is stuck at a value
* These are both covered; but looking at the eye/delta between min and max temp seen
*/
void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const uint32_t x10WattsOut) {
// Check for thermal runaway, where it has been x seconds with negligible (y) temp rise static TemperatureType_t tiptempMin = 0xFFFF; // Min tip temp seen
// While trying to actively heat static TemperatureType_t tipTempMax = 0; // Max tip temp seen while heater is on
bool thisCycleIsHeating = x10WattsOut > 0;
static TickType_t heatCycleStart = 0;
// If we are more than 20C below the setpoint static bool haveSeenDelta = false;
if ((tError > THERMAL_RUNAWAY_TEMP_C)) {
// If we have heated up by more than 20C since last sample point, snapshot time and tip temp // Check for readings being pegged at the top of the ADC while the heater is off
TemperatureType_t delta = currentTipTempInC - tipTempCRunawayTemp; if (!thisCycleIsHeating && (getTipRawTemp(0) > (0x7FFF - 16))) {
if (delta > THERMAL_RUNAWAY_TEMP_C) { heaterThermalRunaway = true;
// We have heated up more than the threshold, reset the timer }
tipTempCRunawayTemp = currentTipTempInC;
runawaylastChangeTime = xTaskGetTickCount(); if (haveSeenDelta) {
} else { return;
if ((xTaskGetTickCount() - runawaylastChangeTime) > (THERMAL_RUNAWAY_TIME_SEC * TICKS_SECOND)) { }
// It has taken too long to rise
if (currentTipTempInC < tiptempMin) {
tiptempMin = currentTipTempInC;
}
if (thisCycleIsHeating && currentTipTempInC > tipTempMax) {
tipTempMax = currentTipTempInC;
}
if (thisCycleIsHeating) {
if (heatCycleStart == 0) {
heatCycleStart = xTaskGetTickCount();
}
} else {
heatCycleStart = 0;
}
if ((xTaskGetTickCount() - heatCycleStart) > (THERMAL_RUNAWAY_TIME_SEC * TICKS_SECOND)) {
if (tipTempMax > tiptempMin) {
// Have been heating for min seconds, check if the delta is large enough
TemperatureType_t delta = tipTempMax - tiptempMin;
haveSeenDelta = true;
if (delta < THERMAL_RUNAWAY_TEMP_C) {
heaterThermalRunaway = true; heaterThermalRunaway = true;
} }
} }
} else {
tipTempCRunawayTemp = currentTipTempInC;
runawaylastChangeTime = xTaskGetTickCount();
} }
} }
@@ -308,4 +336,4 @@ void setOutputx10WattsViaFilters(int32_t x10WattsOut) {
#endif #endif
setTipX10Watts(x10WattsOut); setTipX10Watts(x10WattsOut);
resetWatchdog(); resetWatchdog();
} }

View File

@@ -29,20 +29,20 @@ extern "C" {
#endif #endif
enum class OperatingMode { enum class OperatingMode {
StartupLogo = 0, // Showing the startup logo StartupLogo=10, // Showing the startup logo
CJCCalibration, // Cold Junction Calibration CJCCalibration=11, // Cold Junction Calibration
StartupWarnings, // Startup checks and warnings StartupWarnings=12, // Startup checks and warnings
InitialisationDone, // Special state we use just before we to home screen at first startup. Allows jumping to extra startup states InitialisationDone=13, // Special state we use just before we to home screen at first startup. Allows jumping to extra startup states
HomeScreen, // Home/Idle screen that is the main launchpad to other modes HomeScreen=0, // Home/Idle screen that is the main launchpad to other modes
Soldering, // Main soldering operating mode Soldering=1, // Main soldering operating mode
SolderingProfile, // Soldering by following a profile, used for reflow for example SolderingProfile=6, // Soldering by following a profile, used for reflow for example
Sleeping, // Sleep state holds iron at lower sleep temp Sleeping=3, // Sleep state holds iron at lower sleep temp
Hibernating, // Like sleeping but keeps heater fully off until woken Hibernating=14, // Like sleeping but keeps heater fully off until woken
SettingsMenu, // Settings Menu SettingsMenu=4, // Settings Menu
DebugMenuReadout, // Debug metrics DebugMenuReadout=5, // Debug metrics
TemperatureAdjust, // Set point temperature adjustment TemperatureAdjust=7, // Set point temperature adjustment
UsbPDDebug, // USB PD debugging information UsbPDDebug=8, // USB PD debugging information
ThermalRunaway, // Thermal Runaway warning state. ThermalRunaway=9, // Thermal Runaway warning state.
}; };
enum class TransitionAnimation { enum class TransitionAnimation {

View File

@@ -138,9 +138,7 @@ OperatingMode gui_solderingMode(const ButtonState buttons, guiContext *cxt) {
// Draw in the screen details // Draw in the screen details
if (getSettingValue(SettingsOptions::DetailedSoldering)) { if (getSettingValue(SettingsOptions::DetailedSoldering)) {
ui_draw_soldering_power_status(cxt->scratch_state.state2); ui_draw_soldering_power_status(cxt->scratch_state.state2);
} else { } else {
ui_draw_soldering_basic_status(cxt->scratch_state.state2); ui_draw_soldering_basic_status(cxt->scratch_state.state2);
} }

View File

@@ -21,4 +21,4 @@
* * BUILD_VERSION = 'v2.22' -> from stable git release: 'v2.22R.5E6F7G8H' * * BUILD_VERSION = 'v2.22' -> from stable git release: 'v2.22R.5E6F7G8H'
*/ */
#define BUILD_VERSION "v2.22" #define BUILD_VERSION "v2.23"