diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-05-12 08:37:08 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-05-12 20:30:57 (GMT) |
| commit | e679896281f3032994f5b998a21140475d167695 (patch) | |
| tree | 702b7714dd847573963c5b802afa936ff1cadb7b /src/drivers | |
| parent | 1d0023b502563d486a6e8c5d6dffbfdcd4e94c2a (diff) | |
Optimized accelerometer access via system task functions.
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/Bma421.h | 26 |
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(); |
