Initialize SystemTask, DisplayApp and HeartRateTask as global static variable instead of variables on the heap. We don't need them on the heap as we know their size at build time, it'll reduce memory fragmentation and it'll make memory analysis easier.
This commit is contained in:
26
src/systemtask/Messages.h
Normal file
26
src/systemtask/Messages.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
namespace Pinetime {
|
||||
namespace System {
|
||||
enum class Messages {
|
||||
GoToSleep,
|
||||
GoToRunning,
|
||||
TouchWakeUp,
|
||||
OnNewTime,
|
||||
OnNewNotification,
|
||||
OnTimerDone,
|
||||
OnNewCall,
|
||||
BleConnected,
|
||||
UpdateTimeOut,
|
||||
BleFirmwareUpdateStarted,
|
||||
BleFirmwareUpdateFinished,
|
||||
OnTouchEvent,
|
||||
OnButtonEvent,
|
||||
OnDisplayTaskSleeping,
|
||||
EnableSleeping,
|
||||
DisableSleeping,
|
||||
OnNewDay,
|
||||
OnChargingEvent
|
||||
};
|
||||
}
|
||||
}
|
@@ -42,10 +42,18 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi,
|
||||
Components::LittleVgl& lvgl,
|
||||
Controllers::Battery& batteryController,
|
||||
Controllers::Ble& bleController,
|
||||
Controllers::DateTime& dateTimeController,
|
||||
Controllers::TimerController& timerController,
|
||||
Drivers::Watchdog& watchdog,
|
||||
Pinetime::Controllers::NotificationManager& notificationManager,
|
||||
Pinetime::Controllers::MotorController& motorController,
|
||||
Pinetime::Drivers::Hrs3300& heartRateSensor,
|
||||
Pinetime::Controllers::MotionController& motionController,
|
||||
Pinetime::Drivers::Bma421& motionSensor,
|
||||
Controllers::Settings& settingsController)
|
||||
Controllers::Settings& settingsController,
|
||||
Pinetime::Controllers::HeartRateController& heartRateController,
|
||||
Pinetime::Applications::DisplayApp& displayApp,
|
||||
Pinetime::Applications::HeartRateTask& heartRateApp)
|
||||
: spi {spi},
|
||||
lcd {lcd},
|
||||
spiNorFlash {spiNorFlash},
|
||||
@@ -53,17 +61,20 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi,
|
||||
touchPanel {touchPanel},
|
||||
lvgl {lvgl},
|
||||
batteryController {batteryController},
|
||||
heartRateController {*this},
|
||||
bleController {bleController},
|
||||
dateTimeController {*this},
|
||||
timerController {*this},
|
||||
watchdog {},
|
||||
watchdogView {watchdog},
|
||||
dateTimeController {dateTimeController},
|
||||
timerController {timerController},
|
||||
watchdog {watchdog},
|
||||
notificationManager{notificationManager},
|
||||
motorController {motorController},
|
||||
heartRateSensor {heartRateSensor},
|
||||
motionSensor {motionSensor},
|
||||
settingsController {settingsController},
|
||||
nimbleController(*this, bleController, dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController) {
|
||||
heartRateController{heartRateController},
|
||||
nimbleController(*this, bleController, dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController),
|
||||
motionController{motionController},
|
||||
displayApp{displayApp},
|
||||
heartRateApp(heartRateApp) {
|
||||
systemTasksMsgQueue = xQueueCreate(10, 1);
|
||||
}
|
||||
|
||||
@@ -96,9 +107,11 @@ void SystemTask::Work() {
|
||||
|
||||
twiMaster.Init();
|
||||
touchPanel.Init();
|
||||
dateTimeController.Register(this);
|
||||
batteryController.Init();
|
||||
motorController.Init();
|
||||
motionSensor.SoftReset();
|
||||
timerController.Register(this);
|
||||
timerController.Init();
|
||||
|
||||
// Reset the TWI device because the motion sensor chip most probably crashed it...
|
||||
@@ -108,28 +121,14 @@ void SystemTask::Work() {
|
||||
motionSensor.Init();
|
||||
settingsController.Init();
|
||||
|
||||
displayApp = std::make_unique<Pinetime::Applications::DisplayApp>(lcd,
|
||||
lvgl,
|
||||
touchPanel,
|
||||
batteryController,
|
||||
bleController,
|
||||
dateTimeController,
|
||||
watchdogView,
|
||||
*this,
|
||||
notificationManager,
|
||||
heartRateController,
|
||||
settingsController,
|
||||
motorController,
|
||||
motionController,
|
||||
timerController);
|
||||
displayApp->Start();
|
||||
displayApp.Register(this);
|
||||
displayApp.Start();
|
||||
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel);
|
||||
|
||||
heartRateSensor.Init();
|
||||
heartRateSensor.Disable();
|
||||
heartRateApp = std::make_unique<Pinetime::Applications::HeartRateTask>(heartRateSensor, heartRateController);
|
||||
heartRateApp->Start();
|
||||
heartRateApp.Start();
|
||||
|
||||
nrf_gpio_cfg_sense_input(pinButton, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High);
|
||||
nrf_gpio_cfg_output(15);
|
||||
@@ -208,9 +207,9 @@ void SystemTask::Work() {
|
||||
spiNorFlash.Wakeup();
|
||||
lcd.Wakeup();
|
||||
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::GoToRunning);
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel);
|
||||
heartRateApp->PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel);
|
||||
heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp);
|
||||
|
||||
isSleeping = false;
|
||||
isWakingUp = false;
|
||||
@@ -230,26 +229,26 @@ void SystemTask::Work() {
|
||||
isGoingToSleep = true;
|
||||
NRF_LOG_INFO("[systemtask] Going to sleep");
|
||||
xTimerStop(idleTimer, 0);
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::GoToSleep);
|
||||
heartRateApp->PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep);
|
||||
heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep);
|
||||
break;
|
||||
case Messages::OnNewTime:
|
||||
ReloadIdleTimer();
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime);
|
||||
break;
|
||||
case Messages::OnNewNotification:
|
||||
if (isSleeping && !isWakingUp) {
|
||||
GoToRunning();
|
||||
}
|
||||
motorController.SetDuration(35);
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::NewNotification);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification);
|
||||
break;
|
||||
case Messages::OnTimerDone:
|
||||
if (isSleeping && !isWakingUp) {
|
||||
GoToRunning();
|
||||
}
|
||||
motorController.SetDuration(35);
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::TimerDone);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone);
|
||||
break;
|
||||
case Messages::BleConnected:
|
||||
ReloadIdleTimer();
|
||||
@@ -260,7 +259,7 @@ void SystemTask::Work() {
|
||||
doNotGoToSleep = true;
|
||||
if (isSleeping && !isWakingUp)
|
||||
GoToRunning();
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted);
|
||||
break;
|
||||
case Messages::BleFirmwareUpdateFinished:
|
||||
doNotGoToSleep = false;
|
||||
@@ -359,7 +358,7 @@ void SystemTask::OnButtonPushed() {
|
||||
if (!isSleeping) {
|
||||
NRF_LOG_INFO("[systemtask] Button pushed");
|
||||
PushMessage(Messages::OnButtonEvent);
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::ButtonPushed);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::ButtonPushed);
|
||||
} else {
|
||||
if (!isWakingUp) {
|
||||
NRF_LOG_INFO("[systemtask] Button pushed, waking up");
|
||||
@@ -380,7 +379,7 @@ void SystemTask::OnTouchEvent() {
|
||||
return;
|
||||
if (!isSleeping) {
|
||||
PushMessage(Messages::OnTouchEvent);
|
||||
displayApp->PushMessage(Pinetime::Applications::Display::Messages::TouchEvent);
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent);
|
||||
} else if (!isWakingUp) {
|
||||
if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::None or
|
||||
settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist)
|
||||
@@ -389,7 +388,7 @@ void SystemTask::OnTouchEvent() {
|
||||
}
|
||||
}
|
||||
|
||||
void SystemTask::PushMessage(SystemTask::Messages msg) {
|
||||
void SystemTask::PushMessage(System::Messages msg) {
|
||||
if (msg == Messages::GoToSleep) {
|
||||
isGoingToSleep = true;
|
||||
}
|
||||
|
@@ -6,7 +6,6 @@
|
||||
#include <task.h>
|
||||
#include <timers.h>
|
||||
#include <heartratetask/HeartRateTask.h>
|
||||
#include <components/heartrate/HeartRateController.h>
|
||||
#include <components/settings/Settings.h>
|
||||
#include <drivers/Bma421.h>
|
||||
#include <components/motion/MotionController.h>
|
||||
@@ -27,6 +26,7 @@
|
||||
#endif
|
||||
|
||||
#include "drivers/Watchdog.h"
|
||||
#include "Messages.h"
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Drivers {
|
||||
@@ -40,27 +40,6 @@ namespace Pinetime {
|
||||
namespace System {
|
||||
class SystemTask {
|
||||
public:
|
||||
enum class Messages {
|
||||
GoToSleep,
|
||||
GoToRunning,
|
||||
TouchWakeUp,
|
||||
OnNewTime,
|
||||
OnNewNotification,
|
||||
OnTimerDone,
|
||||
OnNewCall,
|
||||
BleConnected,
|
||||
UpdateTimeOut,
|
||||
BleFirmwareUpdateStarted,
|
||||
BleFirmwareUpdateFinished,
|
||||
OnTouchEvent,
|
||||
OnButtonEvent,
|
||||
OnDisplayTaskSleeping,
|
||||
EnableSleeping,
|
||||
DisableSleeping,
|
||||
OnNewDay,
|
||||
OnChargingEvent
|
||||
};
|
||||
|
||||
SystemTask(Drivers::SpiMaster& spi,
|
||||
Drivers::St7789& lcd,
|
||||
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
|
||||
@@ -69,10 +48,18 @@ namespace Pinetime {
|
||||
Components::LittleVgl& lvgl,
|
||||
Controllers::Battery& batteryController,
|
||||
Controllers::Ble& bleController,
|
||||
Controllers::DateTime& dateTimeController,
|
||||
Controllers::TimerController& timerController,
|
||||
Drivers::Watchdog& watchdog,
|
||||
Pinetime::Controllers::NotificationManager& notificationManager,
|
||||
Pinetime::Controllers::MotorController& motorController,
|
||||
Pinetime::Drivers::Hrs3300& heartRateSensor,
|
||||
Pinetime::Controllers::MotionController& motionController,
|
||||
Pinetime::Drivers::Bma421& motionSensor,
|
||||
Controllers::Settings& settingsController);
|
||||
Controllers::Settings& settingsController,
|
||||
Pinetime::Controllers::HeartRateController& heartRateController,
|
||||
Pinetime::Applications::DisplayApp& displayApp,
|
||||
Pinetime::Applications::HeartRateTask& heartRateApp);
|
||||
|
||||
void Start();
|
||||
void PushMessage(Messages msg);
|
||||
@@ -96,27 +83,29 @@ namespace Pinetime {
|
||||
Pinetime::Drivers::Cst816S& touchPanel;
|
||||
Pinetime::Components::LittleVgl& lvgl;
|
||||
Pinetime::Controllers::Battery& batteryController;
|
||||
std::unique_ptr<Pinetime::Applications::DisplayApp> displayApp;
|
||||
Pinetime::Controllers::HeartRateController heartRateController;
|
||||
std::unique_ptr<Pinetime::Applications::HeartRateTask> heartRateApp;
|
||||
|
||||
|
||||
Pinetime::Controllers::Ble& bleController;
|
||||
Pinetime::Controllers::DateTime dateTimeController;
|
||||
Pinetime::Controllers::TimerController timerController;
|
||||
Pinetime::Controllers::DateTime& dateTimeController;
|
||||
Pinetime::Controllers::TimerController& timerController;
|
||||
QueueHandle_t systemTasksMsgQueue;
|
||||
std::atomic<bool> isSleeping {false};
|
||||
std::atomic<bool> isGoingToSleep {false};
|
||||
std::atomic<bool> isWakingUp {false};
|
||||
Pinetime::Drivers::Watchdog watchdog;
|
||||
Pinetime::Drivers::WatchdogView watchdogView;
|
||||
Pinetime::Controllers::NotificationManager notificationManager;
|
||||
Pinetime::Drivers::Watchdog& watchdog;
|
||||
Pinetime::Controllers::NotificationManager& notificationManager;
|
||||
Pinetime::Controllers::MotorController& motorController;
|
||||
Pinetime::Drivers::Hrs3300& heartRateSensor;
|
||||
Pinetime::Drivers::Bma421& motionSensor;
|
||||
Pinetime::Controllers::Settings& settingsController;
|
||||
Pinetime::Controllers::HeartRateController& heartRateController;
|
||||
Pinetime::Controllers::NimbleController nimbleController;
|
||||
Controllers::BrightnessController brightnessController;
|
||||
Pinetime::Controllers::MotionController motionController;
|
||||
Pinetime::Controllers::MotionController& motionController;
|
||||
|
||||
Pinetime::Applications::DisplayApp& displayApp;
|
||||
Pinetime::Applications::HeartRateTask& heartRateApp;
|
||||
|
||||
|
||||
static constexpr uint8_t pinSpiSck = 2;
|
||||
static constexpr uint8_t pinSpiMosi = 3;
|
||||
|
Reference in New Issue
Block a user