summaryrefslogtreecommitdiff
path: root/src/drivers/samd.cpp
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-04-02 11:13:50 +1100
committerailurux <ailuruxx@gmail.com>2024-04-02 11:13:50 +1100
commite20ebe7574db5aedc73f07b7bb3a0a01eae93c84 (patch)
tree34c93ec8a80e282f3ce3e47dd60c41e46de0f8b3 /src/drivers/samd.cpp
parenta750af35aa6afda40aadca8f7cf8db75f41a43b2 (diff)
parent0d0c4b2307cac8436fea7276956f293262b265ed (diff)
downloadtangara-fw-e20ebe7574db5aedc73f07b7bb3a0a01eae93c84.tar.gz
Merge branch 'main' into lua-volume
Diffstat (limited to 'src/drivers/samd.cpp')
-rw-r--r--src/drivers/samd.cpp31
1 files changed, 9 insertions, 22 deletions
diff --git a/src/drivers/samd.cpp b/src/drivers/samd.cpp
index f12a18de..b631b4fb 100644
--- a/src/drivers/samd.cpp
+++ b/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:
- charge_status_ = ChargeStatus::kDischarging;
- break;
- default:
- charge_status_ = {};
- break;
+ if (usb_state == 0) {
+ charge_status_ = ChargeStatus::kDischarging;
+ } else if (usb_state == 1) {
+ charge_status_ = ChargeStatus::kChargingRegular;
+ } else {
+ charge_status_ = ChargeStatus::kChargingFast;
}
}