diff options
| -rw-r--r-- | src/displayapp/screens/Jumpscore.cpp | 3 | ||||
| -rw-r--r-- | src/displayapp/screens/WatchFaceDigital.cpp | 4 | ||||
| -rw-r--r-- | src/displayapp/screens/WatchFaceDigital.h | 2 | ||||
| -rw-r--r-- | src/drivers/Bma421.h | 26 | ||||
| -rw-r--r-- | src/systemtask/SystemTask.h | 29 |
5 files changed, 38 insertions, 26 deletions
diff --git a/src/displayapp/screens/Jumpscore.cpp b/src/displayapp/screens/Jumpscore.cpp index 3ec6bcb..81e2d1c 100644 --- a/src/displayapp/screens/Jumpscore.cpp +++ b/src/displayapp/screens/Jumpscore.cpp @@ -91,7 +91,8 @@ Jumpscore::~Jumpscore() { void Jumpscore::Refresh() { double X; double Y; double_t Z; - double G = systemTask.ReadGXYZ(X,Y,Z); + systemTask.ObtainAccel(X,Y,Z); + double G = std::sqrt(X*X + Y*Y + Z*Z); TickType_t current_time = xTaskGetTickCount(); if (started) { TickType_t current_frame_ms = current_time - last_frame_time; diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 79a4640..3b46c3b 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -166,8 +166,7 @@ void WatchFaceDigital::Refresh() { lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); } -#ifndef INFINISIM - temperature = systemTask.motionSensor.temperature_last_read_value+23; + systemTask.ObtainMotionSensorTemperature(temperature); if (temperature.IsUpdated()) { lv_obj_set_style_local_text_color( label_temp, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); lv_label_set_text_fmt(label_temp, "%d°C", temperature.Get()); @@ -179,7 +178,6 @@ void WatchFaceDigital::Refresh() { ); #endif } -#endif uint8_t second = dateTimeController.Seconds(); uint8_t decisecond = dateTimeController.Deciseconds(); diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index c29033b..1ef9244 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -64,7 +64,7 @@ namespace Pinetime { DirtyValue<uint32_t> stepCount {}; DirtyValue<uint8_t> heartbeat {}; DirtyValue<bool> heartbeatRunning {}; - DirtyValue<uint16_t> temperature {}; + DirtyValue<int8_t> temperature {}; DirtyValue<bool> notificationState {}; lv_obj_t* label_temp; 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(); diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index f141b01..d04cd53 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -94,6 +94,19 @@ namespace Pinetime { return isSleeping; } + // For accelerator-based games + template <typename X, typename Y, typename Z> inline void ObtainAccel(X& x, Y& y, Z& z) { + motionSensor.ObtainAccel(x,y,z); + } + + template <typename X> inline void ObtainMotionSensorTemperature(X& x) { +#ifndef INFINISIM + x = motionSensor.getTemperature(); +#else + x = 23; +#endif + } + private: TaskHandle_t taskHandle; @@ -118,9 +131,7 @@ namespace Pinetime { Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::MotorController& motorController; Pinetime::Drivers::Hrs3300& heartRateSensor; - public: Pinetime::Drivers::Bma421& motionSensor; - private: Pinetime::Controllers::Settings& settingsController; Pinetime::Controllers::HeartRateController& heartRateController; Pinetime::Controllers::MotionController& motionController; @@ -151,20 +162,6 @@ namespace Pinetime { static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); SystemMonitor monitor; - - public: - inline double ReadGXYZ(double &X, double &Y, double &Z) const { - auto motionValues = motionSensor.Process(); - // motionController.Update(motionValues.x, motionValues.y, motionValues.z); - X = motionValues.x; Y = motionValues.y; Z = motionValues.z; - return std::sqrt(X*X + Y*Y + Z*Z); - } - - inline double ReadG() const { - double x, y, z; - return ReadGXYZ(x,y,z); - } - }; } } |
