summaryrefslogtreecommitdiff
path: root/src/drivers/samd.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-05-15 15:57:16 +1000
committerjacqueline <me@jacqueline.id.au>2024-05-15 15:57:16 +1000
commit4c9b77ea1308ef3fe72a81d888560161d19485d6 (patch)
treeefbe0c69ea555915cbbd414ac91b96ae8f279e9f /src/drivers/samd.cpp
parent00d6c2eca20571f1a53400f4f465c8dd7af557db (diff)
downloadtangara-fw-4c9b77ea1308ef3fe72a81d888560161d19485d6.tar.gz
Support setting the samd charge rate
We default to the fast one, and do not try setting the charge rate bit on older samd versions
Diffstat (limited to 'src/drivers/samd.cpp')
-rw-r--r--src/drivers/samd.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/drivers/samd.cpp b/src/drivers/samd.cpp
index c5e8c08a..e4aa73ad 100644
--- a/src/drivers/samd.cpp
+++ b/src/drivers/samd.cpp
@@ -51,6 +51,7 @@ Samd::Samd() {
UpdateChargeStatus();
UpdateUsbStatus();
+ SetFastChargeEnabled(true);
}
Samd::~Samd() {}
@@ -125,6 +126,18 @@ auto Samd::ResetToFlashSamd() -> void {
ESP_ERROR_CHECK(transaction.Execute(3));
}
+auto Samd::SetFastChargeEnabled(bool en) -> void {
+ if (version_ < 4) {
+ return;
+ }
+ I2CTransaction transaction;
+ transaction.start()
+ .write_addr(kAddress, I2C_MASTER_WRITE)
+ .write_ack(Registers::kPowerControl, (en << 1))
+ .stop();
+ ESP_ERROR_CHECK(transaction.Execute(3));
+}
+
auto Samd::PowerDown() -> void {
I2CTransaction transaction;
transaction.start()