summaryrefslogtreecommitdiff
path: root/src/drivers/Bma421.cpp
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2021-04-08 18:07:24 (GMT)
committerJean-François Milants <jf@codingfield.com>2021-04-08 18:07:24 (GMT)
commit9ac4be8b759bb2cedeb999ce5e87d983261beded (patch)
tree2a5fabd9b7505976c20b5512f9335e75290bdd86 /src/drivers/Bma421.cpp
parent1d7576de64a33837434e6f414a74ae7dbe929196 (diff)
TwiMaster is now based on the NRFX TWI driver, as it handles more edge cases and workarounds for errors on the bus.
Reset the TWI bus after the soft-reset of the motion sensor to workaround issues on the TWI bus.
Diffstat (limited to 'src/drivers/Bma421.cpp')
-rw-r--r--src/drivers/Bma421.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/drivers/Bma421.cpp b/src/drivers/Bma421.cpp
index 10d3e5e..ea705d8 100644
--- a/src/drivers/Bma421.cpp
+++ b/src/drivers/Bma421.cpp
@@ -35,12 +35,9 @@ Bma421::Bma421(TwiMaster& twiMaster, uint8_t twiAddress) : twiMaster{twiMaster},
}
void Bma421::Init() {
- auto ret = bma4_soft_reset(&bma);
- if(ret != BMA4_OK) return;
+ if(not isResetOk) return; // Call SoftReset (and reset TWI device) first!
- nrf_delay_ms(1);
-
- ret = bma423_init(&bma);
+ auto ret = bma423_init(&bma);
if(ret != BMA4_OK) return;
ret = bma423_write_config_file(&bma);
@@ -109,3 +106,11 @@ bool Bma421::IsOk() const {
void Bma421::ResetStepCounter() {
bma423_reset_step_counter(&bma);
}
+
+void Bma421::SoftReset() {
+ auto ret = bma4_soft_reset(&bma);
+ if(ret == BMA4_OK) {
+ isResetOk = true;
+ nrf_delay_ms(1);
+ }
+}