Fix no battery detection

custom
jacqueline 2 years ago
parent 65a1f09a90
commit 697ec3c584
  1. 17
      src/drivers/samd.cpp

@ -56,24 +56,23 @@ auto Samd::ReadChargeStatus() -> std::optional<ChargeStatus> {
.stop(); .stop();
ESP_LOGI(kTag, "checking charge status"); ESP_LOGI(kTag, "checking charge status");
ESP_ERROR_CHECK(transaction.Execute()); ESP_ERROR_CHECK(transaction.Execute());
ESP_LOGI(kTag, "raw charge status: %x", raw_res); ESP_LOGI(kTag, "raw charge status: 0x%x", raw_res);
uint8_t usb_state = raw_res & 0b11; uint8_t usb_state = raw_res & 0b11;
uint8_t charge_state = (raw_res >> 2) & 0b111; uint8_t charge_state = (raw_res >> 2) & 0b111;
switch (charge_state) { switch (charge_state) {
case 0: case 0b000:
case 0b011:
return ChargeStatus::kNoBattery; return ChargeStatus::kNoBattery;
case 1: case 0b001:
return usb_state == 1 ? ChargeStatus::kChargingRegular return usb_state == 1 ? ChargeStatus::kChargingRegular
: ChargeStatus::kChargingFast; : ChargeStatus::kChargingFast;
case 2: case 0b010:
return ChargeStatus::kFullCharge; return ChargeStatus::kFullCharge;
case 4: case 0b100:
return ChargeStatus::kBatteryCritical; return ChargeStatus::kBatteryCritical;
case 5: case 0b101:
return ChargeStatus::kDischarging; return ChargeStatus::kDischarging;
case 3:
// Fall-through.
default: default:
return {}; return {};
} }
@ -91,7 +90,7 @@ auto Samd::ReadUsbStatus() -> UsbStatus {
.stop(); .stop();
ESP_LOGI(kTag, "checking usb status"); ESP_LOGI(kTag, "checking usb status");
ESP_ERROR_CHECK(transaction.Execute()); ESP_ERROR_CHECK(transaction.Execute());
ESP_LOGI(kTag, "raw usb status: %x", raw_res); ESP_LOGI(kTag, "raw usb status: 0x%x", raw_res);
if (!(raw_res & 0b1)) { if (!(raw_res & 0b1)) {
return UsbStatus::kDetached; return UsbStatus::kDetached;

Loading…
Cancel
Save