aboutsummaryrefslogtreecommitdiffstats
path: root/src/systemtask/SystemTask.cpp
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2021-06-06 15:56:03 +0200
committerJean-François Milants <jf@codingfield.com>2021-06-06 15:56:03 +0200
commit7f9cc51b050e1034b573e37484f7afe29c370d81 (patch)
treede5228132fb72e89bb5d999b74b40f4248d41022 /src/systemtask/SystemTask.cpp
parent79f0fcb07aa80eb70385223272e29f2ba5657bc8 (diff)
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.
Diffstat (limited to 'src/systemtask/SystemTask.cpp')
-rw-r--r--src/systemtask/SystemTask.cpp73
1 files changed, 36 insertions, 37 deletions
diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp
index 58377764..be484bb4 100644
--- a/src/systemtask/SystemTask.cpp
+++ b/src/systemtask/SystemTask.cpp
@@ -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;
}