First integration of the motion sensor (bma 421) : step counting + wake on wrist rotation + app to see the value of the 3 axis in "real time".
This commit is contained in:
@@ -43,13 +43,14 @@ SystemTask::SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd,
|
||||
Controllers::DateTime &dateTimeController,
|
||||
Pinetime::Controllers::MotorController& motorController,
|
||||
Pinetime::Drivers::Hrs3300& heartRateSensor,
|
||||
Pinetime::Drivers::Bma421& motionSensor,
|
||||
Controllers::Settings &settingsController) :
|
||||
spi{spi}, lcd{lcd}, spiNorFlash{spiNorFlash},
|
||||
twiMaster{twiMaster}, touchPanel{touchPanel}, lvgl{lvgl}, batteryController{batteryController},
|
||||
heartRateController{*this},
|
||||
bleController{bleController}, dateTimeController{dateTimeController},
|
||||
watchdog{}, watchdogView{watchdog},
|
||||
motorController{motorController}, heartRateSensor{heartRateSensor},
|
||||
motorController{motorController}, heartRateSensor{heartRateSensor}, motionSensor{motionSensor},
|
||||
settingsController{settingsController},
|
||||
nimbleController(*this, bleController,dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController) {
|
||||
systemTasksMsgQueue = xQueueCreate(10, 1);
|
||||
@@ -84,13 +85,14 @@ void SystemTask::Work() {
|
||||
touchPanel.Init();
|
||||
batteryController.Init();
|
||||
motorController.Init();
|
||||
motionSensor.Init();
|
||||
|
||||
settingsController.Init();
|
||||
|
||||
|
||||
displayApp = std::make_unique<Pinetime::Applications::DisplayApp>(lcd, lvgl, touchPanel, batteryController, bleController,
|
||||
dateTimeController, watchdogView, *this, notificationManager,
|
||||
heartRateController, settingsController);
|
||||
heartRateController, settingsController, motionController);
|
||||
displayApp->Start();
|
||||
|
||||
batteryController.Update();
|
||||
@@ -132,8 +134,10 @@ void SystemTask::Work() {
|
||||
#pragma clang diagnostic push
|
||||
#pragma ide diagnostic ignored "EndlessLoop"
|
||||
while(true) {
|
||||
UpdateMotion();
|
||||
|
||||
uint8_t msg;
|
||||
if (xQueueReceive(systemTasksMsgQueue, &msg, isSleeping ? 2500 : 1000)) {
|
||||
if (xQueueReceive(systemTasksMsgQueue, &msg, 100)) {
|
||||
batteryController.Update();
|
||||
Messages message = static_cast<Messages >(msg);
|
||||
switch(message) {
|
||||
@@ -230,6 +234,23 @@ void SystemTask::Work() {
|
||||
// Clear diagnostic suppression
|
||||
#pragma clang diagnostic pop
|
||||
}
|
||||
void SystemTask::UpdateMotion() {
|
||||
if(isGoingToSleep or isWakingUp) return;
|
||||
|
||||
if(isSleeping)
|
||||
twiMaster.Wakeup();
|
||||
auto motionValues = motionSensor.Process();
|
||||
if(isSleeping)
|
||||
twiMaster.Sleep();
|
||||
|
||||
motionController.Update(motionValues.y,
|
||||
motionValues.x,
|
||||
motionValues.z,
|
||||
motionValues.steps);
|
||||
if (motionController.ShouldWakeUp(isSleeping)) {
|
||||
GoToRunning();
|
||||
}
|
||||
}
|
||||
|
||||
void SystemTask::OnButtonPushed() {
|
||||
if(isGoingToSleep) return;
|
||||
@@ -247,6 +268,7 @@ void SystemTask::OnButtonPushed() {
|
||||
}
|
||||
|
||||
void SystemTask::GoToRunning() {
|
||||
if(isGoingToSleep or (not isSleeping) or isWakingUp) return;
|
||||
isWakingUp = true;
|
||||
PushMessage(Messages::GoToRunning);
|
||||
}
|
||||
|
@@ -8,6 +8,8 @@
|
||||
#include <heartratetask/HeartRateTask.h>
|
||||
#include <components/heartrate/HeartRateController.h>
|
||||
#include <components/settings/Settings.h>
|
||||
#include <drivers/Bma421.h>
|
||||
#include <components/motion/MotionController.h>
|
||||
|
||||
#include "SystemMonitor.h"
|
||||
#include "components/battery/BatteryController.h"
|
||||
@@ -49,6 +51,7 @@ namespace Pinetime {
|
||||
Controllers::DateTime &dateTimeController,
|
||||
Pinetime::Controllers::MotorController& motorController,
|
||||
Pinetime::Drivers::Hrs3300& heartRateSensor,
|
||||
Pinetime::Drivers::Bma421& motionSensor,
|
||||
Controllers::Settings &settingsController);
|
||||
|
||||
|
||||
@@ -87,9 +90,11 @@ namespace Pinetime {
|
||||
Pinetime::Controllers::NotificationManager notificationManager;
|
||||
Pinetime::Controllers::MotorController& motorController;
|
||||
Pinetime::Drivers::Hrs3300& heartRateSensor;
|
||||
Pinetime::Drivers::Bma421& motionSensor;
|
||||
Pinetime::Controllers::Settings& settingsController;
|
||||
Pinetime::Controllers::NimbleController nimbleController;
|
||||
Controllers::BrightnessController brightnessController;
|
||||
Pinetime::Controllers::MotionController motionController;
|
||||
|
||||
static constexpr uint8_t pinSpiSck = 2;
|
||||
static constexpr uint8_t pinSpiMosi = 3;
|
||||
@@ -109,6 +114,7 @@ namespace Pinetime {
|
||||
bool doNotGoToSleep = false;
|
||||
|
||||
void GoToRunning();
|
||||
void UpdateMotion();
|
||||
|
||||
#if configUSE_TRACE_FACILITY == 1
|
||||
SystemMonitor<FreeRtosMonitor> monitor;
|
||||
|
Reference in New Issue
Block a user