Use a simpler method of determining charge status

idk why the smarter way of doing it doesn't work reliably, but im sick
of it
custom
jacqueline 1 year ago
parent c5c6506ebc
commit 1ea25ab9d3
  1. 29
      src/drivers/samd.cpp

@ -77,29 +77,16 @@ auto Samd::UpdateChargeStatus() -> void {
return;
}
// FIXME: Ideally we should be using the three 'charge status' bits to work
// out whether we're actually charging, or if we've got a full charge,
// critically low charge, etc.
uint8_t usb_state = raw_res & 0b11;
uint8_t charge_state = (raw_res >> 2) & 0b111;
switch (charge_state) {
case 0b000:
case 0b011:
charge_status_ = ChargeStatus::kNoBattery;
break;
case 0b001:
charge_status_ = usb_state == 1 ? ChargeStatus::kChargingRegular
: ChargeStatus::kChargingFast;
break;
case 0b010:
charge_status_ = ChargeStatus::kFullCharge;
break;
case 0b100:
charge_status_ = ChargeStatus::kBatteryCritical;
break;
case 0b101:
if (usb_state == 0) {
charge_status_ = ChargeStatus::kDischarging;
break;
default:
charge_status_ = {};
break;
} else if (usb_state == 1) {
charge_status_ = ChargeStatus::kChargingRegular;
} else {
charge_status_ = ChargeStatus::kChargingFast;
}
}

Loading…
Cancel
Save