From 1d3742e14f09316a1d795527713eb8f9742f0ffb Mon Sep 17 00:00:00 2001 From: Joaquim Date: Sun, 4 Apr 2021 03:08:51 +0100 Subject: Big UI and navigation Rewrite new navigation add some color to the apps redesign menus new settings menu new quick settings code clean up size reduction by converting navigation images to font and more... --- src/systemtask/SystemTask.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/systemtask/SystemTask.h') diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index cc693735..fda951bd 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -37,8 +37,8 @@ namespace Pinetime { namespace System { class SystemTask { public: - enum class Messages {GoToSleep, GoToRunning, OnNewTime, OnNewNotification, OnNewCall, BleConnected, - BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping + enum class Messages {GoToSleep, GoToRunning, OnNewTime, OnNewNotification, OnNewCall, BleConnected, UpdateTimeOut, + BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping, EnableSleeping, DisableSleeping }; SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd, @@ -104,7 +104,6 @@ namespace Pinetime { void ReloadIdleTimer() const; bool isBleDiscoveryTimerRunning = false; uint8_t bleDiscoveryTimer = 0; - static constexpr uint32_t idleTime = 15000; TimerHandle_t idleTimer; bool doNotGoToSleep = false; -- cgit v1.2.3-70-g09d2 From 365e68e6cc3c9f893e7582d26a1805d6d51ef294 Mon Sep 17 00:00:00 2001 From: Joaquim Date: Mon, 5 Apr 2021 15:22:10 +0100 Subject: Fix wake up lock in twi optimize battery code --- src/components/battery/BatteryController.cpp | 48 ++++++++++++---------------- src/components/battery/BatteryController.h | 12 +++++-- src/drivers/TwiMaster.cpp | 6 ++-- src/systemtask/SystemTask.cpp | 26 +++++++++------ src/systemtask/SystemTask.h | 2 +- 5 files changed, 50 insertions(+), 44 deletions(-) (limited to 'src/systemtask/SystemTask.h') diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index 50f95c99..beca95c4 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -7,11 +7,11 @@ using namespace Pinetime::Controllers; -#define SAMPLES_IN_BUFFER 1 -static nrf_saadc_value_t m_buffer_pool[2][SAMPLES_IN_BUFFER]; +Battery *Battery::instance = nullptr; -static float voltage = 0.0f; -static int percentRemaining = -1; +Battery::Battery() { + instance = this; +} void Battery::Init() { nrf_gpio_cfg_input(chargingPin, (nrf_gpio_pin_pull_t)GPIO_PIN_CNF_PULL_Pullup); @@ -31,7 +31,7 @@ void Battery::Update() { void Battery::SaadcInit() { nrfx_saadc_config_t adcConfig = NRFX_SAADC_DEFAULT_CONFIG; - APP_ERROR_CHECK(nrfx_saadc_init(&adcConfig, SaadcEventHandler)); + APP_ERROR_CHECK(nrfx_saadc_init(&adcConfig, adcCallbackStatic)); nrf_saadc_channel_config_t adcChannelConfig = { .resistor_p = NRF_SAADC_RESISTOR_DISABLED, @@ -45,40 +45,34 @@ void Battery::SaadcInit() { .pin_n = NRF_SAADC_INPUT_DISABLED }; APP_ERROR_CHECK(nrfx_saadc_channel_init(0, &adcChannelConfig)); - APP_ERROR_CHECK(nrfx_saadc_buffer_convert(m_buffer_pool[0],SAMPLES_IN_BUFFER)); - APP_ERROR_CHECK(nrfx_saadc_buffer_convert(m_buffer_pool[1],SAMPLES_IN_BUFFER)); + APP_ERROR_CHECK(nrfx_saadc_buffer_convert(&saadc_value, 1)); } void Battery::SaadcEventHandler(nrfx_saadc_evt_t const * p_event) { - int avg_sample = 0; - int i = 0; - - const float battery_max = 4.18; //maximum voltage of battery ( max charging voltage is 4.21 ) - const float battery_min = 3.20; //minimum voltage of battery before shutdown ( depends on the battery ) - if (p_event->type == NRFX_SAADC_EVT_DONE) { - - APP_ERROR_CHECK(nrfx_saadc_buffer_convert(p_event->data.done.p_buffer, SAMPLES_IN_BUFFER)); - - for (i = 0; i < SAMPLES_IN_BUFFER; i++) { - avg_sample += p_event->data.done.p_buffer[i]; // take N samples in a row - } - avg_sample /= i; // average all the samples out + const float battery_max = 4.18; // maximum voltage of battery ( max charging voltage is 4.21 ) + const float battery_min = 3.20; // minimum voltage of battery before shutdown ( depends on the battery ) - voltage = (static_cast(avg_sample) * 2.04f) / (1024 / 3.0f); - voltage = roundf(voltage * 100) / 100; + if (p_event->type == NRFX_SAADC_EVT_DONE) { + + APP_ERROR_CHECK(nrfx_saadc_buffer_convert(&saadc_value, 1)); - percentRemaining = static_cast(((voltage - battery_min) / (battery_max - battery_min)) * 100); + voltage = (static_cast(p_event->data.done.p_buffer[0]) * 2.04f) / (1024 / 3.0f); + voltage = roundf(voltage * 100) / 100; - percentRemaining = std::max(percentRemaining, 0); - percentRemaining = std::min(percentRemaining, 100); + percentRemaining = static_cast(((voltage - battery_min) / (battery_max - battery_min)) * 100); - nrfx_saadc_uninit(); + percentRemaining = std::max(percentRemaining, 0); + percentRemaining = std::min(percentRemaining, 100); + nrfx_saadc_uninit(); + } } -} +void Battery::adcCallbackStatic(nrfx_saadc_evt_t const *event) { + instance->SaadcEventHandler(event); +} int Battery::PercentRemaining() { return percentRemaining; diff --git a/src/components/battery/BatteryController.h b/src/components/battery/BatteryController.h index 9bc942c9..6a0c7dff 100644 --- a/src/components/battery/BatteryController.h +++ b/src/components/battery/BatteryController.h @@ -10,6 +10,8 @@ namespace Pinetime { class Battery { public: + Battery(); + void Init(); void Update(); @@ -20,16 +22,22 @@ namespace Pinetime { bool IsPowerPresent() const { return isPowerPresent; } private: + static Battery *instance; + nrf_saadc_value_t saadc_value; + static constexpr uint32_t chargingPin = 12; static constexpr uint32_t powerPresentPin = 19; static constexpr nrf_saadc_input_t batteryVoltageAdcInput = NRF_SAADC_INPUT_AIN7; + float voltage = 0.0f; + int percentRemaining = -1; bool isCharging = false; bool isPowerPresent = false; - - static void SaadcEventHandler(nrfx_saadc_evt_t const * p_event); + void SaadcInit(); + void SaadcEventHandler(nrfx_saadc_evt_t const * p_event); + static void adcCallbackStatic(nrfx_saadc_evt_t const *event); }; } } \ No newline at end of file diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 072dd5fc..021eac59 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -62,11 +62,9 @@ void TwiMaster::Init() { } TwiMaster::ErrorCodes TwiMaster::Read(uint8_t deviceAddress, uint8_t registerAddress, uint8_t *data, size_t size) { - // this is causing an error when came from sleep - // - //xSemaphoreTake(mutex, portMAX_DELAY); + xSemaphoreTake(mutex, portMAX_DELAY); auto ret = ReadWithRetry(deviceAddress, registerAddress, data, size); - //xSemaphoreGive(mutex); + xSemaphoreGive(mutex); return ret; } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 43e6f082..57d7fb17 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -167,6 +167,21 @@ void SystemTask::Work() { isSleeping = false; isWakingUp = false; break; + case Messages::TouchWakeUp: { + auto touchInfo = touchPanel.GetTouchInfo(); + 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; case Messages::GoToSleep: isGoingToSleep = true; NRF_LOG_INFO("[systemtask] Going to sleep"); @@ -276,16 +291,7 @@ void SystemTask::OnTouchEvent() { } else if(!isWakingUp) { if( settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::None or settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist ) return; - - if( settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::SingleTap ) { - GoToRunning(); - } else if( settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::DoubleTap ) { - - auto info = touchPanel.GetTouchInfo(); - if( info.isTouch and info.gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap ) { - GoToRunning(); - } - } + PushMessage(Messages::TouchWakeUp); } } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index fda951bd..9d0b41ad 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -37,7 +37,7 @@ namespace Pinetime { namespace System { class SystemTask { public: - enum class Messages {GoToSleep, GoToRunning, OnNewTime, OnNewNotification, OnNewCall, BleConnected, UpdateTimeOut, + enum class Messages {GoToSleep, GoToRunning, TouchWakeUp, OnNewTime, OnNewNotification, OnNewCall, BleConnected, UpdateTimeOut, BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping, EnableSleeping, DisableSleeping }; -- cgit v1.2.3-70-g09d2