summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorMichele Bini <michele.bini@gmail.com>2022-05-12 08:37:08 (GMT)
committerMichele Bini <michele.bini@gmail.com>2022-05-12 20:30:57 (GMT)
commite679896281f3032994f5b998a21140475d167695 (patch)
tree702b7714dd847573963c5b802afa936ff1cadb7b /src/drivers
parent1d0023b502563d486a6e8c5d6dffbfdcd4e94c2a (diff)
Optimized accelerometer access via system task functions.
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/Bma421.h26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/drivers/Bma421.h b/src/drivers/Bma421.h
index 1503acd..d753e8d 100644
--- a/src/drivers/Bma421.h
+++ b/src/drivers/Bma421.h
@@ -1,7 +1,11 @@
#pragma once
#include <drivers/Bma421_C/bma4_defs.h>
+#include <drivers/Bma421_C/bma423.h>
namespace Pinetime {
+ namespace System {
+ class SystemTask;
+ }
namespace Drivers {
class TwiMaster;
class Bma421 {
@@ -30,17 +34,29 @@ namespace Pinetime {
Values Process();
void ResetStepCounter();
- void RefreshTemperature();
- uint8_t temperature_last_read_value;
- uint8_t temperature_last_result;
- uint8_t temperature_read_counter;
-
void Read(uint8_t registerAddress, uint8_t* buffer, size_t size);
void Write(uint8_t registerAddress, const uint8_t* data, size_t size);
bool IsOk() const;
DeviceTypes DeviceType() const;
+ void RefreshTemperature();
+ uint8_t temperature_last_read_value = 0;
+ uint8_t temperature_last_result = 0;
+ uint8_t temperature_read_counter = 0;
+
+ protected:
+ friend class Pinetime::System::SystemTask;
+
+ inline int8_t getTemperature() { return temperature_last_read_value+23; }
+
+ template <typename X, typename Y, typename Z> inline void ObtainAccel(X& x, Y& y, Z& z) {
+ struct bma4_accel data;
+ bma4_read_accel_xyz(&data, &bma);
+ // Modelled after Process(), x/y swapped
+ x = data.y; y = data.x; z = data.z;
+ }
+
private:
void Reset();