summaryrefslogtreecommitdiff
path: root/src/main.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/main.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/main.cpp')
-rw-r--r--src/main.cpp69
1 files changed, 50 insertions, 19 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 61194b95..60ed058b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -34,6 +34,7 @@
#include "components/motor/MotorController.h"
#include "components/datetime/DateTimeController.h"
#include "components/settings/Settings.h"
+#include "components/heartrate/HeartRateController.h"
#include "drivers/Spi.h"
#include "drivers/SpiMaster.h"
#include "drivers/SpiNorFlash.h"
@@ -50,8 +51,6 @@ Pinetime::Logging::NrfLogger logger;
Pinetime::Logging::DummyLogger logger;
#endif
-#include <memory>
-
static constexpr uint8_t pinSpiSck = 2;
static constexpr uint8_t pinSpiMosi = 3;
static constexpr uint8_t pinSpiMiso = 4;
@@ -108,15 +107,59 @@ void ble_manager_set_ble_connection_callback(void (*connection)());
void ble_manager_set_ble_disconnection_callback(void (*disconnection)());
static constexpr uint8_t pinTouchIrq = 28;
static constexpr uint8_t pinPowerPresentIrq = 19;
-std::unique_ptr<Pinetime::System::SystemTask> systemTask;
Pinetime::Controllers::Settings settingsController {spiNorFlash};
Pinetime::Controllers::MotorController motorController {settingsController};
+Pinetime::Controllers::HeartRateController heartRateController;
+Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController);
+
+Pinetime::Controllers::DateTime dateTimeController;
+Pinetime::Drivers::Watchdog watchdog;
+Pinetime::Drivers::WatchdogView watchdogView(watchdog);
+Pinetime::Controllers::NotificationManager notificationManager;
+Pinetime::Controllers::MotionController motionController;
+Pinetime::Controllers::TimerController timerController;
+
+Pinetime::Applications::DisplayApp displayApp(lcd,
+ lvgl,
+ touchPanel,
+ batteryController,
+ bleController,
+ dateTimeController,
+ watchdogView,
+ notificationManager,
+ heartRateController,
+ settingsController,
+ motorController,
+ motionController,
+ timerController);
+
+Pinetime::System::SystemTask systemTask(spi,
+ lcd,
+ spiNorFlash,
+ twiMaster,
+ touchPanel,
+ lvgl,
+ batteryController,
+ bleController,
+ dateTimeController,
+ timerController,
+ watchdog,
+ notificationManager,
+ motorController,
+ heartRateSensor,
+ motionController,
+ motionSensor,
+ settingsController,
+ heartRateController,
+ displayApp,
+ heartRateApp);
+
void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
if (pin == pinTouchIrq) {
- systemTask->OnTouchEvent();
+ systemTask.OnTouchEvent();
return;
}
@@ -141,12 +184,12 @@ void vApplicationIdleHook(void) {
void DebounceTimerChargeCallback(TimerHandle_t xTimer) {
xTimerStop(xTimer, 0);
- systemTask->PushMessage(Pinetime::System::SystemTask::Messages::OnChargingEvent);
+ systemTask.PushMessage(Pinetime::System::Messages::OnChargingEvent);
}
void DebounceTimerCallback(TimerHandle_t xTimer) {
xTimerStop(xTimer, 0);
- systemTask->OnButtonPushed();
+ systemTask.OnButtonPushed();
}
void SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler(void) {
@@ -264,19 +307,7 @@ int main(void) {
debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback);
debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback);
- systemTask = std::make_unique<Pinetime::System::SystemTask>(spi,
- lcd,
- spiNorFlash,
- twiMaster,
- touchPanel,
- lvgl,
- batteryController,
- bleController,
- motorController,
- heartRateSensor,
- motionSensor,
- settingsController);
- systemTask->Start();
+ systemTask.Start();
nimble_port_init();
vTaskStartScheduler();