From 9342d62a44830113241f0fdbc2951db93e474e26 Mon Sep 17 00:00:00 2001 From: David Ventura Date: Sun, 16 May 2021 21:13:22 +0200 Subject: Emit event on power-present toggle (#320) * Emit event on power-present toggle * clang-format on changes * also update battery status on any event * update comments; remove double battery update * Fix formatting * Vibrate shortly on charging event * debounce charge event --- src/systemtask/SystemTask.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/systemtask/SystemTask.cpp') diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 6d695e2c..59660623 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -149,6 +149,16 @@ void SystemTask::Work() { nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrf_gpio_cfg_sense_input(pinPowerPresentIrq, (nrf_gpio_pin_pull_t) NRF_GPIO_PIN_NOPULL, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); + + pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; + pinConfig.pull = NRF_GPIO_PIN_NOPULL; + pinConfig.is_watcher = false; + pinConfig.hi_accuracy = false; + pinConfig.skip_gpio_setup = true; + + nrfx_gpiote_in_init(pinPowerPresentIrq, &pinConfig, nrfx_gpiote_evt_handler); + idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), pdFALSE, this, IdleTimerCallback); xTimerStart(idleTimer, 0); @@ -161,12 +171,9 @@ void SystemTask::Work() { 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 ??? + // the battery does not emit events when changing charge levels, so we piggyback + // on any system event to read and update the current values Messages message = static_cast(msg); switch (message) { @@ -274,6 +281,11 @@ void SystemTask::Work() { // Remember we'll have to reset the counter next time we're awake stepCounterMustBeReset = true; break; + case Messages::OnChargingEvent: + motorController.SetDuration(15); + // Battery level is updated on every message - there's no need to do anything + break; + default: break; } -- cgit v1.2.3