diff options
| author | Avamander <avamander@gmail.com> | 2020-10-02 21:45:21 +0300 |
|---|---|---|
| committer | Avamander <avamander@gmail.com> | 2020-10-02 21:45:21 +0300 |
| commit | e25c4edbcf64a62b6a0555722b289a94aea506d1 (patch) | |
| tree | d390dc5c193f7174d7cae8b8ef482a10177943d6 /src/SystemTask/SystemTask.cpp | |
| parent | 40a643d203d2d21834dd2b35d83419a56a3939b6 (diff) | |
Renamed SystemTask/ to systemtask/
Diffstat (limited to 'src/SystemTask/SystemTask.cpp')
| -rw-r--r-- | src/SystemTask/SystemTask.cpp | 247 |
1 files changed, 0 insertions, 247 deletions
diff --git a/src/SystemTask/SystemTask.cpp b/src/SystemTask/SystemTask.cpp deleted file mode 100644 index 2070282b..00000000 --- a/src/SystemTask/SystemTask.cpp +++ /dev/null @@ -1,247 +0,0 @@ -#include <libraries/log/nrf_log.h> -#include <libraries/gpiote/app_gpiote.h> -#include <drivers/Cst816s.h> -#include <DisplayApp/LittleVgl.h> -#include <hal/nrf_rtc.h> -#include <Components/Ble/NotificationManager.h> -#include <host/ble_gatt.h> -#include <host/ble_hs_adv.h> -#include "SystemTask.h" -#include <nimble/hci_common.h> -#include <host/ble_gap.h> -#include <host/util/util.h> -#include <drivers/InternalFlash.h> -#include "../main.h" -#include "Components/Ble/NimbleController.h" - -using namespace Pinetime::System; - -void IdleTimerCallback(TimerHandle_t xTimer) { - - NRF_LOG_INFO("IdleTimerCallback"); - auto sysTask = static_cast<SystemTask *>(pvTimerGetTimerID(xTimer)); - sysTask->OnIdle(); -} - - -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, - Controllers::DateTime &dateTimeController, - Pinetime::Controllers::NotificationManager& notificationManager) : - spi{spi}, lcd{lcd}, spiNorFlash{spiNorFlash}, - twiMaster{twiMaster}, touchPanel{touchPanel}, lvgl{lvgl}, batteryController{batteryController}, - bleController{bleController}, dateTimeController{dateTimeController}, - watchdog{}, watchdogView{watchdog}, notificationManager{notificationManager}, - nimbleController(*this, bleController,dateTimeController, notificationManager, batteryController, spiNorFlash) { - systemTaksMsgQueue = xQueueCreate(10, 1); -} - -void SystemTask::Start() { - if (pdPASS != xTaskCreate(SystemTask::Process, "MAIN", 350, this, 0, &taskHandle)) - APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); -} - -void SystemTask::Process(void *instance) { - auto *app = static_cast<SystemTask *>(instance); - NRF_LOG_INFO("SystemTask task started!"); - app->Work(); -} - -void SystemTask::Work() { - watchdog.Setup(7); - watchdog.Start(); - NRF_LOG_INFO("Last reset reason : %s", Pinetime::Drivers::Watchdog::ResetReasonToString(watchdog.ResetReason())); - APP_GPIOTE_INIT(2); - - spi.Init(); - spiNorFlash.Init(); - spiNorFlash.Wakeup(); - nimbleController.Init(); - nimbleController.StartAdvertising(); - lcd.Init(); - - twiMaster.Init(); - touchPanel.Init(); - batteryController.Init(); - - displayApp.reset(new Pinetime::Applications::DisplayApp(lcd, lvgl, touchPanel, batteryController, bleController, - dateTimeController, watchdogView, *this, notificationManager)); - displayApp->Start(); - - batteryController.Update(); - displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::UpdateBatteryLevel); - - 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); - - nrfx_gpiote_in_config_t pinConfig; - 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; - - 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); - - 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; - - nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); - - idleTimer = xTimerCreate ("idleTimer", idleTime, pdFALSE, this, IdleTimerCallback); - xTimerStart(idleTimer, 0); - - while(true) { - uint8_t msg; - if (xQueueReceive(systemTaksMsgQueue, &msg, isSleeping?2500 : 1000)) { - Messages message = static_cast<Messages >(msg); - switch(message) { - case Messages::GoToRunning: - spi.Wakeup(); - twiMaster.Wakeup(); - - spiNorFlash.Wakeup(); - lcd.Wakeup(); - touchPanel.Wakeup(); - - displayApp->PushMessage(Applications::DisplayApp::Messages::GoToRunning); - displayApp->PushMessage(Applications::DisplayApp::Messages::UpdateBatteryLevel); - - xTimerStart(idleTimer, 0); - nimbleController.StartAdvertising(); - isSleeping = false; - isWakingUp = false; - break; - case Messages::GoToSleep: - isGoingToSleep = true; - NRF_LOG_INFO("[SystemTask] Going to sleep"); - xTimerStop(idleTimer, 0); - displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::GoToSleep); - break; - case Messages::OnNewTime: - ReloadIdleTimer(); - displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::UpdateDateTime); - break; - case Messages::OnNewNotification: - if(isSleeping && !isWakingUp) GoToRunning(); - displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::NewNotification); - break; - case Messages::BleConnected: - ReloadIdleTimer(); - isBleDiscoveryTimerRunning = true; - bleDiscoveryTimer = 5; - break; - case Messages::BleFirmwareUpdateStarted: - doNotGoToSleep = true; - if(isSleeping && !isWakingUp) GoToRunning(); - displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::BleFirmwareUpdateStarted); - break; - case Messages::BleFirmwareUpdateFinished: - doNotGoToSleep = false; - xTimerStart(idleTimer, 0); - if(bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) - NVIC_SystemReset(); - break; - case Messages::OnTouchEvent: - ReloadIdleTimer(); - break; - case Messages::OnButtonEvent: - ReloadIdleTimer(); - break; - case Messages::OnDisplayTaskSleeping: - spiNorFlash.Sleep(); - lcd.Sleep(); - touchPanel.Sleep(); - - spi.Sleep(); - twiMaster.Sleep(); - isSleeping = true; - isGoingToSleep = false; - break; - default: break; - } - } - - 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... - nimbleController.StartDiscovery(); - } else { - bleDiscoveryTimer--; - } - } - - uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG); - dateTimeController.UpdateTime(systick_counter); - batteryController.Update(); - - monitor.Process(); - - if(!nrf_gpio_pin_read(pinButton)) - watchdog.Kick(); - } -} - -void SystemTask::OnButtonPushed() { - if(isGoingToSleep) return; - if(!isSleeping) { - NRF_LOG_INFO("[SystemTask] Button pushed"); - PushMessage(Messages::OnButtonEvent); - displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::ButtonPushed); - } - else { - if(!isWakingUp) { - NRF_LOG_INFO("[SystemTask] Button pushed, waking up"); - GoToRunning(); - } - } -} - -void SystemTask::GoToRunning() { - isWakingUp = true; - PushMessage(Messages::GoToRunning); -} - -void SystemTask::OnTouchEvent() { - if(isGoingToSleep) return ; - NRF_LOG_INFO("[SystemTask] Touch event"); - if(!isSleeping) { - PushMessage(Messages::OnTouchEvent); - displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::TouchEvent); - } -} - -void SystemTask::PushMessage(SystemTask::Messages msg) { - if(msg == Messages::GoToSleep) { - isGoingToSleep = true; - } - BaseType_t xHigherPriorityTaskWoken; - xHigherPriorityTaskWoken = pdFALSE; - xQueueSendFromISR(systemTaksMsgQueue, &msg, &xHigherPriorityTaskWoken); - if (xHigherPriorityTaskWoken) { - /* Actual macro used here is port specific. */ - // TODO : should I do something here? - } -} - -void SystemTask::OnIdle() { - if(doNotGoToSleep) return; - NRF_LOG_INFO("Idle timeout -> Going to sleep") - PushMessage(Messages::GoToSleep); -} - -void SystemTask::ReloadIdleTimer() const { - if(isSleeping || isGoingToSleep) return; - xTimerReset(idleTimer, 0); -} |
