Better TX congestion detection, don't stall on reading battery status
This commit is contained in:
@@ -31,7 +31,9 @@ void updateBattery() {
|
||||
float v = readBatteryVoltage(); int pct = batteryPercent(v);
|
||||
bool chg = (digitalRead(PIN_CHG) == LOW);
|
||||
ChargeStatus status = chg ? (pct >= 99 ? CHGSTAT_FULL : CHGSTAT_CHARGING) : CHGSTAT_DISCHARGING;
|
||||
blebas.write(pct);
|
||||
// Only write BLE Battery Service when connected — blebas.write() blocks on the
|
||||
// SoftDevice ATT layer and causes 30-40ms loop stalls when called during advertising.
|
||||
if (Bluefruit.connected()) blebas.write(pct);
|
||||
lastChargeStatus = status;
|
||||
#ifdef FEATURE_TELEMETRY
|
||||
telem.chargeStatus = (uint8_t)status;
|
||||
@@ -39,7 +41,9 @@ void updateBattery() {
|
||||
const char* st[] = {"discharging","charging","full"};
|
||||
Serial.print("[BATT] "); Serial.print(v,2); Serial.print("V ");
|
||||
Serial.print(pct); Serial.print("% "); Serial.println(st[status]);
|
||||
if (status == CHGSTAT_DISCHARGING && v < BATT_CRITICAL)
|
||||
// Critical battery alert — only blink when not connected to avoid blocking BLE scheduler.
|
||||
// 6 × 160ms = 960ms hard block; skip during active connection.
|
||||
if (status == CHGSTAT_DISCHARGING && v < BATT_CRITICAL && !Bluefruit.connected())
|
||||
for (int i=0; i<6; i++) { digitalWrite(LED_RED,LOW); delay(80); digitalWrite(LED_RED,HIGH); delay(80); }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user