1
0
forked from me/IronOS

Merge pull request #994 from VaZso/master

USB PD timeout added as an option for improved QC3 compatibility
This commit is contained in:
Ben V. Brown
2021-06-09 08:47:05 +10:00
committed by GitHub
39 changed files with 260 additions and 7 deletions

View File

@@ -223,6 +223,13 @@
], ],
"desc": "Мощност на избраното захранване" "desc": "Мощност на избраното захранване"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Лимит на", "Лимит на",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Výkon použítého napájecího adaptéru ve wattech." "desc": "Výkon použítého napájecího adaptéru ve wattech."
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Omezení", "Omezení",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Power Wattage of the power adapter used" "desc": "Power Wattage of the power adapter used"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -223,6 +223,13 @@
], ],
"desc": "Maximal zulässige Spannung der verwendeten Spannungsversorgung (V=Volt)" "desc": "Maximal zulässige Spannung der verwendeten Spannungsversorgung (V=Volt)"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Leistungs-", "Leistungs-",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Max QC voltage the iron should negotiate for" "desc": "Max QC voltage the iron should negotiate for"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -223,6 +223,13 @@
], ],
"desc": "Potencia en vatios del adaptador de corriente utilizado." "desc": "Potencia en vatios del adaptador de corriente utilizado."
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Ajustar la", "Ajustar la",

View File

@@ -221,6 +221,13 @@
], ],
"desc": "Ensisijainen maksimi QC jännite" "desc": "Ensisijainen maksimi QC jännite"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Tehon-", "Tehon-",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Tension maximale désirée avec une alimentation QC" "desc": "Tension maximale désirée avec une alimentation QC"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Limite de", "Limite de",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Snaga modula za napajanje" "desc": "Snaga modula za napajanje"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -225,6 +225,13 @@
], ],
"desc": "Maximális USB feszültség (QuickCharge)" "desc": "Maximális USB feszültség (QuickCharge)"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"időtúllépés"
],
"desc": "PD egyeztetési leidőzítés 100ms lépésekben megadva néhány QC töltővel való kompatibilitás érdekében (0: kikapcsolva)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Teljesítmény", "Teljesítmény",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Imposta il massimo voltaggio negoziabile con un alimentatore Quick Charge" "desc": "Imposta il massimo voltaggio negoziabile con un alimentatore Quick Charge"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Limite", "Limite",

View File

@@ -154,6 +154,13 @@
"text2": "QC電圧", "text2": "QC電圧",
"desc": "QC電源使用時に要求する目標電圧" "desc": "QC電源使用時に要求する目標電圧"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": "電力制限", "text2": "電力制限",
"desc": "はんだ付てが使用できる最大電力を制限する <W=ワット>" "desc": "はんだ付てが使用できる最大電力を制限する <W=ワット>"

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Maksimali QC maitinimo bloko įtampa" "desc": "Maksimali QC maitinimo bloko įtampa"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Galios", "Galios",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Wattage van de gebruikte voeding" "desc": "Wattage van de gebruikte voeding"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Vermogen", "Vermogen",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Vermogen van de adapter" "desc": "Vermogen van de adapter"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Power Wattage of the power adapter used" "desc": "Power Wattage of the power adapter used"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -223,6 +223,13 @@
], ],
"desc": "Moc używanego zasilacza w (W)" "desc": "Moc używanego zasilacza w (W)"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Ogr.", "Ogr.",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Potência da fonte usada (Watt)" "desc": "Potência da fonte usada (Watt)"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -223,6 +223,13 @@
], ],
"desc": "Мощность используемого источника питания" "desc": "Мощность используемого источника питания"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Предел", "Предел",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Obmedzenie výkonu podľa použitého zdroja" "desc": "Obmedzenie výkonu podľa použitého zdroja"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Obmedzenie", "Obmedzenie",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Moč napajalnega vira v vatih [W]" "desc": "Moč napajalnega vira v vatih [W]"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Meja", "Meja",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Снага напајања у ватима." "desc": "Снага напајања у ватима."
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -222,6 +222,13 @@
], ],
"desc": "Snaga napajanja u vatima." "desc": "Snaga napajanja u vatima."
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Power", "Power",

View File

@@ -216,6 +216,13 @@
], ],
"desc": "Maximal QC-spänning enheten skall efterfråga" "desc": "Maximal QC-spänning enheten skall efterfråga"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Max-", "Max-",

View File

@@ -232,6 +232,13 @@
], ],
"desc": "Desired max QC Voltage negotiated for" "desc": "Desired max QC Voltage negotiated for"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerInput": { "PowerInput": {
"text2": [ "text2": [
"Güç", "Güç",

View File

@@ -223,6 +223,13 @@
], ],
"desc": "Потужність джерела живлення в Ватах" "desc": "Потужність джерела живлення в Ватах"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": [ "text2": [
"Макс.", "Макс.",

View File

@@ -154,6 +154,13 @@
"text2": "QC電壓", "text2": "QC電壓",
"desc": "使用QC電源時請求嘅最高目標電壓" "desc": "使用QC電源時請求嘅最高目標電壓"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": "功率限制", "text2": "功率限制",
"desc": "限制辣雞可用嘅最大功率 <W=watt>" "desc": "限制辣雞可用嘅最大功率 <W=watt>"

View File

@@ -154,6 +154,13 @@
"text2": "QC电压", "text2": "QC电压",
"desc": "使用QC电源时请求的最高目标电压" "desc": "使用QC电源时请求的最高目标电压"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": "功率限制", "text2": "功率限制",
"desc": "限制铬铁可用的最大功率 <W=watt瓦特>" "desc": "限制铬铁可用的最大功率 <W=watt瓦特>"

View File

@@ -154,6 +154,13 @@
"text2": "QC電壓", "text2": "QC電壓",
"desc": "使用QC電源時請求的最高目標電壓" "desc": "使用QC電源時請求的最高目標電壓"
}, },
"PDNegTimeout": {
"text2": [
"PD",
"timeout"
],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)"
},
"PowerLimit": { "PowerLimit": {
"text2": "功率限制", "text2": "功率限制",
"desc": "限制鉻鐵可用的最大功率 <W=watt瓦特>" "desc": "限制鉻鐵可用的最大功率 <W=watt瓦特>"

View File

@@ -280,6 +280,12 @@ var def =
"maxLen": 8, "maxLen": 8,
"maxLen2": 16 "maxLen2": 16
}, },
{
"id": "PDNegTimeout",
"maxLen": 8,
"maxLen2": 16
},
{ {
"id": "PowerLimit", "id": "PowerLimit",
"maxLen": 5, "maxLen": 5,

View File

@@ -16,7 +16,7 @@ void power_check() {
if (FUSB302_present) { if (FUSB302_present) {
PolicyEngine::PPSTimerCallback(); PolicyEngine::PPSTimerCallback();
// Cant start QC until either PD works or fails // Cant start QC until either PD works or fails
if (PolicyEngine::setupCompleteOrTimedOut() == false) { if (PolicyEngine::setupCompleteOrTimedOut(systemSettings.PDNegTimeout) == false) {
return; return;
} }
if (PolicyEngine::pdHasNegotiated()) { if (PolicyEngine::pdHasNegotiated()) {

View File

@@ -16,7 +16,7 @@ void power_check() {
if (FUSB302_present) { if (FUSB302_present) {
PolicyEngine::PPSTimerCallback(); PolicyEngine::PPSTimerCallback();
// Cant start QC until either PD works or fails // Cant start QC until either PD works or fails
if (PolicyEngine::setupCompleteOrTimedOut() == false) { if (PolicyEngine::setupCompleteOrTimedOut(systemSettings.PDNegTimeout) == false) {
return; return;
} }
if (PolicyEngine::pdHasNegotiated()) { if (PolicyEngine::pdHasNegotiated()) {

View File

@@ -16,7 +16,7 @@ void power_check() {
if (FUSB302_present) { if (FUSB302_present) {
PolicyEngine::PPSTimerCallback(); PolicyEngine::PPSTimerCallback();
// Cant start QC until either PD works or fails // Cant start QC until either PD works or fails
if (PolicyEngine::setupCompleteOrTimedOut() == false) { if (PolicyEngine::setupCompleteOrTimedOut(systemSettings.PDNegTimeout) == false) {
return; return;
} }
if (PolicyEngine::pdHasNegotiated()) { if (PolicyEngine::pdHasNegotiated()) {
@@ -43,7 +43,7 @@ uint8_t usb_pd_detect() {
bool getIsPoweredByDCIN() { bool getIsPoweredByDCIN() {
// We return false until we are sure we are not using PD // We return false until we are sure we are not using PD
if (PolicyEngine::setupCompleteOrTimedOut() == false) { if (PolicyEngine::setupCompleteOrTimedOut(systemSettings.PDNegTimeout) == false) {
return false; return false;
} }
if (PolicyEngine::pdHasNegotiated()) { if (PolicyEngine::pdHasNegotiated()) {

View File

@@ -21,6 +21,7 @@
#include "int_n.h" #include "int_n.h"
#include <pd.h> #include <pd.h>
#include <stdbool.h> #include <stdbool.h>
bool PolicyEngine::pdNegotiationComplete; bool PolicyEngine::pdNegotiationComplete;
int PolicyEngine::current_voltage_mv; int PolicyEngine::current_voltage_mv;
int PolicyEngine::_requested_voltage; int PolicyEngine::_requested_voltage;
@@ -617,6 +618,19 @@ void PolicyEngine::PPSTimerCallback() {
} }
} }
bool PolicyEngine::NegotiationTimeoutReached(uint8_t timeout) {
if (timeout == 0) {
return false;
}
if (xTaskGetTickCount() > (TICKS_100MS * timeout)) {
state = PESinkSourceUnresponsive;
return true;
}
return false;
}
EventBits_t PolicyEngine::pushMessage(union pd_msg *msg) { EventBits_t PolicyEngine::pushMessage(union pd_msg *msg) {
if (PD_MSGTYPE_GET(msg) == PD_MSGTYPE_SOFT_RESET && PD_NUMOBJ_GET(msg) == 0) { if (PD_MSGTYPE_GET(msg) == PD_MSGTYPE_SOFT_RESET && PD_NUMOBJ_GET(msg) == 0) {
/* Clear MessageIDCounter */ /* Clear MessageIDCounter */

View File

@@ -33,9 +33,11 @@ public:
static void handleMessage(union pd_msg *msg); static void handleMessage(union pd_msg *msg);
// Returns true if headers indicate PD3.0 compliant // Returns true if headers indicate PD3.0 compliant
static bool isPD3_0(); static bool isPD3_0();
static bool setupCompleteOrTimedOut() { static bool setupCompleteOrTimedOut(uint8_t timeout) {
if (pdNegotiationComplete) if (pdNegotiationComplete)
return true; return true;
if (PolicyEngine::NegotiationTimeoutReached(timeout))
return true;
if (state == policy_engine_state::PESinkSourceUnresponsive) if (state == policy_engine_state::PESinkSourceUnresponsive)
return true; return true;
if (state == policy_engine_state::PESinkReady) if (state == policy_engine_state::PESinkReady)
@@ -51,6 +53,8 @@ public:
// Call this periodically, at least once every second // Call this periodically, at least once every second
static void PPSTimerCallback(); static void PPSTimerCallback();
static bool NegotiationTimeoutReached(uint8_t timeout);
enum class Notifications { enum class Notifications {
PDB_EVT_PE_RESET = EVENT_MASK(0), PDB_EVT_PE_RESET = EVENT_MASK(0),
PDB_EVT_PE_MSG_RX = EVENT_MASK(1), PDB_EVT_PE_MSG_RX = EVENT_MASK(1),

View File

@@ -61,6 +61,8 @@ typedef struct {
uint8_t pdMissingWarningCounter; // Counter of how many times we have warned we cannot detect the pd interface uint8_t pdMissingWarningCounter; // Counter of how many times we have warned we cannot detect the pd interface
char uiLanguage[8]; // Selected UI Language code, null-terminated *only if* the length is less than 8 chars char uiLanguage[8]; // Selected UI Language code, null-terminated *only if* the length is less than 8 chars
uint8_t PDNegTimeout; // PD timeout in 100ms steps
uint32_t padding; // This is here for in case we are not an even divisor so uint32_t padding; // This is here for in case we are not an even divisor so
// that nothing gets cut off // that nothing gets cut off
// MUST BE LAST // MUST BE LAST

View File

@@ -45,6 +45,7 @@ enum class SettingsItemIndex : uint8_t {
AdvancedSoldering, AdvancedSoldering,
ScrollingSpeed, ScrollingSpeed,
QCMaxVoltage, QCMaxVoltage,
PDNegTimeout,
PowerLimit, PowerLimit,
ReverseButtonTempChange, ReverseButtonTempChange,
TempChangeShortStep, TempChangeShortStep,

View File

@@ -57,6 +57,7 @@ void resetSettings() {
systemSettings.minDCVoltageCells = CUT_OUT_SETTING; // default to no cut-off voltage systemSettings.minDCVoltageCells = CUT_OUT_SETTING; // default to no cut-off voltage
systemSettings.minVoltageCells = RECOM_VOL_CELL; // Minimum voltage per cell (Recommended 3.3V (33)) systemSettings.minVoltageCells = RECOM_VOL_CELL; // Minimum voltage per cell (Recommended 3.3V (33))
systemSettings.QCIdealVoltage = 0; // Default to 9V for QC3.0 Voltage systemSettings.QCIdealVoltage = 0; // Default to 9V for QC3.0 Voltage
systemSettings.PDNegTimeout = 0; // Default for PD timout to 0
systemSettings.version = SETTINGSVERSION; // Store the version number to allow for easier upgrades systemSettings.version = SETTINGSVERSION; // Store the version number to allow for easier upgrades
systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen
systemSettings.detailedIDLE = DETAILED_IDLE; // Detailed idle screen (off for first time users) systemSettings.detailedIDLE = DETAILED_IDLE; // Detailed idle screen (off for first time users)

View File

@@ -26,7 +26,10 @@ static bool settings_displayInputMinVRange(void);
static bool settings_setQCInputV(void); static bool settings_setQCInputV(void);
static bool settings_displayQCInputV(void); static bool settings_displayQCInputV(void);
#endif #endif
#ifdef POW_PD
static bool settings_setPDNegTimeout(void);
static bool settings_displayPDNegTimeout(void);
#endif
#ifndef NO_SLEEP_MODE #ifndef NO_SLEEP_MODE
static bool settings_setSleepTemp(void); static bool settings_setSleepTemp(void);
static bool settings_displaySleepTemp(void); static bool settings_displaySleepTemp(void);
@@ -162,7 +165,7 @@ const menuitem rootSettingsMenu[] {
} // end of menu marker. DO NOT REMOVE } // end of menu marker. DO NOT REMOVE
}; };
#if defined(POW_DC) || defined(POW_QC) #if defined(POW_DC) || defined(POW_QC) || defined(POW_PD)
const menuitem powerMenu[] = { const menuitem powerMenu[] = {
/* /*
* Power Source * Power Source
@@ -173,6 +176,9 @@ const menuitem powerMenu[] = {
#endif #endif
#ifdef POW_QC #ifdef POW_QC
{SETTINGS_DESC(SettingsItemIndex::QCMaxVoltage), settings_setQCInputV, settings_displayQCInputV}, /*Voltage input*/ {SETTINGS_DESC(SettingsItemIndex::QCMaxVoltage), settings_setQCInputV, settings_displayQCInputV}, /*Voltage input*/
#endif
#ifdef POW_PD
{SETTINGS_DESC(SettingsItemIndex::PDNegTimeout), settings_setPDNegTimeout, settings_displayPDNegTimeout}, /*PD timeout setup*/
#endif #endif
{0, nullptr, nullptr} // end of menu marker. DO NOT REMOVE {0, nullptr, nullptr} // end of menu marker. DO NOT REMOVE
}; };
@@ -350,6 +356,7 @@ static bool settings_displayInputMinVRange(void) {
static bool settings_setQCInputV(void) { static bool settings_setQCInputV(void) {
#ifdef POW_QC_20V #ifdef POW_QC_20V
systemSettings.QCIdealVoltage = (systemSettings.QCIdealVoltage + 1) % 3; systemSettings.QCIdealVoltage = (systemSettings.QCIdealVoltage + 1) % 3;
return systemSettings.QCIdealVoltage == 2; return systemSettings.QCIdealVoltage == 2;
#else #else
systemSettings.QCIdealVoltage = (systemSettings.QCIdealVoltage + 1) % 2; systemSettings.QCIdealVoltage = (systemSettings.QCIdealVoltage + 1) % 2;
@@ -382,6 +389,21 @@ static bool settings_displayQCInputV(void) {
#endif #endif
#ifdef POW_PD
static bool settings_setPDNegTimeout(void) {
systemSettings.PDNegTimeout = (systemSettings.PDNegTimeout + 1) % 50;
return systemSettings.PDNegTimeout == 49;
}
static bool settings_displayPDNegTimeout(void) {
printShortDescription(SettingsItemIndex::PDNegTimeout, 5);
OLED::printNumber(systemSettings.PDNegTimeout, 2, FontStyle::LARGE);
return systemSettings.PDNegTimeout == 49;
}
#endif
#ifndef NO_SLEEP_MODE #ifndef NO_SLEEP_MODE
static bool settings_setSleepTemp(void) { static bool settings_setSleepTemp(void) {
// If in C, 10 deg, if in F 20 deg // If in C, 10 deg, if in F 20 deg