From 40d45d923b033363ff1304b47eac238dd4495a57 Mon Sep 17 00:00:00 2001 From: Avamander Date: Sun, 18 Apr 2021 20:28:14 +0300 Subject: Reformatted all the files according to clang-format style --- src/systemtask/SystemMonitor.h | 50 +++++------ src/systemtask/SystemTask.cpp | 194 +++++++++++++++++++++++------------------ src/systemtask/SystemTask.h | 186 +++++++++++++++++++++------------------ 3 files changed, 233 insertions(+), 197 deletions(-) (limited to 'src/systemtask') diff --git a/src/systemtask/SystemMonitor.h b/src/systemtask/SystemMonitor.h index 029a1364..d24e9bf7 100644 --- a/src/systemtask/SystemMonitor.h +++ b/src/systemtask/SystemMonitor.h @@ -3,44 +3,42 @@ #include #include - namespace Pinetime { namespace System { struct DummyMonitor {}; struct FreeRtosMonitor {}; - template - class SystemMonitor { - public: - SystemMonitor() = delete; + template class SystemMonitor { + public: + SystemMonitor() = delete; }; - template<> - class SystemMonitor { - public: - void Process() const {} + template <> class SystemMonitor { + public: + void Process() const { + } }; - template<> - class SystemMonitor { - public: - void Process() const { - if(xTaskGetTickCount() - lastTick > 10000) { - NRF_LOG_INFO("---------------------------------------\nFree heap : %d", xPortGetFreeHeapSize()); - auto nb = uxTaskGetSystemState(tasksStatus, 10, nullptr); - for (uint32_t i = 0; i < nb; i++) { - NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark); - if (tasksStatus[i].usStackHighWaterMark < 20) - NRF_LOG_INFO("WARNING!!! Task %s task is nearly full, only %dB available", tasksStatus[i].pcTaskName, - tasksStatus[i].usStackHighWaterMark * 4); - } - lastTick = xTaskGetTickCount(); + template <> class SystemMonitor { + public: + void Process() const { + if (xTaskGetTickCount() - lastTick > 10000) { + NRF_LOG_INFO("---------------------------------------\nFree heap : %d", xPortGetFreeHeapSize()); + auto nb = uxTaskGetSystemState(tasksStatus, 10, nullptr); + for (uint32_t i = 0; i < nb; i++) { + NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark); + if (tasksStatus[i].usStackHighWaterMark < 20) + NRF_LOG_INFO("WARNING!!! Task %s task is nearly full, only %dB available", + tasksStatus[i].pcTaskName, + tasksStatus[i].usStackHighWaterMark * 4); } + lastTick = xTaskGetTickCount(); } + } - private: - mutable TickType_t lastTick = 0; - mutable TaskStatus_t tasksStatus[10]; + private: + mutable TickType_t lastTick = 0; + mutable TaskStatus_t tasksStatus[10]; }; } } \ No newline at end of file diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 3e315eec..5b03fbbb 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -30,28 +30,39 @@ using namespace Pinetime::System; void IdleTimerCallback(TimerHandle_t xTimer) { NRF_LOG_INFO("IdleTimerCallback"); - auto sysTask = static_cast(pvTimerGetTimerID(xTimer)); + auto sysTask = static_cast(pvTimerGetTimerID(xTimer)); sysTask->OnIdle(); } - -SystemTask::SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd, +SystemTask::SystemTask(Drivers::SpiMaster& spi, + Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, - Drivers::TwiMaster& twiMaster, Drivers::Cst816S &touchPanel, - Components::LittleVgl &lvgl, - Controllers::Battery &batteryController, Controllers::Ble &bleController, + Drivers::TwiMaster& twiMaster, + Drivers::Cst816S& touchPanel, + Components::LittleVgl& lvgl, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, 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{*this}, - watchdog{}, watchdogView{watchdog}, - motorController{motorController}, heartRateSensor{heartRateSensor}, motionSensor{motionSensor}, - settingsController{settingsController}, - nimbleController(*this, bleController,dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController) { + Controllers::Settings& settingsController) + : spi {spi}, + lcd {lcd}, + spiNorFlash {spiNorFlash}, + twiMaster {twiMaster}, + touchPanel {touchPanel}, + lvgl {lvgl}, + batteryController {batteryController}, + heartRateController {*this}, + bleController {bleController}, + dateTimeController {*this}, + watchdog {}, + watchdogView {watchdog}, + motorController {motorController}, + heartRateSensor {heartRateSensor}, + motionSensor {motionSensor}, + settingsController {settingsController}, + nimbleController(*this, bleController, dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController) { systemTasksMsgQueue = xQueueCreate(10, 1); } @@ -60,8 +71,8 @@ void SystemTask::Start() { APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } -void SystemTask::Process(void *instance) { - auto *app = static_cast(instance); +void SystemTask::Process(void* instance) { + auto* app = static_cast(instance); NRF_LOG_INFO("systemtask task started!"); app->Work(); } @@ -93,9 +104,18 @@ void SystemTask::Work() { motionSensor.Init(); settingsController.Init(); - displayApp = std::make_unique(lcd, lvgl, touchPanel, batteryController, bleController, - dateTimeController, watchdogView, *this, notificationManager, - heartRateController, settingsController, motionController); + displayApp = std::make_unique(lcd, + lvgl, + touchPanel, + batteryController, + bleController, + dateTimeController, + watchdogView, + *this, + notificationManager, + heartRateController, + settingsController, + motionController); displayApp->Start(); displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); @@ -105,7 +125,7 @@ void SystemTask::Work() { heartRateApp = std::make_unique(heartRateSensor, heartRateController); 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_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); nrf_gpio_pin_set(15); @@ -113,63 +133,63 @@ void SystemTask::Work() { pinConfig.skip_gpio_setup = true; pinConfig.hi_accuracy = false; pinConfig.is_watcher = false; - pinConfig.sense = (nrf_gpiote_polarity_t)NRF_GPIOTE_POLARITY_HITOLO; - pinConfig.pull = (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pulldown; + pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; + pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown; nrfx_gpiote_in_init(pinButton, &pinConfig, nrfx_gpiote_evt_handler); - nrf_gpio_cfg_sense_input(pinTouchIrq, (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t)GPIO_PIN_CNF_SENSE_Low); + nrf_gpio_cfg_sense_input(pinTouchIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); pinConfig.skip_gpio_setup = true; pinConfig.hi_accuracy = false; pinConfig.is_watcher = false; - pinConfig.sense = (nrf_gpiote_polarity_t)NRF_GPIOTE_POLARITY_HITOLO; - pinConfig.pull = (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pullup; + pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO; + pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup; nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); - idleTimer = xTimerCreate ("idleTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), pdFALSE, this, IdleTimerCallback); + idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), pdFALSE, this, IdleTimerCallback); xTimerStart(idleTimer, 0); - // Suppress endless loop diagnostic - #pragma clang diagnostic push - #pragma ide diagnostic ignored "EndlessLoop" - while(true) { +// Suppress endless loop diagnostic +#pragma clang diagnostic push +#pragma ide diagnostic ignored "EndlessLoop" + while (true) { UpdateMotion(); uint8_t msg; if (xQueueReceive(systemTasksMsgQueue, &msg, 100)) { - + // call the battery controller or use the MSG in DisplayApp to get the battery status ??? // it is necessary to validate which is the most efficient batteryController.Update(); - //displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); - // analyze a more efficient way to do this refreshment - // this and the UpdateMotion(); can be called on a timer to be independent of the main process ??? + // displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); + // analyze a more efficient way to do this refreshment + // this and the UpdateMotion(); can be called on a timer to be independent of the main process ??? - Messages message = static_cast(msg); - switch(message) { + Messages message = static_cast(msg); + switch (message) { case Messages::EnableSleeping: doNotGoToSleep = false; - break; + break; case Messages::DisableSleeping: doNotGoToSleep = true; - break; + break; case Messages::UpdateTimeOut: xTimerChangePeriod(idleTimer, pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), 0); - break; + break; case Messages::GoToRunning: spi.Wakeup(); twiMaster.Wakeup(); // Double Tap needs the touch screen to be in normal mode - if ( settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::DoubleTap ) { + if (settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) { touchPanel.Wakeup(); } nimbleController.StartAdvertising(); xTimerStart(idleTimer, 0); - spiNorFlash.Wakeup(); + spiNorFlash.Wakeup(); lcd.Wakeup(); displayApp->PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); @@ -183,16 +203,10 @@ void SystemTask::Work() { twiMaster.Wakeup(); auto touchInfo = touchPanel.GetTouchInfo(); twiMaster.Sleep(); - if( touchInfo.isTouch and - ( - ( touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and - settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::DoubleTap - ) or - ( touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and - settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::SingleTap - ) - ) - ) { + if (touchInfo.isTouch and ((touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and + settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) or + (touchInfo.gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and + settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::SingleTap))) { GoToRunning(); } } break; @@ -208,7 +222,8 @@ void SystemTask::Work() { displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); break; case Messages::OnNewNotification: - if(isSleeping && !isWakingUp) GoToRunning(); + if (isSleeping && !isWakingUp) + GoToRunning(); motorController.SetDuration(35); displayApp->PushMessage(Pinetime::Applications::Display::Messages::NewNotification); break; @@ -219,13 +234,14 @@ void SystemTask::Work() { break; case Messages::BleFirmwareUpdateStarted: doNotGoToSleep = true; - if(isSleeping && !isWakingUp) GoToRunning(); + if (isSleeping && !isWakingUp) + GoToRunning(); displayApp->PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); break; case Messages::BleFirmwareUpdateFinished: doNotGoToSleep = false; xTimerStart(idleTimer, 0); - if(bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) + if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) NVIC_SystemReset(); break; case Messages::OnTouchEvent: @@ -235,7 +251,7 @@ void SystemTask::Work() { ReloadIdleTimer(); break; case Messages::OnDisplayTaskSleeping: - if(BootloaderVersion::IsValid()) { + if (BootloaderVersion::IsValid()) { // First versions of the bootloader do not expose their version and cannot initialize the SPI NOR FLASH // if it's in sleep mode. Avoid bricked device by disabling sleep mode on these versions. spiNorFlash.Sleep(); @@ -244,11 +260,11 @@ void SystemTask::Work() { spi.Sleep(); // Double Tap needs the touch screen to be in normal mode - if ( settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::DoubleTap ) { + if (settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) { touchPanel.Sleep(); } twiMaster.Sleep(); - + isSleeping = true; isGoingToSleep = false; break; @@ -257,12 +273,13 @@ void SystemTask::Work() { // Remember we'll have to reset the counter next time we're awake stepCounterMustBeReset = true; break; - default: break; + default: + break; } } - if(isBleDiscoveryTimerRunning) { - if(bleDiscoveryTimer == 0) { + if (isBleDiscoveryTimerRunning) { + if (bleDiscoveryTimer == 0) { isBleDiscoveryTimerRunning = false; // Services discovery is deffered from 3 seconds to avoid the conflicts between the host communicating with the // tharget and vice-versa. I'm not sure if this is the right way to handle this... @@ -275,49 +292,47 @@ void SystemTask::Work() { monitor.Process(); uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); dateTimeController.UpdateTime(systick_counter); - if(!nrf_gpio_pin_read(pinButton)) + if (!nrf_gpio_pin_read(pinButton)) watchdog.Kick(); } - // Clear diagnostic suppression - #pragma clang diagnostic pop +// Clear diagnostic suppression +#pragma clang diagnostic pop } void SystemTask::UpdateMotion() { - if(isGoingToSleep or isWakingUp) return; + if (isGoingToSleep or isWakingUp) + return; - if(isSleeping && settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) + if (isSleeping && settingsController.getWakeUpMode() != Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) return; - if(isSleeping) + if (isSleeping) twiMaster.Wakeup(); - if(stepCounterMustBeReset) { + if (stepCounterMustBeReset) { motionSensor.ResetStepCounter(); stepCounterMustBeReset = false; } auto motionValues = motionSensor.Process(); - if(isSleeping) + if (isSleeping) twiMaster.Sleep(); motionController.IsSensorOk(motionSensor.IsOk()); - motionController.Update(motionValues.x, - motionValues.y, - motionValues.z, - motionValues.steps); + motionController.Update(motionValues.x, motionValues.y, motionValues.z, motionValues.steps); if (motionController.ShouldWakeUp(isSleeping)) { GoToRunning(); } } void SystemTask::OnButtonPushed() { - if(isGoingToSleep) return; - if(!isSleeping) { + if (isGoingToSleep) + return; + if (!isSleeping) { NRF_LOG_INFO("[systemtask] Button pushed"); PushMessage(Messages::OnButtonEvent); displayApp->PushMessage(Pinetime::Applications::Display::Messages::ButtonPushed); - } - else { - if(!isWakingUp) { + } else { + if (!isWakingUp) { NRF_LOG_INFO("[systemtask] Button pushed, waking up"); GoToRunning(); } @@ -325,25 +340,28 @@ void SystemTask::OnButtonPushed() { } void SystemTask::GoToRunning() { - if(isGoingToSleep or (not isSleeping) or isWakingUp) return; + if (isGoingToSleep or (not isSleeping) or isWakingUp) + return; isWakingUp = true; PushMessage(Messages::GoToRunning); } void SystemTask::OnTouchEvent() { - if(isGoingToSleep) return ; - if(!isSleeping) { + if (isGoingToSleep) + return; + if (!isSleeping) { PushMessage(Messages::OnTouchEvent); 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 ) return; + } else if (!isWakingUp) { + if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::None or + settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) + return; PushMessage(Messages::TouchWakeUp); } } void SystemTask::PushMessage(SystemTask::Messages msg) { - if(msg == Messages::GoToSleep) { + if (msg == Messages::GoToSleep) { isGoingToSleep = true; } BaseType_t xHigherPriorityTaskWoken; @@ -356,12 +374,14 @@ void SystemTask::PushMessage(SystemTask::Messages msg) { } void SystemTask::OnIdle() { - if(doNotGoToSleep) return; + if (doNotGoToSleep) + return; NRF_LOG_INFO("Idle timeout -> Going to sleep") PushMessage(Messages::GoToSleep); } void SystemTask::ReloadIdleTimer() const { - if(isSleeping || isGoingToSleep) return; + if (isSleeping || isGoingToSleep) + return; xTimerReset(idleTimer, 0); } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index a3868375..67e62a2d 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -17,12 +17,12 @@ #include "components/ble/NotificationManager.h" #include "components/motor/MotorController.h" #ifdef PINETIME_IS_RECOVERY -#include "displayapp/DisplayAppRecovery.h" -#include "displayapp/DummyLittleVgl.h" + #include "displayapp/DisplayAppRecovery.h" + #include "displayapp/DummyLittleVgl.h" #else -#include "components/settings/Settings.h" -#include "displayapp/DisplayApp.h" -#include "displayapp/LittleVgl.h" + #include "components/settings/Settings.h" + #include "displayapp/DisplayApp.h" + #include "displayapp/LittleVgl.h" #endif #include "drivers/Watchdog.h" @@ -38,88 +38,106 @@ namespace Pinetime { } namespace System { class SystemTask { - public: - enum class Messages {GoToSleep, GoToRunning, TouchWakeUp, OnNewTime, OnNewNotification, OnNewCall, BleConnected, UpdateTimeOut, - BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping, EnableSleeping, DisableSleeping, - OnNewDay - }; - - SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd, - Pinetime::Drivers::SpiNorFlash& spiNorFlash, - Drivers::TwiMaster& twiMaster, Drivers::Cst816S &touchPanel, - Components::LittleVgl &lvgl, - Controllers::Battery &batteryController, Controllers::Ble &bleController, - Pinetime::Controllers::MotorController& motorController, - Pinetime::Drivers::Hrs3300& heartRateSensor, - Pinetime::Drivers::Bma421& motionSensor, - Controllers::Settings &settingsController); - - - void Start(); - void PushMessage(Messages msg); - - void OnButtonPushed(); - void OnTouchEvent(); - - void OnIdle(); - - Pinetime::Controllers::NimbleController& nimble() {return nimbleController;}; - - private: - TaskHandle_t taskHandle; - - Pinetime::Drivers::SpiMaster& spi; - Pinetime::Drivers::St7789& lcd; - Pinetime::Drivers::SpiNorFlash& spiNorFlash; - Pinetime::Drivers::TwiMaster& twiMaster; - Pinetime::Drivers::Cst816S& touchPanel; - Pinetime::Components::LittleVgl& lvgl; - Pinetime::Controllers::Battery& batteryController; - std::unique_ptr displayApp; - Pinetime::Controllers::HeartRateController heartRateController; - std::unique_ptr heartRateApp; - - Pinetime::Controllers::Ble& bleController; - Pinetime::Controllers::DateTime dateTimeController; - QueueHandle_t systemTasksMsgQueue; - std::atomic isSleeping{false}; - std::atomic isGoingToSleep{false}; - std::atomic isWakingUp{false}; - Pinetime::Drivers::Watchdog watchdog; - Pinetime::Drivers::WatchdogView watchdogView; - 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; - static constexpr uint8_t pinSpiMiso = 4; - static constexpr uint8_t pinSpiCsn = 25; - static constexpr uint8_t pinLcdDataCommand = 18; - static constexpr uint8_t pinButton = 13; - static constexpr uint8_t pinTouchIrq = 28; - - static void Process(void* instance); - void Work(); - void ReloadIdleTimer() const; - bool isBleDiscoveryTimerRunning = false; - uint8_t bleDiscoveryTimer = 0; - TimerHandle_t idleTimer; - bool doNotGoToSleep = false; - - void GoToRunning(); - void UpdateMotion(); - bool stepCounterMustBeReset = false; + public: + enum class Messages { + GoToSleep, + GoToRunning, + TouchWakeUp, + OnNewTime, + OnNewNotification, + OnNewCall, + BleConnected, + UpdateTimeOut, + BleFirmwareUpdateStarted, + BleFirmwareUpdateFinished, + OnTouchEvent, + OnButtonEvent, + OnDisplayTaskSleeping, + EnableSleeping, + DisableSleeping, + OnNewDay + }; + + SystemTask(Drivers::SpiMaster& spi, + Drivers::St7789& lcd, + Pinetime::Drivers::SpiNorFlash& spiNorFlash, + Drivers::TwiMaster& twiMaster, + Drivers::Cst816S& touchPanel, + Components::LittleVgl& lvgl, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Pinetime::Controllers::MotorController& motorController, + Pinetime::Drivers::Hrs3300& heartRateSensor, + Pinetime::Drivers::Bma421& motionSensor, + Controllers::Settings& settingsController); + + void Start(); + void PushMessage(Messages msg); + + void OnButtonPushed(); + void OnTouchEvent(); + + void OnIdle(); + + Pinetime::Controllers::NimbleController& nimble() { + return nimbleController; + }; + + private: + TaskHandle_t taskHandle; + + Pinetime::Drivers::SpiMaster& spi; + Pinetime::Drivers::St7789& lcd; + Pinetime::Drivers::SpiNorFlash& spiNorFlash; + Pinetime::Drivers::TwiMaster& twiMaster; + Pinetime::Drivers::Cst816S& touchPanel; + Pinetime::Components::LittleVgl& lvgl; + Pinetime::Controllers::Battery& batteryController; + std::unique_ptr displayApp; + Pinetime::Controllers::HeartRateController heartRateController; + std::unique_ptr heartRateApp; + + Pinetime::Controllers::Ble& bleController; + Pinetime::Controllers::DateTime dateTimeController; + QueueHandle_t systemTasksMsgQueue; + std::atomic isSleeping {false}; + std::atomic isGoingToSleep {false}; + std::atomic isWakingUp {false}; + Pinetime::Drivers::Watchdog watchdog; + Pinetime::Drivers::WatchdogView watchdogView; + 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; + static constexpr uint8_t pinSpiMiso = 4; + static constexpr uint8_t pinSpiCsn = 25; + static constexpr uint8_t pinLcdDataCommand = 18; + static constexpr uint8_t pinButton = 13; + static constexpr uint8_t pinTouchIrq = 28; + + static void Process(void* instance); + void Work(); + void ReloadIdleTimer() const; + bool isBleDiscoveryTimerRunning = false; + uint8_t bleDiscoveryTimer = 0; + TimerHandle_t idleTimer; + bool doNotGoToSleep = false; + + void GoToRunning(); + void UpdateMotion(); + bool stepCounterMustBeReset = false; #if configUSE_TRACE_FACILITY == 1 - SystemMonitor monitor; + SystemMonitor monitor; #else - SystemMonitor monitor; + SystemMonitor monitor; #endif }; } -- cgit v1.2.3