From a7746d3a3118e40bf3fc0bebc2dce77d9beb29aa Mon Sep 17 00:00:00 2001 From: Finlay Davidson Date: Thu, 16 Mar 2023 22:18:04 +0100 Subject: [PATCH 001/114] notification: Initialise message Prevents reading uninitialised memory if notification gets cut off due to being more than 100 chars. The last character is assumed to be \0, but it is actually uninitialised. --- src/components/ble/NotificationManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ble/NotificationManager.h b/src/components/ble/NotificationManager.h index 09b5a561..f68a68af 100644 --- a/src/components/ble/NotificationManager.h +++ b/src/components/ble/NotificationManager.h @@ -30,7 +30,7 @@ namespace Pinetime { Id id = 0; bool valid = false; uint8_t size; - std::array message; + std::array message {}; Categories category = Categories::Unknown; const char* Message() const; From f7b1111e05c3e5b6652507d2964366cb3cc8739c Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 31 Mar 2023 10:00:56 +0200 Subject: [PATCH 002/114] add heart rate measurments in the background --- src/heartratetask/HeartRateTask.cpp | 136 ++++++++++++++++++---------- src/heartratetask/HeartRateTask.h | 11 ++- 2 files changed, 95 insertions(+), 52 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 9d82d11e..0159f938 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -24,78 +24,59 @@ void HeartRateTask::Process(void* instance) { } void HeartRateTask::Work() { - int lastBpm = 0; - while (true) { - Messages msg; - uint32_t delay; - if (state == States::Running) { - if (measurementStarted) { - delay = ppg.deltaTms; - } else { - delay = 100; - } - } else { - delay = portMAX_DELAY; - } + lastBpm = 0; - if (xQueueReceive(messageQueue, &msg, delay)) { + while (true) { + auto delay = CurrentTaskDelay(); + Messages msg; + + if (xQueueReceive(messageQueue, &msg, delay) == pdTRUE) { switch (msg) { case Messages::GoToSleep: - StopMeasurement(); - state = States::Idle; + if (state == States::Running) { + state = States::Idle; + } else if (state == States::Measuring) { + state = States::BackgroundWaiting; + backgroundMeasurementWaitingStart = xTaskGetTickCount(); + StopMeasurement(); + } break; case Messages::WakeUp: - state = States::Running; - if (measurementStarted) { - lastBpm = 0; + if (state == States::Idle) { + state = States::Running; + } else if (state == States::BackgroundMeasuring) { + state = States::Measuring; + } else if (state == States::BackgroundWaiting) { + state = States::Measuring; StartMeasurement(); } break; case Messages::StartMeasurement: - if (measurementStarted) { + if (state == States::Measuring || state == States::BackgroundMeasuring) { break; } + state = States::Measuring; lastBpm = 0; StartMeasurement(); - measurementStarted = true; break; case Messages::StopMeasurement: - if (!measurementStarted) { + if (state == States::Running || state == States::Idle) { break; } + if (state == States::Measuring) { + state = States::Running; + } else if (state == States::BackgroundMeasuring) { + state = States::Idle; + } StopMeasurement(); - measurementStarted = false; break; } } - if (measurementStarted) { - int8_t ambient = ppg.Preprocess(heartRateSensor.ReadHrs(), heartRateSensor.ReadAls()); - int bpm = ppg.HeartRate(); - - // If ambient light detected or a reset requested (bpm < 0) - if (ambient > 0) { - // Reset all DAQ buffers - ppg.Reset(true); - // Force state to NotEnoughData (below) - lastBpm = 0; - bpm = 0; - } else if (bpm < 0) { - // Reset all DAQ buffers except HRS buffer - ppg.Reset(false); - // Set HR to zero and update - bpm = 0; - controller.Update(Controllers::HeartRateController::States::Running, bpm); - } - - if (lastBpm == 0 && bpm == 0) { - controller.Update(Controllers::HeartRateController::States::NotEnoughData, bpm); - } - - if (bpm != 0) { - lastBpm = bpm; - controller.Update(Controllers::HeartRateController::States::Running, lastBpm); - } + if (state == States::BackgroundWaiting) { + HandleBackgroundWaiting(); + } else if (state == States::BackgroundMeasuring || state == States::Measuring) { + HandleSensorData(); } } } @@ -117,3 +98,58 @@ void HeartRateTask::StopMeasurement() { ppg.Reset(true); vTaskDelay(100); } + +void HeartRateTask::HandleBackgroundWaiting() { + if (xTaskGetTickCount() - backgroundMeasurementWaitingStart >= DURATION_BETWEEN_BACKGROUND_MEASUREMENTS) { + state = States::BackgroundMeasuring; + StartMeasurement(); + } +} + +void HeartRateTask::HandleSensorData() { + int8_t ambient = ppg.Preprocess(heartRateSensor.ReadHrs(), heartRateSensor.ReadAls()); + int bpm = ppg.HeartRate(); + + // If ambient light detected or a reset requested (bpm < 0) + if (ambient > 0) { + // Reset all DAQ buffers + ppg.Reset(true); + // Force state to NotEnoughData (below) + lastBpm = 0; + bpm = 0; + } else if (bpm < 0) { + // Reset all DAQ buffers except HRS buffer + ppg.Reset(false); + // Set HR to zero and update + bpm = 0; + controller.Update(Controllers::HeartRateController::States::Running, bpm); + } + + if (lastBpm == 0 && bpm == 0) { + controller.Update(Controllers::HeartRateController::States::NotEnoughData, bpm); + } + + if (bpm != 0) { + lastBpm = bpm; + controller.Update(Controllers::HeartRateController::States::Running, lastBpm); + if (state == States::BackgroundMeasuring) { + StopMeasurement(); + state = States::BackgroundWaiting; + backgroundMeasurementWaitingStart = xTaskGetTickCount(); + } + } +} + +int HeartRateTask::CurrentTaskDelay() { + switch (state) { + case States::Measuring: + case States::BackgroundMeasuring: + return ppg.deltaTms; + case States::Running: + return 100; + case States::BackgroundWaiting: + return 500; + default: + return portMAX_DELAY; + } +} \ No newline at end of file diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 5bbfb9fb..ab058227 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -4,6 +4,8 @@ #include #include +#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 Minutes assuming 1 Hz + namespace Pinetime { namespace Drivers { class Hrs3300; @@ -17,7 +19,7 @@ namespace Pinetime { class HeartRateTask { public: enum class Messages : uint8_t { GoToSleep, WakeUp, StartMeasurement, StopMeasurement }; - enum class States { Idle, Running }; + enum class States { Idle, Running, Measuring, BackgroundWaiting, BackgroundMeasuring }; explicit HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller); void Start(); @@ -29,13 +31,18 @@ namespace Pinetime { void StartMeasurement(); void StopMeasurement(); + void HandleBackgroundWaiting(); + void HandleSensorData(); + int CurrentTaskDelay(); + TaskHandle_t taskHandle; QueueHandle_t messageQueue; States state = States::Running; Drivers::Hrs3300& heartRateSensor; Controllers::HeartRateController& controller; Controllers::Ppg ppg; - bool measurementStarted = false; + int lastBpm = 0; + TickType_t backgroundMeasurementWaitingStart; }; } From 58c507ee45ab08445e06030a6e29dc83641a6ddf Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 31 Mar 2023 10:25:36 +0200 Subject: [PATCH 003/114] increase task delay when waiting in the background to 10s --- src/heartratetask/HeartRateTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 0159f938..f332fadf 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -148,7 +148,7 @@ int HeartRateTask::CurrentTaskDelay() { case States::Running: return 100; case States::BackgroundWaiting: - return 500; + return 10000; default: return portMAX_DELAY; } From 0370e3cd65fd77e9dd5289fa5484fcebd477fcf7 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Mon, 3 Apr 2023 21:29:17 +0200 Subject: [PATCH 004/114] remove background start timestamp reset on sleep --- src/heartratetask/HeartRateTask.cpp | 1 - src/heartratetask/HeartRateTask.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index f332fadf..f48045d8 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -37,7 +37,6 @@ void HeartRateTask::Work() { state = States::Idle; } else if (state == States::Measuring) { state = States::BackgroundWaiting; - backgroundMeasurementWaitingStart = xTaskGetTickCount(); StopMeasurement(); } break; diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index ab058227..61151af2 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -42,7 +42,7 @@ namespace Pinetime { Controllers::HeartRateController& controller; Controllers::Ppg ppg; int lastBpm = 0; - TickType_t backgroundMeasurementWaitingStart; + TickType_t backgroundMeasurementWaitingStart = 0; }; } From a5db54af2793a472f7e315d3580d1ee2c597a4f2 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 11 May 2023 23:47:31 +0200 Subject: [PATCH 005/114] rebase on main --- src/heartratetask/HeartRateTask.cpp | 16 ++++++---------- src/heartratetask/HeartRateTask.h | 3 +-- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index f48045d8..a010cd44 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -24,7 +24,7 @@ void HeartRateTask::Process(void* instance) { } void HeartRateTask::Work() { - lastBpm = 0; + int lastBpm = 0; while (true) { auto delay = CurrentTaskDelay(); @@ -75,7 +75,7 @@ void HeartRateTask::Work() { if (state == States::BackgroundWaiting) { HandleBackgroundWaiting(); } else if (state == States::BackgroundMeasuring || state == States::Measuring) { - HandleSensorData(); + HandleSensorData(&lastBpm); } } } @@ -105,7 +105,7 @@ void HeartRateTask::HandleBackgroundWaiting() { } } -void HeartRateTask::HandleSensorData() { +void HeartRateTask::HandleSensorData(int* lastBpm) { int8_t ambient = ppg.Preprocess(heartRateSensor.ReadHrs(), heartRateSensor.ReadAls()); int bpm = ppg.HeartRate(); @@ -113,24 +113,20 @@ void HeartRateTask::HandleSensorData() { if (ambient > 0) { // Reset all DAQ buffers ppg.Reset(true); - // Force state to NotEnoughData (below) - lastBpm = 0; - bpm = 0; } else if (bpm < 0) { // Reset all DAQ buffers except HRS buffer ppg.Reset(false); // Set HR to zero and update bpm = 0; - controller.Update(Controllers::HeartRateController::States::Running, bpm); } - if (lastBpm == 0 && bpm == 0) { + if (*lastBpm == 0 && bpm == 0) { controller.Update(Controllers::HeartRateController::States::NotEnoughData, bpm); } if (bpm != 0) { - lastBpm = bpm; - controller.Update(Controllers::HeartRateController::States::Running, lastBpm); + *lastBpm = bpm; + controller.Update(Controllers::HeartRateController::States::Running, bpm); if (state == States::BackgroundMeasuring) { StopMeasurement(); state = States::BackgroundWaiting; diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 61151af2..d27f68e7 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -32,7 +32,7 @@ namespace Pinetime { void StopMeasurement(); void HandleBackgroundWaiting(); - void HandleSensorData(); + void HandleSensorData(int* lastBpm); int CurrentTaskDelay(); TaskHandle_t taskHandle; @@ -41,7 +41,6 @@ namespace Pinetime { Drivers::Hrs3300& heartRateSensor; Controllers::HeartRateController& controller; Controllers::Ppg ppg; - int lastBpm = 0; TickType_t backgroundMeasurementWaitingStart = 0; }; From 7ae790bcdb40c8f849f047f5138b8b091177471d Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 25 May 2023 23:41:26 +0200 Subject: [PATCH 006/114] stop background after 30s of no data from the heart rate sensor --- src/heartratetask/HeartRateTask.cpp | 17 +++++++++++++---- src/heartratetask/HeartRateTask.h | 7 +++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index a010cd44..1184ba1e 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -37,7 +37,7 @@ void HeartRateTask::Work() { state = States::Idle; } else if (state == States::Measuring) { state = States::BackgroundWaiting; - StopMeasurement(); + StartWaiting(); } break; case Messages::WakeUp: @@ -90,6 +90,7 @@ void HeartRateTask::StartMeasurement() { heartRateSensor.Enable(); ppg.Reset(true); vTaskDelay(100); + measurementStart = xTaskGetTickCount(); } void HeartRateTask::StopMeasurement() { @@ -98,8 +99,13 @@ void HeartRateTask::StopMeasurement() { vTaskDelay(100); } +void HeartRateTask::StartWaiting() { + StopMeasurement(); + backgroundWaitingStart = xTaskGetTickCount(); +} + void HeartRateTask::HandleBackgroundWaiting() { - if (xTaskGetTickCount() - backgroundMeasurementWaitingStart >= DURATION_BETWEEN_BACKGROUND_MEASUREMENTS) { + if (xTaskGetTickCount() - backgroundWaitingStart >= DURATION_BETWEEN_BACKGROUND_MEASUREMENTS) { state = States::BackgroundMeasuring; StartMeasurement(); } @@ -128,11 +134,14 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { *lastBpm = bpm; controller.Update(Controllers::HeartRateController::States::Running, bpm); if (state == States::BackgroundMeasuring) { - StopMeasurement(); state = States::BackgroundWaiting; - backgroundMeasurementWaitingStart = xTaskGetTickCount(); + StartWaiting(); } } + if (bpm == 0 && state == States::BackgroundMeasuring && xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { + state = States::BackgroundWaiting; + StartWaiting(); + } } int HeartRateTask::CurrentTaskDelay() { diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index d27f68e7..620dcf24 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -4,7 +4,8 @@ #include #include -#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 Minutes assuming 1 Hz +#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz +#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz namespace Pinetime { namespace Drivers { @@ -30,6 +31,7 @@ namespace Pinetime { static void Process(void* instance); void StartMeasurement(); void StopMeasurement(); + void StartWaiting(); void HandleBackgroundWaiting(); void HandleSensorData(int* lastBpm); @@ -41,7 +43,8 @@ namespace Pinetime { Drivers::Hrs3300& heartRateSensor; Controllers::HeartRateController& controller; Controllers::Ppg ppg; - TickType_t backgroundMeasurementWaitingStart = 0; + TickType_t backgroundWaitingStart = 0; + TickType_t measurementStart = 0; }; } From 5dbe1f77b53fff25765b7cf75f92e79cb8dbc40b Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 7 Jul 2023 23:20:41 +0200 Subject: [PATCH 007/114] properly format using clang-format --- src/heartratetask/HeartRateTask.cpp | 29 +++++++++++++++-------------- src/heartratetask/HeartRateTask.h | 4 ++-- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 1184ba1e..25437c42 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -100,8 +100,8 @@ void HeartRateTask::StopMeasurement() { } void HeartRateTask::StartWaiting() { - StopMeasurement(); - backgroundWaitingStart = xTaskGetTickCount(); + StopMeasurement(); + backgroundWaitingStart = xTaskGetTickCount(); } void HeartRateTask::HandleBackgroundWaiting() { @@ -138,22 +138,23 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { StartWaiting(); } } - if (bpm == 0 && state == States::BackgroundMeasuring && xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { + if (bpm == 0 && state == States::BackgroundMeasuring && + xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { state = States::BackgroundWaiting; StartWaiting(); } } int HeartRateTask::CurrentTaskDelay() { - switch (state) { - case States::Measuring: - case States::BackgroundMeasuring: - return ppg.deltaTms; - case States::Running: - return 100; - case States::BackgroundWaiting: - return 10000; - default: - return portMAX_DELAY; - } + switch (state) { + case States::Measuring: + case States::BackgroundMeasuring: + return ppg.deltaTms; + case States::Running: + return 100; + case States::BackgroundWaiting: + return 10000; + default: + return portMAX_DELAY; + } } \ No newline at end of file diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 620dcf24..d087d517 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -4,8 +4,8 @@ #include #include -#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz -#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz +#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz +#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz namespace Pinetime { namespace Drivers { From 27ee1eb2c85b70280c1f31b316ae99dc7825adb8 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 25 Aug 2023 02:10:45 +0200 Subject: [PATCH 008/114] add settings screen to choose heartrate measurement background --- src/CMakeLists.txt | 1 + src/components/settings/Settings.h | 13 +++ src/displayapp/DisplayApp.cpp | 4 + .../screens/settings/SettingHeartRate.cpp | 85 +++++++++++++++++++ .../screens/settings/SettingHeartRate.h | 42 +++++++++ src/displayapp/screens/settings/Settings.h | 8 +- src/heartratetask/HeartRateTask.cpp | 13 ++- src/heartratetask/HeartRateTask.h | 9 +- src/main.cpp | 6 +- 9 files changed, 169 insertions(+), 12 deletions(-) create mode 100644 src/displayapp/screens/settings/SettingHeartRate.cpp create mode 100644 src/displayapp/screens/settings/SettingHeartRate.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd8ece62..ca373119 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -411,6 +411,7 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingWeatherFormat.cpp displayapp/screens/settings/SettingWakeUp.cpp displayapp/screens/settings/SettingDisplay.cpp + displayapp/screens/settings/SettingHeartRate.cpp displayapp/screens/settings/SettingSteps.cpp displayapp/screens/settings/SettingSetDateTime.cpp displayapp/screens/settings/SettingSetDate.cpp diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 06312077..77c1ca1a 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -283,6 +283,17 @@ namespace Pinetime { return bleRadioEnabled; }; + uint32_t GetHeartRateBackgroundMeasurementInterval() const { + return settings.heartRateBackgroundMeasurementInterval; + } + + void SetHeartRateBackgroundMeasurementInterval(uint32_t newHeartRateBackgroundMeasurementInterval) { + if (newHeartRateBackgroundMeasurementInterval != settings.heartRateBackgroundMeasurementInterval) { + settingsChanged = true; + } + settings.heartRateBackgroundMeasurementInterval = newHeartRateBackgroundMeasurementInterval; + } + private: Pinetime::Controllers::FS& fs; @@ -308,6 +319,8 @@ namespace Pinetime { uint16_t shakeWakeThreshold = 150; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; + + uint32_t heartRateBackgroundMeasurementInterval = 0; }; SettingsData settings; diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 3fd34b3a..94975db8 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -47,6 +47,7 @@ #include "displayapp/screens/settings/SettingSteps.h" #include "displayapp/screens/settings/SettingSetDateTime.h" #include "displayapp/screens/settings/SettingChimes.h" +#include "displayapp/screens/settings/SettingHeartRate.h" #include "displayapp/screens/settings/SettingShakeThreshold.h" #include "displayapp/screens/settings/SettingBluetooth.h" @@ -506,6 +507,9 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio case Apps::SettingWakeUp: currentScreen = std::make_unique(settingsController); break; + case Apps::SettingHeartRate: + currentScreen = std::make_unique(this, settingsController); + break; case Apps::SettingDisplay: currentScreen = std::make_unique(this, settingsController); break; diff --git a/src/displayapp/screens/settings/SettingHeartRate.cpp b/src/displayapp/screens/settings/SettingHeartRate.cpp new file mode 100644 index 00000000..8460e260 --- /dev/null +++ b/src/displayapp/screens/settings/SettingHeartRate.cpp @@ -0,0 +1,85 @@ +#include "displayapp/screens/settings/SettingHeartRate.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/screens/Styles.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" +#include +#include + +using namespace Pinetime::Applications::Screens; + +constexpr const char* SettingHeartRate::title; +constexpr const char* SettingHeartRate::symbol; + +namespace { + constexpr std::array intervalOptions = {{ + 0, + 30 * 1000, + 60 * 1000, + 5 * 60 * 1000, + 10 * 60 * 1000, + 30 * 60 * 1000, + }}; + + constexpr std::array options = {{ + {"Off", true}, + {"30s", true}, + {"1 min", true}, + {"5 min", true}, + {"10 min", true}, + {"30 min", true}, + {"", false}, + {"", false}, + }}; + + uint32_t GetDefaultOption(uint32_t currentInterval) { + for (size_t i = 0; i < intervalOptions.size(); i++) { + if (intervalOptions[i] == currentInterval) { + return i; + } + } + return 0; + } +} + +auto SettingHeartRate::CreateScreenList() const { + std::array()>, nScreens> screens; + for (size_t i = 0; i < screens.size(); i++) { + screens[i] = [this, i]() -> std::unique_ptr { + return CreateScreen(i); + }; + } + return screens; +} + +SettingHeartRate::SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settings) + : app {app}, settings {settings}, screens {app, 0, CreateScreenList(), Screens::ScreenListModes::UpDown} { +} + +SettingHeartRate::~SettingHeartRate() { + lv_obj_clean(lv_scr_act()); +} + +bool SettingHeartRate::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + return screens.OnTouchEvent(event); +} + +std::unique_ptr SettingHeartRate::CreateScreen(unsigned int screenNum) const { + std::array optionsOnThisScreen; + for (int i = 0; i < optionsPerScreen; i++) { + optionsOnThisScreen[i] = options[screenNum * optionsPerScreen + i]; + } + + return std::make_unique( + screenNum, + nScreens, + title, + symbol, + GetDefaultOption(settings.GetHeartRateBackgroundMeasurementInterval()), + [&settings = settings](uint32_t index) { + settings.SetHeartRateBackgroundMeasurementInterval(intervalOptions[index]); + settings.SaveSettings(); + }, + optionsOnThisScreen); +} \ No newline at end of file diff --git a/src/displayapp/screens/settings/SettingHeartRate.h b/src/displayapp/screens/settings/SettingHeartRate.h new file mode 100644 index 00000000..6b4ba581 --- /dev/null +++ b/src/displayapp/screens/settings/SettingHeartRate.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +#include "components/settings/Settings.h" +#include "displayapp/screens/ScreenList.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" +#include "displayapp/screens/CheckboxList.h" + +namespace Pinetime { + + namespace Applications { + namespace Screens { + + class SettingHeartRate : public Screen { + public: + SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settings); + ~SettingHeartRate() override; + + bool OnTouchEvent(TouchEvents event) override; + + private: + DisplayApp* app; + + auto CreateScreenList() const; + std::unique_ptr CreateScreen(unsigned int screenNum) const; + + Pinetime::Controllers::Settings& settings; + + static constexpr const char* title = "Backg. Interval"; + static constexpr const char* symbol = Symbols::heartBeat; + + static constexpr int optionsPerScreen = 4; + static constexpr int nScreens = 2; + + ScreenList screens; + }; + } + } +} diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index a21b4ccd..0098b304 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -38,6 +38,7 @@ namespace Pinetime { {Symbols::home, "Watch face", Apps::SettingWatchFace}, {Symbols::shoe, "Steps", Apps::SettingSteps}, + {Symbols::heartBeat, "Heartrate", Apps::SettingHeartRate}, {Symbols::clock, "Date&Time", Apps::SettingSetDateTime}, {Symbols::cloudSunRain, "Weather", Apps::SettingWeatherFormat}, {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, @@ -49,9 +50,10 @@ namespace Pinetime { {Symbols::list, "About", Apps::SysInfo}, - // {Symbols::none, "None", Apps::None}, - // {Symbols::none, "None", Apps::None}, - // {Symbols::none, "None", Apps::None}, + {Symbols::none, "None", Apps::None}, + {Symbols::none, "None", Apps::None}, + {Symbols::none, "None", Apps::None}, + // {Symbols::none, "None", Apps::None}, }}; diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 25437c42..e833dfe0 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -5,8 +5,10 @@ using namespace Pinetime::Applications; -HeartRateTask::HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller) - : heartRateSensor {heartRateSensor}, controller {controller} { +HeartRateTask::HeartRateTask(Drivers::Hrs3300& heartRateSensor, + Controllers::HeartRateController& controller, + Controllers::Settings& settings) + : heartRateSensor {heartRateSensor}, controller {controller}, settings {settings} { } void HeartRateTask::Start() { @@ -105,7 +107,12 @@ void HeartRateTask::StartWaiting() { } void HeartRateTask::HandleBackgroundWaiting() { - if (xTaskGetTickCount() - backgroundWaitingStart >= DURATION_BETWEEN_BACKGROUND_MEASUREMENTS) { + if (settings.GetHeartRateBackgroundMeasurementInterval() == 0) { + // stay waiting + return; + } + + if (xTaskGetTickCount() - backgroundWaitingStart >= settings.GetHeartRateBackgroundMeasurementInterval()) { state = States::BackgroundMeasuring; StartMeasurement(); } diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index d087d517..80b6abc8 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -3,9 +3,9 @@ #include #include #include +#include "components/settings/Settings.h" -#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz -#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz +#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz namespace Pinetime { namespace Drivers { @@ -22,7 +22,9 @@ namespace Pinetime { enum class Messages : uint8_t { GoToSleep, WakeUp, StartMeasurement, StopMeasurement }; enum class States { Idle, Running, Measuring, BackgroundWaiting, BackgroundMeasuring }; - explicit HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller); + explicit HeartRateTask(Drivers::Hrs3300& heartRateSensor, + Controllers::HeartRateController& controller, + Controllers::Settings& settings); void Start(); void Work(); void PushMessage(Messages msg); @@ -42,6 +44,7 @@ namespace Pinetime { States state = States::Running; Drivers::Hrs3300& heartRateSensor; Controllers::HeartRateController& controller; + Controllers::Settings& settings; Controllers::Ppg ppg; TickType_t backgroundWaitingStart = 0; TickType_t measurementStart = 0; diff --git a/src/main.cpp b/src/main.cpp index ee6a6d3d..6a957336 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -93,13 +93,13 @@ TimerHandle_t debounceChargeTimer; Pinetime::Controllers::Battery batteryController; Pinetime::Controllers::Ble bleController; -Pinetime::Controllers::HeartRateController heartRateController; -Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController); - Pinetime::Controllers::FS fs {spiNorFlash}; Pinetime::Controllers::Settings settingsController {fs}; Pinetime::Controllers::MotorController motorController {}; +Pinetime::Controllers::HeartRateController heartRateController; +Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController, settingsController); + Pinetime::Controllers::DateTime dateTimeController {settingsController}; Pinetime::Drivers::Watchdog watchdog; Pinetime::Controllers::NotificationManager notificationManager; From be1a5190982aec62d66f3341019cab3d69381fb8 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 25 Aug 2023 13:06:18 +0200 Subject: [PATCH 009/114] use different style for the heartrate settings and fix issues with settings file --- src/components/settings/Settings.cpp | 1 - src/components/settings/Settings.h | 1 + .../screens/settings/SettingHeartRate.cpp | 115 ++++++++---------- .../screens/settings/SettingHeartRate.h | 30 +++-- src/heartratetask/HeartRateTask.cpp | 2 +- 5 files changed, 73 insertions(+), 76 deletions(-) diff --git a/src/components/settings/Settings.cpp b/src/components/settings/Settings.cpp index 1ae00a2d..05ab23d4 100644 --- a/src/components/settings/Settings.cpp +++ b/src/components/settings/Settings.cpp @@ -8,7 +8,6 @@ Settings::Settings(Pinetime::Controllers::FS& fs) : fs {fs} { } void Settings::Init() { - // Load default settings from Flash LoadSettingsFromFile(); } diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 77c1ca1a..53ab75a2 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -320,6 +320,7 @@ namespace Pinetime { Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; + // The interval for measuring the heart rate when the screen is off (in seconds) uint32_t heartRateBackgroundMeasurementInterval = 0; }; diff --git a/src/displayapp/screens/settings/SettingHeartRate.cpp b/src/displayapp/screens/settings/SettingHeartRate.cpp index 8460e260..99f4a463 100644 --- a/src/displayapp/screens/settings/SettingHeartRate.cpp +++ b/src/displayapp/screens/settings/SettingHeartRate.cpp @@ -9,77 +9,68 @@ using namespace Pinetime::Applications::Screens; -constexpr const char* SettingHeartRate::title; -constexpr const char* SettingHeartRate::symbol; - namespace { - constexpr std::array intervalOptions = {{ - 0, - 30 * 1000, - 60 * 1000, - 5 * 60 * 1000, - 10 * 60 * 1000, - 30 * 60 * 1000, - }}; + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } +} - constexpr std::array options = {{ - {"Off", true}, - {"30s", true}, - {"1 min", true}, - {"5 min", true}, - {"10 min", true}, - {"30 min", true}, - {"", false}, - {"", false}, - }}; +constexpr std::array SettingHeartRate::options; - uint32_t GetDefaultOption(uint32_t currentInterval) { - for (size_t i = 0; i < intervalOptions.size(); i++) { - if (intervalOptions[i] == currentInterval) { - return i; - } +SettingHeartRate::SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : app {app}, settingsController {settingsController} { + + lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); + + lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); + lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); + lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); + lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); + + lv_obj_set_pos(container1, 10, 60); + lv_obj_set_width(container1, LV_HOR_RES - 20); + lv_obj_set_height(container1, LV_VER_RES - 50); + lv_cont_set_layout(container1, LV_LAYOUT_PRETTY_TOP); + + lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(title, "Backg. Interval"); + lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); + lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); + + lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); + lv_label_set_text_static(icon, Symbols::heartBeat); + lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); + lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); + + for (unsigned int i = 0; i < options.size(); i++) { + cbOption[i] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text(cbOption[i], options[i].name); + cbOption[i]->user_data = this; + lv_obj_set_event_cb(cbOption[i], event_handler); + SetRadioButtonStyle(cbOption[i]); + + if (settingsController.GetHeartRateBackgroundMeasurementInterval() == options[i].interval) { + lv_checkbox_set_checked(cbOption[i], true); } - return 0; } } -auto SettingHeartRate::CreateScreenList() const { - std::array()>, nScreens> screens; - for (size_t i = 0; i < screens.size(); i++) { - screens[i] = [this, i]() -> std::unique_ptr { - return CreateScreen(i); - }; - } - return screens; -} - -SettingHeartRate::SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settings) - : app {app}, settings {settings}, screens {app, 0, CreateScreenList(), Screens::ScreenListModes::UpDown} { -} - SettingHeartRate::~SettingHeartRate() { lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); } -bool SettingHeartRate::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - return screens.OnTouchEvent(event); -} - -std::unique_ptr SettingHeartRate::CreateScreen(unsigned int screenNum) const { - std::array optionsOnThisScreen; - for (int i = 0; i < optionsPerScreen; i++) { - optionsOnThisScreen[i] = options[screenNum * optionsPerScreen + i]; +void SettingHeartRate::UpdateSelected(lv_obj_t* object, lv_event_t event) { + if (event == LV_EVENT_CLICKED) { + for (unsigned int i = 0; i < options.size(); i++) { + if (object == cbOption[i]) { + lv_checkbox_set_checked(cbOption[i], true); + settingsController.SetHeartRateBackgroundMeasurementInterval(options[i].interval); + } else { + lv_checkbox_set_checked(cbOption[i], false); + } + } } - - return std::make_unique( - screenNum, - nScreens, - title, - symbol, - GetDefaultOption(settings.GetHeartRateBackgroundMeasurementInterval()), - [&settings = settings](uint32_t index) { - settings.SetHeartRateBackgroundMeasurementInterval(intervalOptions[index]); - settings.SaveSettings(); - }, - optionsOnThisScreen); -} \ No newline at end of file +} diff --git a/src/displayapp/screens/settings/SettingHeartRate.h b/src/displayapp/screens/settings/SettingHeartRate.h index 6b4ba581..28605bac 100644 --- a/src/displayapp/screens/settings/SettingHeartRate.h +++ b/src/displayapp/screens/settings/SettingHeartRate.h @@ -14,28 +14,34 @@ namespace Pinetime { namespace Applications { namespace Screens { + struct Option { + const uint32_t interval; + const char* name; + }; + class SettingHeartRate : public Screen { public: SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settings); ~SettingHeartRate() override; - bool OnTouchEvent(TouchEvents event) override; + void UpdateSelected(lv_obj_t* object, lv_event_t event); private: DisplayApp* app; + Pinetime::Controllers::Settings& settingsController; - auto CreateScreenList() const; - std::unique_ptr CreateScreen(unsigned int screenNum) const; + static constexpr std::array options = {{ + {0, "Off"}, + {10, "10s"}, + {30, "30s"}, + {60, " 1m"}, + {5 * 60, " 5m"}, + {10 * 60, "10m"}, + {30 * 60, "30m"}, + {60 * 60, " 1h"}, + }}; - Pinetime::Controllers::Settings& settings; - - static constexpr const char* title = "Backg. Interval"; - static constexpr const char* symbol = Symbols::heartBeat; - - static constexpr int optionsPerScreen = 4; - static constexpr int nScreens = 2; - - ScreenList screens; + lv_obj_t* cbOption[options.size()]; }; } } diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index e833dfe0..531cdf5e 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -112,7 +112,7 @@ void HeartRateTask::HandleBackgroundWaiting() { return; } - if (xTaskGetTickCount() - backgroundWaitingStart >= settings.GetHeartRateBackgroundMeasurementInterval()) { + if (xTaskGetTickCount() - backgroundWaitingStart >= settings.GetHeartRateBackgroundMeasurementInterval() * 1000) { state = States::BackgroundMeasuring; StartMeasurement(); } From d376a856b7323217e40349a16750805a18771f5d Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Sat, 26 Aug 2023 20:35:39 +0200 Subject: [PATCH 010/114] use enum instead of uint32_t for heartrater interval setting --- src/components/settings/Settings.h | 18 ++++++-- .../screens/settings/SettingHeartRate.cpp | 3 +- .../screens/settings/SettingHeartRate.h | 18 ++++---- src/heartratetask/HeartRateTask.cpp | 43 ++++++++++++++++--- src/heartratetask/HeartRateTask.h | 4 ++ 5 files changed, 67 insertions(+), 19 deletions(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 53ab75a2..94fde265 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -50,6 +50,17 @@ namespace Pinetime { int colorIndex = 0; }; + enum class HeartRateBackgroundMeasurementInterval : uint8_t { + Off, + Continuous, + TenSeconds, + ThirtySeconds, + OneMinute, + FiveMinutes, + TenMinutes, + ThirtyMinutes, + }; + Settings(Pinetime::Controllers::FS& fs); Settings(const Settings&) = delete; @@ -283,11 +294,11 @@ namespace Pinetime { return bleRadioEnabled; }; - uint32_t GetHeartRateBackgroundMeasurementInterval() const { + HeartRateBackgroundMeasurementInterval GetHeartRateBackgroundMeasurementInterval() const { return settings.heartRateBackgroundMeasurementInterval; } - void SetHeartRateBackgroundMeasurementInterval(uint32_t newHeartRateBackgroundMeasurementInterval) { + void SetHeartRateBackgroundMeasurementInterval(HeartRateBackgroundMeasurementInterval newHeartRateBackgroundMeasurementInterval) { if (newHeartRateBackgroundMeasurementInterval != settings.heartRateBackgroundMeasurementInterval) { settingsChanged = true; } @@ -320,8 +331,7 @@ namespace Pinetime { Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; - // The interval for measuring the heart rate when the screen is off (in seconds) - uint32_t heartRateBackgroundMeasurementInterval = 0; + HeartRateBackgroundMeasurementInterval heartRateBackgroundMeasurementInterval = HeartRateBackgroundMeasurementInterval::Off; }; SettingsData settings; diff --git a/src/displayapp/screens/settings/SettingHeartRate.cpp b/src/displayapp/screens/settings/SettingHeartRate.cpp index 99f4a463..d3da19b2 100644 --- a/src/displayapp/screens/settings/SettingHeartRate.cpp +++ b/src/displayapp/screens/settings/SettingHeartRate.cpp @@ -24,7 +24,7 @@ SettingHeartRate::SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pine lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); + lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -35,6 +35,7 @@ SettingHeartRate::SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pine lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(title, "Backg. Interval"); + lv_label_set_text(title, "Backg. Interval"); lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); diff --git a/src/displayapp/screens/settings/SettingHeartRate.h b/src/displayapp/screens/settings/SettingHeartRate.h index 28605bac..40eff744 100644 --- a/src/displayapp/screens/settings/SettingHeartRate.h +++ b/src/displayapp/screens/settings/SettingHeartRate.h @@ -15,7 +15,7 @@ namespace Pinetime { namespace Screens { struct Option { - const uint32_t interval; + const Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval interval; const char* name; }; @@ -31,14 +31,14 @@ namespace Pinetime { Pinetime::Controllers::Settings& settingsController; static constexpr std::array options = {{ - {0, "Off"}, - {10, "10s"}, - {30, "30s"}, - {60, " 1m"}, - {5 * 60, " 5m"}, - {10 * 60, "10m"}, - {30 * 60, "30m"}, - {60 * 60, " 1h"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::Off, " Off"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::Continuous, "Cont"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenSeconds, " 10s"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtySeconds, " 30s"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::OneMinute, " 1m"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::FiveMinutes, " 5m"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenMinutes, " 10m"}, + {Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtyMinutes, " 30m"}, }}; lv_obj_t* cbOption[options.size()]; diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 531cdf5e..56439e93 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -107,12 +107,12 @@ void HeartRateTask::StartWaiting() { } void HeartRateTask::HandleBackgroundWaiting() { - if (settings.GetHeartRateBackgroundMeasurementInterval() == 0) { - // stay waiting + if (!IsBackgroundMeasurementActivated()) { return; } - if (xTaskGetTickCount() - backgroundWaitingStart >= settings.GetHeartRateBackgroundMeasurementInterval() * 1000) { + TickType_t ticksSinceWaitingStart = xTaskGetTickCount() - backgroundWaitingStart; + if (ticksSinceWaitingStart >= GetHeartRateBackgroundMeasurementIntervalInTicks()) { state = States::BackgroundMeasuring; StartMeasurement(); } @@ -140,13 +140,17 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { if (bpm != 0) { *lastBpm = bpm; controller.Update(Controllers::HeartRateController::States::Running, bpm); + if (state == States::Measuring || IsContinuosModeActivated()) { + return; + } if (state == States::BackgroundMeasuring) { state = States::BackgroundWaiting; StartWaiting(); } } - if (bpm == 0 && state == States::BackgroundMeasuring && - xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { + TickType_t ticksSinceMeasurementStart = xTaskGetTickCount() - measurementStart; + if (bpm == 0 && state == States::BackgroundMeasuring && !IsContinuosModeActivated() && + ticksSinceMeasurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { state = States::BackgroundWaiting; StartWaiting(); } @@ -164,4 +168,33 @@ int HeartRateTask::CurrentTaskDelay() { default: return portMAX_DELAY; } +} + +uint32_t HeartRateTask::GetHeartRateBackgroundMeasurementIntervalInTicks() { + switch (settings.GetHeartRateBackgroundMeasurementInterval()) { + case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenSeconds: + return 10 * 1000; + case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtySeconds: + return 30 * 1000; + case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::OneMinute: + return 60 * 1000; + case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::FiveMinutes: + return 5 * 60 * 1000; + case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenMinutes: + return 10 * 60 * 1000; + case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtyMinutes: + return 30 * 60 * 1000; + default: + return 0; + } +} + +bool HeartRateTask::IsContinuosModeActivated() { + return settings.GetHeartRateBackgroundMeasurementInterval() == + Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::Continuous; +} + +bool HeartRateTask::IsBackgroundMeasurementActivated() { + return settings.GetHeartRateBackgroundMeasurementInterval() != + Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::Off; } \ No newline at end of file diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 80b6abc8..0361c2ec 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -39,6 +39,10 @@ namespace Pinetime { void HandleSensorData(int* lastBpm); int CurrentTaskDelay(); + uint32_t GetHeartRateBackgroundMeasurementIntervalInTicks(); + bool IsContinuosModeActivated(); + bool IsBackgroundMeasurementActivated(); + TaskHandle_t taskHandle; QueueHandle_t messageQueue; States state = States::Running; From a2edd931ecdd020abb2d84025ba7e4765c01456e Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 31 Mar 2023 10:00:56 +0200 Subject: [PATCH 011/114] add heart rate measurments in the background --- src/heartratetask/HeartRateTask.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 0361c2ec..29f593ee 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -7,6 +7,8 @@ #define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz +#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 Minutes assuming 1 Hz + namespace Pinetime { namespace Drivers { class Hrs3300; @@ -43,6 +45,10 @@ namespace Pinetime { bool IsContinuosModeActivated(); bool IsBackgroundMeasurementActivated(); + void HandleBackgroundWaiting(); + void HandleSensorData(); + int CurrentTaskDelay(); + TaskHandle_t taskHandle; QueueHandle_t messageQueue; States state = States::Running; From f94c0740648a6770dd087e270c54eb9f0e9edc79 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 11 May 2023 23:47:31 +0200 Subject: [PATCH 012/114] rebase on main --- src/heartratetask/HeartRateTask.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 29f593ee..e08d29d0 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -46,7 +46,7 @@ namespace Pinetime { bool IsBackgroundMeasurementActivated(); void HandleBackgroundWaiting(); - void HandleSensorData(); + void HandleSensorData(int* lastBpm); int CurrentTaskDelay(); TaskHandle_t taskHandle; From eeaf5374d4d1cfe427c4aa7e883c8d830bb29967 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 25 May 2023 23:41:26 +0200 Subject: [PATCH 013/114] stop background after 30s of no data from the heart rate sensor --- src/heartratetask/HeartRateTask.cpp | 4 ++++ src/heartratetask/HeartRateTask.h | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 56439e93..3ee04be9 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -154,6 +154,10 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { state = States::BackgroundWaiting; StartWaiting(); } + if (bpm == 0 && state == States::BackgroundMeasuring && xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { + state = States::BackgroundWaiting; + StartWaiting(); + } } int HeartRateTask::CurrentTaskDelay() { diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index e08d29d0..85ccb601 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -7,7 +7,8 @@ #define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz -#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 Minutes assuming 1 Hz +#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz +#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz namespace Pinetime { namespace Drivers { From 69578a679aabedc2a66634b850f4396cfb4ab8dc Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 7 Jul 2023 23:20:41 +0200 Subject: [PATCH 014/114] properly format using clang-format --- src/heartratetask/HeartRateTask.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 85ccb601..36754856 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -7,8 +7,8 @@ #define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz -#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz -#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz +#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz +#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz namespace Pinetime { namespace Drivers { From 04ed068ff958f0107544bdd63442705e2930c85f Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 25 Aug 2023 02:10:45 +0200 Subject: [PATCH 015/114] add settings screen to choose heartrate measurement background --- src/heartratetask/HeartRateTask.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 36754856..9dea9e79 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -7,9 +7,6 @@ #define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz -#define DURATION_BETWEEN_BACKGROUND_MEASUREMENTS 5 * 60 * 1000 // 5 minutes assuming 1 Hz -#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz - namespace Pinetime { namespace Drivers { class Hrs3300; From 520e50901a770039db32b110a8db7167db82cdc9 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 1 Dec 2023 14:18:09 +0100 Subject: [PATCH 016/114] fix rebase mistakes --- src/heartratetask/HeartRateTask.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 9dea9e79..0361c2ec 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -43,10 +43,6 @@ namespace Pinetime { bool IsContinuosModeActivated(); bool IsBackgroundMeasurementActivated(); - void HandleBackgroundWaiting(); - void HandleSensorData(int* lastBpm); - int CurrentTaskDelay(); - TaskHandle_t taskHandle; QueueHandle_t messageQueue; States state = States::Running; From 50d88bbe8481ece1da697d4564e29f96233547c3 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 1 Dec 2023 17:15:24 +0100 Subject: [PATCH 017/114] bump settings version, fix types --- .../screens/settings/SettingHeartRate.cpp | 5 ++-- .../screens/settings/SettingHeartRate.h | 3 +-- src/heartratetask/HeartRateTask.cpp | 24 +++++++++---------- src/heartratetask/HeartRateTask.h | 6 ++--- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/displayapp/screens/settings/SettingHeartRate.cpp b/src/displayapp/screens/settings/SettingHeartRate.cpp index d3da19b2..7d8206cd 100644 --- a/src/displayapp/screens/settings/SettingHeartRate.cpp +++ b/src/displayapp/screens/settings/SettingHeartRate.cpp @@ -1,6 +1,5 @@ #include "displayapp/screens/settings/SettingHeartRate.h" #include -#include "displayapp/DisplayApp.h" #include "displayapp/screens/Styles.h" #include "displayapp/screens/Screen.h" #include "displayapp/screens/Symbols.h" @@ -18,8 +17,8 @@ namespace { constexpr std::array SettingHeartRate::options; -SettingHeartRate::SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) - : app {app}, settingsController {settingsController} { +SettingHeartRate::SettingHeartRate(Pinetime::Controllers::Settings& settingsController) + : settingsController {settingsController} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); diff --git a/src/displayapp/screens/settings/SettingHeartRate.h b/src/displayapp/screens/settings/SettingHeartRate.h index 40eff744..3cb08907 100644 --- a/src/displayapp/screens/settings/SettingHeartRate.h +++ b/src/displayapp/screens/settings/SettingHeartRate.h @@ -21,13 +21,12 @@ namespace Pinetime { class SettingHeartRate : public Screen { public: - SettingHeartRate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settings); + SettingHeartRate(Pinetime::Controllers::Settings& settings); ~SettingHeartRate() override; void UpdateSelected(lv_obj_t* object, lv_event_t event); private: - DisplayApp* app; Pinetime::Controllers::Settings& settingsController; static constexpr std::array options = {{ diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 3ee04be9..1d1f7952 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -29,7 +29,7 @@ void HeartRateTask::Work() { int lastBpm = 0; while (true) { - auto delay = CurrentTaskDelay(); + TickType_t delay = CurrentTaskDelay(); Messages msg; if (xQueueReceive(messageQueue, &msg, delay) == pdTRUE) { @@ -160,34 +160,34 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { } } -int HeartRateTask::CurrentTaskDelay() { +TickType_t HeartRateTask::CurrentTaskDelay() { switch (state) { case States::Measuring: case States::BackgroundMeasuring: return ppg.deltaTms; case States::Running: - return 100; + return 100 * pdMS_TO_TICKS; case States::BackgroundWaiting: - return 10000; + return 10000 * pdMS_TO_TICKS; default: return portMAX_DELAY; } } -uint32_t HeartRateTask::GetHeartRateBackgroundMeasurementIntervalInTicks() { +TickType_t HeartRateTask::GetHeartRateBackgroundMeasurementIntervalInTicks() { switch (settings.GetHeartRateBackgroundMeasurementInterval()) { case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenSeconds: - return 10 * 1000; + return 10 * pdMS_TO_TICKS; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtySeconds: - return 30 * 1000; + return 30 * pdMS_TO_TICKS; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::OneMinute: - return 60 * 1000; + return 60 * pdMS_TO_TICKS; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::FiveMinutes: - return 5 * 60 * 1000; + return 5 * 60 * pdMS_TO_TICKS; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenMinutes: - return 10 * 60 * 1000; + return 10 * 60 * pdMS_TO_TICKS; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtyMinutes: - return 30 * 60 * 1000; + return 30 * 60 * pdMS_TO_TICKS; default: return 0; } @@ -201,4 +201,4 @@ bool HeartRateTask::IsContinuosModeActivated() { bool HeartRateTask::IsBackgroundMeasurementActivated() { return settings.GetHeartRateBackgroundMeasurementInterval() != Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::Off; -} \ No newline at end of file +} diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 0361c2ec..5321363b 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -5,7 +5,7 @@ #include #include "components/settings/Settings.h" -#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * 1000 // 30 seconds assuming 1 Hz +#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * pdMS_TO_TICKS namespace Pinetime { namespace Drivers { @@ -37,9 +37,9 @@ namespace Pinetime { void HandleBackgroundWaiting(); void HandleSensorData(int* lastBpm); - int CurrentTaskDelay(); + TickType_t CurrentTaskDelay(); - uint32_t GetHeartRateBackgroundMeasurementIntervalInTicks(); + TickType_t GetHeartRateBackgroundMeasurementIntervalInTicks(); bool IsContinuosModeActivated(); bool IsBackgroundMeasurementActivated(); From 4ed4d2cfcdae1fba9553de7a370eec9a1a1c7611 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Fri, 1 Dec 2023 17:22:28 +0100 Subject: [PATCH 018/114] use pdMS_TO_TICKS correctly, format using clang-format --- .../screens/settings/SettingHeartRate.cpp | 3 +-- src/heartratetask/HeartRateTask.cpp | 19 ++++++++++--------- src/heartratetask/HeartRateTask.h | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/displayapp/screens/settings/SettingHeartRate.cpp b/src/displayapp/screens/settings/SettingHeartRate.cpp index 7d8206cd..fdba9af1 100644 --- a/src/displayapp/screens/settings/SettingHeartRate.cpp +++ b/src/displayapp/screens/settings/SettingHeartRate.cpp @@ -17,8 +17,7 @@ namespace { constexpr std::array SettingHeartRate::options; -SettingHeartRate::SettingHeartRate(Pinetime::Controllers::Settings& settingsController) - : settingsController {settingsController} { +SettingHeartRate::SettingHeartRate(Pinetime::Controllers::Settings& settingsController) : settingsController {settingsController} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 1d1f7952..a3baa7d2 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -154,7 +154,8 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { state = States::BackgroundWaiting; StartWaiting(); } - if (bpm == 0 && state == States::BackgroundMeasuring && xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { + if (bpm == 0 && state == States::BackgroundMeasuring && + xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { state = States::BackgroundWaiting; StartWaiting(); } @@ -166,9 +167,9 @@ TickType_t HeartRateTask::CurrentTaskDelay() { case States::BackgroundMeasuring: return ppg.deltaTms; case States::Running: - return 100 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(100); case States::BackgroundWaiting: - return 10000 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(10000); default: return portMAX_DELAY; } @@ -177,17 +178,17 @@ TickType_t HeartRateTask::CurrentTaskDelay() { TickType_t HeartRateTask::GetHeartRateBackgroundMeasurementIntervalInTicks() { switch (settings.GetHeartRateBackgroundMeasurementInterval()) { case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenSeconds: - return 10 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(10 * 1000); case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtySeconds: - return 30 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(30 * 1000); case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::OneMinute: - return 60 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(60 * 1000); case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::FiveMinutes: - return 5 * 60 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(5 * 60 * 1000); case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenMinutes: - return 10 * 60 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(10 * 60 * 1000); case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtyMinutes: - return 30 * 60 * pdMS_TO_TICKS; + return pdMS_TO_TICKS(30 * 60 * 1000); default: return 0; } diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 5321363b..47b86d60 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -5,7 +5,7 @@ #include #include "components/settings/Settings.h" -#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED 30 * pdMS_TO_TICKS +#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED pdMS_TO_TICKS(30 * 1000) namespace Pinetime { namespace Drivers { From d78f26201b44b857f6dbf404016f2c04863063f1 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Mon, 11 Dec 2023 12:18:16 +0100 Subject: [PATCH 019/114] fix DisplayApp.cpp --- src/displayapp/DisplayApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 94975db8..6ccd4fdd 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -508,7 +508,7 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio currentScreen = std::make_unique(settingsController); break; case Apps::SettingHeartRate: - currentScreen = std::make_unique(this, settingsController); + currentScreen = std::make_unique(settingsController); break; case Apps::SettingDisplay: currentScreen = std::make_unique(this, settingsController); From 3b432cd3106669c6e36a167c5d9392f9cfd2cc2c Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Tue, 2 Jan 2024 16:07:35 +0100 Subject: [PATCH 020/114] fix issues after rebase on main --- src/displayapp/apps/Apps.h.in | 1 + src/displayapp/screens/settings/Settings.h | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in index 2104a267..a74ca7a8 100644 --- a/src/displayapp/apps/Apps.h.in +++ b/src/displayapp/apps/Apps.h.in @@ -35,6 +35,7 @@ namespace Pinetime { SettingWatchFace, SettingTimeFormat, SettingWeatherFormat, + SettingHeartRate, SettingDisplay, SettingWakeUp, SettingSteps, diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index 0098b304..d4e2a2d7 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -41,16 +41,14 @@ namespace Pinetime { {Symbols::heartBeat, "Heartrate", Apps::SettingHeartRate}, {Symbols::clock, "Date&Time", Apps::SettingSetDateTime}, {Symbols::cloudSunRain, "Weather", Apps::SettingWeatherFormat}, - {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, + {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, {Symbols::clock, "Chimes", Apps::SettingChimes}, {Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, + {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, - {Symbols::list, "About", Apps::SysInfo}, - - {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, From ffc5f96d9a9ccd7448c1ae200e66aee0b1d6c228 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 11 Apr 2024 00:01:10 +0200 Subject: [PATCH 021/114] bump settings version --- src/components/settings/Settings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 94fde265..6f7f7369 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -308,7 +308,7 @@ namespace Pinetime { private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0007; + static constexpr uint32_t settingsVersion = 0x0008; struct SettingsData { uint32_t version = settingsVersion; From 7cf4f6e1ece28be8dcb60a1d71300da982bac08b Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 11 Apr 2024 00:35:11 +0200 Subject: [PATCH 022/114] fix bug where settings open pair pin screen --- src/displayapp/screens/settings/Settings.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index d4e2a2d7..fbe89b53 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -48,11 +48,7 @@ namespace Pinetime { {Symbols::check, "Firmware", Apps::FirmwareValidation}, {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, - {Symbols::list, "About", Apps::SysInfo}, - {Symbols::none, "None", Apps::None}, - {Symbols::none, "None", Apps::None}, - - // {Symbols::none, "None", Apps::None}, + {Symbols::list, "About", Apps::SysInfo} }}; ScreenList screens; From 6a0276f164547a1f256ec8f6d4f1a95e83a56b56 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 11 Jul 2024 14:55:17 +0200 Subject: [PATCH 023/114] fix settings screen --- src/displayapp/screens/settings/Settings.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index fbe89b53..4f1082ad 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -48,7 +48,12 @@ namespace Pinetime { {Symbols::check, "Firmware", Apps::FirmwareValidation}, {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, - {Symbols::list, "About", Apps::SysInfo} + {Symbols::list, "About", Apps::SysInfo}, + + // {Symbols::none, "None", Apps::None}, + // {Symbols::none, "None", Apps::None}, + // {Symbols::none, "None", Apps::None}, + // {Symbols::none, "None", Apps::None}, }}; ScreenList screens; From 616926345ea98f494df256f85dde199b0cf48423 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 11 Jul 2024 14:56:06 +0200 Subject: [PATCH 024/114] refactor heartrate task (switch cases, comments with explanation) --- src/heartratetask/HeartRateTask.cpp | 135 +++++++++++++++++++--------- src/heartratetask/HeartRateTask.h | 33 ++++++- 2 files changed, 122 insertions(+), 46 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index a3baa7d2..ba34c074 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -26,7 +26,7 @@ void HeartRateTask::Process(void* instance) { } void HeartRateTask::Work() { - int lastBpm = 0; + lastBpm = 0; while (true) { TickType_t delay = CurrentTaskDelay(); @@ -35,41 +35,16 @@ void HeartRateTask::Work() { if (xQueueReceive(messageQueue, &msg, delay) == pdTRUE) { switch (msg) { case Messages::GoToSleep: - if (state == States::Running) { - state = States::Idle; - } else if (state == States::Measuring) { - state = States::BackgroundWaiting; - StartWaiting(); - } + HandleGoToSleep(); break; case Messages::WakeUp: - if (state == States::Idle) { - state = States::Running; - } else if (state == States::BackgroundMeasuring) { - state = States::Measuring; - } else if (state == States::BackgroundWaiting) { - state = States::Measuring; - StartMeasurement(); - } + HandleWakeUp(); break; case Messages::StartMeasurement: - if (state == States::Measuring || state == States::BackgroundMeasuring) { - break; - } - state = States::Measuring; - lastBpm = 0; - StartMeasurement(); + HandleStartMeasurement(); break; case Messages::StopMeasurement: - if (state == States::Running || state == States::Idle) { - break; - } - if (state == States::Measuring) { - state = States::Running; - } else if (state == States::BackgroundMeasuring) { - state = States::Idle; - } - StopMeasurement(); + HandleStopMeasurement(); break; } } @@ -106,6 +81,76 @@ void HeartRateTask::StartWaiting() { backgroundWaitingStart = xTaskGetTickCount(); } +void HeartRateTask::HandleGoToSleep() { + switch (state) { + case States::Running: + state = States::Idle; + break; + case States::Measuring: + state = States::BackgroundWaiting; + StartWaiting(); + break; + case States::Idle: + case States::BackgroundWaiting: + case States::BackgroundMeasuring: + // shouldn't happen -> ignore + break; + } +} + +void HeartRateTask::HandleWakeUp() { + switch (state) { + case States::Idle: + state = States::Running; + break; + case States::BackgroundMeasuring: + state = States::Measuring; + break; + case States::BackgroundWaiting: + state = States::Measuring; + StartMeasurement(); + break; + case States::Running: + case States::Measuring: + // shouldn't happen -> ignore + break; + } +} + +void HeartRateTask::HandleStartMeasurement() { + switch (state) { + case States::Idle: + case States::Running: + state = States::Measuring; + lastBpm = 0; + StartMeasurement(); + break; + case States::Measuring: + case States::BackgroundMeasuring: + case States::BackgroundWaiting: + // shouldn't happen -> ignore + break; + } +} + +void HeartRateTask::HandleStopMeasurement() { + switch (state) { + case States::Measuring: + state = States::Running; + StopMeasurement(); + break; + case States::BackgroundMeasuring: + case States::BackgroundWaiting: + state = States::Idle; + StopMeasurement(); + break; + case States::Running: + case States::Idle: + // shouldn't happen -> ignore + break; + } +} + void HeartRateTask::HandleBackgroundWaiting() { if (!IsBackgroundMeasurementActivated()) { return; @@ -150,12 +195,7 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { } TickType_t ticksSinceMeasurementStart = xTaskGetTickCount() - measurementStart; if (bpm == 0 && state == States::BackgroundMeasuring && !IsContinuosModeActivated() && - ticksSinceMeasurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { - state = States::BackgroundWaiting; - StartWaiting(); - } - if (bpm == 0 && state == States::BackgroundMeasuring && - xTaskGetTickCount() - measurementStart >= DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED) { + ticksSinceMeasurementStart >= DURATION_UNTIL_BACKGROUND_MEASUREMENT_IS_STOPPED) { state = States::BackgroundWaiting; StartWaiting(); } @@ -176,22 +216,31 @@ TickType_t HeartRateTask::CurrentTaskDelay() { } TickType_t HeartRateTask::GetHeartRateBackgroundMeasurementIntervalInTicks() { + int ms; switch (settings.GetHeartRateBackgroundMeasurementInterval()) { case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenSeconds: - return pdMS_TO_TICKS(10 * 1000); + ms = 10 * 1000; + break; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtySeconds: - return pdMS_TO_TICKS(30 * 1000); + ms = 30 * 1000; + break; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::OneMinute: - return pdMS_TO_TICKS(60 * 1000); + ms = 60 * 1000; + break; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::FiveMinutes: - return pdMS_TO_TICKS(5 * 60 * 1000); + ms = 5 * 60 * 1000; + break; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::TenMinutes: - return pdMS_TO_TICKS(10 * 60 * 1000); + ms = 10 * 60 * 1000; + break; case Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::ThirtyMinutes: - return pdMS_TO_TICKS(30 * 60 * 1000); + ms = 30 * 60 * 1000; + break; default: - return 0; + ms = 0; + break; } + return pdMS_TO_TICKS(ms); } bool HeartRateTask::IsContinuosModeActivated() { diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 47b86d60..a8fa8b60 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -5,7 +5,7 @@ #include #include "components/settings/Settings.h" -#define DURATION_UNTIL_BACKGROUND_MEASURMENT_IS_STOPPED pdMS_TO_TICKS(30 * 1000) +#define DURATION_UNTIL_BACKGROUND_MEASUREMENT_IS_STOPPED pdMS_TO_TICKS(30 * 1000) namespace Pinetime { namespace Drivers { @@ -19,8 +19,29 @@ namespace Pinetime { namespace Applications { class HeartRateTask { public: - enum class Messages : uint8_t { GoToSleep, WakeUp, StartMeasurement, StopMeasurement }; - enum class States { Idle, Running, Measuring, BackgroundWaiting, BackgroundMeasuring }; + enum class Messages : uint8_t { + // Screen gets turned off + GoToSleep, + // Screen gets turned on + WakeUp, + // Start button pressed + StartMeasurement, + // Stop button pressed + StopMeasurement + }; + + enum class States { + // Screen turned off, heartrate not measured + Idle, + // Screen turned on, heartrate app open, heartrate not measured + Running, + // Screen turned on, heartrate app open, heartrate actively measured + Measuring, + // Screen turned off, heartrate task is waiting until the next measurement should be started + BackgroundWaiting, + // Screen turned off, heartrate actively measured + BackgroundMeasuring + }; explicit HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller, @@ -35,6 +56,11 @@ namespace Pinetime { void StopMeasurement(); void StartWaiting(); + void HandleGoToSleep(); + void HandleWakeUp(); + void HandleStartMeasurement(); + void HandleStopMeasurement(); + void HandleBackgroundWaiting(); void HandleSensorData(int* lastBpm); TickType_t CurrentTaskDelay(); @@ -52,6 +78,7 @@ namespace Pinetime { Controllers::Ppg ppg; TickType_t backgroundWaitingStart = 0; TickType_t measurementStart = 0; + int lastBpm = 0; }; } From e6f0a8920229ed438d0c1fee71c4ca4188dde7b6 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Thu, 11 Jul 2024 15:53:18 +0200 Subject: [PATCH 025/114] reduce RAM size --- src/heartratetask/HeartRateTask.cpp | 39 +++++++++++++++-------------- src/heartratetask/HeartRateTask.h | 4 +-- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index ba34c074..2ed60742 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -5,6 +5,21 @@ using namespace Pinetime::Applications; +TickType_t CurrentTaskDelay(HeartRateTask::States state, TickType_t ppgDeltaTms) { + switch (state) { + case HeartRateTask::States::Measuring: + case HeartRateTask::States::BackgroundMeasuring: + return ppgDeltaTms; + case HeartRateTask::States::Running: + return pdMS_TO_TICKS(100); + case HeartRateTask::States::BackgroundWaiting: + return pdMS_TO_TICKS(10000); + default: + return portMAX_DELAY; + } +} + + HeartRateTask::HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller, Controllers::Settings& settings) @@ -26,10 +41,10 @@ void HeartRateTask::Process(void* instance) { } void HeartRateTask::Work() { - lastBpm = 0; + int lastBpm = 0; while (true) { - TickType_t delay = CurrentTaskDelay(); + TickType_t delay = CurrentTaskDelay(state, ppg.deltaTms); Messages msg; if (xQueueReceive(messageQueue, &msg, delay) == pdTRUE) { @@ -41,7 +56,7 @@ void HeartRateTask::Work() { HandleWakeUp(); break; case Messages::StartMeasurement: - HandleStartMeasurement(); + HandleStartMeasurement(&lastBpm); break; case Messages::StopMeasurement: HandleStopMeasurement(); @@ -117,12 +132,12 @@ void HeartRateTask::HandleWakeUp() { } } -void HeartRateTask::HandleStartMeasurement() { +void HeartRateTask::HandleStartMeasurement(int* lastBpm) { switch (state) { case States::Idle: case States::Running: state = States::Measuring; - lastBpm = 0; + *lastBpm = 0; StartMeasurement(); break; case States::Measuring: @@ -201,20 +216,6 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { } } -TickType_t HeartRateTask::CurrentTaskDelay() { - switch (state) { - case States::Measuring: - case States::BackgroundMeasuring: - return ppg.deltaTms; - case States::Running: - return pdMS_TO_TICKS(100); - case States::BackgroundWaiting: - return pdMS_TO_TICKS(10000); - default: - return portMAX_DELAY; - } -} - TickType_t HeartRateTask::GetHeartRateBackgroundMeasurementIntervalInTicks() { int ms; switch (settings.GetHeartRateBackgroundMeasurementInterval()) { diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index a8fa8b60..2b273061 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -58,12 +58,11 @@ namespace Pinetime { void HandleGoToSleep(); void HandleWakeUp(); - void HandleStartMeasurement(); + void HandleStartMeasurement(int* lastBpm); void HandleStopMeasurement(); void HandleBackgroundWaiting(); void HandleSensorData(int* lastBpm); - TickType_t CurrentTaskDelay(); TickType_t GetHeartRateBackgroundMeasurementIntervalInTicks(); bool IsContinuosModeActivated(); @@ -78,7 +77,6 @@ namespace Pinetime { Controllers::Ppg ppg; TickType_t backgroundWaitingStart = 0; TickType_t measurementStart = 0; - int lastBpm = 0; }; } From 78af44eafe1c52bf962176ff47d0271272b7858a Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Wed, 17 Jul 2024 20:18:31 +0200 Subject: [PATCH 026/114] keep measuring when transitioning to background Co-authored-by: Simon Effenberg --- src/heartratetask/HeartRateTask.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 2ed60742..f79ff6cc 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -102,8 +102,7 @@ void HeartRateTask::HandleGoToSleep() { state = States::Idle; break; case States::Measuring: - state = States::BackgroundWaiting; - StartWaiting(); + state = States::BackgroundMeasuring; break; case States::Idle: case States::BackgroundWaiting: From cedca795e283e56827006af589115c49ef9757de Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Sat, 31 Aug 2024 00:39:13 +0200 Subject: [PATCH 027/114] use switch case --- heartrate_statemachine_extended_ascii.txt | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 heartrate_statemachine_extended_ascii.txt diff --git a/heartrate_statemachine_extended_ascii.txt b/heartrate_statemachine_extended_ascii.txt new file mode 100644 index 00000000..1c5ad7ae --- /dev/null +++ b/heartrate_statemachine_extended_ascii.txt @@ -0,0 +1,25 @@ + *** Hearrate task state machine *** + + + GoToSleep StopMeasurement + ┌───────────────┐ ┌─────────────────────────────┐ + ▼ │ ▼ │ + ┌──────┐ ┌──┴──────┐ ┌─────┴─────┐ + │ │ WakeUp │ │ StartMeasurement │ │ + │ Idle ├───────►│ Running ├─────────────────►│ Measuring │ + │ │ │ │ │ │ + └──────┘ └─────────┘ └─────┬─────┘ + ▲ ▲ │ + │ StopMeasurement │ │ + ├──────────────────────────────────┐ │ │ GoToSleep + │ │ WakeUp │ │ + │ ┌────────────────────────────┼─────────┤ │ + │ │ │ │ ▼ + ┌──┴─────┴──────────┐ ┌┴─────────┴──────────┐ + │ │ measured │ │ + │ BackgroundWaiting │◄───────────────┤ BackgroundMeasuring │ + │ │ │ │ + └┬─────────────────┬┘ └─────────────────────┘ + │ ▲ │ ▲ + └────────┘ └────────────────────────────┘ +wait time < interval wait time >= interval From 71b31c78fbe5393705f1cf27423e36aed07a5be4 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Sat, 31 Aug 2024 00:40:58 +0200 Subject: [PATCH 028/114] use switch case --- src/heartratetask/HeartRateTask.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index f79ff6cc..fc28bb6e 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -64,10 +64,18 @@ void HeartRateTask::Work() { } } - if (state == States::BackgroundWaiting) { - HandleBackgroundWaiting(); - } else if (state == States::BackgroundMeasuring || state == States::Measuring) { - HandleSensorData(&lastBpm); + switch (state) { + case States::BackgroundWaiting: + HandleBackgroundWaiting(); + break; + case States::BackgroundMeasuring: + case States::Measuring: + HandleSensorData(&lastBpm); + break; + case States::Idle: + case States::Running: + // nothing to do -> ignore + break; } } } From b846547f2fabe5653cdc15795e963f0a7f66c4ea Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Sat, 31 Aug 2024 00:42:51 +0200 Subject: [PATCH 029/114] remove unnecessary file --- heartrate_statemachine_extended_ascii.txt | 25 ----------------------- 1 file changed, 25 deletions(-) delete mode 100644 heartrate_statemachine_extended_ascii.txt diff --git a/heartrate_statemachine_extended_ascii.txt b/heartrate_statemachine_extended_ascii.txt deleted file mode 100644 index 1c5ad7ae..00000000 --- a/heartrate_statemachine_extended_ascii.txt +++ /dev/null @@ -1,25 +0,0 @@ - *** Hearrate task state machine *** - - - GoToSleep StopMeasurement - ┌───────────────┐ ┌─────────────────────────────┐ - ▼ │ ▼ │ - ┌──────┐ ┌──┴──────┐ ┌─────┴─────┐ - │ │ WakeUp │ │ StartMeasurement │ │ - │ Idle ├───────►│ Running ├─────────────────►│ Measuring │ - │ │ │ │ │ │ - └──────┘ └─────────┘ └─────┬─────┘ - ▲ ▲ │ - │ StopMeasurement │ │ - ├──────────────────────────────────┐ │ │ GoToSleep - │ │ WakeUp │ │ - │ ┌────────────────────────────┼─────────┤ │ - │ │ │ │ ▼ - ┌──┴─────┴──────────┐ ┌┴─────────┴──────────┐ - │ │ measured │ │ - │ BackgroundWaiting │◄───────────────┤ BackgroundMeasuring │ - │ │ │ │ - └┬─────────────────┬┘ └─────────────────────┘ - │ ▲ │ ▲ - └────────┘ └────────────────────────────┘ -wait time < interval wait time >= interval From 9501d3606094dcb8550e72787b20bc2685316513 Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Sat, 31 Aug 2024 00:54:05 +0200 Subject: [PATCH 030/114] use better state names --- src/heartratetask/HeartRateTask.cpp | 86 ++++++++++++++--------------- src/heartratetask/HeartRateTask.h | 21 ++----- 2 files changed, 49 insertions(+), 58 deletions(-) diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index fc28bb6e..b19f6fcd 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -7,12 +7,12 @@ using namespace Pinetime::Applications; TickType_t CurrentTaskDelay(HeartRateTask::States state, TickType_t ppgDeltaTms) { switch (state) { - case HeartRateTask::States::Measuring: - case HeartRateTask::States::BackgroundMeasuring: + case HeartRateTask::States::ScreenOnAndMeasuring: + case HeartRateTask::States::ScreenOffAndMeasuring: return ppgDeltaTms; - case HeartRateTask::States::Running: + case HeartRateTask::States::ScreenOnAndStopped: return pdMS_TO_TICKS(100); - case HeartRateTask::States::BackgroundWaiting: + case HeartRateTask::States::ScreenOffAndWaiting: return pdMS_TO_TICKS(10000); default: return portMAX_DELAY; @@ -65,15 +65,15 @@ void HeartRateTask::Work() { } switch (state) { - case States::BackgroundWaiting: + case States::ScreenOffAndWaiting: HandleBackgroundWaiting(); break; - case States::BackgroundMeasuring: - case States::Measuring: + case States::ScreenOffAndMeasuring: + case States::ScreenOnAndMeasuring: HandleSensorData(&lastBpm); break; - case States::Idle: - case States::Running: + case States::ScreenOffAndStopped: + case States::ScreenOnAndStopped: // nothing to do -> ignore break; } @@ -106,15 +106,15 @@ void HeartRateTask::StartWaiting() { void HeartRateTask::HandleGoToSleep() { switch (state) { - case States::Running: - state = States::Idle; + case States::ScreenOnAndStopped: + state = States::ScreenOffAndStopped; break; - case States::Measuring: - state = States::BackgroundMeasuring; + case States::ScreenOnAndMeasuring: + state = States::ScreenOffAndMeasuring; break; - case States::Idle: - case States::BackgroundWaiting: - case States::BackgroundMeasuring: + case States::ScreenOffAndStopped: + case States::ScreenOffAndWaiting: + case States::ScreenOffAndMeasuring: // shouldn't happen -> ignore break; } @@ -122,18 +122,18 @@ void HeartRateTask::HandleGoToSleep() { void HeartRateTask::HandleWakeUp() { switch (state) { - case States::Idle: - state = States::Running; + case States::ScreenOffAndStopped: + state = States::ScreenOnAndStopped; break; - case States::BackgroundMeasuring: - state = States::Measuring; + case States::ScreenOffAndMeasuring: + state = States::ScreenOnAndMeasuring; break; - case States::BackgroundWaiting: - state = States::Measuring; + case States::ScreenOffAndWaiting: + state = States::ScreenOnAndMeasuring; StartMeasurement(); break; - case States::Running: - case States::Measuring: + case States::ScreenOnAndStopped: + case States::ScreenOnAndMeasuring: // shouldn't happen -> ignore break; } @@ -141,15 +141,15 @@ void HeartRateTask::HandleWakeUp() { void HeartRateTask::HandleStartMeasurement(int* lastBpm) { switch (state) { - case States::Idle: - case States::Running: - state = States::Measuring; + case States::ScreenOffAndStopped: + case States::ScreenOnAndStopped: + state = States::ScreenOnAndMeasuring; *lastBpm = 0; StartMeasurement(); break; - case States::Measuring: - case States::BackgroundMeasuring: - case States::BackgroundWaiting: + case States::ScreenOnAndMeasuring: + case States::ScreenOffAndMeasuring: + case States::ScreenOffAndWaiting: // shouldn't happen -> ignore break; } @@ -157,17 +157,17 @@ void HeartRateTask::HandleStartMeasurement(int* lastBpm) { void HeartRateTask::HandleStopMeasurement() { switch (state) { - case States::Measuring: - state = States::Running; + case States::ScreenOnAndMeasuring: + state = States::ScreenOnAndStopped; StopMeasurement(); break; - case States::BackgroundMeasuring: - case States::BackgroundWaiting: - state = States::Idle; + case States::ScreenOffAndMeasuring: + case States::ScreenOffAndWaiting: + state = States::ScreenOffAndStopped; StopMeasurement(); break; - case States::Running: - case States::Idle: + case States::ScreenOnAndStopped: + case States::ScreenOffAndStopped: // shouldn't happen -> ignore break; } @@ -180,7 +180,7 @@ void HeartRateTask::HandleBackgroundWaiting() { TickType_t ticksSinceWaitingStart = xTaskGetTickCount() - backgroundWaitingStart; if (ticksSinceWaitingStart >= GetHeartRateBackgroundMeasurementIntervalInTicks()) { - state = States::BackgroundMeasuring; + state = States::ScreenOffAndMeasuring; StartMeasurement(); } } @@ -207,18 +207,18 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { if (bpm != 0) { *lastBpm = bpm; controller.Update(Controllers::HeartRateController::States::Running, bpm); - if (state == States::Measuring || IsContinuosModeActivated()) { + if (state == States::ScreenOnAndMeasuring || IsContinuosModeActivated()) { return; } - if (state == States::BackgroundMeasuring) { - state = States::BackgroundWaiting; + if (state == States::ScreenOffAndMeasuring) { + state = States::ScreenOffAndWaiting; StartWaiting(); } } TickType_t ticksSinceMeasurementStart = xTaskGetTickCount() - measurementStart; - if (bpm == 0 && state == States::BackgroundMeasuring && !IsContinuosModeActivated() && + if (bpm == 0 && state == States::ScreenOffAndMeasuring && !IsContinuosModeActivated() && ticksSinceMeasurementStart >= DURATION_UNTIL_BACKGROUND_MEASUREMENT_IS_STOPPED) { - state = States::BackgroundWaiting; + state = States::ScreenOffAndWaiting; StartWaiting(); } } diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 2b273061..511e34f3 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -20,27 +20,18 @@ namespace Pinetime { class HeartRateTask { public: enum class Messages : uint8_t { - // Screen gets turned off GoToSleep, - // Screen gets turned on WakeUp, - // Start button pressed StartMeasurement, - // Stop button pressed StopMeasurement }; enum class States { - // Screen turned off, heartrate not measured - Idle, - // Screen turned on, heartrate app open, heartrate not measured - Running, - // Screen turned on, heartrate app open, heartrate actively measured - Measuring, - // Screen turned off, heartrate task is waiting until the next measurement should be started - BackgroundWaiting, - // Screen turned off, heartrate actively measured - BackgroundMeasuring + ScreenOnAndStopped, + ScreenOnAndMeasuring, + ScreenOffAndStopped, + ScreenOffAndWaiting, + ScreenOffAndMeasuring }; explicit HeartRateTask(Drivers::Hrs3300& heartRateSensor, @@ -70,7 +61,7 @@ namespace Pinetime { TaskHandle_t taskHandle; QueueHandle_t messageQueue; - States state = States::Running; + States state = States::ScreenOnAndStopped; Drivers::Hrs3300& heartRateSensor; Controllers::HeartRateController& controller; Controllers::Settings& settings; From 7df39994abbccdb19385c22ba75b731d29bc696d Mon Sep 17 00:00:00 2001 From: Patric Gruber Date: Sat, 31 Aug 2024 20:49:19 +0200 Subject: [PATCH 031/114] integrate code review --- src/components/settings/Settings.cpp | 1 - src/heartratetask/HeartRateTask.cpp | 10 ++++------ src/heartratetask/HeartRateTask.h | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/components/settings/Settings.cpp b/src/components/settings/Settings.cpp index 05ab23d4..49073e1a 100644 --- a/src/components/settings/Settings.cpp +++ b/src/components/settings/Settings.cpp @@ -13,7 +13,6 @@ void Settings::Init() { } void Settings::SaveSettings() { - // verify if is necessary to save if (settingsChanged) { SaveSettingsToFile(); diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index b19f6fcd..0c082a5d 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -10,10 +10,8 @@ TickType_t CurrentTaskDelay(HeartRateTask::States state, TickType_t ppgDeltaTms) case HeartRateTask::States::ScreenOnAndMeasuring: case HeartRateTask::States::ScreenOffAndMeasuring: return ppgDeltaTms; - case HeartRateTask::States::ScreenOnAndStopped: - return pdMS_TO_TICKS(100); case HeartRateTask::States::ScreenOffAndWaiting: - return pdMS_TO_TICKS(10000); + return pdMS_TO_TICKS(1000); default: return portMAX_DELAY; } @@ -207,7 +205,7 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { if (bpm != 0) { *lastBpm = bpm; controller.Update(Controllers::HeartRateController::States::Running, bpm); - if (state == States::ScreenOnAndMeasuring || IsContinuosModeActivated()) { + if (state == States::ScreenOnAndMeasuring || IsContinuousModeActivated()) { return; } if (state == States::ScreenOffAndMeasuring) { @@ -216,7 +214,7 @@ void HeartRateTask::HandleSensorData(int* lastBpm) { } } TickType_t ticksSinceMeasurementStart = xTaskGetTickCount() - measurementStart; - if (bpm == 0 && state == States::ScreenOffAndMeasuring && !IsContinuosModeActivated() && + if (bpm == 0 && state == States::ScreenOffAndMeasuring && !IsContinuousModeActivated() && ticksSinceMeasurementStart >= DURATION_UNTIL_BACKGROUND_MEASUREMENT_IS_STOPPED) { state = States::ScreenOffAndWaiting; StartWaiting(); @@ -251,7 +249,7 @@ TickType_t HeartRateTask::GetHeartRateBackgroundMeasurementIntervalInTicks() { return pdMS_TO_TICKS(ms); } -bool HeartRateTask::IsContinuosModeActivated() { +bool HeartRateTask::IsContinuousModeActivated() { return settings.GetHeartRateBackgroundMeasurementInterval() == Pinetime::Controllers::Settings::HeartRateBackgroundMeasurementInterval::Continuous; } diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 511e34f3..f7d7e38b 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -56,7 +56,7 @@ namespace Pinetime { void HandleSensorData(int* lastBpm); TickType_t GetHeartRateBackgroundMeasurementIntervalInTicks(); - bool IsContinuosModeActivated(); + bool IsContinuousModeActivated(); bool IsBackgroundMeasurementActivated(); TaskHandle_t taskHandle; From a9a36793ad23be8b672f901be7be8d925fae7678 Mon Sep 17 00:00:00 2001 From: Dom Rodriguez Date: Wed, 11 Sep 2024 12:05:25 +0100 Subject: [PATCH 032/114] feat: Introduce Flake for development and builds This PR introduces a Nix flake, allowing for InfiniTime to be built as a Flake, including a FHS development environment. It's derived from #1850 and https://github.com/icewind1991/infinitime-builder/commit/c57c57f3c6a34c86eb816981d9b0ea56af4a09e5. We also introduce `flake-compat`, allowing for non-Flake Nix mahcines to use the project as-is, both for building (`default.nix`), and development (`shell.nix`). Additionally, we introduce `.envrc`, meaning that with `direnv`, the Nix Flake is activated automatically. Fixes #1850. Signed-off-by: Dom Rodriguez --- .envrc | 1 + default.nix | 10 +++++ flake.lock | 42 +++++++++++++++++++ flake.nix | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++ shell.nix | 10 +++++ 5 files changed, 176 insertions(+) create mode 100644 .envrc create mode 100644 default.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 shell.nix diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..3550a30f --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/default.nix b/default.nix new file mode 100644 index 00000000..f620865d --- /dev/null +++ b/default.nix @@ -0,0 +1,10 @@ +(import + ( + let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in + fetchTarball { + url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { src = ./.; } +).defaultNix diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..742baac7 --- /dev/null +++ b/flake.lock @@ -0,0 +1,42 @@ +{ + "nodes": { + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..9c953fe5 --- /dev/null +++ b/flake.nix @@ -0,0 +1,113 @@ +{ + description = "A very basic flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"; + }; + + outputs = { self, ... }@inputs: + let + forAllSystems = function: + inputs.nixpkgs.lib.genAttrs [ + "x86_64-linux" + "aarch64-linux" + ] + (system: function (import inputs.nixpkgs { + inherit system; + config.allowUnfree = true; + })); + in + { + packages = forAllSystems (pkgs: + let + infinitime-nrf5-sdk = pkgs.nrf5-sdk.overrideAttrs (old: { + version = "15.3.0"; + src = pkgs.fetchzip { + url = "https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/sdks/nrf5/binaries/nrf5sdk153059ac345.zip"; + sha256 = "sha256-pfmhbpgVv5x2ju489XcivguwpnofHbgVA7bFUJRTj08="; + }; + }); + in + with pkgs; { + default = stdenv.mkDerivation rec { + name = "infinitime"; + + src = fetchFromGitHub { + owner = "InfiniTimeOrg"; + repo = "InfiniTime"; + rev = "1.14.1"; + hash = "sha256-IrsN+9LgEjgfoRR6H7FhsdLMK+GLxc41IBnSbdpwv/E="; + fetchSubmodules = true; + }; + + nativeBuildInputs = [ + cmake + nodePackages.lv_font_conv + python3 + python3.pkgs.cbor + python3.pkgs.click + python3.pkgs.cryptography + python3.pkgs.intelhex + python3.pkgs.pillow + adafruit-nrfutil + patch + git + ]; + + postPatch = '' + # /usr/bin/env is not available in the build sandbox + substituteInPlace src/displayapp/fonts/generate.py --replace "'/usr/bin/env', 'patch'" "'patch'" + substituteInPlace tools/mcuboot/imgtool.py --replace "/usr/bin/env python3" "${python3}/bin/python3" + ''; + + cmakeFlags = [ + ''-DARM_NONE_EABI_TOOLCHAIN_PATH=${gcc-arm-embedded-10}'' + ''-DNRF5_SDK_PATH=${infinitime-nrf5-sdk}/share/nRF5_SDK'' + ''-DBUILD_DFU=1'' + ''-DBUILD_RESOURCES=1'' + ''-DCMAKE_SOURCE_DIR=${src}'' + ]; + + installPhase = '' + SOURCES_DIR=${src} BUILD_DIR=. OUTPUT_DIR=$out ./post_build.sh + ''; + }; + }); + + devShells = forAllSystems (pkgs: + let + infinitime-nrf5-sdk = pkgs.nrf5-sdk.overrideAttrs (old: { + version = "15.3.0"; + src = pkgs.fetchzip { + url = "https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/sdks/nrf5/binaries/nrf5sdk153059ac345.zip"; + sha256 = "sha256-pfmhbpgVv5x2ju489XcivguwpnofHbgVA7bFUJRTj08="; + }; + }); + in + { + default = + pkgs.buildFHSUserEnv { + name = "infinitime-devenv"; + # build tools + targetPkgs = pkgs: (with pkgs; [ + cmake + nodePackages.lv_font_conv + python3 + python3.pkgs.cbor + python3.pkgs.click + python3.pkgs.cryptography + python3.pkgs.intelhex + adafruit-nrfutil + + (pkgs.writeShellScriptBin "cmake_infinitime" '' + cmake -DARM_NONE_EABI_TOOLCHAIN_PATH="${pkgs.gcc-arm-embedded-10}" \ + -DNRF5_SDK_PATH="${infinitime-nrf5-sdk}/share/nRF5_SDK" \ + "$@" + '') + ]); + }; + }); + }; +} + diff --git a/shell.nix b/shell.nix new file mode 100644 index 00000000..942ce016 --- /dev/null +++ b/shell.nix @@ -0,0 +1,10 @@ +(import + ( + let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in + fetchTarball { + url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { src = ./.; } +).shellNix From fd15fd238d05f669adb6835006b71f7e8cebdfa7 Mon Sep 17 00:00:00 2001 From: "D. Scott Boggs" Date: Sun, 15 Sep 2024 08:43:08 -0400 Subject: [PATCH 033/114] bump settings version --- src/components/settings/Settings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 6f7f7369..f7fe8954 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -308,7 +308,7 @@ namespace Pinetime { private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0008; + static constexpr uint32_t settingsVersion = 0x0009; struct SettingsData { uint32_t version = settingsVersion; From b7cf42156c0cecba7dab44083965325f357ea443 Mon Sep 17 00:00:00 2001 From: "D. Scott Boggs" Date: Sun, 15 Sep 2024 09:30:15 -0400 Subject: [PATCH 034/114] bump version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b5669b0..3250982d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.10) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose Debug or Release") -project(pinetime VERSION 1.14.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.15.0 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 20) From 8abe9d428b8d261da84da430a0fca43d101c02b2 Mon Sep 17 00:00:00 2001 From: "D. Scott Boggs" Date: Sun, 15 Sep 2024 11:57:10 -0400 Subject: [PATCH 035/114] Update flake for v1.15.0 --- flake.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index 9c953fe5..35203e5d 100644 --- a/flake.nix +++ b/flake.nix @@ -33,11 +33,12 @@ default = stdenv.mkDerivation rec { name = "infinitime"; - src = fetchFromGitHub { - owner = "InfiniTimeOrg"; + src = fetchFromGitea { + domain = "git.techwork.zone"; + owner = "scott"; repo = "InfiniTime"; - rev = "1.14.1"; - hash = "sha256-IrsN+9LgEjgfoRR6H7FhsdLMK+GLxc41IBnSbdpwv/E="; + rev = "b7cf42156c0cecba7dab44083965325f357ea443"; + hash = "sha256-wpqubNAbujbtNyGETq4v8h4B3OhFNM5lnrTgozLe6h8="; fetchSubmodules = true; }; From d689e5e874493d092864320d875d52c8d02ab172 Mon Sep 17 00:00:00 2001 From: Davis Mosenkovs Date: Sun, 30 Jun 2024 22:37:01 +0300 Subject: [PATCH 036/114] Improve timer vibration --- src/displayapp/DisplayApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 3f8abc55..dce60d5c 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -334,7 +334,7 @@ void DisplayApp::Refresh() { } else { LoadNewScreen(Apps::Timer, DisplayApp::FullRefreshDirections::Up); } - motorController.RunForDuration(35); + motorController.StartRinging(); break; case Messages::AlarmTriggered: if (currentApp == Apps::Alarm) { From 6a9d13fe7771607dc01daddd6a0a958641dc41b0 Mon Sep 17 00:00:00 2001 From: "D. Scott Boggs" Date: Sun, 15 Sep 2024 12:00:38 -0400 Subject: [PATCH 037/114] Bump version to 1.15.1 --- CMakeLists.txt | 2 +- flake.nix | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3250982d..84e3914e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.10) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose Debug or Release") -project(pinetime VERSION 1.15.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.15.1 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 20) diff --git a/flake.nix b/flake.nix index 35203e5d..f9dd94c0 100644 --- a/flake.nix +++ b/flake.nix @@ -37,8 +37,8 @@ domain = "git.techwork.zone"; owner = "scott"; repo = "InfiniTime"; - rev = "b7cf42156c0cecba7dab44083965325f357ea443"; - hash = "sha256-wpqubNAbujbtNyGETq4v8h4B3OhFNM5lnrTgozLe6h8="; + rev = "1.15.1"; + hash = "sha256-9cy7qYRZrg7qZZwQzYeMIZivGLZ5uGUoTyPgHEvdnZ8="; fetchSubmodules = true; }; From a2662028317bddf2c0e3060eeb02f202b18d958f Mon Sep 17 00:00:00 2001 From: Eli Tan <5410435+eliedrian@users.noreply.github.com> Date: Thu, 19 Sep 2024 04:31:15 +0800 Subject: [PATCH 038/114] notifications: Dismiss to watchface when empty (#1716) Set `running` to false to flag end of watchface when there are no more notifications left to display. I found it slightly annoying that dismissing all notifications leaves me with a "No notification to display" message. Instead of dismissing to a relatively useless message, dismiss to watchface. --- src/displayapp/screens/Notifications.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 037c43a7..3a3f5f2b 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -82,7 +82,6 @@ void Notifications::Refresh() { } else if (mode == Modes::Preview && dismissingNotification) { running = false; - currentItem = std::make_unique(alertNotificationService, motorController); } else if (dismissingNotification) { dismissingNotification = false; @@ -113,11 +112,11 @@ void Notifications::Refresh() { alertNotificationService, motorController); } else { - currentItem = std::make_unique(alertNotificationService, motorController); + running = false; } } - running = currentItem->IsRunning() && running; + running = running && currentItem->IsRunning(); } void Notifications::OnPreviewInteraction() { @@ -173,7 +172,9 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { } else if (nextMessage.valid) { currentId = nextMessage.id; } else { - // don't update id, won't be found be refresh and try to load latest message or no message box + // don't update id, notification manager will try to fetch + // but not find it. Refresh will try to load latest message + // or dismiss to watchface } DismissToBlack(); return true; From b3756e45fa50ce81255dc3bb21cbce4af3254f2f Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sat, 13 Jul 2024 12:00:40 +0100 Subject: [PATCH 039/114] Remove unused method declarations --- src/systemtask/SystemTask.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 79f1cf44..11dea52c 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -79,9 +79,6 @@ namespace Pinetime { void OnTouchEvent(); - void OnIdle(); - void OnDim(); - bool IsSleepDisabled() { return doNotGoToSleep; } From c3d05901a05a274f30c15b8c0640b6ecdd973ac3 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Thu, 22 Aug 2024 21:24:04 +0100 Subject: [PATCH 040/114] Refactor SystemTask state handling for resilience State transitions now happen immediately where possible This simplifies state management in general, and prevents bugs such as the chime issue from occurring in the first place --- src/components/ble/DfuService.cpp | 8 +- src/components/ble/NimbleController.cpp | 10 +- src/displayapp/DisplayApp.cpp | 23 +++- src/systemtask/SystemTask.cpp | 142 +++++++++++------------- src/systemtask/SystemTask.h | 5 +- 5 files changed, 100 insertions(+), 88 deletions(-) diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index b3f2ff10..2427513d 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -124,9 +124,11 @@ int DfuService::WritePacketHandler(uint16_t connectionHandle, os_mbuf* om) { bootloaderSize, applicationSize); - // wait until SystemTask has finished waking up all devices - while (systemTask.IsSleeping()) { - vTaskDelay(50); // 50ms + // Wait until SystemTask has disabled sleeping + // This isn't quite correct, as we don't actually know + // if BleFirmwareUpdateStarted has been received yet + while (!systemTask.IsSleepDisabled()) { + vTaskDelay(pdMS_TO_TICKS(5)); } dfuImage.Erase(); diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index f1411a3e..5059007a 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -454,9 +454,15 @@ void NimbleController::PersistBond(struct ble_gap_conn_desc& desc) { /* Wakeup Spi and SpiNorFlash before accessing the file system * This should be fixed in the FS driver */ - systemTask.PushMessage(Pinetime::System::Messages::GoToRunning); systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); - vTaskDelay(10); + + // This isn't quite correct + // SystemTask could receive EnableSleeping right after passing this check + // We need some guarantee that the SystemTask has processed the above message + // before we can continue + while (!systemTask.IsSleepDisabled()) { + vTaskDelay(pdMS_TO_TICKS(5)); + } lfs_file_t file_p; diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 79519621..076b4f8a 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -255,9 +255,20 @@ void DisplayApp::Refresh() { isDimmed = true; brightnessController.Set(Controllers::BrightnessController::Levels::Low); } - if (IsPastSleepTime()) { - systemTask->PushMessage(System::Messages::GoToSleep); - state = States::Idle; + if (IsPastSleepTime() && uxQueueMessagesWaiting(msgQueue) == 0) { + PushMessageToSystemTask(System::Messages::GoToSleep); + // Can't set state to Idle here, something may send + // DisableSleeping before this GoToSleep arrives + // Instead we check we have no messages queued before sending GoToSleep + // This works as the SystemTask is higher priority than DisplayApp + // As soon as we send GoToSleep, SystemTask pre-empts DisplayApp + // Whenever DisplayApp is running again, it is guaranteed that + // SystemTask has handled the message + // If it responded, we will have a GoToSleep waiting in the queue + // By checking that there are no messages in the queue, we avoid + // resending GoToSleep when we already have a response + // SystemTask is resilient to duplicate messages, this is an + // optimisation to reduce pressure on the message queues } } else if (isDimmed) { isDimmed = false; @@ -273,6 +284,9 @@ void DisplayApp::Refresh() { if (xQueueReceive(msgQueue, &msg, queueTimeout) == pdTRUE) { switch (msg) { case Messages::GoToSleep: + if (state != States::Running) { + break; + } while (brightnessController.Level() != Controllers::BrightnessController::Levels::Low) { brightnessController.Lower(); vTaskDelay(100); @@ -307,6 +321,9 @@ void DisplayApp::Refresh() { lv_disp_trig_activity(nullptr); break; case Messages::GoToRunning: + if (state == States::Running) { + break; + } if (settingsController.GetAlwaysOnDisplay()) { lcd.LowPowerOff(); } else { diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 848fb54c..4c623883 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -196,29 +196,11 @@ void SystemTask::Work() { } break; case Messages::DisableSleeping: + GoToRunning(); doNotGoToSleep = true; break; case Messages::GoToRunning: - // SPI doesn't go to sleep for always on mode - if (!settingsController.GetAlwaysOnDisplay()) { - spi.Wakeup(); - } - - // Double Tap needs the touch screen to be in normal mode - if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { - touchPanel.Wakeup(); - } - - spiNorFlash.Wakeup(); - - displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); - heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); - - if (bleController.IsRadioEnabled() && !bleController.IsConnected()) { - nimbleController.RestartFastAdv(); - } - - state = SystemTaskState::Running; + GoToRunning(); break; case Messages::TouchWakeUp: { if (touchHandler.ProcessTouchInfo(touchPanel.GetTouchInfo())) { @@ -235,13 +217,7 @@ void SystemTask::Work() { break; } case Messages::GoToSleep: - if (doNotGoToSleep) { - break; - } - state = SystemTaskState::GoingToSleep; // Already set in PushMessage() - NRF_LOG_INFO("[systemtask] Going to sleep"); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); - heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep); + GoToSleep(); break; case Messages::OnNewTime: if (alarmController.State() == Controllers::AlarmController::AlarmState::Set) { @@ -250,16 +226,14 @@ void SystemTask::Work() { break; case Messages::OnNewNotification: if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::On) { - if (state == SystemTaskState::Sleeping) { + if (IsSleeping()) { GoToRunning(); } displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification); } break; case Messages::SetOffAlarm: - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - } + GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::AlarmTriggered); break; case Messages::BleConnected: @@ -268,10 +242,8 @@ void SystemTask::Work() { bleDiscoveryTimer = 5; break; case Messages::BleFirmwareUpdateStarted: + GoToRunning(); doNotGoToSleep = true; - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - } displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); break; case Messages::BleFirmwareUpdateFinished: @@ -282,10 +254,8 @@ void SystemTask::Work() { break; case Messages::StartFileTransfer: NRF_LOG_INFO("[systemtask] FS Started"); + GoToRunning(); doNotGoToSleep = true; - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - } // TODO add intent of fs access icon or something break; case Messages::StopFileTransfer: @@ -318,6 +288,13 @@ void SystemTask::Work() { HandleButtonAction(action); } break; case Messages::OnDisplayTaskSleeping: + // The state was set to GoingToSleep when GoToSleep() was called + // If the state is no longer GoingToSleep, we have since transitioned back to Running + // In this case absorb the OnDisplayTaskSleeping + // as DisplayApp is about to receive GoToRunning + if (state != SystemTaskState::GoingToSleep) { + break; + } 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. @@ -346,14 +323,8 @@ void SystemTask::Work() { if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && alarmController.State() != AlarmController::AlarmState::Alerting) { - // if sleeping, we can't send a chime to displayApp yet (SPI flash switched off) - // request running first and repush the chime message - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - PushMessage(msg); - } else { - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); - } + GoToRunning(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); } break; case Messages::OnNewHalfHour: @@ -361,22 +332,14 @@ void SystemTask::Work() { if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && alarmController.State() != AlarmController::AlarmState::Alerting) { - // if sleeping, we can't send a chime to displayApp yet (SPI flash switched off) - // request running first and repush the chime message - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - PushMessage(msg); - } else { - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); - } + GoToRunning(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); } break; case Messages::OnChargingEvent: batteryController.ReadPowerState(); + GoToRunning(); displayApp.PushMessage(Applications::Display::Messages::OnChargingEvent); - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - } break; case Messages::MeasureBatteryTimerExpired: batteryController.MeasureVoltage(); @@ -385,9 +348,7 @@ void SystemTask::Work() { nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); break; case Messages::OnPairing: - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - } + GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::ShowPairingKey); break; case Messages::BleRadioEnableToggle: @@ -422,14 +383,50 @@ void SystemTask::Work() { #pragma clang diagnostic pop } -void SystemTask::UpdateMotion() { - if (state == SystemTaskState::GoingToSleep || state == SystemTaskState::WakingUp) { +void SystemTask::GoToRunning() { + if (state == SystemTaskState::Running) { return; } + // SPI doesn't go to sleep for always on mode + if (!settingsController.GetAlwaysOnDisplay()) { + spi.Wakeup(); + } - if (state == SystemTaskState::Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) || - motionController.GetService()->IsMotionNotificationSubscribed())) { + // Double Tap needs the touch screen to be in normal mode + if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { + touchPanel.Wakeup(); + } + + spiNorFlash.Wakeup(); + + displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); + heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); + + if (bleController.IsRadioEnabled() && !bleController.IsConnected()) { + nimbleController.RestartFastAdv(); + } + + state = SystemTaskState::Running; +}; + +void SystemTask::GoToSleep() { + if (IsSleeping()) { + return; + } + if (IsSleepDisabled()) { + return; + } + NRF_LOG_INFO("[systemtask] Going to sleep"); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); + heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep); + + state = SystemTaskState::GoingToSleep; +}; + +void SystemTask::UpdateMotion() { + if (IsSleeping() && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) || + motionController.GetService()->IsMotionNotificationSubscribed())) { return; } @@ -452,7 +449,7 @@ void SystemTask::UpdateMotion() { } if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::LowerWrist) && state == SystemTaskState::Running && motionController.ShouldLowerSleep()) { - PushMessage(Messages::GoToSleep); + GoToSleep(); } } @@ -468,7 +465,7 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { switch (action) { case Actions::Click: // If the first action after fast wakeup is a click, it should be ignored. - if (!fastWakeUpDone && state != SystemTaskState::GoingToSleep) { + if (!fastWakeUpDone) { displayApp.PushMessage(Applications::Display::Messages::ButtonPushed); } break; @@ -488,17 +485,10 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { fastWakeUpDone = false; } -void SystemTask::GoToRunning() { - if (state == SystemTaskState::Sleeping) { - state = SystemTaskState::WakingUp; - PushMessage(Messages::GoToRunning); - } -} - void SystemTask::OnTouchEvent() { if (state == SystemTaskState::Running) { PushMessage(Messages::OnTouchEvent); - } else if (state == SystemTaskState::Sleeping) { + } else { if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { PushMessage(Messages::TouchWakeUp); @@ -507,10 +497,6 @@ void SystemTask::OnTouchEvent() { } void SystemTask::PushMessage(System::Messages msg) { - if (msg == Messages::GoToSleep && !doNotGoToSleep) { - state = SystemTaskState::GoingToSleep; - } - if (in_isr()) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR(systemTasksMsgQueue, &msg, &xHigherPriorityTaskWoken); diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 11dea52c..339587c1 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -52,7 +52,7 @@ namespace Pinetime { namespace System { class SystemTask { public: - enum class SystemTaskState { Sleeping, Running, GoingToSleep, WakingUp }; + enum class SystemTaskState { Sleeping, Running, GoingToSleep }; SystemTask(Drivers::SpiMaster& spi, Pinetime::Drivers::SpiNorFlash& spiNorFlash, Drivers::TwiMaster& twiMaster, @@ -88,7 +88,7 @@ namespace Pinetime { }; bool IsSleeping() const { - return state == SystemTaskState::Sleeping || state == SystemTaskState::WakingUp; + return state != SystemTaskState::Running; } private: @@ -131,6 +131,7 @@ namespace Pinetime { bool fastWakeUpDone = false; void GoToRunning(); + void GoToSleep(); void UpdateMotion(); bool stepCounterMustBeReset = false; static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); From 7ca0418c82173fa1cff9537eaf1f030b5a712e9a Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:15:24 +0100 Subject: [PATCH 041/114] Refactor doNotGoToSleep to a wakelock counter --- src/CMakeLists.txt | 3 +++ src/displayapp/screens/Alarm.cpp | 6 +++--- src/displayapp/screens/Alarm.h | 3 ++- src/displayapp/screens/FlashLight.cpp | 5 ++--- src/displayapp/screens/FlashLight.h | 3 ++- src/displayapp/screens/HeartRate.cpp | 9 ++++---- src/displayapp/screens/HeartRate.h | 3 ++- src/displayapp/screens/Metronome.cpp | 7 +++--- src/displayapp/screens/Metronome.h | 3 ++- src/displayapp/screens/Notifications.cpp | 7 +++--- src/displayapp/screens/Notifications.h | 3 ++- src/displayapp/screens/StopWatch.cpp | 7 +++--- src/displayapp/screens/StopWatch.h | 3 ++- src/systemtask/SystemTask.cpp | 16 ++++++-------- src/systemtask/SystemTask.h | 4 ++-- src/systemtask/WakeLock.cpp | 27 ++++++++++++++++++++++++ src/systemtask/WakeLock.h | 19 +++++++++++++++++ 17 files changed, 87 insertions(+), 41 deletions(-) create mode 100644 src/systemtask/WakeLock.cpp create mode 100644 src/systemtask/WakeLock.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dc3b6176..0a97a015 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -478,6 +478,7 @@ list(APPEND SOURCE_FILES systemtask/SystemTask.cpp systemtask/SystemMonitor.cpp + systemtask/WakeLock.cpp drivers/TwiMaster.cpp heartratetask/HeartRateTask.cpp @@ -542,6 +543,7 @@ list(APPEND RECOVERY_SOURCE_FILES systemtask/SystemTask.cpp systemtask/SystemMonitor.cpp + systemtask/WakeLock.cpp drivers/TwiMaster.cpp components/rle/RleDecoder.cpp components/heartrate/HeartRateController.cpp @@ -660,6 +662,7 @@ set(INCLUDE_FILES displayapp/InfiniTimeTheme.h systemtask/SystemTask.h systemtask/SystemMonitor.h + systemtask/WakeLock.h displayapp/screens/Symbols.h drivers/TwiMaster.h heartratetask/HeartRateTask.h diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index cbc702f3..292fb075 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -48,7 +48,7 @@ Alarm::Alarm(Controllers::AlarmController& alarmController, Controllers::Settings::ClockType clockType, System::SystemTask& systemTask, Controllers::MotorController& motorController) - : alarmController {alarmController}, systemTask {systemTask}, motorController {motorController} { + : alarmController {alarmController}, wakeLock(systemTask), motorController {motorController} { hourCounter.Create(); lv_obj_align(hourCounter.GetObject(), nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); @@ -205,7 +205,7 @@ void Alarm::SetAlerting() { lv_obj_set_hidden(btnStop, false); taskStopAlarm = lv_task_create(StopAlarmTaskCallback, pdMS_TO_TICKS(60 * 1000), LV_TASK_PRIO_MID, this); motorController.StartRinging(); - systemTask.PushMessage(System::Messages::DisableSleeping); + wakeLock.Lock(); } void Alarm::StopAlerting() { @@ -216,7 +216,7 @@ void Alarm::StopAlerting() { lv_task_del(taskStopAlarm); taskStopAlarm = nullptr; } - systemTask.PushMessage(System::Messages::EnableSleeping); + wakeLock.Release(); lv_obj_set_hidden(enableSwitch, false); lv_obj_set_hidden(btnStop, true); } diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index 444102cb..a875b275 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -22,6 +22,7 @@ #include "displayapp/screens/Screen.h" #include "displayapp/widgets/Counter.h" #include "displayapp/Controllers.h" +#include "systemtask/WakeLock.h" #include "Symbols.h" namespace Pinetime { @@ -43,7 +44,7 @@ namespace Pinetime { private: Controllers::AlarmController& alarmController; - System::SystemTask& systemTask; + System::WakeLock wakeLock; Controllers::MotorController& motorController; lv_obj_t *btnStop, *txtStop, *btnRecur, *txtRecur, *btnInfo, *enableSwitch; diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index f169fac1..7e0caff1 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -15,7 +15,7 @@ namespace { } FlashLight::FlashLight(System::SystemTask& systemTask, Controllers::BrightnessController& brightnessController) - : systemTask {systemTask}, brightnessController {brightnessController} { + : wakeLock(systemTask), brightnessController {brightnessController} { previousBrightnessLevel = brightnessController.Level(); brightnessController.Set(Controllers::BrightnessController::Levels::Low); @@ -47,14 +47,13 @@ FlashLight::FlashLight(System::SystemTask& systemTask, Controllers::BrightnessCo backgroundAction->user_data = this; lv_obj_set_event_cb(backgroundAction, EventHandler); - systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); + wakeLock.Lock(); } FlashLight::~FlashLight() { lv_obj_clean(lv_scr_act()); lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); brightnessController.Set(previousBrightnessLevel); - systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); } void FlashLight::SetColors() { diff --git a/src/displayapp/screens/FlashLight.h b/src/displayapp/screens/FlashLight.h index c5404e93..00ef4a7e 100644 --- a/src/displayapp/screens/FlashLight.h +++ b/src/displayapp/screens/FlashLight.h @@ -3,6 +3,7 @@ #include "displayapp/screens/Screen.h" #include "components/brightness/BrightnessController.h" #include "systemtask/SystemTask.h" +#include "systemtask/WakeLock.h" #include #include @@ -23,7 +24,7 @@ namespace Pinetime { void SetIndicators(); void SetColors(); - Pinetime::System::SystemTask& systemTask; + Pinetime::System::WakeLock wakeLock; Controllers::BrightnessController& brightnessController; Controllers::BrightnessController::Levels brightnessLevel = Controllers::BrightnessController::Levels::High; diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index 9677be3b..1a84d349 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -29,7 +29,7 @@ namespace { } HeartRate::HeartRate(Controllers::HeartRateController& heartRateController, System::SystemTask& systemTask) - : heartRateController {heartRateController}, systemTask {systemTask} { + : heartRateController {heartRateController}, wakeLock(systemTask) { bool isHrRunning = heartRateController.State() != Controllers::HeartRateController::States::Stopped; label_hr = lv_label_create(lv_scr_act(), nullptr); @@ -63,7 +63,7 @@ HeartRate::HeartRate(Controllers::HeartRateController& heartRateController, Syst label_startStop = lv_label_create(btn_startStop, nullptr); UpdateStartStopButton(isHrRunning); if (isHrRunning) { - systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); + wakeLock.Lock(); } taskRefresh = lv_task_create(RefreshTaskCallback, 100, LV_TASK_PRIO_MID, this); @@ -72,7 +72,6 @@ HeartRate::HeartRate(Controllers::HeartRateController& heartRateController, Syst HeartRate::~HeartRate() { lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); - systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); } void HeartRate::Refresh() { @@ -101,12 +100,12 @@ void HeartRate::OnStartStopEvent(lv_event_t event) { if (heartRateController.State() == Controllers::HeartRateController::States::Stopped) { heartRateController.Start(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); - systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); + wakeLock.Lock(); lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Colors::highlight); } else { heartRateController.Stop(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); - systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); + wakeLock.Release(); lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Colors::lightGray); } } diff --git a/src/displayapp/screens/HeartRate.h b/src/displayapp/screens/HeartRate.h index bf39209a..88b4918c 100644 --- a/src/displayapp/screens/HeartRate.h +++ b/src/displayapp/screens/HeartRate.h @@ -4,6 +4,7 @@ #include #include "displayapp/screens/Screen.h" #include "systemtask/SystemTask.h" +#include "systemtask/WakeLock.h" #include "Symbols.h" #include #include @@ -27,7 +28,7 @@ namespace Pinetime { private: Controllers::HeartRateController& heartRateController; - Pinetime::System::SystemTask& systemTask; + Pinetime::System::WakeLock wakeLock; void UpdateStartStopButton(bool isRunning); lv_obj_t* label_hr; lv_obj_t* label_bpm; diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 314fde73..6b758470 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -22,7 +22,7 @@ namespace { } Metronome::Metronome(Controllers::MotorController& motorController, System::SystemTask& systemTask) - : motorController {motorController}, systemTask {systemTask} { + : motorController {motorController}, wakeLock(systemTask) { bpmArc = lv_arc_create(lv_scr_act(), nullptr); bpmArc->user_data = this; @@ -72,7 +72,6 @@ Metronome::Metronome(Controllers::MotorController& motorController, System::Syst Metronome::~Metronome() { lv_task_del(taskRefresh); - systemTask.PushMessage(System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); } @@ -128,12 +127,12 @@ void Metronome::OnEvent(lv_obj_t* obj, lv_event_t event) { metronomeStarted = !metronomeStarted; if (metronomeStarted) { lv_label_set_text_static(lblPlayPause, Symbols::pause); - systemTask.PushMessage(System::Messages::DisableSleeping); + wakeLock.Lock(); startTime = xTaskGetTickCount(); counter = 1; } else { lv_label_set_text_static(lblPlayPause, Symbols::play); - systemTask.PushMessage(System::Messages::EnableSleeping); + wakeLock.Release(); } } break; diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h index c498048e..fab7ff87 100644 --- a/src/displayapp/screens/Metronome.h +++ b/src/displayapp/screens/Metronome.h @@ -1,6 +1,7 @@ #pragma once #include "systemtask/SystemTask.h" +#include "systemtask/WakeLock.h" #include "components/motor/MotorController.h" #include "displayapp/screens/Screen.h" #include "Symbols.h" @@ -21,7 +22,7 @@ namespace Pinetime { TickType_t startTime = 0; TickType_t tappedTime = 0; Controllers::MotorController& motorController; - System::SystemTask& systemTask; + System::WakeLock wakeLock; int16_t bpm = 120; uint8_t bpb = 4; uint8_t counter = 1; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 3a3f5f2b..45f72f2e 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -20,7 +20,7 @@ Notifications::Notifications(DisplayApp* app, notificationManager {notificationManager}, alertNotificationService {alertNotificationService}, motorController {motorController}, - systemTask {systemTask}, + wakeLock(systemTask), mode {mode} { notificationManager.ClearNewNotificationFlag(); @@ -40,7 +40,7 @@ Notifications::Notifications(DisplayApp* app, validDisplay = false; } if (mode == Modes::Preview) { - systemTask.PushMessage(System::Messages::DisableSleeping); + wakeLock.Lock(); if (notification.category == Controllers::NotificationManager::Categories::IncomingCall) { motorController.StartRinging(); } else { @@ -65,7 +65,6 @@ Notifications::~Notifications() { lv_task_del(taskRefresh); // make sure we stop any vibrations before exiting motorController.StopRinging(); - systemTask.PushMessage(System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); } @@ -120,7 +119,7 @@ void Notifications::Refresh() { } void Notifications::OnPreviewInteraction() { - systemTask.PushMessage(System::Messages::EnableSleeping); + wakeLock.Release(); motorController.StopRinging(); if (timeoutLine != nullptr) { lv_obj_del(timeoutLine); diff --git a/src/displayapp/screens/Notifications.h b/src/displayapp/screens/Notifications.h index 114316b3..8488dc5b 100644 --- a/src/displayapp/screens/Notifications.h +++ b/src/displayapp/screens/Notifications.h @@ -8,6 +8,7 @@ #include "components/ble/NotificationManager.h" #include "components/motor/MotorController.h" #include "systemtask/SystemTask.h" +#include "systemtask/WakeLock.h" namespace Pinetime { namespace Controllers { @@ -73,7 +74,7 @@ namespace Pinetime { Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::AlertNotificationService& alertNotificationService; Pinetime::Controllers::MotorController& motorController; - System::SystemTask& systemTask; + System::WakeLock wakeLock; Modes mode = Modes::Normal; std::unique_ptr currentItem; Pinetime::Controllers::NotificationManager::Notification::Id currentId; diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index f0359da4..ff852beb 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -34,7 +34,7 @@ namespace { constexpr TickType_t blinkInterval = pdMS_TO_TICKS(1000); } -StopWatch::StopWatch(System::SystemTask& systemTask) : systemTask {systemTask} { +StopWatch::StopWatch(System::SystemTask& systemTask) : wakeLock(systemTask) { static constexpr uint8_t btnWidth = 115; static constexpr uint8_t btnHeight = 80; btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); @@ -79,7 +79,6 @@ StopWatch::StopWatch(System::SystemTask& systemTask) : systemTask {systemTask} { StopWatch::~StopWatch() { lv_task_del(taskRefresh); - systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); } @@ -135,7 +134,7 @@ void StopWatch::Start() { SetInterfaceRunning(); startTime = xTaskGetTickCount(); currentState = States::Running; - systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); + wakeLock.Lock(); } void StopWatch::Pause() { @@ -145,7 +144,7 @@ void StopWatch::Pause() { oldTimeElapsed = laps[lapsDone]; blinkTime = xTaskGetTickCount() + blinkInterval; currentState = States::Halted; - systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); + wakeLock.Release(); } void StopWatch::Refresh() { diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h index 3386d042..55a178dc 100644 --- a/src/displayapp/screens/StopWatch.h +++ b/src/displayapp/screens/StopWatch.h @@ -7,6 +7,7 @@ #include "portmacro_cmsis.h" #include "systemtask/SystemTask.h" +#include "systemtask/WakeLock.h" #include "displayapp/apps/Apps.h" #include "displayapp/Controllers.h" #include "Symbols.h" @@ -43,7 +44,7 @@ namespace Pinetime { void Start(); void Pause(); - Pinetime::System::SystemTask& systemTask; + Pinetime::System::WakeLock wakeLock; States currentState = States::Init; TickType_t startTime; TickType_t oldTimeElapsed = 0; diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 4c623883..e55c9ad8 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -189,15 +189,11 @@ void SystemTask::Work() { if (xQueueReceive(systemTasksMsgQueue, &msg, 100) == pdTRUE) { switch (msg) { case Messages::EnableSleeping: - // Make sure that exiting an app doesn't enable sleeping, - // if the exiting was caused by a firmware update - if (!bleController.IsFirmwareUpdating()) { - doNotGoToSleep = false; - } + wakeLocksHeld--; break; case Messages::DisableSleeping: GoToRunning(); - doNotGoToSleep = true; + wakeLocksHeld++; break; case Messages::GoToRunning: GoToRunning(); @@ -243,24 +239,24 @@ void SystemTask::Work() { break; case Messages::BleFirmwareUpdateStarted: GoToRunning(); - doNotGoToSleep = true; + wakeLocksHeld++; displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); break; case Messages::BleFirmwareUpdateFinished: if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) { NVIC_SystemReset(); } - doNotGoToSleep = false; + wakeLocksHeld--; break; case Messages::StartFileTransfer: NRF_LOG_INFO("[systemtask] FS Started"); GoToRunning(); - doNotGoToSleep = true; + wakeLocksHeld++; // TODO add intent of fs access icon or something break; case Messages::StopFileTransfer: NRF_LOG_INFO("[systemtask] FS Stopped"); - doNotGoToSleep = false; + wakeLocksHeld--; // TODO add intent of fs access icon or something break; case Messages::OnTouchEvent: diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 339587c1..8a4e5954 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -80,7 +80,7 @@ namespace Pinetime { void OnTouchEvent(); bool IsSleepDisabled() { - return doNotGoToSleep; + return wakeLocksHeld > 0; } Pinetime::Controllers::NimbleController& nimble() { @@ -124,7 +124,7 @@ namespace Pinetime { bool isBleDiscoveryTimerRunning = false; uint8_t bleDiscoveryTimer = 0; TimerHandle_t measureBatteryTimer; - bool doNotGoToSleep = false; + uint8_t wakeLocksHeld = 0; SystemTaskState state = SystemTaskState::Running; void HandleButtonAction(Controllers::ButtonActions action); diff --git a/src/systemtask/WakeLock.cpp b/src/systemtask/WakeLock.cpp new file mode 100644 index 00000000..2953f7ee --- /dev/null +++ b/src/systemtask/WakeLock.cpp @@ -0,0 +1,27 @@ +#include "systemtask/WakeLock.h" + +using namespace Pinetime::System; + +WakeLock::WakeLock(SystemTask& systemTask) : systemTask {systemTask} { + lockHeld = false; +} + +WakeLock::~WakeLock() { + Release(); +} + +void WakeLock::Lock() { + if (lockHeld) { + return; + } + systemTask.PushMessage(Messages::DisableSleeping); + lockHeld = true; +} + +void WakeLock::Release() { + if (!lockHeld) { + return; + } + systemTask.PushMessage(Messages::EnableSleeping); + lockHeld = false; +} diff --git a/src/systemtask/WakeLock.h b/src/systemtask/WakeLock.h new file mode 100644 index 00000000..5424c009 --- /dev/null +++ b/src/systemtask/WakeLock.h @@ -0,0 +1,19 @@ +#pragma once + +#include "systemtask/SystemTask.h" + +namespace Pinetime { + namespace System { + class WakeLock { + public: + WakeLock(SystemTask& systemTask); + ~WakeLock(); + void Lock(); + void Release(); + + private: + bool lockHeld; + SystemTask& systemTask; + }; + } +} From ad3bf49c7b2864d8f06cedea8ad329e26360f297 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sat, 21 Sep 2024 23:29:15 +0100 Subject: [PATCH 042/114] Atomic HRS reads (#1845) - Combine the reading of all `HRS3300` registers into one I2C read so data is not partial - Downsizes both HRS and ALS to 16bit as the sensor does not generate larger than 16bit values in its current configuration - Increasing the resolution by 1 bit doubles the sensor acquisition time, since we are already at 10Hz we are never going to use a higher resolution - The PPG algorithm buffers for ALS/HRS are already 16bit anyway - Remove functions for setting gain / drive that are unused throughout the codebase - Calculate constants with constexpr --- src/components/heartrate/Ppg.cpp | 2 +- src/components/heartrate/Ppg.h | 2 +- src/drivers/Hrs3300.cpp | 57 ++++++++++++++--------------- src/drivers/Hrs3300.h | 10 +++-- src/heartratetask/HeartRateTask.cpp | 3 +- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/components/heartrate/Ppg.cpp b/src/components/heartrate/Ppg.cpp index 3a6988ae..efbed852 100644 --- a/src/components/heartrate/Ppg.cpp +++ b/src/components/heartrate/Ppg.cpp @@ -142,7 +142,7 @@ Ppg::Ppg() { spectrum.fill(0.0f); } -int8_t Ppg::Preprocess(uint32_t hrs, uint32_t als) { +int8_t Ppg::Preprocess(uint16_t hrs, uint16_t als) { if (dataIndex < dataLength) { dataHRS[dataIndex++] = hrs; } diff --git a/src/components/heartrate/Ppg.h b/src/components/heartrate/Ppg.h index 4492b2c2..373e7985 100644 --- a/src/components/heartrate/Ppg.h +++ b/src/components/heartrate/Ppg.h @@ -14,7 +14,7 @@ namespace Pinetime { class Ppg { public: Ppg(); - int8_t Preprocess(uint32_t hrs, uint32_t als); + int8_t Preprocess(uint16_t hrs, uint16_t als); int HeartRate(); void Reset(bool resetDaqBuffer); static constexpr int deltaTms = 100; diff --git a/src/drivers/Hrs3300.cpp b/src/drivers/Hrs3300.cpp index 33889b6f..9c77975e 100644 --- a/src/drivers/Hrs3300.cpp +++ b/src/drivers/Hrs3300.cpp @@ -67,40 +67,37 @@ void Hrs3300::Disable() { WriteRegister(static_cast(Registers::PDriver), 0); } -uint32_t Hrs3300::ReadHrs() { - auto m = ReadRegister(static_cast(Registers::C0DataM)); - auto h = ReadRegister(static_cast(Registers::C0DataH)); - auto l = ReadRegister(static_cast(Registers::C0dataL)); - return ((l & 0x30) << 12) | (m << 8) | ((h & 0x0f) << 4) | (l & 0x0f); -} +Hrs3300::PackedHrsAls Hrs3300::ReadHrsAls() { + constexpr Registers dataRegisters[] = + {Registers::C1dataM, Registers::C0DataM, Registers::C0DataH, Registers::C1dataH, Registers::C1dataL, Registers::C0dataL}; + // Calculate smallest register address + constexpr uint8_t baseOffset = static_cast(*std::min_element(std::begin(dataRegisters), std::end(dataRegisters))); + // Calculate largest address to determine length of read needed + // Add one to largest relative index to find the length + constexpr uint8_t length = static_cast(*std::max_element(std::begin(dataRegisters), std::end(dataRegisters))) - baseOffset + 1; -uint32_t Hrs3300::ReadAls() { - auto m = ReadRegister(static_cast(Registers::C1dataM)); - auto h = ReadRegister(static_cast(Registers::C1dataH)); - auto l = ReadRegister(static_cast(Registers::C1dataL)); - return ((h & 0x3f) << 11) | (m << 3) | (l & 0x07); -} - -void Hrs3300::SetGain(uint8_t gain) { - constexpr uint8_t maxGain = 64U; - gain = std::min(gain, maxGain); - uint8_t hgain = 0; - while ((1 << hgain) < gain) { - ++hgain; + Hrs3300::PackedHrsAls res; + uint8_t buf[length]; + auto ret = twiMaster.Read(twiAddress, baseOffset, buf, length); + if (ret != TwiMaster::ErrorCodes::NoError) { + NRF_LOG_INFO("READ ERROR"); } + // hrs + uint8_t m = static_cast(Registers::C0DataM) - baseOffset; + uint8_t h = static_cast(Registers::C0DataH) - baseOffset; + uint8_t l = static_cast(Registers::C0dataL) - baseOffset; + // There are two extra bits (17 and 18) but they are not read here + // as resolutions >16bit aren't practically useful (too slow) and + // all hrs values throughout InfiniTime are 16bit + res.hrs = (buf[m] << 8) | ((buf[h] & 0x0f) << 4) | (buf[l] & 0x0f); - WriteRegister(static_cast(Registers::Hgain), hgain << 2); -} + // als + m = static_cast(Registers::C1dataM) - baseOffset; + h = static_cast(Registers::C1dataH) - baseOffset; + l = static_cast(Registers::C1dataL) - baseOffset; + res.als = ((buf[h] & 0x3f) << 11) | (buf[m] << 3) | (buf[l] & 0x07); -void Hrs3300::SetDrive(uint8_t drive) { - auto en = ReadRegister(static_cast(Registers::Enable)); - auto pd = ReadRegister(static_cast(Registers::PDriver)); - - en = (en & 0xf7) | ((drive & 2) << 2); - pd = (pd & 0xbf) | ((drive & 1) << 6); - - WriteRegister(static_cast(Registers::Enable), en); - WriteRegister(static_cast(Registers::PDriver), pd); + return res; } void Hrs3300::WriteRegister(uint8_t reg, uint8_t data) { diff --git a/src/drivers/Hrs3300.h b/src/drivers/Hrs3300.h index 8bbdc69a..6f721448 100644 --- a/src/drivers/Hrs3300.h +++ b/src/drivers/Hrs3300.h @@ -21,6 +21,11 @@ namespace Pinetime { Hgain = 0x17 }; + struct PackedHrsAls { + uint16_t hrs; + uint16_t als; + }; + Hrs3300(TwiMaster& twiMaster, uint8_t twiAddress); Hrs3300(const Hrs3300&) = delete; Hrs3300& operator=(const Hrs3300&) = delete; @@ -30,10 +35,7 @@ namespace Pinetime { void Init(); void Enable(); void Disable(); - uint32_t ReadHrs(); - uint32_t ReadAls(); - void SetGain(uint8_t gain); - void SetDrive(uint8_t drive); + PackedHrsAls ReadHrsAls(); private: TwiMaster& twiMaster; diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 9d82d11e..8a5a871b 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -70,7 +70,8 @@ void HeartRateTask::Work() { } if (measurementStarted) { - int8_t ambient = ppg.Preprocess(heartRateSensor.ReadHrs(), heartRateSensor.ReadAls()); + auto sensorData = heartRateSensor.ReadHrsAls(); + int8_t ambient = ppg.Preprocess(sensorData.hrs, sensorData.als); int bpm = ppg.HeartRate(); // If ambient light detected or a reset requested (bpm < 0) From 997e4cee8cc78a6e0b68cc78b604dc342f22b584 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Sun, 22 Sep 2024 11:28:04 +0200 Subject: [PATCH 043/114] Hrs3300: fix includes for std::begin/std::end Fix for Hrs3300 PR about Atomic HRS reads: https://github.com/InfiniTimeOrg/InfiniTime/pull/1845 We use `std::begin` and `std::end`, but we don't include one of the headers that define those functions. See https://en.cppreference.com/w/cpp/iterator/begin for a list of headers that define `std::begin` and `std::end`. Starting with GCC 14 this leads to a compilation error presumably because they cleaned up their headers. Fix code by inlcuding `` --- src/drivers/Hrs3300.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/drivers/Hrs3300.cpp b/src/drivers/Hrs3300.cpp index 9c77975e..a4b72479 100644 --- a/src/drivers/Hrs3300.cpp +++ b/src/drivers/Hrs3300.cpp @@ -6,6 +6,7 @@ #include "drivers/Hrs3300.h" #include +#include #include #include From a0cd439efc9b0d0d9610dea7ff749f102d5a316d Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Sat, 28 Sep 2024 08:14:08 +0200 Subject: [PATCH 044/114] Alarm persist to flash (#1367) * AlarmController: Add saving alarm time to file Save the set alarm time to the SPI NOR flash, so it does not reset to the default value when the watch resets, e.g. due to watchdog timeout or reflashing of a new version of InfiniTime. Just like the `Settings.h` `LoadSettingsFromFile()` the previous alarm at boot (if available) and `SaveSettingsToFile()` the current alarm when the `Alarm.h` screen is closed (only if the settings have changed). The alarm-settings file is stored in `.system/alarm.dat`. The `.system` folder is created if it doesn't yet exist. Fixes: https://github.com/InfiniTimeOrg/InfiniTime/issues/1330 * alarmController: close .system dir after usage Close the `lfs_dir` object for the `.system` dir after usage. Otherwise on the second changed alarm the system will lockup because the `.system` dir is already open and was never closed. --------- Co-authored-by: Galdor Takacs --- src/components/alarm/AlarmController.cpp | 101 ++++++++++++++++++++--- src/components/alarm/AlarmController.h | 46 +++++++---- src/displayapp/screens/Alarm.cpp | 26 +++--- src/main.cpp | 2 +- src/systemtask/SystemTask.cpp | 8 +- 5 files changed, 135 insertions(+), 48 deletions(-) diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index c4eb8ed0..7dbfb0e3 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -19,11 +19,13 @@ #include "systemtask/SystemTask.h" #include "task.h" #include +#include using namespace Pinetime::Controllers; using namespace std::chrono_literals; -AlarmController::AlarmController(Controllers::DateTime& dateTimeController) : dateTimeController {dateTimeController} { +AlarmController::AlarmController(Controllers::DateTime& dateTimeController, Controllers::FS& fs) + : dateTimeController {dateTimeController}, fs {fs} { } namespace { @@ -36,11 +38,28 @@ namespace { void AlarmController::Init(System::SystemTask* systemTask) { this->systemTask = systemTask; alarmTimer = xTimerCreate("Alarm", 1, pdFALSE, this, SetOffAlarm); + LoadSettingsFromFile(); + if (alarm.isEnabled) { + NRF_LOG_INFO("[AlarmController] Loaded alarm was enabled, scheduling"); + ScheduleAlarm(); + } +} + +void AlarmController::SaveAlarm() { + // verify if it is necessary to save + if (alarmChanged) { + SaveSettingsToFile(); + } + alarmChanged = false; } void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) { - hours = alarmHr; - minutes = alarmMin; + if (alarm.hours == alarmHr && alarm.minutes == alarmMin) { + return; + } + alarm.hours = alarmHr; + alarm.minutes = alarmMin; + alarmChanged = true; } void AlarmController::ScheduleAlarm() { @@ -53,18 +72,19 @@ void AlarmController::ScheduleAlarm() { tm* tmAlarmTime = std::localtime(&ttAlarmTime); // If the time being set has already passed today,the alarm should be set for tomorrow - if (hours < dateTimeController.Hours() || (hours == dateTimeController.Hours() && minutes <= dateTimeController.Minutes())) { + if (alarm.hours < dateTimeController.Hours() || + (alarm.hours == dateTimeController.Hours() && alarm.minutes <= dateTimeController.Minutes())) { tmAlarmTime->tm_mday += 1; // tm_wday doesn't update automatically tmAlarmTime->tm_wday = (tmAlarmTime->tm_wday + 1) % 7; } - tmAlarmTime->tm_hour = hours; - tmAlarmTime->tm_min = minutes; + tmAlarmTime->tm_hour = alarm.hours; + tmAlarmTime->tm_min = alarm.minutes; tmAlarmTime->tm_sec = 0; // if alarm is in weekday-only mode, make sure it shifts to the next weekday - if (recurrence == RecurType::Weekdays) { + if (alarm.recurrence == RecurType::Weekdays) { if (tmAlarmTime->tm_wday == 0) { // Sunday, shift 1 day tmAlarmTime->tm_mday += 1; } else if (tmAlarmTime->tm_wday == 6) { // Saturday, shift 2 days @@ -79,7 +99,10 @@ void AlarmController::ScheduleAlarm() { xTimerChangePeriod(alarmTimer, secondsToAlarm * configTICK_RATE_HZ, 0); xTimerStart(alarmTimer, 0); - state = AlarmState::Set; + if (!alarm.isEnabled) { + alarm.isEnabled = true; + alarmChanged = true; + } } uint32_t AlarmController::SecondsToAlarm() const { @@ -88,20 +111,72 @@ uint32_t AlarmController::SecondsToAlarm() const { void AlarmController::DisableAlarm() { xTimerStop(alarmTimer, 0); - state = AlarmState::Not_Set; + isAlerting = false; + if (alarm.isEnabled) { + alarm.isEnabled = false; + alarmChanged = true; + } } void AlarmController::SetOffAlarmNow() { - state = AlarmState::Alerting; + isAlerting = true; systemTask->PushMessage(System::Messages::SetOffAlarm); } void AlarmController::StopAlerting() { - // Alarm state is off unless this is a recurring alarm - if (recurrence == RecurType::None) { - state = AlarmState::Not_Set; + isAlerting = false; + // Disable alarm unless it is recurring + if (alarm.recurrence == RecurType::None) { + alarm.isEnabled = false; + alarmChanged = true; } else { // set next instance ScheduleAlarm(); } } + +void AlarmController::SetRecurrence(RecurType recurrence) { + if (alarm.recurrence != recurrence) { + alarm.recurrence = recurrence; + alarmChanged = true; + } +} + +void AlarmController::LoadSettingsFromFile() { + lfs_file_t alarmFile; + AlarmSettings alarmBuffer; + + if (fs.FileOpen(&alarmFile, "/.system/alarm.dat", LFS_O_RDONLY) != LFS_ERR_OK) { + NRF_LOG_WARNING("[AlarmController] Failed to open alarm data file"); + return; + } + + fs.FileRead(&alarmFile, reinterpret_cast(&alarmBuffer), sizeof(alarmBuffer)); + fs.FileClose(&alarmFile); + if (alarmBuffer.version != alarmFormatVersion) { + NRF_LOG_WARNING("[AlarmController] Loaded alarm settings has version %u instead of %u, discarding", + alarmBuffer.version, + alarmFormatVersion); + return; + } + + alarm = alarmBuffer; + NRF_LOG_INFO("[AlarmController] Loaded alarm settings from file"); +} + +void AlarmController::SaveSettingsToFile() const { + lfs_dir systemDir; + if (fs.DirOpen("/.system", &systemDir) != LFS_ERR_OK) { + fs.DirCreate("/.system"); + } + fs.DirClose(&systemDir); + lfs_file_t alarmFile; + if (fs.FileOpen(&alarmFile, "/.system/alarm.dat", LFS_O_WRONLY | LFS_O_CREAT) != LFS_ERR_OK) { + NRF_LOG_WARNING("[AlarmController] Failed to open alarm data file for saving"); + return; + } + + fs.FileWrite(&alarmFile, reinterpret_cast(&alarm), sizeof(alarm)); + fs.FileClose(&alarmFile); + NRF_LOG_INFO("[AlarmController] Saved alarm settings with format version %u to file", alarm.version); +} diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h index 8ac0de9a..278e9cdb 100644 --- a/src/components/alarm/AlarmController.h +++ b/src/components/alarm/AlarmController.h @@ -30,47 +30,65 @@ namespace Pinetime { namespace Controllers { class AlarmController { public: - AlarmController(Controllers::DateTime& dateTimeController); + AlarmController(Controllers::DateTime& dateTimeController, Controllers::FS& fs); void Init(System::SystemTask* systemTask); + void SaveAlarm(); void SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin); void ScheduleAlarm(); void DisableAlarm(); void SetOffAlarmNow(); uint32_t SecondsToAlarm() const; void StopAlerting(); - enum class AlarmState { Not_Set, Set, Alerting }; enum class RecurType { None, Daily, Weekdays }; uint8_t Hours() const { - return hours; + return alarm.hours; } uint8_t Minutes() const { - return minutes; + return alarm.minutes; } - AlarmState State() const { - return state; + bool IsAlerting() const { + return isAlerting; + } + + bool IsEnabled() const { + return alarm.isEnabled; } RecurType Recurrence() const { - return recurrence; + return alarm.recurrence; } - void SetRecurrence(RecurType recurType) { - recurrence = recurType; - } + void SetRecurrence(RecurType recurrence); private: + // Versions 255 is reserved for now, so the version field can be made + // bigger, should it ever be needed. + static constexpr uint8_t alarmFormatVersion = 1; + + struct AlarmSettings { + uint8_t version = alarmFormatVersion; + uint8_t hours = 7; + uint8_t minutes = 0; + RecurType recurrence = RecurType::None; + bool isEnabled = false; + }; + + bool isAlerting = false; + bool alarmChanged = false; + Controllers::DateTime& dateTimeController; + Controllers::FS& fs; System::SystemTask* systemTask = nullptr; TimerHandle_t alarmTimer; - uint8_t hours = 7; - uint8_t minutes = 0; + AlarmSettings alarm; std::chrono::time_point alarmTime; - AlarmState state = AlarmState::Not_Set; - RecurType recurrence = RecurType::None; + + void LoadSettingsFromFile(); + void SaveSettingsToFile() const; }; } } diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index 292fb075..b1e67363 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -117,7 +117,7 @@ Alarm::Alarm(Controllers::AlarmController& alarmController, UpdateAlarmTime(); - if (alarmController.State() == Controllers::AlarmController::AlarmState::Alerting) { + if (alarmController.IsAlerting()) { SetAlerting(); } else { SetSwitchState(LV_ANIM_OFF); @@ -125,14 +125,15 @@ Alarm::Alarm(Controllers::AlarmController& alarmController, } Alarm::~Alarm() { - if (alarmController.State() == AlarmController::AlarmState::Alerting) { + if (alarmController.IsAlerting()) { StopAlerting(); } lv_obj_clean(lv_scr_act()); + alarmController.SaveAlarm(); } void Alarm::DisableAlarm() { - if (alarmController.State() == AlarmController::AlarmState::Set) { + if (alarmController.IsEnabled()) { alarmController.DisableAlarm(); lv_switch_off(enableSwitch, LV_ANIM_ON); } @@ -172,7 +173,7 @@ bool Alarm::OnButtonPushed() { HideInfo(); return true; } - if (alarmController.State() == AlarmController::AlarmState::Alerting) { + if (alarmController.IsAlerting()) { StopAlerting(); return true; } @@ -181,7 +182,7 @@ bool Alarm::OnButtonPushed() { bool Alarm::OnTouchEvent(Pinetime::Applications::TouchEvents event) { // Don't allow closing the screen by swiping while the alarm is alerting - return alarmController.State() == AlarmController::AlarmState::Alerting && event == TouchEvents::SwipeDown; + return alarmController.IsAlerting() && event == TouchEvents::SwipeDown; } void Alarm::OnValueChanged() { @@ -222,15 +223,10 @@ void Alarm::StopAlerting() { } void Alarm::SetSwitchState(lv_anim_enable_t anim) { - switch (alarmController.State()) { - case AlarmController::AlarmState::Set: - lv_switch_on(enableSwitch, anim); - break; - case AlarmController::AlarmState::Not_Set: - lv_switch_off(enableSwitch, anim); - break; - default: - break; + if (alarmController.IsEnabled()) { + lv_switch_on(enableSwitch, anim); + } else { + lv_switch_off(enableSwitch, anim); } } @@ -247,7 +243,7 @@ void Alarm::ShowInfo() { txtMessage = lv_label_create(btnMessage, nullptr); lv_obj_set_style_local_bg_color(btnMessage, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_NAVY); - if (alarmController.State() == AlarmController::AlarmState::Set) { + if (alarmController.IsEnabled()) { auto timeToAlarm = alarmController.SecondsToAlarm(); auto daysToAlarm = timeToAlarm / 86400; diff --git a/src/main.cpp b/src/main.cpp index ab50fa74..84f30eef 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -104,7 +104,7 @@ Pinetime::Controllers::DateTime dateTimeController {settingsController}; Pinetime::Drivers::Watchdog watchdog; Pinetime::Controllers::NotificationManager notificationManager; Pinetime::Controllers::MotionController motionController; -Pinetime::Controllers::AlarmController alarmController {dateTimeController}; +Pinetime::Controllers::AlarmController alarmController {dateTimeController, fs}; Pinetime::Controllers::TouchHandler touchHandler; Pinetime::Controllers::ButtonHandler buttonHandler; Pinetime::Controllers::BrightnessController brightnessController {}; diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index e55c9ad8..fc4e8f7e 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -216,7 +216,7 @@ void SystemTask::Work() { GoToSleep(); break; case Messages::OnNewTime: - if (alarmController.State() == Controllers::AlarmController::AlarmState::Set) { + if (alarmController.IsEnabled()) { alarmController.ScheduleAlarm(); } break; @@ -317,8 +317,7 @@ void SystemTask::Work() { case Messages::OnNewHour: using Pinetime::Controllers::AlarmController; if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && - settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && - alarmController.State() != AlarmController::AlarmState::Alerting) { + settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && !alarmController.IsAlerting()) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); } @@ -326,8 +325,7 @@ void SystemTask::Work() { case Messages::OnNewHalfHour: using Pinetime::Controllers::AlarmController; if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && - settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && - alarmController.State() != AlarmController::AlarmState::Alerting) { + settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && !alarmController.IsAlerting()) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); } From 3db4e012ceb38602912edad75ccbbcd8834bcae6 Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Sun, 29 Sep 2024 19:39:14 +0200 Subject: [PATCH 045/114] Remove unused pointer to DisplayApp member variables (#2125) In the screens that use `DisplayApp *app` and pass it to a child item, or use the reference just in the constructor. Afterwards the `app` member is not used. So remove it from the private member variables. Completely remove `app` parameter from `SettingDisplay` constructor as it is unused. --- src/displayapp/DisplayApp.cpp | 2 +- src/displayapp/screens/SystemInfo.cpp | 3 +-- src/displayapp/screens/SystemInfo.h | 1 - src/displayapp/screens/settings/SettingDisplay.cpp | 3 +-- src/displayapp/screens/settings/SettingDisplay.h | 3 +-- src/displayapp/screens/settings/SettingSetDateTime.cpp | 3 +-- src/displayapp/screens/settings/SettingSetDateTime.h | 1 - src/displayapp/screens/settings/SettingWatchFace.cpp | 3 +-- src/displayapp/screens/settings/SettingWatchFace.h | 1 - 9 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 076b4f8a..ff43bb81 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -582,7 +582,7 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio currentScreen = std::make_unique(settingsController); break; case Apps::SettingDisplay: - currentScreen = std::make_unique(this, settingsController); + currentScreen = std::make_unique(settingsController); break; case Apps::SettingSteps: currentScreen = std::make_unique(settingsController); diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index dd39f88a..d265fddd 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -40,8 +40,7 @@ SystemInfo::SystemInfo(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::MotionController& motionController, const Pinetime::Drivers::Cst816S& touchPanel, const Pinetime::Drivers::SpiNorFlash& spiNorFlash) - : app {app}, - dateTimeController {dateTimeController}, + : dateTimeController {dateTimeController}, batteryController {batteryController}, brightnessController {brightnessController}, bleController {bleController}, diff --git a/src/displayapp/screens/SystemInfo.h b/src/displayapp/screens/SystemInfo.h index 3129c463..301662dc 100644 --- a/src/displayapp/screens/SystemInfo.h +++ b/src/displayapp/screens/SystemInfo.h @@ -35,7 +35,6 @@ namespace Pinetime { bool OnTouchEvent(TouchEvents event) override; private: - DisplayApp* app; Pinetime::Controllers::DateTime& dateTimeController; const Pinetime::Controllers::Battery& batteryController; Pinetime::Controllers::BrightnessController& brightnessController; diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp index 57a64d7f..bbc188a9 100644 --- a/src/displayapp/screens/settings/SettingDisplay.cpp +++ b/src/displayapp/screens/settings/SettingDisplay.cpp @@ -24,8 +24,7 @@ namespace { constexpr std::array SettingDisplay::options; -SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) - : app {app}, settingsController {settingsController} { +SettingDisplay::SettingDisplay(Pinetime::Controllers::Settings& settingsController) : settingsController {settingsController} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); diff --git a/src/displayapp/screens/settings/SettingDisplay.h b/src/displayapp/screens/settings/SettingDisplay.h index b6d147c8..3bd10a62 100644 --- a/src/displayapp/screens/settings/SettingDisplay.h +++ b/src/displayapp/screens/settings/SettingDisplay.h @@ -14,14 +14,13 @@ namespace Pinetime { class SettingDisplay : public Screen { public: - SettingDisplay(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); + SettingDisplay(Pinetime::Controllers::Settings& settingsController); ~SettingDisplay() override; void UpdateSelected(lv_obj_t* object, lv_event_t event); void ToggleAlwaysOn(); private: - DisplayApp* app; static constexpr std::array options = {5000, 7000, 10000, 15000, 20000, 30000}; Controllers::Settings& settingsController; diff --git a/src/displayapp/screens/settings/SettingSetDateTime.cpp b/src/displayapp/screens/settings/SettingSetDateTime.cpp index cf9b0638..8926ff31 100644 --- a/src/displayapp/screens/settings/SettingSetDateTime.cpp +++ b/src/displayapp/screens/settings/SettingSetDateTime.cpp @@ -15,8 +15,7 @@ bool SettingSetDateTime::OnTouchEvent(Pinetime::Applications::TouchEvents event) SettingSetDateTime::SettingSetDateTime(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::DateTime& dateTimeController, Pinetime::Controllers::Settings& settingsController) - : app {app}, - dateTimeController {dateTimeController}, + : dateTimeController {dateTimeController}, settingsController {settingsController}, screens {app, 0, diff --git a/src/displayapp/screens/settings/SettingSetDateTime.h b/src/displayapp/screens/settings/SettingSetDateTime.h index 051b1abe..dea283f8 100644 --- a/src/displayapp/screens/settings/SettingSetDateTime.h +++ b/src/displayapp/screens/settings/SettingSetDateTime.h @@ -20,7 +20,6 @@ namespace Pinetime { void Quit(); private: - DisplayApp* app; Controllers::DateTime& dateTimeController; Controllers::Settings& settingsController; diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index e01e9f84..0d5168d2 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -54,8 +54,7 @@ SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app, std::array&& watchfaceItems, Pinetime::Controllers::Settings& settingsController, Pinetime::Controllers::FS& filesystem) - : app {app}, - watchfaceItems {std::move(watchfaceItems)}, + : watchfaceItems {std::move(watchfaceItems)}, settingsController {settingsController}, filesystem {filesystem}, screens {app, 0, CreateScreenList(), Screens::ScreenListModes::UpDown} { diff --git a/src/displayapp/screens/settings/SettingWatchFace.h b/src/displayapp/screens/settings/SettingWatchFace.h index 4c75b0ab..9edc1f7a 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.h +++ b/src/displayapp/screens/settings/SettingWatchFace.h @@ -34,7 +34,6 @@ namespace Pinetime { bool OnTouchEvent(TouchEvents event) override; private: - DisplayApp* app; auto CreateScreenList() const; std::unique_ptr CreateScreen(unsigned int screenNum) const; From a2356f2f4a61f9df77b07d5762581682b1e28c24 Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Sun, 29 Sep 2024 21:10:32 +0200 Subject: [PATCH 046/114] MusicService: add missing includes for TickType_t and xTaskGetTickCount (#2130) Add `FreeRTOS.h` include for the directly used data type `TickType_t` in the header and the function `xTaskGetTickCount` from FreeRTOS's `task.h` --- src/components/ble/MusicService.cpp | 2 ++ src/components/ble/MusicService.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index 94d97f46..43cbec70 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -18,6 +18,8 @@ #include "components/ble/MusicService.h" #include "components/ble/NimbleController.h" #include +#include +#include namespace { // 0000yyxx-78fc-48fe-8e23-433b3a1942d0 diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index f4b902fe..93d94a34 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -25,6 +25,7 @@ #include #undef max #undef min +#include namespace Pinetime { namespace Controllers { From 8598142c27be692b224cf207d41785fea34f3daa Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Wed, 9 Oct 2024 20:26:08 +0200 Subject: [PATCH 047/114] Remove unused submodule QCBOR (#2138) The submodule isn't used anymore. Remove the submodule reference completely. --- .gitmodules | 3 --- src/libs/QCBOR | 1 - 2 files changed, 4 deletions(-) delete mode 160000 src/libs/QCBOR diff --git a/.gitmodules b/.gitmodules index 7a4e307b..a6b4d5fd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "src/libs/littlefs"] path = src/libs/littlefs url = https://github.com/littlefs-project/littlefs.git -[submodule "src/libs/QCBOR"] - path = src/libs/QCBOR - url = https://github.com/laurencelundblade/QCBOR.git [submodule "src/libs/arduinoFFT"] path = src/libs/arduinoFFT url = https://github.com/kosme/arduinoFFT.git diff --git a/src/libs/QCBOR b/src/libs/QCBOR deleted file mode 160000 index 56b17bf9..00000000 --- a/src/libs/QCBOR +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 56b17bf9f74096774944bcac0829adcd887d391e From cfd1ac45674848157cdf20c5fd0c0877b30948c2 Mon Sep 17 00:00:00 2001 From: "D. Scott Boggs" Date: Sat, 19 Oct 2024 06:21:18 -0400 Subject: [PATCH 048/114] Add spell-check exception --- .vscode/settings.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index a7b04eea..ad8decfe 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -66,5 +66,8 @@ "streambuf": "cpp", "cinttypes": "cpp", "typeinfo": "cpp" - } + }, + "cSpell.words": [ + "Pinetime" + ] } From 879bdccd92ad07c1f477ce77474fce52f5cc6bb1 Mon Sep 17 00:00:00 2001 From: liamcharger <105521623+liamcharger@users.noreply.github.com> Date: Wed, 23 Oct 2024 13:00:48 -0400 Subject: [PATCH 049/114] README: Header redesign (#2032) * Reformat README.md * Update README.md * Add files via upload * Add files via upload * Add new README.md header image * Remove unnecessary
tag * Scale watchface logo down; add downloads badge * Remove unnecessary
tag * Add
tag to maintain spacing consistency * Remove incorrect link * Add watchface logo with dark logo * Replace logo image with dark version * Add files via upload * Add header image * Fix row spacing in header image * Remove unnecessary
tag * Add corner radius to header image * Add files via upload * Update image background * Add reference to InfiniTimeExplorer * Remove unnecessary image * Remove unnecessary image * Remove unnecessary images * Rename watchface_collage_no_shadow.png to watchface_collage.png * Update header image URL * Remove unnecessary
tag * SPI transaction hooks * Remove task to notify * Refactor display WriteToRam * Use functional abstraction for hooks * Refactor lambdas * Avoid storing lambda * Rename to pre-transaction hook * Use FreeRTOS delay instead of spinning the CPU * Apply display driver datasheet delays * Move includes back * Include task header (Fixes sim) * Make chime vibrate twice * Remove commit from main * README: improve wording * Add bootloader to DeviceInformationService.cpp * Add bootloader to DeviceInformationService.h * Revert "Add bootloader to DeviceInformationService.h" This reverts commit f3f0fd568d96dea1ebd30529b4b8b6d5f4d5444b. * Revert "Add bootloader to DeviceInformationService.cpp" This reverts commit 35570edafab1b061442ae89b01a2ced8b9a812bd. * Delete doc/logo/watchface_collage.png * Add files via upload * Delete doc/logo/watchface_collage.png * Add files via upload * Replace collage with correct image --------- Co-authored-by: mark9064 <30447455+mark9064@users.noreply.github.com> --- README.md | 29 +++++++++++++++++++++++++---- doc/logo/watchface_collage.png | Bin 0 -> 865794 bytes 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 doc/logo/watchface_collage.png diff --git a/README.md b/README.md index 765d5d4b..d24f2bb6 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,24 @@ -# [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime) +
-![InfiniTime logo](doc/logo/infinitime-logo-small.jpg "InfiniTime Logo") +![Header Image](doc/logo/watchface_collage.png) -Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devices/pinetime/) with many features, written in modern C++. +
+ +[![GitHub tag](https://img.shields.io/github/tag/InfiniTimeOrg/InfiniTime?include_prereleases=&sort=semver&color=blue)](https://github.com/InfiniTimeOrg/InfiniTime/releases) +[![GitHub License](https://img.shields.io/github/license/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniLink/blob/main/LICENSE) +[![Issues - InfiniTime](https://img.shields.io/github/issues/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniTime/issues) +[![Pull Requests - InfiniTime](https://img.shields.io/github/issues-pr/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniTime/pulls) +[![Downloads - InfiniTime](https://img.shields.io/github/downloads/InfiniTimeOrg/InfiniTime/total)](https://github.com/InfiniTimeOrg/InfiniTime) +[![Stars - InfiniTime](https://img.shields.io/github/stars/InfiniTimeOrg/InfiniTime?style=social)](https://github.com/InfiniTimeOrg/InfiniTime/stargazers) +[![Forks - InfiniTime](https://img.shields.io/github/forks/InfiniTimeOrg/InfiniTime?style=social)](https://github.com/InfiniTimeOrg/InfiniTime/network/members) + +# InfiniTime + +*Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devices/pinetime/) with many features, written in modern C++.* + +
+ +
## New to InfiniTime? @@ -22,8 +38,13 @@ Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devic - [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) (iOS) - [ITD](https://gitea.elara.ws/Elara6331/itd) (Linux) - [WatchMate](https://github.com/azymohliad/watchmate) (Linux) +- [InfiniTimeExplorer](https://infinitimeexplorer.netlify.app) (Web) -***Note**: We removed mentions to NRFConnect as this app is closed source and recent versions do not work anymore with InfiniTime (the last version known to work is 4.24.3). If you used NRFConnect in the past, we recommend you switch to [Gadgetbridge](https://gadgetbridge.org/).* +
+ +> *InfiniTimeExplorer is only compatible with web browsers that support Web BLE. Current fully supported browsers include Chrome and Microsoft Edge.* +> +> *We removed mentions to NRFConnect as this app is closed source and recent versions do not work anymore with InfiniTime (the last version known to work is 4.24.3). If you used NRFConnect in the past, we recommend you switch to [Gadgetbridge](https://gadgetbridge.org/).* ## Development diff --git a/doc/logo/watchface_collage.png b/doc/logo/watchface_collage.png new file mode 100644 index 0000000000000000000000000000000000000000..caeb74562f40dc76e54c99bc8c1fce5dffa25f2a GIT binary patch literal 865794 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

huBm@luYINTGe82j|6j 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

rF=`#tuQ|!0Bjhb*2zL3ZEc-##f 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/V8Ox%}=eKyDHB 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

O%?Q2cFtThZ3jpj7j%t!DI}u_ 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

PE{Zd(miRQyIVc8@3Z^Uoz1o^!O(?Y`9sDl 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 literal 0 HcmV?d00001 From 97ba39988bceb8e93c5498a88ce35627afcd1af7 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:59:25 +0100 Subject: [PATCH 050/114] 8hz idle --- src/drivers/St7789.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index 0df19b45..482fbad6 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -175,9 +175,8 @@ void St7789::IdleFrameRateOn() { // According to the datasheet, these controls should apply only to partial/idle mode // However they appear to apply to normal mode, so we have to enable/disable // every time we enter/exit always on - // In testing this divider appears to actually be 16x? constexpr uint8_t args[] = { - 0x13, // Enable frame rate control for partial/idle mode, 8x frame divider + 0x12, // Enable frame rate control for partial/idle mode, 4x frame divider 0x1e, // Idle mode frame rate 0x1e, // Partial mode frame rate (unused) }; From f032847ae1108ad19c1a3c447cfd4f255e6ae33b Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sun, 25 Aug 2024 22:57:24 +0100 Subject: [PATCH 051/114] Refactor into defined states --- src/displayapp/DisplayApp.cpp | 55 ++++++++++++++++++----------------- src/displayapp/DisplayApp.h | 2 +- src/displayapp/Messages.h | 1 + src/systemtask/Messages.h | 1 + src/systemtask/SystemTask.cpp | 29 ++++++++++++------ src/systemtask/SystemTask.h | 2 +- 6 files changed, 52 insertions(+), 38 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index ff43bb81..14047571 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -220,28 +220,27 @@ void DisplayApp::Refresh() { TickType_t queueTimeout; switch (state) { case States::Idle: - if (settingsController.GetAlwaysOnDisplay()) { - if (!currentScreen->IsRunning()) { - LoadPreviousScreen(); + queueTimeout = portMAX_DELAY; + break; + case States::AOD: + if (!currentScreen->IsRunning()) { + LoadPreviousScreen(); + } + // Check we've slept long enough + // Might not be true if the loop received an event + // If not true, then wait that amount of time + queueTimeout = CalculateSleepTime(); + if (queueTimeout == 0) { + // Only advance the tick count when LVGL is done + // Otherwise keep running the task handler while it still has things to draw + // Note: under high graphics load, LVGL will always have more work to do + if (lv_task_handler() > 0) { + // Drop frames that we've missed if drawing/event handling took way longer than expected + while (queueTimeout == 0) { + alwaysOnTickCount += 1; + queueTimeout = CalculateSleepTime(); + } } - // Check we've slept long enough - // Might not be true if the loop received an event - // If not true, then wait that amount of time - queueTimeout = CalculateSleepTime(); - if (queueTimeout == 0) { - // Only advance the tick count when LVGL is done - // Otherwise keep running the task handler while it still has things to draw - // Note: under high graphics load, LVGL will always have more work to do - if (lv_task_handler() > 0) { - // Drop frames that we've missed if drawing/event handling took way longer than expected - while (queueTimeout == 0) { - alwaysOnTickCount += 1; - queueTimeout = CalculateSleepTime(); - } - }; - } - } else { - queueTimeout = portMAX_DELAY; } break; case States::Running: @@ -284,6 +283,7 @@ void DisplayApp::Refresh() { if (xQueueReceive(msgQueue, &msg, queueTimeout) == pdTRUE) { switch (msg) { case Messages::GoToSleep: + case Messages::GoToAOD: if (state != States::Running) { break; } @@ -292,7 +292,7 @@ void DisplayApp::Refresh() { vTaskDelay(100); } // Turn brightness down (or set to AlwaysOn mode) - if (settingsController.GetAlwaysOnDisplay()) { + if (msg == Messages::GoToAOD) { brightnessController.Set(Controllers::BrightnessController::Levels::AlwaysOn); } else { brightnessController.Set(Controllers::BrightnessController::Levels::Off); @@ -305,17 +305,18 @@ void DisplayApp::Refresh() { while (!lv_task_handler()) { }; } - // Turn LCD display off (or set to low power for AlwaysOn mode) - if (settingsController.GetAlwaysOnDisplay()) { + if (msg == Messages::GoToAOD) { lcd.LowPowerOn(); // Record idle entry time alwaysOnTickCount = 0; alwaysOnStartTime = xTaskGetTickCount(); + PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskAOD); + state = States::AOD; } else { lcd.Sleep(); + PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping); + state = States::Idle; } - PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping); - state = States::Idle; break; case Messages::NotifyDeviceActivity: lv_disp_trig_activity(nullptr); @@ -324,7 +325,7 @@ void DisplayApp::Refresh() { if (state == States::Running) { break; } - if (settingsController.GetAlwaysOnDisplay()) { + if (state == States::AOD) { lcd.LowPowerOff(); } else { lcd.Wakeup(); diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index d443b8b2..73492808 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -49,7 +49,7 @@ namespace Pinetime { namespace Applications { class DisplayApp { public: - enum class States { Idle, Running }; + enum class States { Idle, Running, AOD }; enum class FullRefreshDirections { None, Up, Down, Left, Right, LeftAnim, RightAnim }; DisplayApp(Drivers::St7789& lcd, diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index dcfff4c2..d2abc8e5 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -6,6 +6,7 @@ namespace Pinetime { namespace Display { enum class Messages : uint8_t { GoToSleep, + GoToAOD, GoToRunning, UpdateBleConnection, TouchEvent, diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 81be9151..39fb4114 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -17,6 +17,7 @@ namespace Pinetime { HandleButtonEvent, HandleButtonTimerEvent, OnDisplayTaskSleeping, + OnDisplayTaskAOD, EnableSleeping, DisableSleeping, OnNewDay, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index fc4e8f7e..ba12535c 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -284,9 +284,10 @@ void SystemTask::Work() { HandleButtonAction(action); } break; case Messages::OnDisplayTaskSleeping: + case Messages::OnDisplayTaskAOD: // The state was set to GoingToSleep when GoToSleep() was called // If the state is no longer GoingToSleep, we have since transitioned back to Running - // In this case absorb the OnDisplayTaskSleeping + // In this case absorb the OnDisplayTaskSleeping/AOD // as DisplayApp is about to receive GoToRunning if (state != SystemTaskState::GoingToSleep) { break; @@ -298,7 +299,7 @@ void SystemTask::Work() { } // Must keep SPI awake when still updating the display for always on - if (!settingsController.GetAlwaysOnDisplay()) { + if (msg == Messages::OnDisplayTaskSleeping) { spi.Sleep(); } @@ -307,7 +308,11 @@ void SystemTask::Work() { touchPanel.Sleep(); } - state = SystemTaskState::Sleeping; + if (msg == Messages::OnDisplayTaskSleeping) { + state = SystemTaskState::Sleeping; + } else { + state = SystemTaskState::AODSleeping; + } break; case Messages::OnNewDay: // We might be sleeping (with TWI device disabled. @@ -381,8 +386,8 @@ void SystemTask::GoToRunning() { if (state == SystemTaskState::Running) { return; } - // SPI doesn't go to sleep for always on mode - if (!settingsController.GetAlwaysOnDisplay()) { + // SPI only switched off when entering Sleeping, not AOD or GoingToSleep + if (state == SystemTaskState::Sleeping) { spi.Wakeup(); } @@ -411,16 +416,22 @@ void SystemTask::GoToSleep() { return; } NRF_LOG_INFO("[systemtask] Going to sleep"); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); + if (settingsController.GetAlwaysOnDisplay()) { + displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToAOD); + } else { + displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); + } heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep); state = SystemTaskState::GoingToSleep; }; void SystemTask::UpdateMotion() { - if (IsSleeping() && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) || - motionController.GetService()->IsMotionNotificationSubscribed())) { + // Only consider disabling motion updates specifically in the Sleeping state + // AOD needs motion on to show up to date step counts + if (state == SystemTaskState::Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) || + motionController.GetService()->IsMotionNotificationSubscribed())) { return; } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 8a4e5954..752c5611 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -52,7 +52,7 @@ namespace Pinetime { namespace System { class SystemTask { public: - enum class SystemTaskState { Sleeping, Running, GoingToSleep }; + enum class SystemTaskState { Sleeping, Running, GoingToSleep, AODSleeping }; SystemTask(Drivers::SpiMaster& spi, Pinetime::Drivers::SpiNorFlash& spiNorFlash, Drivers::TwiMaster& twiMaster, From 771008495edf0144dd528818bafa77bc10096002 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:25:54 +0100 Subject: [PATCH 052/114] Replace rounded div macro --- src/displayapp/DisplayApp.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 14047571..918dd9f9 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -159,8 +159,11 @@ void DisplayApp::InitHw() { TickType_t DisplayApp::CalculateSleepTime() { TickType_t ticksElapsed = xTaskGetTickCount() - alwaysOnStartTime; // Divide both the numerator and denominator by 8 to increase the number of ticks (frames) before the overflow tick is reached - TickType_t elapsedTarget = ROUNDED_DIV((configTICK_RATE_HZ / 8) * alwaysOnTickCount * alwaysOnRefreshPeriod, 1000 / 8); - // ROUNDED_DIV overflows when numerator + (denominator floordiv 2) > uint32 max + auto RoundedDiv = [](uint32_t a, uint32_t b) { + return ((a + (b / 2)) / b); + }; + TickType_t elapsedTarget = RoundedDiv((configTICK_RATE_HZ / 8) * alwaysOnTickCount * alwaysOnRefreshPeriod, 1000 / 8); + // RoundedDiv overflows when numerator + (denominator floordiv 2) > uint32 max // in this case around 9 hours constexpr TickType_t overflowTick = (UINT32_MAX - (1000 / 16)) / ((configTICK_RATE_HZ / 8) * alwaysOnRefreshPeriod); From 06b721a71fabc2213498dfc50a36681eb300a129 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sun, 22 Sep 2024 00:34:34 +0100 Subject: [PATCH 053/114] Improve sleep time calculation docs --- src/displayapp/DisplayApp.cpp | 33 +++++++++++++++++++-------------- src/displayapp/DisplayApp.h | 2 +- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 918dd9f9..98a28258 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -157,15 +157,20 @@ void DisplayApp::InitHw() { } TickType_t DisplayApp::CalculateSleepTime() { - TickType_t ticksElapsed = xTaskGetTickCount() - alwaysOnStartTime; - // Divide both the numerator and denominator by 8 to increase the number of ticks (frames) before the overflow tick is reached + // Calculates how many system ticks DisplayApp should sleep before rendering the next AOD frame + // Next frame time is frame count * refresh period (ms) * tick rate + auto RoundedDiv = [](uint32_t a, uint32_t b) { return ((a + (b / 2)) / b); }; - TickType_t elapsedTarget = RoundedDiv((configTICK_RATE_HZ / 8) * alwaysOnTickCount * alwaysOnRefreshPeriod, 1000 / 8); // RoundedDiv overflows when numerator + (denominator floordiv 2) > uint32 max - // in this case around 9 hours - constexpr TickType_t overflowTick = (UINT32_MAX - (1000 / 16)) / ((configTICK_RATE_HZ / 8) * alwaysOnRefreshPeriod); + // in this case around 9 hours (=overflow frame count / always on refresh period) + constexpr TickType_t overflowFrameCount = (UINT32_MAX - (1000 / 16)) / ((configTICK_RATE_HZ / 8) * alwaysOnRefreshPeriod); + + TickType_t ticksElapsed = xTaskGetTickCount() - alwaysOnStartTime; + // Divide both the numerator and denominator by 8 (=GCD(1000,1024)) + // to increase the number of ticks (frames) before the overflow tick is reached + TickType_t targetRenderTick = RoundedDiv((configTICK_RATE_HZ / 8) * alwaysOnFrameCount * alwaysOnRefreshPeriod, 1000 / 8); // Assumptions @@ -173,17 +178,17 @@ TickType_t DisplayApp::CalculateSleepTime() { // Needed for division trick above static_assert(configTICK_RATE_HZ % 8 == 0); - // Local tick count must always wraparound before the system tick count does - // As a static assert we can use 64 bit ints and therefore dodge overflows + // Frame count must always wraparound more often than the system tick count does // Always on overflow time (ms) < system tick overflow time (ms) - static_assert((uint64_t) overflowTick * (uint64_t) alwaysOnRefreshPeriod < (uint64_t) UINT32_MAX * 1000ULL / configTICK_RATE_HZ); + // Using 64bit ints here to avoid overflow + static_assert((uint64_t) overflowFrameCount * (uint64_t) alwaysOnRefreshPeriod < (uint64_t) UINT32_MAX * 1000ULL / configTICK_RATE_HZ); - if (alwaysOnTickCount == overflowTick) { - alwaysOnTickCount = 0; + if (alwaysOnFrameCount == overflowFrameCount) { + alwaysOnFrameCount = 0; alwaysOnStartTime = xTaskGetTickCount(); } - if (elapsedTarget > ticksElapsed) { - return elapsedTarget - ticksElapsed; + if (targetRenderTick > ticksElapsed) { + return targetRenderTick - ticksElapsed; } else { return 0; } @@ -240,7 +245,7 @@ void DisplayApp::Refresh() { if (lv_task_handler() > 0) { // Drop frames that we've missed if drawing/event handling took way longer than expected while (queueTimeout == 0) { - alwaysOnTickCount += 1; + alwaysOnFrameCount += 1; queueTimeout = CalculateSleepTime(); } } @@ -311,7 +316,7 @@ void DisplayApp::Refresh() { if (msg == Messages::GoToAOD) { lcd.LowPowerOn(); // Record idle entry time - alwaysOnTickCount = 0; + alwaysOnFrameCount = 0; alwaysOnStartTime = xTaskGetTickCount(); PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskAOD); state = States::AOD; diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 73492808..2f276eaf 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -139,7 +139,7 @@ namespace Pinetime { bool isDimmed = false; TickType_t CalculateSleepTime(); - TickType_t alwaysOnTickCount; + TickType_t alwaysOnFrameCount; TickType_t alwaysOnStartTime; // If this is to be changed, make sure the actual always on refresh rate is changed // by configuring the LCD refresh timings From 8a2ee437f52312cbe22741023cbbe9cec7b4e8f6 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sun, 22 Sep 2024 22:37:30 +0100 Subject: [PATCH 054/114] Restrict hardware reactivation when not sleeping --- src/systemtask/SystemTask.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index ba12535c..1bfae4c6 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -386,17 +386,19 @@ void SystemTask::GoToRunning() { if (state == SystemTaskState::Running) { return; } - // SPI only switched off when entering Sleeping, not AOD or GoingToSleep - if (state == SystemTaskState::Sleeping) { - spi.Wakeup(); - } + if (state == SystemTaskState::Sleeping || state == SystemTaskState::AODSleeping) { + // SPI only switched off when entering Sleeping, not AOD or GoingToSleep + if (state == SystemTaskState::Sleeping) { + spi.Wakeup(); + } - // Double Tap needs the touch screen to be in normal mode - if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { - touchPanel.Wakeup(); - } + // Double Tap needs the touch screen to be in normal mode + if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { + touchPanel.Wakeup(); + } - spiNorFlash.Wakeup(); + spiNorFlash.Wakeup(); + } displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); From f1651c8000f355a87ca601a20d87d1c0aefc545e Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Thu, 3 Oct 2024 00:08:46 +0200 Subject: [PATCH 055/114] datetime: Set the default year to the year during compile --- .../datetime/DateTimeController.cpp | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 7f58c9b3..d439821b 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -7,16 +7,29 @@ using namespace Pinetime::Controllers; namespace { - char const* DaysStringShort[] = {"--", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; - char const* DaysStringShortLow[] = {"--", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; - char const* MonthsString[] = {"--", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; - char const* MonthsStringLow[] = {"--", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + constexpr const char* const DaysStringShort[] = {"--", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; + constexpr const char* const DaysStringShortLow[] = {"--", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; + constexpr const char* const MonthsString[] = {"--", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; + constexpr const char* const MonthsStringLow[] = + {"--", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + + constexpr int compileTimeAtoi(const char* str) { + int result = 0; + while (*str >= '0' && *str <= '9') { + result = result * 10 + *str - '0'; + str++; + } + return result; + } } DateTime::DateTime(Controllers::Settings& settingsController) : settingsController {settingsController} { mutex = xSemaphoreCreateMutex(); ASSERT(mutex != nullptr); xSemaphoreGive(mutex); + + // __DATE__ is a string of the format "MMM DD YYYY", so an offset of 7 gives the start of the year + SetTime(compileTimeAtoi(&__DATE__[7]), 1, 1, 0, 0, 0); } void DateTime::SetCurrentTime(std::chrono::time_point t) { @@ -46,7 +59,9 @@ void DateTime::SetTime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, UpdateTime(previousSystickCounter, true); xSemaphoreGive(mutex); - systemTask->PushMessage(System::Messages::OnNewTime); + if (systemTask != nullptr) { + systemTask->PushMessage(System::Messages::OnNewTime); + } } void DateTime::SetTimeZone(int8_t timezone, int8_t dst) { From cfaad261dc0b8b1af0a8b33d8289782be2c4e57a Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Sat, 26 Oct 2024 11:57:47 +0200 Subject: [PATCH 056/114] SimpleWeatherService #include MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit not as that is what is actually used. Fixes build failure InfiniTime/src/components/ble/SimpleWeatherService.h:86:18: error: field ‘location’ has incomplete type ‘Pinetime::Controllers::SimpleWeatherService::Location’ {aka ‘std::array’ --- src/components/ble/SimpleWeatherService.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ble/SimpleWeatherService.h b/src/components/ble/SimpleWeatherService.h index 03d2f6ff..30cc5c03 100644 --- a/src/components/ble/SimpleWeatherService.h +++ b/src/components/ble/SimpleWeatherService.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include #define min // workaround: nimble's min/max macros conflict with libstdc++ From 1808634f0e041ed1c85b69a967207c2cff812d81 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:53:18 +0100 Subject: [PATCH 057/114] Clear ongoing taps when going to sleep --- src/displayapp/DisplayApp.cpp | 4 ++++ src/displayapp/LittleVgl.cpp | 9 +++++++++ src/displayapp/LittleVgl.h | 1 + 3 files changed, 14 insertions(+) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 98a28258..5d33f76e 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -313,6 +313,10 @@ void DisplayApp::Refresh() { while (!lv_task_handler()) { }; } + // Clear any ongoing touch pressed events + // Without this LVGL gets stuck in the pressed state and will keep refreshing the + // display activity timer causing the screen to never sleep after timeout + lvgl.ClearTouchState(); if (msg == Messages::GoToAOD) { lcd.LowPowerOn(); // Record idle entry time diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index c70a0856..c6f6f784 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -248,6 +248,8 @@ void LittleVgl::SetNewTouchPoint(int16_t x, int16_t y, bool contact) { } } +// Cancel an ongoing tap +// Signifies that LVGL should not handle the current tap void LittleVgl::CancelTap() { if (tapped) { isCancelled = true; @@ -255,6 +257,13 @@ void LittleVgl::CancelTap() { } } +// Clear the current tapped state +// Signifies that touch input processing is suspended +void LittleVgl::ClearTouchState() { + touchPoint = {-1, -1}; + tapped = false; +} + bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) { ptr->point.x = touchPoint.x; ptr->point.y = touchPoint.y; diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h index 9a15ae15..54505b36 100644 --- a/src/displayapp/LittleVgl.h +++ b/src/displayapp/LittleVgl.h @@ -26,6 +26,7 @@ namespace Pinetime { void SetFullRefresh(FullRefreshDirections direction); void SetNewTouchPoint(int16_t x, int16_t y, bool contact); void CancelTap(); + void ClearTouchState(); bool GetFullRefresh() { bool returnValue = fullRefresh; From e6ee5485368d9ec34882b5bfe9e7eac590db80ca Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sat, 28 Sep 2024 00:11:55 +0100 Subject: [PATCH 058/114] Process touch events only when awake --- src/displayapp/DisplayApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 5d33f76e..4b168c43 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -472,7 +472,7 @@ void DisplayApp::Refresh() { } } - if (touchHandler.IsTouching()) { + if (state == States::Running && touchHandler.IsTouching()) { currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY()); } From 00769625881e318e6fe29e926c7bd944c5f049bd Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sat, 28 Sep 2024 00:13:27 +0100 Subject: [PATCH 059/114] Unify touch panel handling --- src/systemtask/Messages.h | 1 - src/systemtask/SystemTask.cpp | 40 +++++++++++++++-------------------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 39fb4114..fee94bb7 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -6,7 +6,6 @@ namespace Pinetime { enum class Messages : uint8_t { GoToSleep, GoToRunning, - TouchWakeUp, OnNewTime, OnNewNotification, OnNewCall, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 1bfae4c6..ed0fd744 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -198,20 +198,6 @@ void SystemTask::Work() { case Messages::GoToRunning: GoToRunning(); break; - case Messages::TouchWakeUp: { - if (touchHandler.ProcessTouchInfo(touchPanel.GetTouchInfo())) { - auto gesture = touchHandler.GestureGet(); - if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && - gesture != Pinetime::Applications::TouchEvents::None && - ((gesture == Pinetime::Applications::TouchEvents::DoubleTap && - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) || - (gesture == Pinetime::Applications::TouchEvents::Tap && - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { - GoToRunning(); - } - } - break; - } case Messages::GoToSleep: GoToSleep(); break; @@ -260,8 +246,23 @@ void SystemTask::Work() { // TODO add intent of fs access icon or something break; case Messages::OnTouchEvent: - if (touchHandler.ProcessTouchInfo(touchPanel.GetTouchInfo())) { + // Finish immediately if no new events + if (!touchHandler.ProcessTouchInfo(touchPanel.GetTouchInfo())) { + break; + } + if (state == SystemTaskState::Running) { displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); + } else { + // If asleep, check for touch panel wake triggers + auto gesture = touchHandler.GestureGet(); + if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && + gesture != Pinetime::Applications::TouchEvents::None && + ((gesture == Pinetime::Applications::TouchEvents::DoubleTap && + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) || + (gesture == Pinetime::Applications::TouchEvents::Tap && + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { + GoToRunning(); + } } break; case Messages::HandleButtonEvent: { @@ -493,14 +494,7 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { } void SystemTask::OnTouchEvent() { - if (state == SystemTaskState::Running) { - PushMessage(Messages::OnTouchEvent); - } else { - if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { - PushMessage(Messages::TouchWakeUp); - } - } + PushMessage(Messages::OnTouchEvent); } void SystemTask::PushMessage(System::Messages msg) { From 57b6db8b2a24e7303b79ea5439df655317af0196 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Fri, 18 Oct 2024 00:05:30 +0100 Subject: [PATCH 060/114] Remove OnTouchEvent --- src/main.cpp | 2 +- src/systemtask/SystemTask.cpp | 4 ---- src/systemtask/SystemTask.h | 2 -- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 84f30eef..24f13cad 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -168,7 +168,7 @@ std::chrono::time_point NoI void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == Pinetime::PinMap::Cst816sIrq) { - systemTask.OnTouchEvent(); + systemTask.PushMessage(Pinetime::System::Messages::OnTouchEvent); return; } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index ed0fd744..eb013d6d 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -493,10 +493,6 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { fastWakeUpDone = false; } -void SystemTask::OnTouchEvent() { - PushMessage(Messages::OnTouchEvent); -} - void SystemTask::PushMessage(System::Messages msg) { if (in_isr()) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 752c5611..0060e360 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -77,8 +77,6 @@ namespace Pinetime { void Start(); void PushMessage(Messages msg); - void OnTouchEvent(); - bool IsSleepDisabled() { return wakeLocksHeld > 0; } From afeded0126ff3bb30bdd5b1ed55f5dddca8b92d5 Mon Sep 17 00:00:00 2001 From: Samuel Dorsaz Date: Mon, 26 Jun 2023 15:01:42 +0200 Subject: [PATCH 061/114] Update Date&Time settings label for "Date & Time" --- src/displayapp/screens/settings/Settings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index a21b4ccd..3722c2be 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -38,7 +38,7 @@ namespace Pinetime { {Symbols::home, "Watch face", Apps::SettingWatchFace}, {Symbols::shoe, "Steps", Apps::SettingSteps}, - {Symbols::clock, "Date&Time", Apps::SettingSetDateTime}, + {Symbols::clock, "Date & Time", Apps::SettingSetDateTime}, {Symbols::cloudSunRain, "Weather", Apps::SettingWeatherFormat}, {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, From 29ad09f4ef54126831d36fe1b99e794059fc5421 Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Tue, 20 Feb 2024 11:25:02 +0100 Subject: [PATCH 062/114] weather: Refactor temperature type for type safety There is now a Temperature struct in the weather service, which holds the internal representation. There is also a temperature struct in the Applications namespace, which holds the temperature in either Celsius or Fahrenheit. --- src/CMakeLists.txt | 2 + src/components/ble/SimpleWeatherService.cpp | 17 +++--- src/components/ble/SimpleWeatherService.h | 24 ++++---- src/displayapp/Weather.cpp | 13 +++++ src/displayapp/Weather.h | 17 ++++++ src/displayapp/screens/WatchFaceDigital.cpp | 8 +-- .../screens/WatchFacePineTimeStyle.cpp | 9 +-- src/displayapp/screens/Weather.cpp | 56 ++++++++----------- 8 files changed, 84 insertions(+), 62 deletions(-) create mode 100644 src/displayapp/Weather.cpp create mode 100644 src/displayapp/Weather.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0a97a015..d69c1d6b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -398,6 +398,7 @@ list(APPEND SOURCE_FILES displayapp/screens/Styles.cpp displayapp/screens/WeatherSymbols.cpp displayapp/Colors.cpp + displayapp/Weather.cpp displayapp/widgets/Counter.cpp displayapp/widgets/PageIndicator.cpp displayapp/widgets/DotIndicator.cpp @@ -606,6 +607,7 @@ set(INCLUDE_FILES displayapp/screens/ApplicationList.h displayapp/screens/CheckboxList.h displayapp/Apps.h + displayapp/Weather.h displayapp/screens/Notifications.h displayapp/screens/HeartRate.h displayapp/screens/Metronome.h diff --git a/src/components/ble/SimpleWeatherService.cpp b/src/components/ble/SimpleWeatherService.cpp index 504cad14..a1f0439e 100644 --- a/src/components/ble/SimpleWeatherService.cpp +++ b/src/components/ble/SimpleWeatherService.cpp @@ -42,9 +42,9 @@ namespace { std::memcpy(cityName.data(), &dataBuffer[16], 32); cityName[32] = '\0'; return SimpleWeatherService::CurrentWeather(ToUInt64(&dataBuffer[2]), - ToInt16(&dataBuffer[10]), - ToInt16(&dataBuffer[12]), - ToInt16(&dataBuffer[14]), + SimpleWeatherService::Temperature {ToInt16(&dataBuffer[10])}, + SimpleWeatherService::Temperature {ToInt16(&dataBuffer[12])}, + SimpleWeatherService::Temperature {ToInt16(&dataBuffer[14])}, SimpleWeatherService::Icons {dataBuffer[16 + 32]}, std::move(cityName)); } @@ -56,8 +56,8 @@ namespace { const uint8_t nbDaysInBuffer = dataBuffer[10]; const uint8_t nbDays = std::min(SimpleWeatherService::MaxNbForecastDays, nbDaysInBuffer); for (int i = 0; i < nbDays; i++) { - days[i] = SimpleWeatherService::Forecast::Day {ToInt16(&dataBuffer[11 + (i * 5)]), - ToInt16(&dataBuffer[13 + (i * 5)]), + days[i] = SimpleWeatherService::Forecast::Day {SimpleWeatherService::Temperature {ToInt16(&dataBuffer[11 + (i * 5)])}, + SimpleWeatherService::Temperature {ToInt16(&dataBuffer[13 + (i * 5)])}, SimpleWeatherService::Icons {dataBuffer[15 + (i * 5)]}}; } return SimpleWeatherService::Forecast {timestamp, nbDays, days}; @@ -154,13 +154,14 @@ std::optional SimpleWeatherService::GetForecast( } bool SimpleWeatherService::CurrentWeather::operator==(const SimpleWeatherService::CurrentWeather& other) const { - return this->iconId == other.iconId && this->temperature == other.temperature && this->timestamp == other.timestamp && - this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature && + return this->iconId == other.iconId && this->temperature.temp == other.temperature.temp && this->timestamp == other.timestamp && + this->maxTemperature.temp == other.maxTemperature.temp && this->minTemperature.temp == other.maxTemperature.temp && std::strcmp(this->location.data(), other.location.data()) == 0; } bool SimpleWeatherService::Forecast::Day::operator==(const SimpleWeatherService::Forecast::Day& other) const { - return this->iconId == other.iconId && this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature; + return this->iconId == other.iconId && this->maxTemperature.temp == other.maxTemperature.temp && + this->minTemperature.temp == other.maxTemperature.temp; } bool SimpleWeatherService::Forecast::operator==(const SimpleWeatherService::Forecast& other) const { diff --git a/src/components/ble/SimpleWeatherService.h b/src/components/ble/SimpleWeatherService.h index 30cc5c03..ee40fd6f 100644 --- a/src/components/ble/SimpleWeatherService.h +++ b/src/components/ble/SimpleWeatherService.h @@ -61,13 +61,17 @@ namespace Pinetime { Unknown = 255 }; + struct Temperature { + int16_t temp; + }; + using Location = std::array; // 32 char + \0 (end of string) struct CurrentWeather { CurrentWeather(uint64_t timestamp, - int16_t temperature, - int16_t minTemperature, - int16_t maxTemperature, + Temperature temperature, + Temperature minTemperature, + Temperature maxTemperature, Icons iconId, Location&& location) : timestamp {timestamp}, @@ -79,9 +83,9 @@ namespace Pinetime { } uint64_t timestamp; - int16_t temperature; - int16_t minTemperature; - int16_t maxTemperature; + Temperature temperature; + Temperature minTemperature; + Temperature maxTemperature; Icons iconId; Location location; @@ -93,8 +97,8 @@ namespace Pinetime { uint8_t nbDays; struct Day { - int16_t minTemperature; - int16_t maxTemperature; + Temperature minTemperature; + Temperature maxTemperature; Icons iconId; bool operator==(const Day& other) const; @@ -108,10 +112,6 @@ namespace Pinetime { std::optional Current() const; std::optional GetForecast() const; - static int16_t CelsiusToFahrenheit(int16_t celsius) { - return celsius * 9 / 5 + 3200; - } - private: // 00050000-78fc-48fe-8e23-433b3a1942d0 static constexpr ble_uuid128_t BaseUuid() { diff --git a/src/displayapp/Weather.cpp b/src/displayapp/Weather.cpp new file mode 100644 index 00000000..a0f0a281 --- /dev/null +++ b/src/displayapp/Weather.cpp @@ -0,0 +1,13 @@ +#include "displayapp/Weather.h" + +using namespace Pinetime::Applications; + +Temperature Pinetime::Applications::Convert(Controllers::SimpleWeatherService::Temperature temp, + Controllers::Settings::WeatherFormat format) { + Temperature t = {temp.temp}; + if (format == Controllers::Settings::WeatherFormat::Imperial) { + t.temp = t.temp * 9 / 5 + 3200; + } + t.temp = t.temp / 100 + (t.temp % 100 >= 50 ? 1 : 0); + return t; +} diff --git a/src/displayapp/Weather.h b/src/displayapp/Weather.h new file mode 100644 index 00000000..0dd17fce --- /dev/null +++ b/src/displayapp/Weather.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +#include "components/ble/SimpleWeatherService.h" +#include "components/settings/Settings.h" + +namespace Pinetime { + namespace Applications { + struct Temperature { + int16_t temp; + }; + + Temperature Convert(Controllers::SimpleWeatherService::Temperature temp, Controllers::Settings::WeatherFormat format); + } +} diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 2e00ee98..b6c4caa1 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -2,6 +2,8 @@ #include #include + +#include "displayapp/Weather.h" #include "displayapp/screens/NotificationIcon.h" #include "displayapp/screens/Symbols.h" #include "displayapp/screens/WeatherSymbols.h" @@ -174,14 +176,12 @@ void WatchFaceDigital::Refresh() { if (currentWeather.IsUpdated()) { auto optCurrentWeather = currentWeather.Get(); if (optCurrentWeather) { - int16_t temp = optCurrentWeather->temperature; char tempUnit = 'C'; if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { - temp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(temp); tempUnit = 'F'; } - temp = temp / 100 + (temp % 100 >= 50 ? 1 : 0); - lv_label_set_text_fmt(temperature, "%d°%c", temp, tempUnit); + Applications::Temperature temp = Applications::Convert(optCurrentWeather->temperature, settingsController.GetWeatherFormat()); + lv_label_set_text_fmt(temperature, "%d°%c", temp.temp, tempUnit); lv_label_set_text(weatherIcon, Symbols::GetSymbol(optCurrentWeather->iconId)); } else { lv_label_set_text_static(temperature, ""); diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index e56031f7..c5946111 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -22,7 +22,8 @@ #include "displayapp/screens/WatchFacePineTimeStyle.h" #include #include -#include +#include "displayapp/Colors.h" +#include "displayapp/Weather.h" #include "displayapp/screens/BatteryIcon.h" #include "displayapp/screens/BleIcon.h" #include "displayapp/screens/NotificationIcon.h" @@ -543,11 +544,7 @@ void WatchFacePineTimeStyle::Refresh() { if (currentWeather.IsUpdated()) { auto optCurrentWeather = currentWeather.Get(); if (optCurrentWeather) { - int16_t temp = optCurrentWeather->temperature; - if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { - temp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(temp); - } - temp = temp / 100 + (temp % 100 >= 50 ? 1 : 0); + Applications::Temperature temp = Applications::Convert(optCurrentWeather->temperature, settingsController.GetWeatherFormat()); lv_label_set_text_fmt(temperature, "%d°", temp); lv_label_set_text(weatherIcon, Symbols::GetSymbol(optCurrentWeather->iconId)); } else { diff --git a/src/displayapp/screens/Weather.cpp b/src/displayapp/screens/Weather.cpp index 5321b7cc..1bdad983 100644 --- a/src/displayapp/screens/Weather.cpp +++ b/src/displayapp/screens/Weather.cpp @@ -1,8 +1,11 @@ #include "displayapp/screens/Weather.h" + #include + #include "components/ble/SimpleWeatherService.h" #include "components/datetime/DateTimeController.h" #include "components/settings/Settings.h" +#include "displayapp/Weather.h" #include "displayapp/DisplayApp.h" #include "displayapp/screens/WeatherSymbols.h" #include "displayapp/InfiniTimeTheme.h" @@ -10,31 +13,27 @@ using namespace Pinetime::Applications::Screens; namespace { - lv_color_t TemperatureColor(int16_t temperature) { - if (temperature <= 0) { // freezing + lv_color_t TemperatureColor(Pinetime::Applications::Temperature temp) { + if (temp.temp <= 0) { // freezing return Colors::blue; - } else if (temperature <= 400) { // ice + } else if (temp.temp <= 4) { // ice return LV_COLOR_CYAN; - } else if (temperature >= 2700) { // hot + } else if (temp.temp >= 27) { // hot return Colors::deepOrange; } return Colors::orange; // normal } - uint8_t TemperatureStyle(int16_t temperature) { - if (temperature <= 0) { // freezing + uint8_t TemperatureStyle(Pinetime::Applications::Temperature temp) { + if (temp.temp <= 0) { // freezing return LV_TABLE_PART_CELL3; - } else if (temperature <= 400) { // ice + } else if (temp.temp <= 4) { // ice return LV_TABLE_PART_CELL4; - } else if (temperature >= 2700) { // hot + } else if (temp.temp >= 27) { // hot return LV_TABLE_PART_CELL6; } return LV_TABLE_PART_CELL5; // normal } - - int16_t RoundTemperature(int16_t temp) { - return temp = temp / 100 + (temp % 100 >= 50 ? 1 : 0); - } } Weather::Weather(Controllers::Settings& settingsController, Controllers::SimpleWeatherService& weatherService) @@ -120,22 +119,19 @@ void Weather::Refresh() { if (currentWeather.IsUpdated()) { auto optCurrentWeather = currentWeather.Get(); if (optCurrentWeather) { - int16_t temp = optCurrentWeather->temperature; - int16_t minTemp = optCurrentWeather->minTemperature; - int16_t maxTemp = optCurrentWeather->maxTemperature; + Applications::Temperature temp = Applications::Convert(optCurrentWeather->temperature, settingsController.GetWeatherFormat()); + Applications::Temperature minTemp = Applications::Convert(optCurrentWeather->minTemperature, settingsController.GetWeatherFormat()); + Applications::Temperature maxTemp = Applications::Convert(optCurrentWeather->maxTemperature, settingsController.GetWeatherFormat()); lv_obj_set_style_local_text_color(temperature, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, TemperatureColor(temp)); char tempUnit = 'C'; if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { - temp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(temp); - minTemp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(minTemp); - maxTemp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(maxTemp); tempUnit = 'F'; } lv_label_set_text(icon, Symbols::GetSymbol(optCurrentWeather->iconId)); lv_label_set_text(condition, Symbols::GetCondition(optCurrentWeather->iconId)); - lv_label_set_text_fmt(temperature, "%d°%c", RoundTemperature(temp), tempUnit); - lv_label_set_text_fmt(minTemperature, "%d°", RoundTemperature(minTemp)); - lv_label_set_text_fmt(maxTemperature, "%d°", RoundTemperature(maxTemp)); + lv_label_set_text_fmt(temperature, "%d°%c", temp.temp, tempUnit); + lv_label_set_text_fmt(minTemperature, "%d°", minTemp.temp); + lv_label_set_text_fmt(maxTemperature, "%d°", maxTemp.temp); } else { lv_label_set_text(icon, ""); lv_label_set_text(condition, ""); @@ -153,27 +149,23 @@ void Weather::Refresh() { std::tm localTime = *std::localtime(reinterpret_cast(&optCurrentForecast->timestamp)); for (int i = 0; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) { - int16_t maxTemp = optCurrentForecast->days[i].maxTemperature; - int16_t minTemp = optCurrentForecast->days[i].minTemperature; + Applications::Temperature maxTemp = + Applications::Convert(optCurrentForecast->days[i].maxTemperature, settingsController.GetWeatherFormat()); + Applications::Temperature minTemp = + Applications::Convert(optCurrentForecast->days[i].minTemperature, settingsController.GetWeatherFormat()); lv_table_set_cell_type(forecast, 2, i, TemperatureStyle(maxTemp)); lv_table_set_cell_type(forecast, 3, i, TemperatureStyle(minTemp)); - if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { - maxTemp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(maxTemp); - minTemp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(minTemp); - } uint8_t wday = localTime.tm_wday + i + 1; if (wday > 7) { wday -= 7; } - maxTemp = RoundTemperature(maxTemp); - minTemp = RoundTemperature(minTemp); const char* dayOfWeek = Controllers::DateTime::DayOfWeekShortToStringLow(static_cast(wday)); lv_table_set_cell_value(forecast, 0, i, dayOfWeek); lv_table_set_cell_value(forecast, 1, i, Symbols::GetSymbol(optCurrentForecast->days[i].iconId)); // Pad cells based on the largest number of digits on each column char maxPadding[3] = " "; char minPadding[3] = " "; - int diff = snprintf(nullptr, 0, "%d", maxTemp) - snprintf(nullptr, 0, "%d", minTemp); + int diff = snprintf(nullptr, 0, "%d", maxTemp.temp) - snprintf(nullptr, 0, "%d", minTemp.temp); if (diff <= 0) { maxPadding[-diff] = '\0'; minPadding[0] = '\0'; @@ -181,8 +173,8 @@ void Weather::Refresh() { maxPadding[0] = '\0'; minPadding[diff] = '\0'; } - lv_table_set_cell_value_fmt(forecast, 2, i, "%s%d", maxPadding, maxTemp); - lv_table_set_cell_value_fmt(forecast, 3, i, "%s%d", minPadding, minTemp); + lv_table_set_cell_value_fmt(forecast, 2, i, "%s%d", maxPadding, maxTemp.temp); + lv_table_set_cell_value_fmt(forecast, 3, i, "%s%d", minPadding, minTemp.temp); } } else { for (int i = 0; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) { From e247bd701903cc507ba0e0ac4f938ab4616562e7 Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Wed, 2 Oct 2024 11:58:32 +0200 Subject: [PATCH 063/114] Switch to simpler temperature interface --- src/CMakeLists.txt | 2 - src/components/ble/SimpleWeatherService.cpp | 27 +++++---- src/components/ble/SimpleWeatherService.h | 29 +++++++++- src/displayapp/Weather.cpp | 13 ----- src/displayapp/Weather.h | 17 ------ src/displayapp/screens/WatchFaceDigital.cpp | 6 +- .../screens/WatchFacePineTimeStyle.cpp | 6 +- src/displayapp/screens/Weather.cpp | 57 +++++++++++-------- 8 files changed, 79 insertions(+), 78 deletions(-) delete mode 100644 src/displayapp/Weather.cpp delete mode 100644 src/displayapp/Weather.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d69c1d6b..0a97a015 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -398,7 +398,6 @@ list(APPEND SOURCE_FILES displayapp/screens/Styles.cpp displayapp/screens/WeatherSymbols.cpp displayapp/Colors.cpp - displayapp/Weather.cpp displayapp/widgets/Counter.cpp displayapp/widgets/PageIndicator.cpp displayapp/widgets/DotIndicator.cpp @@ -607,7 +606,6 @@ set(INCLUDE_FILES displayapp/screens/ApplicationList.h displayapp/screens/CheckboxList.h displayapp/Apps.h - displayapp/Weather.h displayapp/screens/Notifications.h displayapp/screens/HeartRate.h displayapp/screens/Metronome.h diff --git a/src/components/ble/SimpleWeatherService.cpp b/src/components/ble/SimpleWeatherService.cpp index a1f0439e..a58c3a76 100644 --- a/src/components/ble/SimpleWeatherService.cpp +++ b/src/components/ble/SimpleWeatherService.cpp @@ -42,9 +42,9 @@ namespace { std::memcpy(cityName.data(), &dataBuffer[16], 32); cityName[32] = '\0'; return SimpleWeatherService::CurrentWeather(ToUInt64(&dataBuffer[2]), - SimpleWeatherService::Temperature {ToInt16(&dataBuffer[10])}, - SimpleWeatherService::Temperature {ToInt16(&dataBuffer[12])}, - SimpleWeatherService::Temperature {ToInt16(&dataBuffer[14])}, + SimpleWeatherService::Temperature(ToInt16(&dataBuffer[10])), + SimpleWeatherService::Temperature(ToInt16(&dataBuffer[12])), + SimpleWeatherService::Temperature(ToInt16(&dataBuffer[14])), SimpleWeatherService::Icons {dataBuffer[16 + 32]}, std::move(cityName)); } @@ -56,8 +56,8 @@ namespace { const uint8_t nbDaysInBuffer = dataBuffer[10]; const uint8_t nbDays = std::min(SimpleWeatherService::MaxNbForecastDays, nbDaysInBuffer); for (int i = 0; i < nbDays; i++) { - days[i] = SimpleWeatherService::Forecast::Day {SimpleWeatherService::Temperature {ToInt16(&dataBuffer[11 + (i * 5)])}, - SimpleWeatherService::Temperature {ToInt16(&dataBuffer[13 + (i * 5)])}, + days[i] = SimpleWeatherService::Forecast::Day {SimpleWeatherService::Temperature(ToInt16(&dataBuffer[11 + (i * 5)])), + SimpleWeatherService::Temperature(ToInt16(&dataBuffer[13 + (i * 5)])), SimpleWeatherService::Icons {dataBuffer[15 + (i * 5)]}}; } return SimpleWeatherService::Forecast {timestamp, nbDays, days}; @@ -98,9 +98,9 @@ int SimpleWeatherService::OnCommand(struct ble_gatt_access_ctxt* ctxt) { currentWeather = CreateCurrentWeather(dataBuffer); NRF_LOG_INFO("Current weather :\n\tTimestamp : %d\n\tTemperature:%d\n\tMin:%d\n\tMax:%d\n\tIcon:%d\n\tLocation:%s", currentWeather->timestamp, - currentWeather->temperature, - currentWeather->minTemperature, - currentWeather->maxTemperature, + currentWeather->temperature.PreciseCelsius(), + currentWeather->minTemperature.PreciseCelsius(), + currentWeather->maxTemperature.PreciseCelsius(), currentWeather->iconId, currentWeather->location.data()); } @@ -112,8 +112,8 @@ int SimpleWeatherService::OnCommand(struct ble_gatt_access_ctxt* ctxt) { for (int i = 0; i < 5; i++) { NRF_LOG_INFO("\t[%d] Min: %d - Max : %d - Icon : %d", i, - forecast->days[i].minTemperature, - forecast->days[i].maxTemperature, + forecast->days[i].minTemperature.PreciseCelsius(), + forecast->days[i].maxTemperature.PreciseCelsius(), forecast->days[i].iconId); } } @@ -154,14 +154,13 @@ std::optional SimpleWeatherService::GetForecast( } bool SimpleWeatherService::CurrentWeather::operator==(const SimpleWeatherService::CurrentWeather& other) const { - return this->iconId == other.iconId && this->temperature.temp == other.temperature.temp && this->timestamp == other.timestamp && - this->maxTemperature.temp == other.maxTemperature.temp && this->minTemperature.temp == other.maxTemperature.temp && + return this->iconId == other.iconId && this->temperature == other.temperature && this->timestamp == other.timestamp && + this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature && std::strcmp(this->location.data(), other.location.data()) == 0; } bool SimpleWeatherService::Forecast::Day::operator==(const SimpleWeatherService::Forecast::Day& other) const { - return this->iconId == other.iconId && this->maxTemperature.temp == other.maxTemperature.temp && - this->minTemperature.temp == other.maxTemperature.temp; + return this->iconId == other.iconId && this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature; } bool SimpleWeatherService::Forecast::operator==(const SimpleWeatherService::Forecast& other) const { diff --git a/src/components/ble/SimpleWeatherService.h b/src/components/ble/SimpleWeatherService.h index ee40fd6f..36bbea48 100644 --- a/src/components/ble/SimpleWeatherService.h +++ b/src/components/ble/SimpleWeatherService.h @@ -61,8 +61,33 @@ namespace Pinetime { Unknown = 255 }; - struct Temperature { - int16_t temp; + class Temperature { + public: + explicit Temperature(int16_t raw = 0) : raw {raw} { + } + + [[nodiscard]] int16_t PreciseCelsius() const { + return raw; + } + + [[nodiscard]] int16_t PreciseFahrenheit() const { + return raw * 9 / 5 + 3200; + } + + [[nodiscard]] int16_t Celsius() const { + return (PreciseCelsius() + 50) / 100; + } + + [[nodiscard]] int16_t Fahrenheit() const { + return (PreciseFahrenheit() + 50) / 100; + } + + bool operator==(const Temperature& other) const { + return raw == other.raw; + } + + private: + int16_t raw; }; using Location = std::array; // 32 char + \0 (end of string) diff --git a/src/displayapp/Weather.cpp b/src/displayapp/Weather.cpp deleted file mode 100644 index a0f0a281..00000000 --- a/src/displayapp/Weather.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "displayapp/Weather.h" - -using namespace Pinetime::Applications; - -Temperature Pinetime::Applications::Convert(Controllers::SimpleWeatherService::Temperature temp, - Controllers::Settings::WeatherFormat format) { - Temperature t = {temp.temp}; - if (format == Controllers::Settings::WeatherFormat::Imperial) { - t.temp = t.temp * 9 / 5 + 3200; - } - t.temp = t.temp / 100 + (t.temp % 100 >= 50 ? 1 : 0); - return t; -} diff --git a/src/displayapp/Weather.h b/src/displayapp/Weather.h deleted file mode 100644 index 0dd17fce..00000000 --- a/src/displayapp/Weather.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include -#include - -#include "components/ble/SimpleWeatherService.h" -#include "components/settings/Settings.h" - -namespace Pinetime { - namespace Applications { - struct Temperature { - int16_t temp; - }; - - Temperature Convert(Controllers::SimpleWeatherService::Temperature temp, Controllers::Settings::WeatherFormat format); - } -} diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index b6c4caa1..d944117d 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -3,7 +3,6 @@ #include #include -#include "displayapp/Weather.h" #include "displayapp/screens/NotificationIcon.h" #include "displayapp/screens/Symbols.h" #include "displayapp/screens/WeatherSymbols.h" @@ -176,12 +175,13 @@ void WatchFaceDigital::Refresh() { if (currentWeather.IsUpdated()) { auto optCurrentWeather = currentWeather.Get(); if (optCurrentWeather) { + int16_t temp = optCurrentWeather->temperature.Celsius(); char tempUnit = 'C'; if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { + temp = optCurrentWeather->temperature.Fahrenheit(); tempUnit = 'F'; } - Applications::Temperature temp = Applications::Convert(optCurrentWeather->temperature, settingsController.GetWeatherFormat()); - lv_label_set_text_fmt(temperature, "%d°%c", temp.temp, tempUnit); + lv_label_set_text_fmt(temperature, "%d°%c", temp, tempUnit); lv_label_set_text(weatherIcon, Symbols::GetSymbol(optCurrentWeather->iconId)); } else { lv_label_set_text_static(temperature, ""); diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index c5946111..22ccefc7 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -23,7 +23,6 @@ #include #include #include "displayapp/Colors.h" -#include "displayapp/Weather.h" #include "displayapp/screens/BatteryIcon.h" #include "displayapp/screens/BleIcon.h" #include "displayapp/screens/NotificationIcon.h" @@ -544,7 +543,10 @@ void WatchFacePineTimeStyle::Refresh() { if (currentWeather.IsUpdated()) { auto optCurrentWeather = currentWeather.Get(); if (optCurrentWeather) { - Applications::Temperature temp = Applications::Convert(optCurrentWeather->temperature, settingsController.GetWeatherFormat()); + int16_t temp = optCurrentWeather->temperature.Celsius(); + if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { + temp = optCurrentWeather->temperature.Fahrenheit(); + } lv_label_set_text_fmt(temperature, "%d°", temp); lv_label_set_text(weatherIcon, Symbols::GetSymbol(optCurrentWeather->iconId)); } else { diff --git a/src/displayapp/screens/Weather.cpp b/src/displayapp/screens/Weather.cpp index 1bdad983..275153e9 100644 --- a/src/displayapp/screens/Weather.cpp +++ b/src/displayapp/screens/Weather.cpp @@ -5,7 +5,6 @@ #include "components/ble/SimpleWeatherService.h" #include "components/datetime/DateTimeController.h" #include "components/settings/Settings.h" -#include "displayapp/Weather.h" #include "displayapp/DisplayApp.h" #include "displayapp/screens/WeatherSymbols.h" #include "displayapp/InfiniTimeTheme.h" @@ -13,23 +12,23 @@ using namespace Pinetime::Applications::Screens; namespace { - lv_color_t TemperatureColor(Pinetime::Applications::Temperature temp) { - if (temp.temp <= 0) { // freezing + lv_color_t TemperatureColor(Pinetime::Controllers::SimpleWeatherService::Temperature temp) { + if (temp.Celsius() <= 0) { // freezing return Colors::blue; - } else if (temp.temp <= 4) { // ice + } else if (temp.Celsius() <= 4) { // ice return LV_COLOR_CYAN; - } else if (temp.temp >= 27) { // hot + } else if (temp.Celsius() >= 27) { // hot return Colors::deepOrange; } return Colors::orange; // normal } - uint8_t TemperatureStyle(Pinetime::Applications::Temperature temp) { - if (temp.temp <= 0) { // freezing + uint8_t TemperatureStyle(Pinetime::Controllers::SimpleWeatherService::Temperature temp) { + if (temp.Celsius() <= 0) { // freezing return LV_TABLE_PART_CELL3; - } else if (temp.temp <= 4) { // ice + } else if (temp.Celsius() <= 4) { // ice return LV_TABLE_PART_CELL4; - } else if (temp.temp >= 27) { // hot + } else if (temp.Celsius() >= 27) { // hot return LV_TABLE_PART_CELL6; } return LV_TABLE_PART_CELL5; // normal @@ -119,19 +118,25 @@ void Weather::Refresh() { if (currentWeather.IsUpdated()) { auto optCurrentWeather = currentWeather.Get(); if (optCurrentWeather) { - Applications::Temperature temp = Applications::Convert(optCurrentWeather->temperature, settingsController.GetWeatherFormat()); - Applications::Temperature minTemp = Applications::Convert(optCurrentWeather->minTemperature, settingsController.GetWeatherFormat()); - Applications::Temperature maxTemp = Applications::Convert(optCurrentWeather->maxTemperature, settingsController.GetWeatherFormat()); - lv_obj_set_style_local_text_color(temperature, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, TemperatureColor(temp)); + int16_t temp = optCurrentWeather->temperature.Celsius(); + int16_t minTemp = optCurrentWeather->minTemperature.Celsius(); + int16_t maxTemp = optCurrentWeather->maxTemperature.Celsius(); char tempUnit = 'C'; if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { + temp = optCurrentWeather->temperature.Fahrenheit(); + minTemp = optCurrentWeather->minTemperature.Fahrenheit(); + maxTemp = optCurrentWeather->maxTemperature.Fahrenheit(); tempUnit = 'F'; } + lv_obj_set_style_local_text_color(temperature, + LV_LABEL_PART_MAIN, + LV_STATE_DEFAULT, + TemperatureColor(optCurrentWeather->temperature)); lv_label_set_text(icon, Symbols::GetSymbol(optCurrentWeather->iconId)); lv_label_set_text(condition, Symbols::GetCondition(optCurrentWeather->iconId)); - lv_label_set_text_fmt(temperature, "%d°%c", temp.temp, tempUnit); - lv_label_set_text_fmt(minTemperature, "%d°", minTemp.temp); - lv_label_set_text_fmt(maxTemperature, "%d°", maxTemp.temp); + lv_label_set_text_fmt(temperature, "%d°%c", temp, tempUnit); + lv_label_set_text_fmt(minTemperature, "%d°", minTemp); + lv_label_set_text_fmt(maxTemperature, "%d°", maxTemp); } else { lv_label_set_text(icon, ""); lv_label_set_text(condition, ""); @@ -149,12 +154,14 @@ void Weather::Refresh() { std::tm localTime = *std::localtime(reinterpret_cast(&optCurrentForecast->timestamp)); for (int i = 0; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) { - Applications::Temperature maxTemp = - Applications::Convert(optCurrentForecast->days[i].maxTemperature, settingsController.GetWeatherFormat()); - Applications::Temperature minTemp = - Applications::Convert(optCurrentForecast->days[i].minTemperature, settingsController.GetWeatherFormat()); - lv_table_set_cell_type(forecast, 2, i, TemperatureStyle(maxTemp)); - lv_table_set_cell_type(forecast, 3, i, TemperatureStyle(minTemp)); + int16_t minTemp = optCurrentForecast->days[i].maxTemperature.Celsius(); + int16_t maxTemp = optCurrentForecast->days[i].minTemperature.Celsius(); + if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { + minTemp = optCurrentForecast->days[i].maxTemperature.Fahrenheit(); + maxTemp = optCurrentForecast->days[i].minTemperature.Fahrenheit(); + } + lv_table_set_cell_type(forecast, 2, i, TemperatureStyle(optCurrentForecast->days[i].maxTemperature)); + lv_table_set_cell_type(forecast, 3, i, TemperatureStyle(optCurrentForecast->days[i].minTemperature)); uint8_t wday = localTime.tm_wday + i + 1; if (wday > 7) { wday -= 7; @@ -165,7 +172,7 @@ void Weather::Refresh() { // Pad cells based on the largest number of digits on each column char maxPadding[3] = " "; char minPadding[3] = " "; - int diff = snprintf(nullptr, 0, "%d", maxTemp.temp) - snprintf(nullptr, 0, "%d", minTemp.temp); + int diff = snprintf(nullptr, 0, "%d", maxTemp) - snprintf(nullptr, 0, "%d", minTemp); if (diff <= 0) { maxPadding[-diff] = '\0'; minPadding[0] = '\0'; @@ -173,8 +180,8 @@ void Weather::Refresh() { maxPadding[0] = '\0'; minPadding[diff] = '\0'; } - lv_table_set_cell_value_fmt(forecast, 2, i, "%s%d", maxPadding, maxTemp.temp); - lv_table_set_cell_value_fmt(forecast, 3, i, "%s%d", minPadding, minTemp.temp); + lv_table_set_cell_value_fmt(forecast, 2, i, "%s%d", maxPadding, maxTemp); + lv_table_set_cell_value_fmt(forecast, 3, i, "%s%d", minPadding, minTemp); } } else { for (int i = 0; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) { From f7c87a700d2d9cd05469f1b5b2966a01808ce0e1 Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Wed, 9 Oct 2024 12:04:53 +0200 Subject: [PATCH 064/114] weather: Switch to std::optional for Forecast days Also only iterate over the number of days actually in use, rather than MaxNbForecastDays. --- src/components/ble/SimpleWeatherService.cpp | 8 ++++---- src/components/ble/SimpleWeatherService.h | 4 ++-- src/displayapp/screens/Weather.cpp | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/ble/SimpleWeatherService.cpp b/src/components/ble/SimpleWeatherService.cpp index a58c3a76..51baf543 100644 --- a/src/components/ble/SimpleWeatherService.cpp +++ b/src/components/ble/SimpleWeatherService.cpp @@ -52,7 +52,7 @@ namespace { SimpleWeatherService::Forecast CreateForecast(const uint8_t* dataBuffer) { auto timestamp = static_cast(ToUInt64(&dataBuffer[2])); - std::array days; + std::array, SimpleWeatherService::MaxNbForecastDays> days; const uint8_t nbDaysInBuffer = dataBuffer[10]; const uint8_t nbDays = std::min(SimpleWeatherService::MaxNbForecastDays, nbDaysInBuffer); for (int i = 0; i < nbDays; i++) { @@ -112,9 +112,9 @@ int SimpleWeatherService::OnCommand(struct ble_gatt_access_ctxt* ctxt) { for (int i = 0; i < 5; i++) { NRF_LOG_INFO("\t[%d] Min: %d - Max : %d - Icon : %d", i, - forecast->days[i].minTemperature.PreciseCelsius(), - forecast->days[i].maxTemperature.PreciseCelsius(), - forecast->days[i].iconId); + forecast->days[i]->minTemperature.PreciseCelsius(), + forecast->days[i]->maxTemperature.PreciseCelsius(), + forecast->days[i]->iconId); } } break; diff --git a/src/components/ble/SimpleWeatherService.h b/src/components/ble/SimpleWeatherService.h index 36bbea48..0f8c181b 100644 --- a/src/components/ble/SimpleWeatherService.h +++ b/src/components/ble/SimpleWeatherService.h @@ -63,7 +63,7 @@ namespace Pinetime { class Temperature { public: - explicit Temperature(int16_t raw = 0) : raw {raw} { + explicit Temperature(int16_t raw) : raw {raw} { } [[nodiscard]] int16_t PreciseCelsius() const { @@ -129,7 +129,7 @@ namespace Pinetime { bool operator==(const Day& other) const; }; - std::array days; + std::array, MaxNbForecastDays> days; bool operator==(const Forecast& other) const; }; diff --git a/src/displayapp/screens/Weather.cpp b/src/displayapp/screens/Weather.cpp index 275153e9..6699532a 100644 --- a/src/displayapp/screens/Weather.cpp +++ b/src/displayapp/screens/Weather.cpp @@ -153,22 +153,22 @@ void Weather::Refresh() { if (optCurrentForecast) { std::tm localTime = *std::localtime(reinterpret_cast(&optCurrentForecast->timestamp)); - for (int i = 0; i < Controllers::SimpleWeatherService::MaxNbForecastDays; i++) { - int16_t minTemp = optCurrentForecast->days[i].maxTemperature.Celsius(); - int16_t maxTemp = optCurrentForecast->days[i].minTemperature.Celsius(); + for (int i = 0; i < optCurrentForecast->nbDays; i++) { + int16_t minTemp = optCurrentForecast->days[i]->maxTemperature.Celsius(); + int16_t maxTemp = optCurrentForecast->days[i]->minTemperature.Celsius(); if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { - minTemp = optCurrentForecast->days[i].maxTemperature.Fahrenheit(); - maxTemp = optCurrentForecast->days[i].minTemperature.Fahrenheit(); + minTemp = optCurrentForecast->days[i]->maxTemperature.Fahrenheit(); + maxTemp = optCurrentForecast->days[i]->minTemperature.Fahrenheit(); } - lv_table_set_cell_type(forecast, 2, i, TemperatureStyle(optCurrentForecast->days[i].maxTemperature)); - lv_table_set_cell_type(forecast, 3, i, TemperatureStyle(optCurrentForecast->days[i].minTemperature)); + lv_table_set_cell_type(forecast, 2, i, TemperatureStyle(optCurrentForecast->days[i]->maxTemperature)); + lv_table_set_cell_type(forecast, 3, i, TemperatureStyle(optCurrentForecast->days[i]->minTemperature)); uint8_t wday = localTime.tm_wday + i + 1; if (wday > 7) { wday -= 7; } const char* dayOfWeek = Controllers::DateTime::DayOfWeekShortToStringLow(static_cast(wday)); lv_table_set_cell_value(forecast, 0, i, dayOfWeek); - lv_table_set_cell_value(forecast, 1, i, Symbols::GetSymbol(optCurrentForecast->days[i].iconId)); + lv_table_set_cell_value(forecast, 1, i, Symbols::GetSymbol(optCurrentForecast->days[i]->iconId)); // Pad cells based on the largest number of digits on each column char maxPadding[3] = " "; char minPadding[3] = " "; From 5ea9c5537e1bd11f20cfeee258bc025ccc18a87f Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Fri, 15 Nov 2024 22:10:45 +0100 Subject: [PATCH 065/114] Weather: fix min and max temperature being switched --- src/displayapp/screens/Weather.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/Weather.cpp b/src/displayapp/screens/Weather.cpp index 6699532a..d3ee78ef 100644 --- a/src/displayapp/screens/Weather.cpp +++ b/src/displayapp/screens/Weather.cpp @@ -154,8 +154,8 @@ void Weather::Refresh() { std::tm localTime = *std::localtime(reinterpret_cast(&optCurrentForecast->timestamp)); for (int i = 0; i < optCurrentForecast->nbDays; i++) { - int16_t minTemp = optCurrentForecast->days[i]->maxTemperature.Celsius(); - int16_t maxTemp = optCurrentForecast->days[i]->minTemperature.Celsius(); + int16_t minTemp = optCurrentForecast->days[i]->minTemperature.Celsius(); + int16_t maxTemp = optCurrentForecast->days[i]->maxTemperature.Celsius(); if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { minTemp = optCurrentForecast->days[i]->maxTemperature.Fahrenheit(); maxTemp = optCurrentForecast->days[i]->minTemperature.Fahrenheit(); From a2ced5659df873a7bcc2031779aa184676446da9 Mon Sep 17 00:00:00 2001 From: Jozef Mlich Date: Fri, 15 Nov 2024 12:48:44 +0100 Subject: [PATCH 066/114] Update Amazfish details in README.md The openrepos contain obsolete version (description on the openrepos page says that). New SailfishOS version is in chum repo. Additionally, there is Ubuntu Touch and Flatpak version. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d24f2bb6..68d8779d 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ ### Companion apps - [Gadgetbridge](https://gadgetbridge.org/) (Android) -- [AmazFish](https://openrepos.net/content/piggz/amazfish/) (SailfishOS) +- [Amazfish](https://github.com/piggz/harbour-amazfish/) ([SailfishOS](https://sailfishos-chum.github.io/apps/harbour-amazfish/), [Ubuntu Touch](https://open-store.io/app/uk.co.piggz.amazfish), [Flatpak](https://flathub.org/apps/uk.co.piggz.amazfish)) - [Siglo](https://github.com/alexr4535/siglo) (Linux) - [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) (iOS) - [ITD](https://gitea.elara.ws/Elara6331/itd) (Linux) From 4dd0d60eeb3aa2aaa6759bbad2210ea5c3a47c2b Mon Sep 17 00:00:00 2001 From: Dom Rodriguez Date: Thu, 14 Nov 2024 20:59:14 +0000 Subject: [PATCH 067/114] ci: Normalise slash-containing `github.head_ref` values This fixes CI on #2121. Signed-off-by: Dom Rodriguez --- .github/workflows/main.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2eb8a959..247bd4af 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -46,25 +46,30 @@ jobs: # Unzip the package because Upload Artifact will zip up the files - name: Unzip DFU package run: unzip ./build/output/pinetime-mcuboot-app-dfu-*.zip -d ./build/output/pinetime-mcuboot-app-dfu + - name: Set ref_name, but replace slashes with dashes. + shell: bash + env: + ref_name: ${{ github.head_ref || github.ref_name }} + run: echo "REF_NAME=${ref_name//\//-}" >> $GITHUB_ENV - name: Upload DFU artifacts uses: actions/upload-artifact@v3 with: - name: InfiniTime DFU ${{ github.head_ref }} + name: InfiniTime DFU ${{ env.REF_NAME }} path: ./build/output/pinetime-mcuboot-app-dfu/* - name: Upload MCUBoot image artifacts uses: actions/upload-artifact@v3 with: - name: InfiniTime MCUBoot image ${{ github.head_ref }} + name: InfiniTime MCUBoot image ${{ env.REF_NAME }} path: ./build/output/pinetime-mcuboot-app-image-*.bin - name: Upload standalone ELF artifacts uses: actions/upload-artifact@v3 with: - name: InfiniTime image ${{ github.head_ref }} + name: InfiniTime image ${{ env.REF_NAME }} path: ./build/output/src/pinetime-app-*.out - name: Upload resources artifacts uses: actions/upload-artifact@v3 with: - name: InfiniTime resources ${{ github.head_ref }} + name: InfiniTime resources ${{ env.REF_NAME }} path: ./build/output/infinitime-resources-*.zip build-simulator: @@ -105,7 +110,7 @@ jobs: - name: Upload simulator executable uses: actions/upload-artifact@v3 with: - name: infinisim-${{ github.head_ref }} + name: infinisim-${{ env.REF_NAME }} path: build_lv_sim/infinisim get-base-ref-size: From 6c7eb6630ed3565561957a02af36896cc4653cb0 Mon Sep 17 00:00:00 2001 From: febrezo Date: Sun, 24 Dec 2023 19:28:49 +0100 Subject: [PATCH 068/114] Fix git hash calculation with Docker build Fix error when compiling the Pinetime using the Docker image. If done with Docker, the container does not trust the /sources folder, leading to a blank response of the command that grabs the git commit `git rev-parse --short HEAD`. ``` fatal: detected dubious ownership in repository at '/sources' To add an exception for this directory, call: git config --global --add safe.directory /sources PROJECT_GIT_COMMIT_HASH_SUCCESS? 128 BUILD CONFIGURATION ------------------- * Mode : Release * Version : 1.3.0 * Toolchain : /opt/gcc-arm-none-eabi-10.3-2021.10 * GitRef(S) : * NRF52 SDK : /opt/nRF5_SDK_15.3.0_59ac345 * Target device : PINETIME * Build DFU (using adafruit-nrfutil) : Enabled * Build resources : Enabled ``` If the `git config --global --add safe.directory /sources` is added to the Dockerfile, the problem is solved and the hash is added correctly. --- docker/Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index bb5d5f65..e6d92aae 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -64,6 +64,9 @@ RUN bash -c "source /opt/build.sh; GetMcuBoot;" # Add the infinitime user for connecting devcontainer RUN adduser infinitime - + +# Configure Git to accept the /sources directory as safe +RUN git config --global --add safe.directory /sources + ENV SOURCES_DIR /sources CMD ["/opt/build.sh"] From 8aefa3b9a613adb6a2f91b28caf40f82415c3151 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:53:43 +0000 Subject: [PATCH 069/114] Ignore old GoToRunning messages --- src/displayapp/DisplayApp.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 4b168c43..b1594f19 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -292,7 +292,13 @@ void DisplayApp::Refresh() { switch (msg) { case Messages::GoToSleep: case Messages::GoToAOD: - if (state != States::Running) { + // Checking if SystemTask is sleeping is purely an optimisation. + // If it's no longer sleeping since it sent GoToSleep, it has + // cancelled the sleep and transitioned directly from + // GoingToSleep->Running, so we are about to receive GoToRunning + // and can ignore this message. If it wasn't ignored, DisplayApp + // would go to sleep and then immediately re-wake + if (state != States::Running || !systemTask->IsSleeping()) { break; } while (brightnessController.Level() != Controllers::BrightnessController::Levels::Low) { @@ -334,7 +340,10 @@ void DisplayApp::Refresh() { lv_disp_trig_activity(nullptr); break; case Messages::GoToRunning: - if (state == States::Running) { + // If SystemTask is sleeping, the GoToRunning message is old + // and must be ignored. Otherwise DisplayApp will use SPI + // that is powered down and cause bad behaviour + if (state == States::Running || systemTask->IsSleeping()) { break; } if (state == States::AOD) { From a77a3dcb8b12fbec0ee6f98bce1f08578a9a90b2 Mon Sep 17 00:00:00 2001 From: xz-dev Date: Wed, 23 Oct 2024 20:00:38 +0800 Subject: [PATCH 070/114] cmake: fix python path with use multi-version python --- src/displayapp/fonts/CMakeLists.txt | 1 + src/resources/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/displayapp/fonts/CMakeLists.txt b/src/displayapp/fonts/CMakeLists.txt index 22627efc..562f0801 100644 --- a/src/displayapp/fonts/CMakeLists.txt +++ b/src/displayapp/fonts/CMakeLists.txt @@ -11,6 +11,7 @@ configure_file(${CMAKE_CURRENT_LIST_DIR}/jetbrains_mono_bold_20.c_M.patch if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12) # FindPython3 module introduces with CMake 3.12 # https://cmake.org/cmake/help/latest/module/FindPython3.html + set(Python3_FIND_STRATEGY LOCATION) # https://discourse.cmake.org/t/find-package-python3-is-not-finding-the-correct-python/10563 find_package(Python3 REQUIRED) else() set(Python3_EXECUTABLE "python") diff --git a/src/resources/CMakeLists.txt b/src/resources/CMakeLists.txt index 3834e854..9181d4a6 100644 --- a/src/resources/CMakeLists.txt +++ b/src/resources/CMakeLists.txt @@ -10,6 +10,7 @@ message(STATUS "Using ${LV_IMG_CONV} to generate font files") if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12) # FindPython3 module introduces with CMake 3.12 # https://cmake.org/cmake/help/latest/module/FindPython3.html + set(Python3_FIND_STRATEGY LOCATION) # https://discourse.cmake.org/t/find-package-python3-is-not-finding-the-correct-python/10563 find_package(Python3 REQUIRED) else() set(Python3_EXECUTABLE "python") From b1d70ae2ed57fe924d75ad221273a15504eac013 Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Sat, 9 Nov 2024 20:09:27 +0100 Subject: [PATCH 071/114] remove unused include --- src/displayapp/screens/Timer.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h index 0cb2bb08..a07c729b 100644 --- a/src/displayapp/screens/Timer.h +++ b/src/displayapp/screens/Timer.h @@ -1,7 +1,6 @@ #pragma once #include "displayapp/screens/Screen.h" -#include "components/datetime/DateTimeController.h" #include "systemtask/SystemTask.h" #include "displayapp/LittleVgl.h" #include "displayapp/widgets/Counter.h" From 79ee8869043bd9d86af17dc93ba40f6c2096f934 Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Sat, 9 Nov 2024 20:07:19 +0100 Subject: [PATCH 072/114] spelling --- src/components/datetime/DateTimeController.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index 5a453f20..a005f9ac 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -41,7 +41,7 @@ namespace Pinetime { * * used to update difference between utc and local time (see UtcOffset()) * - * parameters are in quarters of an our. Following the BLE CTS specification, + * parameters are in quarters of an hour. Following the BLE CTS specification, * timezone is expected to be constant over DST which will be reported in * dst field. */ From 2105a7b63da8d4065ebfc62e0057f225358eedfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Tue, 3 Dec 2024 20:11:08 +0100 Subject: [PATCH 073/114] Set version to 1.15.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b5669b0..3250982d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.10) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose Debug or Release") -project(pinetime VERSION 1.14.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.15.0 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 20) From b8c51abe691a2d0f6770f4bfef3574541f49d744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Mart=C3=ADnez?= Date: Mon, 9 Dec 2024 01:10:09 +0100 Subject: [PATCH 074/114] Use all free RAM for FreeRTOS heap * Use all free RAM for FreeRTOS heap * Wrap newlib malloc and related functions * Implement calloc --- src/CMakeLists.txt | 4 +++ src/FreeRTOS/heap_4_infinitime.c | 28 ++++++++------- src/FreeRTOS/portmacro_cmsis.h | 1 + src/FreeRTOSConfig.h | 1 - src/displayapp/screens/SystemInfo.cpp | 3 +- src/libs/lfs_config.h | 49 +++++++++++++++++++++++++++ src/stdlib.c | 38 +++++++++++++++++---- 7 files changed, 103 insertions(+), 21 deletions(-) create mode 100644 src/libs/lfs_config.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0a97a015..e2b69b8b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -788,6 +788,10 @@ add_definitions(-DFREERTOS) add_definitions(-D__STACK_SIZE=1024) add_definitions(-D__HEAP_SIZE=0) add_definitions(-DMYNEWT_VAL_BLE_LL_RFMGMT_ENABLE_TIME=1500) +add_definitions(-DLFS_CONFIG=libs/lfs_config.h) + +# _sbrk is purposefully not implemented so that builds fail when it is used +add_link_options(-Wl,-wrap=malloc -Wl,-wrap=free -Wl,-wrap=calloc -Wl,-wrap=realloc -Wl,-wrap=_malloc_r -Wl,-wrap=_sbrk) # Note: Only use this for debugging # Derive the low frequency clock from the main clock (SYNT) diff --git a/src/FreeRTOS/heap_4_infinitime.c b/src/FreeRTOS/heap_4_infinitime.c index 14708471..bf649254 100644 --- a/src/FreeRTOS/heap_4_infinitime.c +++ b/src/FreeRTOS/heap_4_infinitime.c @@ -60,15 +60,6 @@ task.h is included from an application file. */ /* Assumes 8bit bytes! */ #define heapBITS_PER_BYTE ( ( size_t ) 8 ) -/* Allocate the memory for the heap. */ -#if( configAPPLICATION_ALLOCATED_HEAP == 1 ) -/* The application writer has already defined the array used for the RTOS -heap - probably so it can be placed in a special segment or address. */ -extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]; -#else -static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]; -#endif /* configAPPLICATION_ALLOCATED_HEAP */ - /* Define the linked list structure. This is used to link free blocks in order of their memory address. */ typedef struct A_BLOCK_LINK @@ -113,6 +104,8 @@ application. When the bit is free the block is still part of the free heap space. */ static size_t xBlockAllocatedBit = 0; +static size_t xHeapSize = 0; + /*-----------------------------------------------------------*/ void *pvPortMalloc( size_t xWantedSize ) @@ -332,27 +325,38 @@ size_t xPortGetMinimumEverFreeHeapSize( void ) } /*-----------------------------------------------------------*/ +size_t xPortGetHeapSize( void ) +{ + return xHeapSize; +} +/*-----------------------------------------------------------*/ + void vPortInitialiseBlocks( void ) { /* This just exists to keep the linker quiet. */ } /*-----------------------------------------------------------*/ +extern uint8_t *__HeapLimit; // Defined by nrf_common.ld + static void prvHeapInit( void ) { BlockLink_t *pxFirstFreeBlock; uint8_t *pucAlignedHeap; size_t uxAddress; - size_t xTotalHeapSize = configTOTAL_HEAP_SIZE; + size_t xTotalHeapSize = ( size_t ) &__StackLimit - ( size_t ) &__HeapLimit; + uint8_t *pucHeap = ( uint8_t * ) &__HeapLimit; + + xHeapSize = xTotalHeapSize; /* Ensure the heap starts on a correctly aligned boundary. */ - uxAddress = ( size_t ) ucHeap; + uxAddress = ( size_t ) pucHeap; if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 ) { uxAddress += ( portBYTE_ALIGNMENT - 1 ); uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK ); - xTotalHeapSize -= uxAddress - ( size_t ) ucHeap; + xTotalHeapSize -= uxAddress - ( size_t ) pucHeap; } pucAlignedHeap = ( uint8_t * ) uxAddress; diff --git a/src/FreeRTOS/portmacro_cmsis.h b/src/FreeRTOS/portmacro_cmsis.h index e6e09158..d165d171 100644 --- a/src/FreeRTOS/portmacro_cmsis.h +++ b/src/FreeRTOS/portmacro_cmsis.h @@ -180,6 +180,7 @@ __STATIC_INLINE uint32_t ulPortRaiseBASEPRI( void ) /*-----------------------------------------------------------*/ +size_t xPortGetHeapSize(void); #ifdef __cplusplus } diff --git a/src/FreeRTOSConfig.h b/src/FreeRTOSConfig.h index 67c33a34..d877705a 100644 --- a/src/FreeRTOSConfig.h +++ b/src/FreeRTOSConfig.h @@ -62,7 +62,6 @@ #define configTICK_RATE_HZ 1024 #define configMAX_PRIORITIES (3) #define configMINIMAL_STACK_SIZE (120) -#define configTOTAL_HEAP_SIZE (1024 * 40) #define configMAX_TASK_NAME_LEN (4) #define configUSE_16_BIT_TICKS 0 #define configIDLE_SHOULD_YIELD 1 diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index d265fddd..886dacb6 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -195,7 +195,7 @@ std::unique_ptr SystemInfo::CreateScreen3() { "#808080 SPI Flash# %02x-%02x-%02x\n" "\n" "#808080 Memory heap#\n" - " #808080 Free# %d\n" + " #808080 Free# %d/%d\n" " #808080 Min free# %d\n" " #808080 Alloc err# %d\n" " #808080 Ovrfl err# %d\n", @@ -209,6 +209,7 @@ std::unique_ptr SystemInfo::CreateScreen3() { spiFlashId.type, spiFlashId.density, xPortGetFreeHeapSize(), + xPortGetHeapSize(), xPortGetMinimumEverFreeHeapSize(), mallocFailedCount, stackOverflowCount); diff --git a/src/libs/lfs_config.h b/src/libs/lfs_config.h new file mode 100644 index 00000000..eaeede0e --- /dev/null +++ b/src/libs/lfs_config.h @@ -0,0 +1,49 @@ +#pragma once + +#include + +#ifndef LFS_TRACE +#ifdef LFS_YES_TRACE +#define LFS_TRACE_(fmt, ...) \ + NRF_LOG_DEBUG("[LFS] %s:%d:trace: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_TRACE(...) LFS_TRACE_(__VA_ARGS__, "") +#else +#define LFS_TRACE(...) +#endif +#endif + +#ifndef LFS_DEBUG +#ifndef LFS_NO_DEBUG +#define LFS_DEBUG_(fmt, ...) \ + NRF_LOG_DEBUG("[LFS] %s:%d:debug: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_DEBUG(...) LFS_DEBUG_(__VA_ARGS__, "") +#else +#define LFS_DEBUG(...) +#endif +#endif + +#ifndef LFS_WARN +#ifndef LFS_NO_WARN +#define LFS_WARN_(fmt, ...) \ + NRF_LOG_WARNING("[LFS] %s:%d:warn: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_WARN(...) LFS_WARN_(__VA_ARGS__, "") +#else +#define LFS_WARN(...) +#endif +#endif + +#ifndef LFS_ERROR +#ifndef LFS_NO_ERROR +#define LFS_ERROR_(fmt, ...) \ + NRF_LOG_ERROR("[LFS] %s:%d:error: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_ERROR(...) LFS_ERROR_(__VA_ARGS__, "") +#else +#define LFS_ERROR(...) +#endif +#endif + +// This is required in order for the CRC implementation in littlefs/lfs_util.c to be compiled +#undef LFS_CONFIG + +#undef LFS_UTIL_H +#include diff --git a/src/stdlib.c b/src/stdlib.c index 3ad66b37..21b506a8 100644 --- a/src/stdlib.c +++ b/src/stdlib.c @@ -1,4 +1,5 @@ #include +#include #include // Override malloc() and free() to use the memory manager from FreeRTOS. @@ -10,18 +11,41 @@ void* malloc(size_t size) { return pvPortMalloc(size); } +void* __wrap_malloc(size_t size) { + return malloc(size); +} + +void* __wrap__malloc_r(struct _reent* reent, size_t size) { + (void) reent; + return malloc(size); +} + void free(void* ptr) { vPortFree(ptr); } -void* calloc(size_t num, size_t size) { - (void)(num); - (void)(size); - // Not supported - return NULL; +void __wrap_free(void* ptr) { + free(ptr); } -void *pvPortRealloc(void *ptr, size_t xWantedSize); -void* realloc( void *ptr, size_t newSize) { +void* calloc(size_t num, size_t size) { + void *ptr = malloc(num * size); + if (ptr) { + memset(ptr, 0, num * size); + } + return ptr; +} + +void* __wrap_calloc(size_t num, size_t size) { + return calloc(num, size); +} + +void* pvPortRealloc(void* ptr, size_t xWantedSize); + +void* realloc(void* ptr, size_t newSize) { return pvPortRealloc(ptr, newSize); } + +void* __wrap_realloc(void* ptr, size_t newSize) { + return realloc(ptr, newSize); +} From d69cfcfb136e45486437ad773d362da7870042e3 Mon Sep 17 00:00:00 2001 From: Victor Kareh Date: Fri, 6 Dec 2024 11:07:51 -0500 Subject: [PATCH 075/114] weather: Fix inverted imperial forecast temperatures When converting to imperial units, the min and max temperatures were incorrectly inverted, causing confusion in the display. Fixes https://github.com/InfiniTimeOrg/InfiniTime/issues/2183 --- src/displayapp/screens/Weather.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/displayapp/screens/Weather.cpp b/src/displayapp/screens/Weather.cpp index d3ee78ef..25464c70 100644 --- a/src/displayapp/screens/Weather.cpp +++ b/src/displayapp/screens/Weather.cpp @@ -154,11 +154,11 @@ void Weather::Refresh() { std::tm localTime = *std::localtime(reinterpret_cast(&optCurrentForecast->timestamp)); for (int i = 0; i < optCurrentForecast->nbDays; i++) { - int16_t minTemp = optCurrentForecast->days[i]->minTemperature.Celsius(); int16_t maxTemp = optCurrentForecast->days[i]->maxTemperature.Celsius(); + int16_t minTemp = optCurrentForecast->days[i]->minTemperature.Celsius(); if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) { - minTemp = optCurrentForecast->days[i]->maxTemperature.Fahrenheit(); - maxTemp = optCurrentForecast->days[i]->minTemperature.Fahrenheit(); + maxTemp = optCurrentForecast->days[i]->maxTemperature.Fahrenheit(); + minTemp = optCurrentForecast->days[i]->minTemperature.Fahrenheit(); } lv_table_set_cell_type(forecast, 2, i, TemperatureStyle(optCurrentForecast->days[i]->maxTemperature)); lv_table_set_cell_type(forecast, 3, i, TemperatureStyle(optCurrentForecast->days[i]->minTemperature)); From 3e23ee7c782904debabe3eb76ceba05f1e903be4 Mon Sep 17 00:00:00 2001 From: Jozef Mlich Date: Sat, 16 Dec 2023 15:45:13 +0100 Subject: [PATCH 076/114] Show alarm controller state in status icon --- src/displayapp/DisplayApp.cpp | 4 +++- src/displayapp/screens/ApplicationList.cpp | 3 +++ src/displayapp/screens/ApplicationList.h | 2 ++ src/displayapp/screens/Tile.cpp | 6 +++++- src/displayapp/screens/Tile.h | 1 + src/displayapp/screens/WatchFaceDigital.cpp | 3 ++- src/displayapp/screens/WatchFaceDigital.h | 3 +++ src/displayapp/screens/settings/QuickSettings.cpp | 5 +++-- src/displayapp/screens/settings/QuickSettings.h | 3 ++- src/displayapp/widgets/StatusIcons.cpp | 15 +++++++++++++-- src/displayapp/widgets/StatusIcons.h | 8 +++++++- 11 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index b1594f19..6671ac9e 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -526,6 +526,7 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio settingsController, batteryController, bleController, + alarmController, dateTimeController, filesystem, std::move(apps)); @@ -580,7 +581,8 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio brightnessController, motorController, settingsController, - bleController); + bleController, + alarmController); break; case Apps::Settings: currentScreen = std::make_unique(this, settingsController); diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 41735349..fb46b413 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -21,6 +21,7 @@ ApplicationList::ApplicationList(DisplayApp* app, Pinetime::Controllers::Settings& settingsController, const Pinetime::Controllers::Battery& batteryController, const Pinetime::Controllers::Ble& bleController, + const Pinetime::Controllers::AlarmController& alarmController, Controllers::DateTime& dateTimeController, Pinetime::Controllers::FS& filesystem, std::array&& apps) @@ -28,6 +29,7 @@ ApplicationList::ApplicationList(DisplayApp* app, settingsController {settingsController}, batteryController {batteryController}, bleController {bleController}, + alarmController {alarmController}, dateTimeController {dateTimeController}, filesystem {filesystem}, apps {std::move(apps)}, @@ -59,6 +61,7 @@ std::unique_ptr ApplicationList::CreateScreen(unsigned int screenNum) co settingsController, batteryController, bleController, + alarmController, dateTimeController, pageApps); } diff --git a/src/displayapp/screens/ApplicationList.h b/src/displayapp/screens/ApplicationList.h index 41a413af..4a57d7c0 100644 --- a/src/displayapp/screens/ApplicationList.h +++ b/src/displayapp/screens/ApplicationList.h @@ -18,6 +18,7 @@ namespace Pinetime { Pinetime::Controllers::Settings& settingsController, const Pinetime::Controllers::Battery& batteryController, const Pinetime::Controllers::Ble& bleController, + const Pinetime::Controllers::AlarmController& alarmController, Controllers::DateTime& dateTimeController, Pinetime::Controllers::FS& filesystem, std::array&& apps); @@ -32,6 +33,7 @@ namespace Pinetime { Controllers::Settings& settingsController; const Pinetime::Controllers::Battery& batteryController; const Pinetime::Controllers::Ble& bleController; + const Pinetime::Controllers::AlarmController& alarmController; Controllers::DateTime& dateTimeController; Pinetime::Controllers::FS& filesystem; std::array apps; diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 7c392c59..7c585a4b 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -29,9 +29,13 @@ Tile::Tile(uint8_t screenID, Controllers::Settings& settingsController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController, Controllers::DateTime& dateTimeController, std::array& applications) - : app {app}, dateTimeController {dateTimeController}, pageIndicator(screenID, numScreens), statusIcons(batteryController, bleController) { + : app {app}, + dateTimeController {dateTimeController}, + pageIndicator(screenID, numScreens), + statusIcons(batteryController, bleController, alarmController) { settingsController.SetAppMenu(screenID); diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index f1b86246..c16151d0 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -28,6 +28,7 @@ namespace Pinetime { Controllers::Settings& settingsController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController, Controllers::DateTime& dateTimeController, std::array& applications); diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index d944117d..3163c6e7 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -19,6 +19,7 @@ using namespace Pinetime::Applications::Screens; WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController, Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController, Controllers::HeartRateController& heartRateController, @@ -31,7 +32,7 @@ WatchFaceDigital::WatchFaceDigital(Controllers::DateTime& dateTimeController, heartRateController {heartRateController}, motionController {motionController}, weatherService {weatherService}, - statusIcons(batteryController, bleController) { + statusIcons(batteryController, bleController, alarmController) { statusIcons.Create(); diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index 7bb713cb..3005cea5 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -17,6 +17,7 @@ namespace Pinetime { class Settings; class Battery; class Ble; + class AlarmController; class NotificationManager; class HeartRateController; class MotionController; @@ -30,6 +31,7 @@ namespace Pinetime { WatchFaceDigital(Controllers::DateTime& dateTimeController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController, Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController, Controllers::HeartRateController& heartRateController, @@ -84,6 +86,7 @@ namespace Pinetime { return new Screens::WatchFaceDigital(controllers.dateTimeController, controllers.batteryController, controllers.bleController, + controllers.alarmController, controllers.notificationManager, controllers.settingsController, controllers.heartRateController, diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 05484888..c5c3071a 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -33,13 +33,14 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, Controllers::BrightnessController& brightness, Controllers::MotorController& motorController, Pinetime::Controllers::Settings& settingsController, - const Controllers::Ble& bleController) + const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController) : app {app}, dateTimeController {dateTimeController}, brightness {brightness}, motorController {motorController}, settingsController {settingsController}, - statusIcons(batteryController, bleController) { + statusIcons(batteryController, bleController, alarmController) { statusIcons.Create(); diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index 55da6176..87c126b7 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -23,7 +23,8 @@ namespace Pinetime { Controllers::BrightnessController& brightness, Controllers::MotorController& motorController, Pinetime::Controllers::Settings& settingsController, - const Controllers::Ble& bleController); + const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController); ~QuickSettings() override; diff --git a/src/displayapp/widgets/StatusIcons.cpp b/src/displayapp/widgets/StatusIcons.cpp index 423b53d9..777731a5 100644 --- a/src/displayapp/widgets/StatusIcons.cpp +++ b/src/displayapp/widgets/StatusIcons.cpp @@ -1,10 +1,13 @@ #include "displayapp/widgets/StatusIcons.h" #include "displayapp/screens/Symbols.h" +#include "components/alarm/AlarmController.h" using namespace Pinetime::Applications::Widgets; -StatusIcons::StatusIcons(const Controllers::Battery& batteryController, const Controllers::Ble& bleController) - : batteryIcon(true), batteryController {batteryController}, bleController {bleController} { +StatusIcons::StatusIcons(const Controllers::Battery& batteryController, + const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController) + : batteryIcon(true), batteryController {batteryController}, bleController {bleController}, alarmController {alarmController} { } void StatusIcons::Create() { @@ -20,6 +23,9 @@ void StatusIcons::Create() { batteryPlug = lv_label_create(container, nullptr); lv_label_set_text_static(batteryPlug, Screens::Symbols::plug); + alarmIcon = lv_label_create(container, nullptr); + lv_label_set_text_static(alarmIcon, Screens::Symbols::bell); + batteryIcon.Create(container); lv_obj_align(container, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); @@ -37,6 +43,11 @@ void StatusIcons::Update() { batteryIcon.SetBatteryPercentage(batteryPercent); } + alarmEnabled = alarmController.IsEnabled(); + if (alarmEnabled.IsUpdated()) { + lv_obj_set_hidden(alarmIcon, !alarmEnabled.Get()); + } + bleState = bleController.IsConnected(); bleRadioEnabled = bleController.IsRadioEnabled(); if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { diff --git a/src/displayapp/widgets/StatusIcons.h b/src/displayapp/widgets/StatusIcons.h index 9e21d3ad..5524e996 100644 --- a/src/displayapp/widgets/StatusIcons.h +++ b/src/displayapp/widgets/StatusIcons.h @@ -5,6 +5,7 @@ #include "displayapp/screens/Screen.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" +#include "components/alarm/AlarmController.h" #include "displayapp/screens/BatteryIcon.h" #include "utility/DirtyValue.h" @@ -13,7 +14,9 @@ namespace Pinetime { namespace Widgets { class StatusIcons { public: - StatusIcons(const Controllers::Battery& batteryController, const Controllers::Ble& bleController); + StatusIcons(const Controllers::Battery& batteryController, + const Controllers::Ble& bleController, + const Controllers::AlarmController& alarmController); void Align(); void Create(); @@ -27,13 +30,16 @@ namespace Pinetime { Screens::BatteryIcon batteryIcon; const Pinetime::Controllers::Battery& batteryController; const Controllers::Ble& bleController; + const Controllers::AlarmController& alarmController; Utility::DirtyValue batteryPercentRemaining {}; Utility::DirtyValue powerPresent {}; Utility::DirtyValue bleState {}; Utility::DirtyValue bleRadioEnabled {}; + Utility::DirtyValue alarmEnabled {}; lv_obj_t* bleIcon; + lv_obj_t* alarmIcon; lv_obj_t* batteryPlug; lv_obj_t* container; }; From dbe8820834fda6b0fc818d68c104924b463e0d9c Mon Sep 17 00:00:00 2001 From: ljahn <36698527+ljahn@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:10:41 +0100 Subject: [PATCH 077/114] Alarm: Simplify alarm alerting screen (#2211) Simplify alarm alerting screen and fix bug with alerting on time value change SetAlerting creates an lv_task to automatically call StopAlerting after one minute. This task will call an invalid function reference and lead to a crash under the following condition: All exit paths but the time value change (so not considering this fix) call StopAlerting themselves, which also terminates the lv_task. However, the value change callback only calls DisableAlarm, because its normal use case is for setting up an alarm, where you have to re-confirm enabling the alarm after every change you make. DisableAlarm still sets isAlerting in the alarmController to false, probably because someone thought a currently alerting but also disabled alarm makes no sense, this was introduced in a0cd439. That causes the destructor of Alarm to think there is nothing to do regarding the alerting when the alarm screen is dismissed. Therefore it does not call StopAlerting and the lv_task is left with an invalid function pointer, because Alarm does not exist anymore once the lv_task finally goes to call the callback function --- src/components/alarm/AlarmController.cpp | 1 - src/displayapp/screens/Alarm.cpp | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index 7dbfb0e3..4ae42c08 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -111,7 +111,6 @@ uint32_t AlarmController::SecondsToAlarm() const { void AlarmController::DisableAlarm() { xTimerStop(alarmTimer, 0); - isAlerting = false; if (alarm.isEnabled) { alarm.isEnabled = false; alarmChanged = true; diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index b1e67363..4cf43921 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -77,7 +77,7 @@ Alarm::Alarm(Controllers::AlarmController& alarmController, btnStop = lv_btn_create(lv_scr_act(), nullptr); btnStop->user_data = this; lv_obj_set_event_cb(btnStop, btnEventHandler); - lv_obj_set_size(btnStop, 115, 50); + lv_obj_set_size(btnStop, 240, 70); lv_obj_align(btnStop, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_set_style_local_bg_color(btnStop, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); txtStop = lv_label_create(btnStop, nullptr); @@ -203,6 +203,10 @@ void Alarm::UpdateAlarmTime() { void Alarm::SetAlerting() { lv_obj_set_hidden(enableSwitch, true); + lv_obj_set_hidden(btnRecur, true); + lv_obj_set_hidden(btnInfo, true); + hourCounter.HideControls(); + minuteCounter.HideControls(); lv_obj_set_hidden(btnStop, false); taskStopAlarm = lv_task_create(StopAlarmTaskCallback, pdMS_TO_TICKS(60 * 1000), LV_TASK_PRIO_MID, this); motorController.StartRinging(); @@ -218,8 +222,12 @@ void Alarm::StopAlerting() { taskStopAlarm = nullptr; } wakeLock.Release(); - lv_obj_set_hidden(enableSwitch, false); lv_obj_set_hidden(btnStop, true); + hourCounter.ShowControls(); + minuteCounter.ShowControls(); + lv_obj_set_hidden(btnInfo, false); + lv_obj_set_hidden(btnRecur, false); + lv_obj_set_hidden(enableSwitch, false); } void Alarm::SetSwitchState(lv_anim_enable_t anim) { From de87a0dd3d9c794836961294379b4b26c86507c3 Mon Sep 17 00:00:00 2001 From: Jozef Mlich Date: Fri, 10 Jan 2025 09:06:11 +0100 Subject: [PATCH 078/114] Fixes #2219: use artifact v4 instead of v3 --- .github/workflows/format.yml | 2 +- .github/workflows/main.yml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 71c05fa2..ceb37d5b 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -29,7 +29,7 @@ jobs: run: tests/test-format.sh - name: Upload patches - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: Patches diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 247bd4af..db93bb3f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -52,22 +52,22 @@ jobs: ref_name: ${{ github.head_ref || github.ref_name }} run: echo "REF_NAME=${ref_name//\//-}" >> $GITHUB_ENV - name: Upload DFU artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: InfiniTime DFU ${{ env.REF_NAME }} path: ./build/output/pinetime-mcuboot-app-dfu/* - name: Upload MCUBoot image artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: InfiniTime MCUBoot image ${{ env.REF_NAME }} path: ./build/output/pinetime-mcuboot-app-image-*.bin - name: Upload standalone ELF artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: InfiniTime image ${{ env.REF_NAME }} path: ./build/output/src/pinetime-app-*.out - name: Upload resources artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: InfiniTime resources ${{ env.REF_NAME }} path: ./build/output/infinitime-resources-*.zip @@ -108,7 +108,7 @@ jobs: cmake --build build_lv_sim - name: Upload simulator executable - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: infinisim-${{ env.REF_NAME }} path: build_lv_sim/infinisim @@ -208,7 +208,7 @@ jobs: EOF - name: Upload comment - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: comment path: comment From 7b39d81c8c03d14a950b844e2b8cb15107df92bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Mart=C3=ADnez?= Date: Tue, 28 Jan 2025 20:57:07 +0100 Subject: [PATCH 079/114] Add "Run on InfiniEmu" link to pull requests (#2150) --- .github/workflows/main.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index db93bb3f..41f305b9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,6 +22,8 @@ jobs: text_size: ${{ steps.output-sizes.outputs.text_size }} data_size: ${{ steps.output-sizes.outputs.data_size }} bss_size: ${{ steps.output-sizes.outputs.bss_size }} + firmware_artifact: ${{ steps.upload-firmware.outputs.artifact-id }} + resources_artifact: ${{ steps.upload-resources.outputs.artifact-id }} env: # InfiniTime sources are downloaded to the current directory. # Override SOURCES_DIR in build.sh @@ -63,11 +65,13 @@ jobs: path: ./build/output/pinetime-mcuboot-app-image-*.bin - name: Upload standalone ELF artifacts uses: actions/upload-artifact@v4 + id: upload-firmware with: name: InfiniTime image ${{ env.REF_NAME }} path: ./build/output/src/pinetime-app-*.out - name: Upload resources artifacts uses: actions/upload-artifact@v4 + id: upload-resources with: name: InfiniTime resources ${{ env.REF_NAME }} path: ./build/output/infinitime-resources-*.zip @@ -205,6 +209,8 @@ jobs: | text | ${{ needs.build-firmware.outputs.text_size }}B | ${{ steps.output-sizes-diff.outputs.text_diff }}B | | data | ${{ needs.build-firmware.outputs.data_size }}B | ${{ steps.output-sizes-diff.outputs.data_diff }}B | | bss | ${{ needs.build-firmware.outputs.bss_size }}B | ${{ steps.output-sizes-diff.outputs.bss_diff }}B | + + [Run in InfiniEmu](https://infiniemu.pipe01.net/?firmware=artifact://${{ github.repository }}/${{ needs.build-firmware.outputs.firmware_artifact }}&resources=artifact://${{ github.repository }}/${{ needs.build-firmware.outputs.resources_artifact }}) EOF - name: Upload comment From d371ebc9e293f2ae19cc6c1f0502429237a1a5fe Mon Sep 17 00:00:00 2001 From: Titus <154823939+tituscmd@users.noreply.github.com> Date: Mon, 10 Feb 2025 20:28:20 +0100 Subject: [PATCH 080/114] Improve no notification text (#2238) Change the "No notification" text to "No notifications" --- src/displayapp/screens/Notifications.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 45f72f2e..837c4683 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -246,8 +246,8 @@ namespace { Notifications::NotificationItem::NotificationItem(Pinetime::Controllers::AlertNotificationService& alertNotificationService, Pinetime::Controllers::MotorController& motorController) - : NotificationItem("Notification", - "No notification to display", + : NotificationItem("Notifications", + "No notifications to display", 0, Controllers::NotificationManager::Categories::Unknown, 0, From 993118a3bc5400e0b09a58fa1aa0bc8ae72634a2 Mon Sep 17 00:00:00 2001 From: Max Jakobitsch Date: Wed, 12 Feb 2025 00:43:10 +0100 Subject: [PATCH 081/114] Fix EOL related build issues on Windows (#2077) Prevent line endings from getting normalised to CRLF Co-authored-by: NeroBurner --- .gitattributes | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index 2257cac4..7adb0e69 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,8 +1,9 @@ # Set the default behavior, in case people don't have core.autocrlf set. -* text=auto +# Prevent build errors on non lf systems (like Windows), we need files with lf as newlines. +* text=auto eol=lf # Explicitly declare text files you want to always be normalized and converted -# to native line endings on checkout. +# to lf line endings on checkout. *.c text *.cpp text *.h text From 728da0f4a08d327344aeaf4bf2730a0ce74ab74f Mon Sep 17 00:00:00 2001 From: Steveis Date: Wed, 26 Feb 2025 23:16:20 +0000 Subject: [PATCH 082/114] Fix Infineat crash when charging with AOD (#2256) Optimise the battery animation to not use 100% CPU (which causes DisplayApp to spin forever with AOD) (DisplayApp also needs to be fixed in the future so it cannot spin infinitely) --- src/displayapp/screens/WatchFaceInfineat.cpp | 7 +++++-- src/displayapp/screens/WatchFaceInfineat.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/WatchFaceInfineat.cpp b/src/displayapp/screens/WatchFaceInfineat.cpp index 4c6fc196..40f2abbb 100644 --- a/src/displayapp/screens/WatchFaceInfineat.cpp +++ b/src/displayapp/screens/WatchFaceInfineat.cpp @@ -434,12 +434,15 @@ void WatchFaceInfineat::Refresh() { batteryPercentRemaining = batteryController.PercentRemaining(); isCharging = batteryController.IsCharging(); - if (batteryController.IsCharging()) { // Charging battery animation - chargingBatteryPercent += 1; + // Charging battery animation + if (batteryController.IsCharging() && (xTaskGetTickCount() - chargingAnimationTick > pdMS_TO_TICKS(150))) { + // Dividing 100 by the height gives the battery percentage required to shift the animation by 1 pixel + chargingBatteryPercent += 100 / lv_obj_get_height(logoPine); if (chargingBatteryPercent > 100) { chargingBatteryPercent = batteryPercentRemaining.Get(); } SetBatteryLevel(chargingBatteryPercent); + chargingAnimationTick = xTaskGetTickCount(); } else if (isCharging.IsUpdated() || batteryPercentRemaining.IsUpdated()) { chargingBatteryPercent = batteryPercentRemaining.Get(); SetBatteryLevel(chargingBatteryPercent); diff --git a/src/displayapp/screens/WatchFaceInfineat.h b/src/displayapp/screens/WatchFaceInfineat.h index 55c43f98..78d020f1 100644 --- a/src/displayapp/screens/WatchFaceInfineat.h +++ b/src/displayapp/screens/WatchFaceInfineat.h @@ -47,6 +47,7 @@ namespace Pinetime { private: uint32_t savedTick = 0; uint8_t chargingBatteryPercent = 101; // not a mistake ;) + TickType_t chargingAnimationTick = 0; Utility::DirtyValue batteryPercentRemaining {}; Utility::DirtyValue isCharging {}; From 30e56834d5301a1e2c2578770293365a7664d9f1 Mon Sep 17 00:00:00 2001 From: Titus <154823939+tituscmd@users.noreply.github.com> Date: Fri, 14 Mar 2025 13:07:46 +0100 Subject: [PATCH 083/114] BatteryInfo App Redesign using arc (#2236) Redesign BatteryInfo App using an Arch widget instead of a bar. The colors I used are as follows: - Discharging (default): green - Charging: lime - Battery full: blue - Battery low (<10%): red --- src/displayapp/screens/BatteryInfo.cpp | 43 ++++++++++++++------------ src/displayapp/screens/BatteryInfo.h | 2 +- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index ab0a2bd4..20401988 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -10,33 +10,35 @@ BatteryInfo::BatteryInfo(const Pinetime::Controllers::Battery& batteryController batteryPercent = batteryController.PercentRemaining(); batteryVoltage = batteryController.Voltage(); - charging_bar = lv_bar_create(lv_scr_act(), nullptr); - lv_obj_set_size(charging_bar, 200, 15); - lv_bar_set_range(charging_bar, 0, 100); - lv_obj_align(charging_bar, nullptr, LV_ALIGN_CENTER, 0, 10); - lv_bar_set_anim_time(charging_bar, 1000); - lv_obj_set_style_local_radius(charging_bar, LV_BAR_PART_BG, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_BG, LV_STATE_DEFAULT, Colors::bgAlt); - lv_obj_set_style_local_bg_opa(charging_bar, LV_BAR_PART_BG, LV_STATE_DEFAULT, LV_OPA_100); - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_RED); - lv_bar_set_value(charging_bar, batteryPercent, LV_ANIM_ON); + chargingArc = lv_arc_create(lv_scr_act(), nullptr); + lv_arc_set_rotation(chargingArc, 270); + lv_arc_set_bg_angles(chargingArc, 0, 360); + lv_arc_set_adjustable(chargingArc, false); + lv_obj_set_size(chargingArc, 180, 180); + lv_obj_align(chargingArc, nullptr, LV_ALIGN_CENTER, 0, -30); + lv_arc_set_value(chargingArc, batteryPercent); + lv_obj_set_style_local_bg_opa(chargingArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, LV_OPA_0); + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, Colors::bgAlt); + lv_obj_set_style_local_border_width(chargingArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 2); + lv_obj_set_style_local_radius(chargingArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 0); + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_LIME); status = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(status, "Reading Battery status"); lv_label_set_align(status, LV_LABEL_ALIGN_CENTER); - lv_obj_align(status, charging_bar, LV_ALIGN_OUT_BOTTOM_MID, 0, 20); + lv_obj_align(status, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, -17); percent = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_font(percent, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); + lv_obj_set_style_local_text_font(percent, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); lv_label_set_text_fmt(percent, "%02i%%", batteryPercent); lv_label_set_align(percent, LV_LABEL_ALIGN_LEFT); - lv_obj_align(percent, nullptr, LV_ALIGN_CENTER, 0, -60); + lv_obj_align(percent, chargingArc, LV_ALIGN_CENTER, 0, 0); voltage = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(voltage, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Colors::orange); lv_label_set_text_fmt(voltage, "%1i.%02i volts", batteryVoltage / 1000, batteryVoltage % 1000 / 10); lv_label_set_align(voltage, LV_LABEL_ALIGN_CENTER); - lv_obj_align(voltage, nullptr, LV_ALIGN_CENTER, 0, 95); + lv_obj_align(voltage, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, -7); taskRefresh = lv_task_create(RefreshTaskCallback, 5000, LV_TASK_PRIO_MID, this); Refresh(); @@ -53,22 +55,23 @@ void BatteryInfo::Refresh() { batteryVoltage = batteryController.Voltage(); if (batteryController.IsCharging()) { - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_RED); + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_LIME); lv_label_set_text_static(status, "Charging"); } else if (batteryPercent == 100) { - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_BLUE); + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_BLUE); lv_label_set_text_static(status, "Fully charged"); } else if (batteryPercent < 10) { - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_YELLOW); + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_RED); lv_label_set_text_static(status, "Battery low"); } else { - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, Colors::highlight); + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_GREEN); lv_label_set_text_static(status, "Discharging"); } lv_label_set_text_fmt(percent, "%02i%%", batteryPercent); + lv_obj_align(percent, chargingArc, LV_ALIGN_CENTER, 0, 0); - lv_obj_align(status, charging_bar, LV_ALIGN_OUT_BOTTOM_MID, 0, 20); + lv_obj_align(status, voltage, LV_ALIGN_IN_BOTTOM_MID, 0, -27); lv_label_set_text_fmt(voltage, "%1i.%02i volts", batteryVoltage / 1000, batteryVoltage % 1000 / 10); - lv_bar_set_value(charging_bar, batteryPercent, LV_ANIM_ON); + lv_arc_set_value(chargingArc, batteryPercent); } diff --git a/src/displayapp/screens/BatteryInfo.h b/src/displayapp/screens/BatteryInfo.h index aa01d464..27bbaa00 100644 --- a/src/displayapp/screens/BatteryInfo.h +++ b/src/displayapp/screens/BatteryInfo.h @@ -24,7 +24,7 @@ namespace Pinetime { lv_obj_t* voltage; lv_obj_t* percent; - lv_obj_t* charging_bar; + lv_obj_t* chargingArc; lv_obj_t* status; lv_task_t* taskRefresh; From c0638c600707805b84757177c3e1ea61e1e026e0 Mon Sep 17 00:00:00 2001 From: lmamane Date: Fri, 14 Mar 2025 12:10:41 +0000 Subject: [PATCH 084/114] work around g++ version 12, 13 and 14 spurious warning (#2158) which is an error since we compile with -Werror Co-authored-by: Lionel Elie Mamane --- src/displayapp/screens/SystemInfo.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 886dacb6..01204aed 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -241,7 +241,12 @@ std::unique_ptr SystemInfo::CreateScreen4() { lv_table_set_col_width(infoTask, 3, 90); auto nb = uxTaskGetSystemState(tasksStatus, maxTaskCount, nullptr); +// g++ emits a spurious warning (and thus error because we compile with -Werror) +// due to the way std::sort is implemented +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" std::sort(tasksStatus, tasksStatus + nb, sortById); +#pragma GCC diagnostic pop for (uint8_t i = 0; i < nb && i < maxTaskCount; i++) { char buffer[11] = {0}; From e06dd405bc9548ad6e1250b01d6132fbe032bc4d Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Sun, 3 Nov 2024 19:21:00 +0100 Subject: [PATCH 085/114] make cmake command coherent with previous documentation --- doc/buildAndProgram.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 69e4bfd8..b588b649 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -66,7 +66,7 @@ DFU files are the files you'll need to install your build of InfiniTime using OT #### CMake command ``` -cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... +cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -S .. ``` ### Build the project From 445aa1da83adea24e32218bec31e6cbfe279040f Mon Sep 17 00:00:00 2001 From: "Lukas H." Date: Tue, 29 Oct 2024 13:21:18 -0400 Subject: [PATCH 086/114] Update Apps.md --- doc/code/Apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/code/Apps.md b/doc/code/Apps.md index 44c4ed65..5c8a4acb 100644 --- a/doc/code/Apps.md +++ b/doc/code/Apps.md @@ -124,7 +124,7 @@ MyApp.h: ```cpp #pragma once -#include "displayapp/Apps.h" +#include "displayapp/apps/Apps.h" #include "displayapp/screens/Screen.h" #include "displayapp/Controllers.h" #include "Symbols.h" From 3659e9a4bafdf4f7a5fe241cc38b82f2a469b38b Mon Sep 17 00:00:00 2001 From: Max-Julian Jakobitsch Date: Fri, 14 Jun 2024 19:30:23 +0200 Subject: [PATCH 087/114] chore: remove defunct .gitconfig not actually used by git, see https://git-scm.com/docs/git-config and https://stackoverflow.com/q/18329621 --- .gitconfig | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .gitconfig diff --git a/.gitconfig b/.gitconfig deleted file mode 100644 index b2274475..00000000 --- a/.gitconfig +++ /dev/null @@ -1,5 +0,0 @@ -[core] - whitespace = blank-at-eol,blank-at-eof,space-before-tab - autocrlf = input -[apply] - whitespace = fix From 483435ae3db9ab5fa3fa8876e941770fa0f878f4 Mon Sep 17 00:00:00 2001 From: Max Jakobitsch Date: Wed, 12 Feb 2025 09:00:51 +0100 Subject: [PATCH 088/114] docs: add git config items to docs --- doc/buildAndProgram.md | 7 ++++++- doc/buildWithDocker.md | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index b588b649..8aa32daf 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -24,10 +24,15 @@ To build this project, you'll need: ### Clone the repo -``` +```sh git clone https://github.com/InfiniTimeOrg/InfiniTime.git cd InfiniTime git submodule update --init + +# configure git to apply whitespace fixes automatically +git config set core.whitespace trailing-space,space-before-tab +git config set apply.whitespace fix + mkdir build cd build ``` diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index 670590a6..9ad65fec 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -15,10 +15,14 @@ Based on Ubuntu 22.04 with the following build dependencies: Before building, local repository must be fully initialized. -``` +```sh git clone https://github.com/InfiniTimeOrg/InfiniTime.git cd InfiniTime git submodule update --init + +# configure git to apply whitespace fixes automatically +git config set core.whitespace trailing-space,space-before-tab +git config set apply.whitespace fix ``` ## Run a container to build the project From 6a6981c91251b96cdf33fe9b094b0833b00ebd8f Mon Sep 17 00:00:00 2001 From: Max Jakobitsch Date: Fri, 14 Feb 2025 09:13:52 +0100 Subject: [PATCH 089/114] Revert "docs: add git config items to docs" This reverts commit 4066cc03004c89a7ac4d5a7a327729184ecac7b6. --- doc/buildAndProgram.md | 7 +------ doc/buildWithDocker.md | 6 +----- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 8aa32daf..b588b649 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -24,15 +24,10 @@ To build this project, you'll need: ### Clone the repo -```sh +``` git clone https://github.com/InfiniTimeOrg/InfiniTime.git cd InfiniTime git submodule update --init - -# configure git to apply whitespace fixes automatically -git config set core.whitespace trailing-space,space-before-tab -git config set apply.whitespace fix - mkdir build cd build ``` diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index 9ad65fec..670590a6 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -15,14 +15,10 @@ Based on Ubuntu 22.04 with the following build dependencies: Before building, local repository must be fully initialized. -```sh +``` git clone https://github.com/InfiniTimeOrg/InfiniTime.git cd InfiniTime git submodule update --init - -# configure git to apply whitespace fixes automatically -git config set core.whitespace trailing-space,space-before-tab -git config set apply.whitespace fix ``` ## Run a container to build the project From 5b20e8e2ba8dae54c7ff5c2d26534b9746df2d15 Mon Sep 17 00:00:00 2001 From: Max Friedrich Date: Tue, 13 May 2025 00:32:03 +0200 Subject: [PATCH 090/114] Simple calculator (#1483) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: minacode Co-authored-by: Finlay Davidson Co-authored-by: SuIông N. Co-authored-by: mark9064 <30447455+mark9064@users.noreply.github.com> --- src/CMakeLists.txt | 1 + src/displayapp/DisplayApp.cpp | 1 + src/displayapp/apps/Apps.h.in | 1 + src/displayapp/apps/CMakeLists.txt | 1 + src/displayapp/fonts/fonts.json | 2 +- src/displayapp/screens/Calculator.cpp | 375 ++++++++++++++++++++++++++ src/displayapp/screens/Calculator.h | 83 ++++++ src/displayapp/screens/Symbols.h | 2 + 8 files changed, 465 insertions(+), 1 deletion(-) create mode 100644 src/displayapp/screens/Calculator.cpp create mode 100644 src/displayapp/screens/Calculator.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2b69b8b..86510590 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -380,6 +380,7 @@ list(APPEND SOURCE_FILES displayapp/screens/Metronome.cpp displayapp/screens/Motion.cpp displayapp/screens/Weather.cpp + displayapp/screens/Calculator.cpp displayapp/screens/FirmwareValidation.cpp displayapp/screens/ApplicationList.cpp displayapp/screens/Notifications.cpp diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 6671ac9e..50d6ce45 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -30,6 +30,7 @@ #include "displayapp/screens/Weather.h" #include "displayapp/screens/PassKey.h" #include "displayapp/screens/Error.h" +#include "displayapp/screens/Calculator.h" #include "drivers/Cst816s.h" #include "drivers/St7789.h" diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in index 2104a267..e697096a 100644 --- a/src/displayapp/apps/Apps.h.in +++ b/src/displayapp/apps/Apps.h.in @@ -26,6 +26,7 @@ namespace Pinetime { StopWatch, Metronome, Motion, + Calculator, Steps, Dice, Weather, diff --git a/src/displayapp/apps/CMakeLists.txt b/src/displayapp/apps/CMakeLists.txt index d7858760..33e54323 100644 --- a/src/displayapp/apps/CMakeLists.txt +++ b/src/displayapp/apps/CMakeLists.txt @@ -13,6 +13,7 @@ else () set(DEFAULT_USER_APP_TYPES "${DEFAULT_USER_APP_TYPES}, Apps::Dice") set(DEFAULT_USER_APP_TYPES "${DEFAULT_USER_APP_TYPES}, Apps::Metronome") set(DEFAULT_USER_APP_TYPES "${DEFAULT_USER_APP_TYPES}, Apps::Navigation") + set(DEFAULT_USER_APP_TYPES "${DEFAULT_USER_APP_TYPES}, Apps::Calculator") set(DEFAULT_USER_APP_TYPES "${DEFAULT_USER_APP_TYPES}, Apps::Weather") #set(DEFAULT_USER_APP_TYPES "${DEFAULT_USER_APP_TYPES}, Apps::Motion") set(USERAPP_TYPES "${DEFAULT_USER_APP_TYPES}" CACHE STRING "List of user apps to build into the firmware") diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index 41c383c0..fea31605 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -7,7 +7,7 @@ }, { "file": "FontAwesome5-Solid+Brands+Regular.woff", - "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743" + "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743, 0xf1ec, 0xf55a" } ], "bpp": 1, diff --git a/src/displayapp/screens/Calculator.cpp b/src/displayapp/screens/Calculator.cpp new file mode 100644 index 00000000..a1f09383 --- /dev/null +++ b/src/displayapp/screens/Calculator.cpp @@ -0,0 +1,375 @@ +#include +#include +#include "Calculator.h" +#include "displayapp/InfiniTimeTheme.h" +#include "Symbols.h" + +using namespace Pinetime::Applications::Screens; + +static void eventHandler(lv_obj_t* obj, lv_event_t event) { + auto app = static_cast(obj->user_data); + app->OnButtonEvent(obj, event); +} + +Calculator::~Calculator() { + lv_obj_clean(lv_scr_act()); +} + +constexpr const char* const buttonMap[] = { + "7", "8", "9", Symbols::backspace, "\n", "4", "5", "6", "+ -", "\n", "1", "2", "3", "* /", "\n", "0", ".", "(-)", "=", ""}; + +Calculator::Calculator() { + resultLabel = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_long_mode(resultLabel, LV_LABEL_LONG_CROP); + lv_label_set_align(resultLabel, LV_LABEL_ALIGN_RIGHT); + lv_label_set_text_fmt(resultLabel, "%" PRId64, result); + lv_obj_set_size(resultLabel, 200, 20); + lv_obj_set_pos(resultLabel, 10, 5); + + valueLabel = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_long_mode(valueLabel, LV_LABEL_LONG_CROP); + lv_label_set_align(valueLabel, LV_LABEL_ALIGN_RIGHT); + lv_label_set_text_fmt(valueLabel, "%" PRId64, value); + lv_obj_set_size(valueLabel, 200, 20); + lv_obj_set_pos(valueLabel, 10, 35); + + buttonMatrix = lv_btnmatrix_create(lv_scr_act(), nullptr); + buttonMatrix->user_data = this; + lv_obj_set_event_cb(buttonMatrix, eventHandler); + lv_btnmatrix_set_map(buttonMatrix, const_cast(buttonMap)); + lv_btnmatrix_set_one_check(buttonMatrix, true); + lv_obj_set_size(buttonMatrix, 238, 180); + lv_obj_set_style_local_bg_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, Colors::bgAlt); + lv_obj_set_style_local_pad_inner(buttonMatrix, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 1); + lv_obj_set_style_local_pad_top(buttonMatrix, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 1); + lv_obj_set_style_local_pad_bottom(buttonMatrix, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 1); + lv_obj_set_style_local_pad_left(buttonMatrix, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 1); + lv_obj_set_style_local_pad_right(buttonMatrix, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 1); + lv_obj_align(buttonMatrix, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + + lv_obj_set_style_local_bg_opa(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, LV_OPA_COVER); + lv_obj_set_style_local_bg_grad_stop(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, 128); + lv_obj_set_style_local_bg_main_stop(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, 128); +} + +void Calculator::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { + if ((obj == buttonMatrix) && (event == LV_EVENT_PRESSED)) { + HandleInput(); + } +} + +void Calculator::HandleInput() { + const char* buttonText = lv_btnmatrix_get_active_btn_text(buttonMatrix); + + if (buttonText == nullptr) { + return; + } + + if ((equalSignPressedBefore && (*buttonText != '=')) || (error != Error::None)) { + ResetInput(); + UpdateOperation(); + } + + // we only compare the first char because it is enough + switch (*buttonText) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': { + // *buttonText is the first char in buttonText + // "- '0'" results in the int value of the char + uint8_t digit = (*buttonText) - '0'; + int8_t sign = (value < 0) ? -1 : 1; + + // if this is true, we already pressed the . button + if (offset < FIXED_POINT_OFFSET) { + value += sign * offset * digit; + offset /= 10; + } else if (value <= MAX_VALUE / 10) { + value *= 10; + value += sign * offset * digit; + } + } break; + + // unary minus + case '(': + value = -value; + break; + + case '.': + if (offset == FIXED_POINT_OFFSET) { + offset /= 10; + } + break; + + // for every operator we: + // - eval the current operator if value > FIXED_POINT_OFFSET + // - then set the new operator + // - + and - as well as * and / cycle on the same button + case '+': + if (value != 0) { + Eval(); + ResetInput(); + } + + switch (operation) { + case '+': + operation = '-'; + break; + case '-': + operation = ' '; + break; + default: + operation = '+'; + break; + } + UpdateOperation(); + break; + + case '*': + if (value != 0) { + Eval(); + ResetInput(); + } + + switch (operation) { + case '*': + operation = '/'; + break; + case '/': + operation = ' '; + break; + default: + operation = '*'; + break; + } + UpdateOperation(); + break; + + // this is a little hacky because it matches only the first char + case Symbols::backspace[0]: + if (value != 0) { + // delete one value digit + if (offset < FIXED_POINT_OFFSET) { + if (offset == 0) { + offset = 1; + } else { + offset *= 10; + } + } else { + value /= 10; + } + if (offset < FIXED_POINT_OFFSET) { + value -= value % (10 * offset); + } else { + value -= value % offset; + } + } else if (offset < FIXED_POINT_OFFSET) { + if (offset == 0) { + offset = 1; + } else { + offset *= 10; + } + } else { + // reset the result + result = 0; + } + + if (value == 0) { + operation = ' '; + UpdateOperation(); + } + break; + + case '=': + equalSignPressedBefore = true; + Eval(); + // If the operation is ' ' then we move the value to the result. + // We reset the input after this. + // This seems more convenient. + if (operation == ' ') { + ResetInput(); + } + break; + } + + UpdateValueLabel(); + UpdateResultLabel(); +} + +void Calculator::UpdateOperation() const { + switch (operation) { + case '+': + lv_obj_set_style_local_bg_grad_dir(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, LV_GRAD_DIR_HOR); + lv_obj_set_style_local_bg_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::deepOrange); + lv_obj_set_style_local_bg_grad_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::bgAlt); + lv_btnmatrix_set_btn_ctrl(buttonMatrix, 7, LV_BTNMATRIX_CTRL_CHECK_STATE); + break; + case '-': + lv_obj_set_style_local_bg_grad_dir(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, LV_GRAD_DIR_HOR); + lv_obj_set_style_local_bg_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::bgAlt); + lv_obj_set_style_local_bg_grad_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::deepOrange); + lv_btnmatrix_set_btn_ctrl(buttonMatrix, 7, LV_BTNMATRIX_CTRL_CHECK_STATE); + break; + case '*': + lv_obj_set_style_local_bg_grad_dir(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, LV_GRAD_DIR_HOR); + lv_obj_set_style_local_bg_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::deepOrange); + lv_obj_set_style_local_bg_grad_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::bgAlt); + lv_btnmatrix_set_btn_ctrl(buttonMatrix, 11, LV_BTNMATRIX_CTRL_CHECK_STATE); + break; + case '/': + lv_obj_set_style_local_bg_grad_dir(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, LV_GRAD_DIR_HOR); + lv_obj_set_style_local_bg_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::bgAlt); + lv_obj_set_style_local_bg_grad_color(buttonMatrix, LV_BTNMATRIX_PART_BTN, LV_STATE_CHECKED, Colors::deepOrange); + lv_btnmatrix_set_btn_ctrl(buttonMatrix, 11, LV_BTNMATRIX_CTRL_CHECK_STATE); + break; + default: + lv_btnmatrix_clear_btn_ctrl_all(buttonMatrix, LV_BTNMATRIX_CTRL_CHECK_STATE); + break; + } +} + +void Calculator::ResetInput() { + value = 0; + offset = FIXED_POINT_OFFSET; + operation = ' '; + equalSignPressedBefore = false; + error = Error::None; +} + +void Calculator::UpdateResultLabel() const { + int64_t integer = result / FIXED_POINT_OFFSET; + int64_t remainder = result % FIXED_POINT_OFFSET; + bool negative = (remainder < 0); + + if (remainder == 0) { + lv_label_set_text_fmt(resultLabel, "%" PRId64, integer); + return; + } + + if (remainder < 0) { + remainder = -remainder; + } + + uint8_t minWidth = N_DECIMALS; + + // cut "0"-digits on the right + while ((remainder > 0) && (remainder % 10 == 0)) { + remainder /= 10; + minWidth--; + } + + if ((integer == 0) && negative) { + lv_label_set_text_fmt(resultLabel, "-0.%0*" PRId64, minWidth, remainder); + } else { + lv_label_set_text_fmt(resultLabel, "%" PRId64 ".%0*" PRId64, integer, minWidth, remainder); + } +} + +void Calculator::UpdateValueLabel() { + switch (error) { + case Error::TooLarge: + lv_label_set_text_static(valueLabel, "too large"); + break; + case Error::ZeroDivision: + lv_label_set_text_static(valueLabel, "zero division"); + break; + case Error::None: + default: { + int64_t integer = value / FIXED_POINT_OFFSET; + int64_t remainder = value % FIXED_POINT_OFFSET; + bool negative = (remainder < 0); + + int64_t printRemainder = remainder < 0 ? -remainder : remainder; + + uint8_t minWidth = 0; + int64_t tmpOffset = offset; + + if (tmpOffset == 0) { + tmpOffset = 1; + minWidth = 1; + } + while (tmpOffset < FIXED_POINT_OFFSET) { + tmpOffset *= 10; + minWidth++; + } + minWidth--; + + for (uint8_t i = minWidth; i < N_DECIMALS; i++) { + printRemainder /= 10; + } + + if ((integer == 0) && negative) { + lv_label_set_text_fmt(valueLabel, "-0.%0*" PRId64, minWidth, printRemainder); + } else if (offset == FIXED_POINT_OFFSET) { + lv_label_set_text_fmt(valueLabel, "%" PRId64, integer); + } else if ((offset == (FIXED_POINT_OFFSET / 10)) && (remainder == 0)) { + lv_label_set_text_fmt(valueLabel, "%" PRId64 ".", integer); + } else { + lv_label_set_text_fmt(valueLabel, "%" PRId64 ".%0*" PRId64, integer, minWidth, printRemainder); + } + } break; + } +} + +// update the result based on value and operation +void Calculator::Eval() { + switch (operation) { + case ' ': + result = value; + break; + + case '+': + // check for overflow + if (((result > 0) && (value > (MAX_VALUE - result))) || ((result < 0) && (value < (MIN_VALUE - result)))) { + error = Error::TooLarge; + break; + } + + result += value; + break; + case '-': + // check for overflow + if (((result < 0) && (value > (MAX_VALUE + result))) || ((result > 0) && (value < (MIN_VALUE + result)))) { + error = Error::TooLarge; + break; + } + + result -= value; + break; + case '*': + // check for overflow + // while dividing we eliminate the fixed point offset + // therefore we have to multiply it again for the comparison with value + // we also assume here that MAX_VALUE == -MIN_VALUE + if ((result != 0) && (std::abs(value) > (FIXED_POINT_OFFSET * (MAX_VALUE / std::abs(result))))) { + error = Error::TooLarge; + break; + } + + result *= value; + // fixed point offset was multiplied too + result /= FIXED_POINT_OFFSET; + break; + case '/': + // check for zero division + if (value == 0) { + error = Error::ZeroDivision; + break; + } + + // fixed point offset will be divided too + result *= FIXED_POINT_OFFSET; + result /= value; + break; + + default: + break; + } +} diff --git a/src/displayapp/screens/Calculator.h b/src/displayapp/screens/Calculator.h new file mode 100644 index 00000000..9971f275 --- /dev/null +++ b/src/displayapp/screens/Calculator.h @@ -0,0 +1,83 @@ +#pragma once + +#include "displayapp/screens/Screen.h" +#include "displayapp/apps/Apps.h" +#include "displayapp/Controllers.h" +#include "Symbols.h" + +namespace { + constexpr int64_t powi(int64_t base, uint8_t exponent) { + int64_t value = 1; + while (exponent) { + value *= base; + exponent--; + } + return value; + } +} + +namespace Pinetime { + namespace Applications { + namespace Screens { + class Calculator : public Screen { + public: + ~Calculator() override; + + Calculator(); + + void OnButtonEvent(lv_obj_t* obj, lv_event_t event); + + private: + lv_obj_t* buttonMatrix {}; + lv_obj_t* valueLabel {}; + lv_obj_t* resultLabel {}; + + void Eval(); + void ResetInput(); + void HandleInput(); + void UpdateValueLabel(); + void UpdateResultLabel() const; + void UpdateOperation() const; + + // change this if you want to change the number of decimals + // keep in mind, that we only have 12 digits in total (see MAX_DIGITS) + // due to the fixed point implementation + static constexpr uint8_t N_DECIMALS = 3; + // this is the constant default offset + static constexpr int64_t FIXED_POINT_OFFSET = powi(10, N_DECIMALS); + // this is the current offset, may vary after pressing '.' + int64_t offset = FIXED_POINT_OFFSET; + + // the screen can show 12 chars + // but two are needed for '.' and '-' + static constexpr uint8_t MAX_DIGITS = 12; + static constexpr int64_t MAX_VALUE = powi(10, MAX_DIGITS) - 1; + // this is assumed in the multiplication overflow! + static constexpr int64_t MIN_VALUE = -MAX_VALUE; + + int64_t value = 0; + int64_t result = 0; + char operation = ' '; + bool equalSignPressedBefore = false; + + enum Error { + TooLarge, + ZeroDivision, + None, + }; + + Error error = Error::None; + }; + } + + template <> + struct AppTraits { + static constexpr Apps app = Apps::Calculator; + static constexpr const char* icon = Screens::Symbols::calculator; + + static Screens::Screen* Create(AppControllers& /* controllers */) { + return new Screens::Calculator(); + }; + }; + } +} diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index bd958b28..40699b3d 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -39,6 +39,8 @@ namespace Pinetime { static constexpr const char* eye = "\xEF\x81\xAE"; static constexpr const char* home = "\xEF\x80\x95"; static constexpr const char* sleep = "\xEE\xBD\x84"; + static constexpr const char* calculator = "\xEF\x87\xAC"; + static constexpr const char* backspace = "\xEF\x95\x9A"; // fontawesome_weathericons.c // static constexpr const char* sun = "\xEF\x86\x85"; From 85be83beab1d07d55ad4991cd8e455879e8be8cf Mon Sep 17 00:00:00 2001 From: Titus <154823939+tituscmd@users.noreply.github.com> Date: Thu, 15 May 2025 21:46:25 +0200 Subject: [PATCH 091/114] Add background color to progress bar when flashing firmware (#2237) --- src/displayapp/screens/FirmwareUpdate.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/displayapp/screens/FirmwareUpdate.cpp b/src/displayapp/screens/FirmwareUpdate.cpp index c40240c9..7d00ef39 100644 --- a/src/displayapp/screens/FirmwareUpdate.cpp +++ b/src/displayapp/screens/FirmwareUpdate.cpp @@ -2,6 +2,7 @@ #include #include "components/ble/BleController.h" #include "displayapp/DisplayApp.h" +#include "displayapp/InfiniTimeTheme.h" using namespace Pinetime::Applications::Screens; @@ -12,6 +13,9 @@ FirmwareUpdate::FirmwareUpdate(const Pinetime::Controllers::Ble& bleController) lv_obj_align(titleLabel, nullptr, LV_ALIGN_IN_TOP_MID, 0, 50); bar1 = lv_bar_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(bar1, LV_BAR_PART_BG, LV_STATE_DEFAULT, Colors::bgAlt); + lv_obj_set_style_local_bg_opa(bar1, LV_BAR_PART_BG, LV_STATE_DEFAULT, LV_OPA_100); + lv_obj_set_style_local_radius(bar1, LV_BAR_PART_BG, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_obj_set_size(bar1, 200, 30); lv_obj_align(bar1, nullptr, LV_ALIGN_CENTER, 0, 0); lv_bar_set_range(bar1, 0, 1000); @@ -75,7 +79,7 @@ void FirmwareUpdate::DisplayProgression() const { const uint32_t total = bleController.FirmwareUpdateTotalBytes(); const int16_t permille = current / (total / 1000); - lv_label_set_text_fmt(percentLabel, "%d %%", permille / 10); + lv_label_set_text_fmt(percentLabel, "%d%%", permille / 10); lv_bar_set_value(bar1, permille, LV_ANIM_OFF); } From 4e1ee90286355caa54ac57d2eb5e59748a09a2de Mon Sep 17 00:00:00 2001 From: Max Friedrich Date: Fri, 16 May 2025 21:29:06 +0200 Subject: [PATCH 092/114] Remove the vibration while charging (#1768) * DisplayApp.cpp: Remove the vibration from OnChargingEvent This fixes a bug where the vibration interupts the physical connection with the charger and therefore triggers a new charging event and vibration, ending in a cycle of vibrations while charging. * remove OnChargingEvent message from DisplayApp --------- Co-authored-by: minacode --- src/displayapp/DisplayApp.cpp | 3 --- src/displayapp/Messages.h | 1 - src/systemtask/SystemTask.cpp | 1 - 3 files changed, 5 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 50d6ce45..add00650 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -476,9 +476,6 @@ void DisplayApp::Refresh() { LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::None); motorController.RunForDuration(35); break; - case Messages::OnChargingEvent: - motorController.RunForDuration(15); - break; } } diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index d2abc8e5..1fcd72d2 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -24,7 +24,6 @@ namespace Pinetime { AlarmTriggered, Chime, BleRadioEnableToggle, - OnChargingEvent, }; } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index eb013d6d..8e0435e3 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -339,7 +339,6 @@ void SystemTask::Work() { case Messages::OnChargingEvent: batteryController.ReadPowerState(); GoToRunning(); - displayApp.PushMessage(Applications::Display::Messages::OnChargingEvent); break; case Messages::MeasureBatteryTimerExpired: batteryController.MeasureVoltage(); From bb8923b56e3c89a3e9b8dad70fc80f61f14deb17 Mon Sep 17 00:00:00 2001 From: Titus <154823939+tituscmd@users.noreply.github.com> Date: Fri, 16 May 2025 23:01:19 +0200 Subject: [PATCH 093/114] Center text on timer button (#2229) --- src/displayapp/screens/Timer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index f6d5e73b..31cde733 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -59,8 +59,8 @@ Timer::Timer(Controllers::Timer& timerController) : timer {timerController} { lv_obj_set_event_cb(btnPlayPause, btnEventHandler); lv_obj_set_size(btnPlayPause, LV_HOR_RES, 50); - txtPlayPause = lv_label_create(lv_scr_act(), nullptr); - lv_obj_align(txtPlayPause, btnPlayPause, LV_ALIGN_CENTER, 0, 0); + // Create the label as a child of the button so it stays centered by default + txtPlayPause = lv_label_create(btnPlayPause, nullptr); if (timer.IsRunning()) { SetTimerRunning(); From fb70b538e4ce9a7b56b609a1d3baf98e2081aedd Mon Sep 17 00:00:00 2001 From: Matt Zrinsky Date: Sun, 23 Mar 2025 06:01:47 -0500 Subject: [PATCH 094/114] Fix about screen vertical centering. There was a newline at the end of the last line on the third screen, which was causing the label to not be centered vertically. Removing it fixes the centering. --- src/displayapp/screens/SystemInfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 01204aed..2392f3be 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -198,7 +198,7 @@ std::unique_ptr SystemInfo::CreateScreen3() { " #808080 Free# %d/%d\n" " #808080 Min free# %d\n" " #808080 Alloc err# %d\n" - " #808080 Ovrfl err# %d\n", + " #808080 Ovrfl err# %d", bleAddr[5], bleAddr[4], bleAddr[3], From e27e51d36af0a7a48fefbfb730151ad872da6845 Mon Sep 17 00:00:00 2001 From: Julian Vos Date: Sat, 29 Mar 2025 13:29:33 +0100 Subject: [PATCH 095/114] fix: fix short ref not getting set in github builds --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 41f305b9..8e8677f3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,7 +39,9 @@ jobs: apt-get -y install --no-install-recommends python3-pil - name: Build shell: bash - run: /opt/build.sh all + run: | + git config --global --add safe.directory /__w/InfiniTime/InfiniTime + /opt/build.sh all - name: Output build size id: output-sizes run: | From 248a6aea8771389cf733e89090096258e936f3b2 Mon Sep 17 00:00:00 2001 From: Darius Arnold Date: Wed, 21 May 2025 22:17:42 +0200 Subject: [PATCH 096/114] Fix nRF SDK download links (#2270) nRF has moved the download to a new location- Update the build script to fetch from the same URL the download website currently provides. --- doc/buildAndProgram.md | 2 +- docker/build.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index b588b649..5d3af46e 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -5,7 +5,7 @@ To build this project, you'll need: - A cross-compiler : [ARM-GCC (10.3-2021.10)](https://developer.arm.com/downloads/-/gnu-rm) -- The NRF52 SDK 15.3.0 : [nRF-SDK v15.3.0](https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip) +- The NRF52 SDK 15.3.0 : [nRF-SDK v15.3.0](https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/sdks/nrf5/binaries/nrf5sdk153059ac345.zip) - The Python 3 modules `cbor`, `intelhex`, `click` and `cryptography` modules for the `mcuboot` tool (see [requirements.txt](../tools/mcuboot/requirements.txt)) - To keep the system clean, you can install python modules into a python virtual environment (`venv`) ```sh diff --git a/docker/build.sh b/docker/build.sh index 3a467b9f..bb028066 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -17,7 +17,7 @@ export npm_config_cache="${NPM_DIR}" export BUILD_TYPE=${BUILD_TYPE:=Release} export GCC_ARM_VER=${GCC_ARM_VER:="10.3-2021.10"} -export NRF_SDK_VER=${NRF_SDK_VER:="nRF5_SDK_15.3.0_59ac345"} +export NRF_SDK_VER=${NRF_SDK_VER:="nrf5sdk153059ac345"} MACHINE="$(uname -m)" [ "$MACHINE" = "arm64" ] && MACHINE="aarch64" @@ -55,7 +55,7 @@ GetMcuBoot() { } GetNrfSdk() { - wget -q "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/$NRF_SDK_VER.zip" -O /tmp/$NRF_SDK_VER + wget -q "https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/sdks/nrf5/binaries/$NRF_SDK_VER.zip" -O /tmp/$NRF_SDK_VER unzip -q /tmp/$NRF_SDK_VER -d "$TOOLS_DIR/" rm /tmp/$NRF_SDK_VER } From 9fb35cc073452d20a8c106693d86ffd332a85032 Mon Sep 17 00:00:00 2001 From: Steve Amor Date: Fri, 28 Feb 2025 19:15:29 +0000 Subject: [PATCH 097/114] Refactors watch faces. Replace lv_tick_get() with xTaskGetTickCount() --- src/displayapp/screens/WatchFaceInfineat.cpp | 4 ++-- src/displayapp/screens/WatchFaceInfineat.h | 2 +- src/displayapp/screens/WatchFacePineTimeStyle.cpp | 4 ++-- src/displayapp/screens/WatchFacePineTimeStyle.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/displayapp/screens/WatchFaceInfineat.cpp b/src/displayapp/screens/WatchFaceInfineat.cpp index 40f2abbb..c7939711 100644 --- a/src/displayapp/screens/WatchFaceInfineat.cpp +++ b/src/displayapp/screens/WatchFaceInfineat.cpp @@ -316,7 +316,7 @@ WatchFaceInfineat::~WatchFaceInfineat() { bool WatchFaceInfineat::OnTouchEvent(Pinetime::Applications::TouchEvents event) { if ((event == Pinetime::Applications::TouchEvents::LongTap) && lv_obj_get_hidden(btnSettings)) { lv_obj_set_hidden(btnSettings, false); - savedTick = lv_tick_get(); + savedTick = xTaskGetTickCount(); return true; } // Prevent screen from sleeping when double tapping with settings on @@ -463,7 +463,7 @@ void WatchFaceInfineat::Refresh() { } if (!lv_obj_get_hidden(btnSettings)) { - if ((savedTick > 0) && (lv_tick_get() - savedTick > 3000)) { + if ((savedTick > 0) && (xTaskGetTickCount() - savedTick > pdMS_TO_TICKS(3000))) { lv_obj_set_hidden(btnSettings, true); savedTick = 0; } diff --git a/src/displayapp/screens/WatchFaceInfineat.h b/src/displayapp/screens/WatchFaceInfineat.h index 78d020f1..c8e11039 100644 --- a/src/displayapp/screens/WatchFaceInfineat.h +++ b/src/displayapp/screens/WatchFaceInfineat.h @@ -45,8 +45,8 @@ namespace Pinetime { static bool IsAvailable(Pinetime::Controllers::FS& filesystem); private: - uint32_t savedTick = 0; uint8_t chargingBatteryPercent = 101; // not a mistake ;) + TickType_t savedTick = 0; TickType_t chargingAnimationTick = 0; Utility::DirtyValue batteryPercentRemaining {}; diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index 22ccefc7..ce8f8f7e 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -407,7 +407,7 @@ bool WatchFacePineTimeStyle::OnTouchEvent(Pinetime::Applications::TouchEvents ev if ((event == Pinetime::Applications::TouchEvents::LongTap) && lv_obj_get_hidden(btnClose)) { lv_obj_set_hidden(btnSetColor, false); lv_obj_set_hidden(btnSetOpts, false); - savedTick = lv_tick_get(); + savedTick = xTaskGetTickCount(); return true; } if ((event == Pinetime::Applications::TouchEvents::DoubleTap) && (lv_obj_get_hidden(btnClose) == false)) { @@ -558,7 +558,7 @@ void WatchFacePineTimeStyle::Refresh() { } if (!lv_obj_get_hidden(btnSetColor)) { - if ((savedTick > 0) && (lv_tick_get() - savedTick > 3000)) { + if ((savedTick > 0) && (xTaskGetTickCount() - savedTick > pdMS_TO_TICKS(3000))) { lv_obj_set_hidden(btnSetColor, true); lv_obj_set_hidden(btnSetOpts, true); savedTick = 0; diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.h b/src/displayapp/screens/WatchFacePineTimeStyle.h index 72537095..e44a6128 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.h +++ b/src/displayapp/screens/WatchFacePineTimeStyle.h @@ -52,7 +52,7 @@ namespace Pinetime { Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown; uint8_t currentDay = 0; - uint32_t savedTick = 0; + TickType_t savedTick = 0; Utility::DirtyValue batteryPercentRemaining {}; Utility::DirtyValue isCharging {}; From 6f2a661a363494ad6ba7ecdf3bf1807b9701b6ea Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Tue, 27 May 2025 22:56:10 +0200 Subject: [PATCH 098/114] docker: fix NRF_SDK download and subsequent build.sh (#2299) The upstream NRF-SDK download url and zip archive filename changed, which was fixed with https://github.com/InfiniTimeOrg/InfiniTime/pull/2270 But the archive contents stayed the same, with the "old" folder name. After #2270 we have basically the same docker-container as before the PR, but the `GetNrfSdk` function of the `build.sh` script is called again during firmware build time as the expected foldername for the SDK isn't the same as the zip filename: ```sh [ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ] && GetNrfSdk ``` Then during the build the `buils.sh` script tries to execute `GetNrfSdk` again, which fails as the files already exist resulting in the following error: ``` replace /opt/nRF5_SDK_15.3.0_59ac345/components/802_15_4/api/HAL/hal_atomic.h? [y]es, [n]o, [A]ll, [N]one, [r]ename: NULL ``` Fix this by reverting the `NRF_SDK_VER` to the folder name in the zip archive and by some character replacement generate the download URL from the above (the download is in lower-case without the `_` and `.` characters). Furthermore add safeguards to check after the `GetNrfSdk` call if the expected folder is really created. Then we have an error early during container image creation if the contents of the zip-archive are unexpected. --- docker/build.sh | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docker/build.sh b/docker/build.sh index bb028066..b7637f49 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -17,7 +17,11 @@ export npm_config_cache="${NPM_DIR}" export BUILD_TYPE=${BUILD_TYPE:=Release} export GCC_ARM_VER=${GCC_ARM_VER:="10.3-2021.10"} -export NRF_SDK_VER=${NRF_SDK_VER:="nrf5sdk153059ac345"} +export NRF_SDK_VER=${NRF_SDK_VER:="nRF5_SDK_15.3.0_59ac345"} +# convert to lower case and remove _ and . character +# the download URL uses the SLUG, but the extracted folder is named like the original value +NRF_SDK_VER_SLUG=${NRF_SDK_VER,,} +export NRF_SDK_VER_SLUG=${NRF_SDK_VER_SLUG//[_.]/} MACHINE="$(uname -m)" [ "$MACHINE" = "arm64" ] && MACHINE="aarch64" @@ -47,17 +51,29 @@ main() { GetGcc() { wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/$GCC_ARM_VER/$GCC_ARM_PATH-$MACHINE-linux.tar.bz2 -O - | tar -xj -C $TOOLS_DIR/ + if [ ! -d "$TOOLS_DIR/$GCC_ARM_PATH" ]; then + echo "missing GCC path: $TOOLS_DIR/$GCC_ARM_PATH" + return 1 + fi } GetMcuBoot() { git clone https://github.com/mcu-tools/mcuboot.git "$TOOLS_DIR/mcuboot" pip3 install -r "$TOOLS_DIR/mcuboot/scripts/requirements.txt" + if [ ! -d "$TOOLS_DIR/mcuboot" ]; then + echo "missing mcuboot path: $TOOLS_DIR/mcuboot" + return 1 + fi } GetNrfSdk() { - wget -q "https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/sdks/nrf5/binaries/$NRF_SDK_VER.zip" -O /tmp/$NRF_SDK_VER + wget -q "https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/sdks/nrf5/binaries/$NRF_SDK_VER_SLUG.zip" -O /tmp/$NRF_SDK_VER unzip -q /tmp/$NRF_SDK_VER -d "$TOOLS_DIR/" rm /tmp/$NRF_SDK_VER + if [ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ]; then + echo "missing NRF_SDK path: $TOOLS_DIR/$NRF_SDK_VER" + return 1 + fi } CmakeGenerate() { From c3295d6d2a325f9a7418b15b943342635026926e Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Tue, 27 May 2025 23:26:43 +0200 Subject: [PATCH 099/114] CI: use bash for output-sizs-job Firmware build works. But the build size job afterwards fails. The firmware build uses `shell: bash --noprofile --norc -e -o pipefail {0}` as shell. The size job uses `shell: sh -e {0}` The variable substitution I introduced are bash features. So they don't work with sh. Update the size job to use `bash` instead of `sh` as shell --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8e8677f3..5e32287d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,6 +44,7 @@ jobs: /opt/build.sh all - name: Output build size id: output-sizes + shell: bash run: | . /opt/build.sh .github/workflows/getSize.sh "$BUILD_DIR"/src/pinetime-app-*.out >> $GITHUB_OUTPUT From 22cb7e3388ace0b00098db53c9480ac12749012f Mon Sep 17 00:00:00 2001 From: NeroBurner Date: Thu, 29 May 2025 09:36:50 +0200 Subject: [PATCH 100/114] CI: use bash for get-base-ref-size job (#2305) Same change as done in https://github.com/InfiniTimeOrg/InfiniTime/commit/c3295d6d2a325f9a7418b15b943342635026926e But for get-base-ref-size job The variable substitution I introduced are bash features. So they don't work with sh. Update the size job to use `bash` instead of `sh` as shell --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5e32287d..00ea9382 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -162,6 +162,7 @@ jobs: - name: Output build size id: output-sizes + shell: bash run: | . /opt/build.sh .github/workflows/getSize.sh "$BUILD_DIR"/src/pinetime-app-*.out >> $GITHUB_OUTPUT From 8423ed675bf195bc81be19c78106bae860c8e2b8 Mon Sep 17 00:00:00 2001 From: kon-foo <25391223+kon-foo@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:36:50 +0100 Subject: [PATCH 101/114] fixed libpango1.0-dev install --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index e6d92aae..bd940900 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -33,7 +33,7 @@ RUN apt-get update -qq \ libpixman-1-dev \ libcairo2-dev \ libpango-1.0-0 \ - ibpango1.0-dev \ + libpango1.0-dev \ libpangocairo-1.0-0 \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; From 85a0542d936066a90b74316b686dd911c1451d58 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Sat, 24 May 2025 21:59:43 +0200 Subject: [PATCH 102/114] DisplayApp: use std::ranges function where possible Instead of raw for loops use `std::ranges::transform` where possible. And also use `std::ranges::find_if` instead of `std::find_if`. --- src/displayapp/DisplayApp.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index add00650..f5b2efde 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -54,6 +54,8 @@ #include "libs/lv_conf.h" #include "UserApps.h" +#include + using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; @@ -516,10 +518,9 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio switch (app) { case Apps::Launcher: { std::array apps; - int i = 0; - for (const auto& userApp : userApps) { - apps[i++] = Screens::Tile::Applications {userApp.icon, userApp.app, true}; - } + std::ranges::transform(userApps, apps.begin(), [](const auto& userApp) { + return Screens::Tile::Applications {userApp.icon, userApp.app, true}; + }); currentScreen = std::make_unique(this, settingsController, batteryController, @@ -530,13 +531,12 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio std::move(apps)); } break; case Apps::Clock: { - const auto* watchFace = - std::find_if(userWatchFaces.begin(), userWatchFaces.end(), [this](const WatchFaceDescription& watchfaceDescription) { - return watchfaceDescription.watchFace == settingsController.GetWatchFace(); - }); - if (watchFace != userWatchFaces.end()) + const auto* watchFace = std::ranges::find_if(userWatchFaces, [this](const WatchFaceDescription& watchfaceDescription) { + return watchfaceDescription.watchFace == settingsController.GetWatchFace(); + }); + if (watchFace != userWatchFaces.end()) { currentScreen.reset(watchFace->create(controllers)); - else { + } else { currentScreen.reset(userWatchFaces[0].create(controllers)); } settingsController.SetAppMenu(0); @@ -587,11 +587,11 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio break; case Apps::SettingWatchFace: { std::array items; - int i = 0; - for (const auto& userWatchFace : userWatchFaces) { - items[i++] = - Screens::SettingWatchFace::Item {userWatchFace.name, userWatchFace.watchFace, userWatchFace.isAvailable(controllers.filesystem)}; - } + std::ranges::transform(userWatchFaces, items.begin(), [this](const WatchFaceDescription& userWatchFace) { + return Screens::SettingWatchFace::Item {userWatchFace.name, + userWatchFace.watchFace, + userWatchFace.isAvailable(controllers.filesystem)}; + }); currentScreen = std::make_unique(this, std::move(items), settingsController, filesystem); } break; case Apps::SettingTimeFormat: @@ -639,7 +639,7 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio currentScreen = std::make_unique(*systemTask, brightnessController); break; default: { - const auto* d = std::find_if(userApps.begin(), userApps.end(), [app](const AppDescription& appDescription) { + const auto* d = std::ranges::find_if(userApps, [app](const AppDescription& appDescription) { return appDescription.app == app; }); if (d != userApps.end()) { From 4f426f00a86ebb2e22e9868009948768b1bca07d Mon Sep 17 00:00:00 2001 From: lmamane Date: Thu, 12 Jun 2025 09:12:11 +0200 Subject: [PATCH 103/114] set static text as static text (#2312) and save a few bytes of heap memory Co-authored-by: Lionel Elie Mamane --- src/displayapp/screens/settings/SettingWakeUp.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/displayapp/screens/settings/SettingWakeUp.cpp b/src/displayapp/screens/settings/SettingWakeUp.cpp index 4649dc82..3413257d 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.cpp +++ b/src/displayapp/screens/settings/SettingWakeUp.cpp @@ -8,8 +8,6 @@ using namespace Pinetime::Applications::Screens; -constexpr std::array SettingWakeUp::options; - namespace { void event_handler(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast(obj->user_data); @@ -45,7 +43,7 @@ SettingWakeUp::SettingWakeUp(Pinetime::Controllers::Settings& settingsController for (unsigned int i = 0; i < options.size(); i++) { cbOption[i] = lv_checkbox_create(container1, nullptr); - lv_checkbox_set_text(cbOption[i], options[i].name); + lv_checkbox_set_text_static(cbOption[i], options[i].name); if (settingsController.isWakeUpModeOn(static_cast(i))) { lv_checkbox_set_checked(cbOption[i], true); } From b2d0e04e42f8d321a87343f2759f8038b21bc214 Mon Sep 17 00:00:00 2001 From: Titus <154823939+tituscmd@users.noreply.github.com> Date: Thu, 12 Jun 2025 09:13:53 +0200 Subject: [PATCH 104/114] BatteryInfo App Redesign: Fixup (#2310) * remove leading zeros from battery percentage * add correct colors matching the battery icon color thresholds --- src/displayapp/screens/BatteryInfo.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index 20401988..16845d53 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -30,7 +30,7 @@ BatteryInfo::BatteryInfo(const Pinetime::Controllers::Battery& batteryController percent = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(percent, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); - lv_label_set_text_fmt(percent, "%02i%%", batteryPercent); + lv_label_set_text_fmt(percent, "%i%%", batteryPercent); lv_label_set_align(percent, LV_LABEL_ALIGN_LEFT); lv_obj_align(percent, chargingArc, LV_ALIGN_CENTER, 0, 0); @@ -60,15 +60,18 @@ void BatteryInfo::Refresh() { } else if (batteryPercent == 100) { lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_BLUE); lv_label_set_text_static(status, "Fully charged"); - } else if (batteryPercent < 10) { - lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_RED); - lv_label_set_text_static(status, "Battery low"); - } else { + } else if (batteryPercent > 15) { lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_GREEN); lv_label_set_text_static(status, "Discharging"); + } else if (batteryPercent > 5) { + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_label_set_text_static(status, "Battery low"); + } else { + lv_obj_set_style_local_line_color(chargingArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, Colors::deepOrange); + lv_label_set_text_static(status, "Battery critical"); } - lv_label_set_text_fmt(percent, "%02i%%", batteryPercent); + lv_label_set_text_fmt(percent, "%i%%", batteryPercent); lv_obj_align(percent, chargingArc, LV_ALIGN_CENTER, 0, 0); lv_obj_align(status, voltage, LV_ALIGN_IN_BOTTOM_MID, 0, -27); From 1340f563447f2a0fc85c0f32bb3a8bc45740864a Mon Sep 17 00:00:00 2001 From: zyphlar Date: Mon, 16 Jun 2025 14:31:28 -0700 Subject: [PATCH 105/114] Set LF-only (\n) line endings for .sh files to fix #1905 (#2181) --- .gitattributes | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitattributes b/.gitattributes index 7adb0e69..d625a244 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14,3 +14,6 @@ *.bin binary *.jpg binary *.jpeg binary + +# Declare (Unix-style) files that will always have LF line endings on checkout. +*.sh text eol=lf From 3fc00f80dbfcad68b42dc2251da1136a21b812c3 Mon Sep 17 00:00:00 2001 From: Owen from Canada Date: Wed, 18 Jun 2025 07:17:57 -0400 Subject: [PATCH 106/114] Ignore npm files (#2313) --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 81e49ae0..d6f917cf 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,8 @@ src/arm-none-eabi # clangd .cache/ + +# npm files +node_modules +package.json +package-lock.json From 4517fb8c4be0118b47d522c5fa2e0ed099480719 Mon Sep 17 00:00:00 2001 From: Eshe <66212752+Aperture32GLaDOS@users.noreply.github.com> Date: Thu, 19 Jun 2025 16:53:45 +0000 Subject: [PATCH 107/114] Pride flag watchface (#2201) --- src/CMakeLists.txt | 1 + .../datetime/DateTimeController.cpp | 10 + src/components/datetime/DateTimeController.h | 2 + src/components/settings/Settings.h | 15 +- src/displayapp/UserApps.h | 1 + src/displayapp/apps/Apps.h.in | 1 + src/displayapp/apps/CMakeLists.txt | 1 + src/displayapp/screens/WatchFacePrideFlag.cpp | 337 ++++++++++++++++++ src/displayapp/screens/WatchFacePrideFlag.h | 102 ++++++ 9 files changed, 469 insertions(+), 1 deletion(-) create mode 100644 src/displayapp/screens/WatchFacePrideFlag.cpp create mode 100644 src/displayapp/screens/WatchFacePrideFlag.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 86510590..5cd2e656 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -427,6 +427,7 @@ list(APPEND SOURCE_FILES displayapp/screens/WatchFaceTerminal.cpp displayapp/screens/WatchFacePineTimeStyle.cpp displayapp/screens/WatchFaceCasioStyleG7710.cpp + displayapp/screens/WatchFacePrideFlag.cpp ## diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index d439821b..2ef0ef22 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -9,6 +9,8 @@ using namespace Pinetime::Controllers; namespace { constexpr const char* const DaysStringShort[] = {"--", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; constexpr const char* const DaysStringShortLow[] = {"--", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; + constexpr const char* const DaysString[] = {"--", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"}; + constexpr const char* const DaysStringLow[] = {"--", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; constexpr const char* const MonthsString[] = {"--", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; constexpr const char* const MonthsStringLow[] = {"--", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; @@ -144,6 +146,10 @@ const char* DateTime::DayOfWeekShortToString() const { return DaysStringShort[static_cast(DayOfWeek())]; } +const char* DateTime::DayOfWeekToString() const { + return DaysString[static_cast(DayOfWeek())]; +} + const char* DateTime::MonthShortToStringLow(Months month) { return MonthsStringLow[static_cast(month)]; } @@ -152,6 +158,10 @@ const char* DateTime::DayOfWeekShortToStringLow(Days day) { return DaysStringShortLow[static_cast(day)]; } +const char* DateTime::DayOfWeekToStringLow(Days day) { + return DaysStringLow[static_cast(day)]; +} + void DateTime::Register(Pinetime::System::SystemTask* systemTask) { this->systemTask = systemTask; } diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index a005f9ac..33fef6be 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -121,8 +121,10 @@ namespace Pinetime { const char* MonthShortToString() const; const char* DayOfWeekShortToString() const; + const char* DayOfWeekToString() const; static const char* MonthShortToStringLow(Months month); static const char* DayOfWeekShortToStringLow(Days day); + static const char* DayOfWeekToStringLow(Days day); std::chrono::time_point CurrentDateTime(); diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 602de3a5..c9615126 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -36,6 +36,7 @@ namespace Pinetime { }; enum class PTSGaugeStyle : uint8_t { Full, Half, Numeric }; enum class PTSWeather : uint8_t { On, Off }; + enum class PrideFlag : uint8_t { Gay, Trans, Bi, Lesbian }; struct PineTimeStyle { Colors ColorTime = Colors::Teal; @@ -154,6 +155,16 @@ namespace Pinetime { return settings.PTS.weatherEnable; }; + void SetPrideFlag(PrideFlag prideFlag) { + if (prideFlag != settings.prideFlag) + settingsChanged = true; + settings.prideFlag = prideFlag; + }; + + PrideFlag GetPrideFlag() const { + return settings.prideFlag; + }; + void SetAppMenu(uint8_t menu) { appMenu = menu; }; @@ -301,7 +312,7 @@ namespace Pinetime { private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0008; + static constexpr uint32_t settingsVersion = 0x0009; struct SettingsData { uint32_t version = settingsVersion; @@ -319,6 +330,8 @@ namespace Pinetime { PineTimeStyle PTS; + PrideFlag prideFlag = PrideFlag::Gay; + WatchFaceInfineat watchFaceInfineat; std::bitset<5> wakeUpMode {0}; diff --git a/src/displayapp/UserApps.h b/src/displayapp/UserApps.h index 67bbfa7d..8dc11442 100644 --- a/src/displayapp/UserApps.h +++ b/src/displayapp/UserApps.h @@ -14,6 +14,7 @@ #include "displayapp/screens/WatchFaceInfineat.h" #include "displayapp/screens/WatchFacePineTimeStyle.h" #include "displayapp/screens/WatchFaceTerminal.h" +#include "displayapp/screens/WatchFacePrideFlag.h" namespace Pinetime { namespace Applications { diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in index e697096a..f6feeb7b 100644 --- a/src/displayapp/apps/Apps.h.in +++ b/src/displayapp/apps/Apps.h.in @@ -53,6 +53,7 @@ namespace Pinetime { Terminal, Infineat, CasioStyleG7710, + PrideFlag, }; template diff --git a/src/displayapp/apps/CMakeLists.txt b/src/displayapp/apps/CMakeLists.txt index 33e54323..93196ed6 100644 --- a/src/displayapp/apps/CMakeLists.txt +++ b/src/displayapp/apps/CMakeLists.txt @@ -28,6 +28,7 @@ else() set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Terminal") set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Infineat") set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::CasioStyleG7710") + set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::PrideFlag") set(WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}" CACHE STRING "List of watch faces to build into the firmware") endif() diff --git a/src/displayapp/screens/WatchFacePrideFlag.cpp b/src/displayapp/screens/WatchFacePrideFlag.cpp new file mode 100644 index 00000000..e029c076 --- /dev/null +++ b/src/displayapp/screens/WatchFacePrideFlag.cpp @@ -0,0 +1,337 @@ +#include "displayapp/screens/WatchFacePrideFlag.h" +#include +#include "components/battery/BatteryController.h" +#include "components/ble/BleController.h" +#include "displayapp/screens/Symbols.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + void EventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } + + Pinetime::Controllers::Settings::PrideFlag GetNext(Pinetime::Controllers::Settings::PrideFlag prideFlag) { + const auto prideFlagAsInt = static_cast(prideFlag); + Pinetime::Controllers::Settings::PrideFlag nextFlag; + if (prideFlagAsInt < 3) { + nextFlag = static_cast(prideFlagAsInt + 1); + } else { + nextFlag = static_cast(0); + } + return nextFlag; + } + + Pinetime::Controllers::Settings::PrideFlag GetPrevious(Pinetime::Controllers::Settings::PrideFlag prideFlag) { + const auto prideFlagAsInt = static_cast(prideFlag); + Pinetime::Controllers::Settings::PrideFlag prevFlag; + if (prideFlagAsInt > 0) { + prevFlag = static_cast(prideFlagAsInt - 1); + } else { + prevFlag = static_cast(3); + } + return prevFlag; + } + + template + class PrideFlagData { + public: + constexpr PrideFlagData(const std::array& sectionColours, + lv_color_t defaultTopLabelColour, + lv_color_t labelTimeColour, + lv_color_t defaultBottomLabelColour) + : sectionColours {sectionColours}, + defaultTopLabelColour {defaultTopLabelColour}, + labelTimeColour {labelTimeColour}, + defaultBottomLabelColour {defaultBottomLabelColour} { + // Space between adjacent text values calculated according to the following equation + spacing = static_cast(1.5f * static_cast(N) + 40.5f); + } + + std::array sectionColours; + lv_color_t defaultTopLabelColour; + lv_color_t labelTimeColour; + lv_color_t defaultBottomLabelColour; + uint8_t spacing; + }; + + constexpr lv_color_t lightBlue = LV_COLOR_MAKE(0x00, 0xbf, 0xf3); + constexpr lv_color_t lightPink = LV_COLOR_MAKE(0xf4, 0x9a, 0xc1); + constexpr lv_color_t hotPink = LV_COLOR_MAKE(0xd6, 0x02, 0x70); + constexpr lv_color_t grayPurple = LV_COLOR_MAKE(0x9b, 0x4f, 0x96); + constexpr lv_color_t darkBlue = LV_COLOR_MAKE(0x00, 0x38, 0xa8); + constexpr lv_color_t orange = LV_COLOR_MAKE(0xef, 0x76, 0x27); + constexpr lv_color_t lightOrange = LV_COLOR_MAKE(0xff, 0x9b, 0x55); + constexpr lv_color_t lightPurple = LV_COLOR_MAKE(0xd4, 0x61, 0xa6); + constexpr lv_color_t darkPurple = LV_COLOR_MAKE(0xb5, 0x56, 0x90); + constexpr lv_color_t magenta = LV_COLOR_MAKE(0xa5, 0x00, 0x62); + constexpr lv_color_t darkGreen = LV_COLOR_MAKE(0x07, 0x8d, 0x70); + constexpr lv_color_t cyan = LV_COLOR_MAKE(0x26, 0xce, 0xaa); + constexpr lv_color_t lightGreen = LV_COLOR_MAKE(0x98, 0xe8, 0xc1); + constexpr lv_color_t indigo = LV_COLOR_MAKE(0x50, 0x49, 0xcc); + constexpr lv_color_t steelBlue = LV_COLOR_MAKE(0x3d, 0x1a, 0x78); + constexpr std::array gayColours {darkGreen, cyan, lightGreen, LV_COLOR_WHITE, lightBlue, indigo, steelBlue}; + constexpr std::array transColours {lightBlue, lightPink, LV_COLOR_WHITE, lightPink, lightBlue}; + constexpr std::array biColours {hotPink, hotPink, grayPurple, darkBlue, darkBlue}; + constexpr std::array lesbianColours {LV_COLOR_RED, orange, lightOrange, LV_COLOR_WHITE, lightPurple, darkPurple, magenta}; + constexpr PrideFlagData gayFlagData(gayColours, LV_COLOR_BLACK, LV_COLOR_BLACK, LV_COLOR_WHITE); + constexpr PrideFlagData transFlagData(transColours, LV_COLOR_WHITE, LV_COLOR_BLACK, LV_COLOR_WHITE); + constexpr PrideFlagData biFlagData(biColours, LV_COLOR_BLACK, LV_COLOR_WHITE, LV_COLOR_BLACK); + constexpr PrideFlagData lesbianFlagData(lesbianColours, LV_COLOR_WHITE, LV_COLOR_BLACK, LV_COLOR_WHITE); +} + +WatchFacePrideFlag::WatchFacePrideFlag(Controllers::DateTime& dateTimeController, + const Controllers::Battery& batteryController, + const Controllers::Ble& bleController, + Controllers::NotificationManager& notificationManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController) + : currentDateTime {{}}, + dateTimeController {dateTimeController}, + batteryController {batteryController}, + bleController {bleController}, + notificationManager {notificationManager}, + settingsController {settingsController}, + motionController {motionController} { + + bluetoothStatus = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(bluetoothStatus, ""); + lv_obj_align(bluetoothStatus, nullptr, LV_ALIGN_IN_TOP_RIGHT, -16, 0); + + batteryValue = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_recolor(batteryValue, true); + lv_label_set_align(batteryValue, LV_LABEL_ALIGN_CENTER); + lv_obj_set_auto_realign(batteryValue, true); + + notificationText = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(notificationText, nullptr, LV_ALIGN_IN_LEFT_MID, 0, -110); + lv_obj_set_style_local_text_color(notificationText, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + + btnClose = lv_btn_create(lv_scr_act(), nullptr); + btnClose->user_data = this; + lv_obj_set_size(btnClose, 60, 60); + lv_obj_align(btnClose, lv_scr_act(), LV_ALIGN_CENTER, 0, -80); + lv_obj_set_style_local_bg_opa(btnClose, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_t* lblClose = lv_label_create(btnClose, nullptr); + lv_label_set_text_static(lblClose, "X"); + lv_obj_set_event_cb(btnClose, EventHandler); + lv_obj_set_hidden(btnClose, true); + + btnNextFlag = lv_btn_create(lv_scr_act(), nullptr); + btnNextFlag->user_data = this; + lv_obj_set_size(btnNextFlag, 60, 60); + lv_obj_align(btnNextFlag, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, 80); + lv_obj_set_style_local_bg_opa(btnNextFlag, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_t* lblNextBG = lv_label_create(btnNextFlag, nullptr); + lv_label_set_text_static(lblNextBG, ">"); + lv_obj_set_event_cb(btnNextFlag, EventHandler); + lv_obj_set_hidden(btnNextFlag, true); + + btnPrevFlag = lv_btn_create(lv_scr_act(), nullptr); + btnPrevFlag->user_data = this; + lv_obj_set_size(btnPrevFlag, 60, 60); + lv_obj_align(btnPrevFlag, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, 80); + lv_obj_set_style_local_bg_opa(btnPrevFlag, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_t* lblPrevFlag = lv_label_create(btnPrevFlag, nullptr); + lv_label_set_text_static(lblPrevFlag, "<"); + lv_obj_set_event_cb(btnPrevFlag, EventHandler); + lv_obj_set_hidden(btnPrevFlag, true); + + labelDate = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_recolor(labelDate, true); + lv_label_set_align(labelDate, LV_LABEL_ALIGN_CENTER); + lv_obj_set_auto_realign(labelDate, true); + + labelTime = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_recolor(labelTime, true); + lv_obj_align(labelTime, lv_scr_act(), LV_ALIGN_CENTER, 0, -1); + lv_label_set_align(labelTime, LV_LABEL_ALIGN_CENTER); + lv_obj_set_style_local_text_font(labelTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); + lv_obj_set_auto_realign(labelTime, true); + + labelDay = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_recolor(labelDay, true); + lv_label_set_align(labelDay, LV_LABEL_ALIGN_CENTER); + lv_obj_set_auto_realign(labelDay, true); + + stepValue = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_recolor(stepValue, true); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, 96); + lv_label_set_align(stepValue, LV_LABEL_ALIGN_CENTER); + lv_obj_set_auto_realign(stepValue, true); + + UpdateScreen(settingsController.GetPrideFlag()); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); + Refresh(); +} + +WatchFacePrideFlag::~WatchFacePrideFlag() { + lv_task_del(taskRefresh); + lv_obj_clean(lv_scr_act()); +} + +bool WatchFacePrideFlag::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + if ((event == Pinetime::Applications::TouchEvents::LongTap) && lv_obj_get_hidden(btnClose)) { + lv_obj_set_hidden(btnPrevFlag, false); + lv_obj_set_hidden(btnNextFlag, false); + lv_obj_set_hidden(btnClose, false); + savedTick = xTaskGetTickCount(); + return true; + } + if ((event == Pinetime::Applications::TouchEvents::DoubleTap) && !lv_obj_get_hidden(btnClose)) { + return true; + } + return false; +} + +void WatchFacePrideFlag::CloseMenu() { + settingsController.SaveSettings(); + lv_obj_set_hidden(btnClose, true); + lv_obj_set_hidden(btnNextFlag, true); + lv_obj_set_hidden(btnPrevFlag, true); +} + +void WatchFacePrideFlag::Refresh() { + powerPresent = batteryController.IsPowerPresent(); + bleState = bleController.IsConnected(); + batteryPercentRemaining = batteryController.PercentRemaining(); + if (batteryPercentRemaining.IsUpdated() || powerPresent.IsUpdated() || themeChanged) { + lv_label_set_text_fmt(batteryValue, "%d%%", batteryPercentRemaining.Get()); + if (batteryController.IsPowerPresent()) { + lv_label_ins_text(batteryValue, LV_LABEL_POS_LAST, " Charging"); + } + } + if (bleState.IsUpdated()) { + if (bleState.Get()) { + lv_label_set_text_static(bluetoothStatus, Symbols::bluetooth); + } else { + lv_label_set_text_static(bluetoothStatus, ""); + } + } + + notificationState = notificationManager.AreNewNotificationsAvailable(); + if (notificationState.IsUpdated()) { + if (notificationState.Get()) { + lv_label_set_text_static(notificationText, "You have\nmail!"); + } else { + lv_label_set_text_static(notificationText, ""); + } + } + + currentDateTime = std::chrono::time_point_cast(dateTimeController.CurrentDateTime()); + if (currentDateTime.IsUpdated() || themeChanged) { + uint8_t hour = dateTimeController.Hours(); + const uint8_t minute = dateTimeController.Minutes(); + const uint8_t second = dateTimeController.Seconds(); + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + if (hour == 0) { + ampmChar = "AM"; + hour = 12; + } else if (hour == 12) { + ampmChar = "PM"; + } else if (hour > 12) { + hour = hour - 12; + ampmChar = "PM"; + } + } + + lv_label_set_text_fmt(labelTime, "%02d:%02d:%02d", hour, minute, second); + + currentDate = std::chrono::time_point_cast(currentDateTime.Get()); + if (currentDate.IsUpdated() || ampmChar.IsUpdated() || themeChanged) { + const uint16_t year = dateTimeController.Year(); + const Controllers::DateTime::Months month = dateTimeController.Month(); + const uint8_t day = dateTimeController.Day(); + const Controllers::DateTime::Days dayOfWeek = dateTimeController.DayOfWeek(); + lv_label_set_text_fmt(labelDate, "%02d-%02d-%04d", day, static_cast(month), year); + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + lv_label_set_text_fmt(labelDay, "%s %s", dateTimeController.DayOfWeekToStringLow(dayOfWeek), ampmChar); + } else { + lv_label_set_text_fmt(labelDay, "%s", dateTimeController.DayOfWeekToStringLow(dayOfWeek)); + } + } + } + + stepCount = motionController.NbSteps(); + if (stepCount.IsUpdated() || themeChanged) { + lv_label_set_text_fmt(stepValue, "%lu steps", stepCount.Get()); + } + if (themeChanged) { + themeChanged = false; + } +} + +void WatchFacePrideFlag::UpdateSelected(lv_obj_t* object, lv_event_t event) { + if (event == LV_EVENT_CLICKED) { + auto valueFlag = settingsController.GetPrideFlag(); + bool flagChanged = false; + if (object == btnClose) { + CloseMenu(); + } + if (object == btnNextFlag) { + valueFlag = GetNext(valueFlag); + flagChanged = true; + } + if (object == btnPrevFlag) { + valueFlag = GetPrevious(valueFlag); + flagChanged = true; + } + settingsController.SetPrideFlag(valueFlag); + if (flagChanged) { + UpdateScreen(valueFlag); + } + } +} + +bool WatchFacePrideFlag::OnButtonPushed() { + if (!lv_obj_get_hidden(btnClose)) { + CloseMenu(); + return true; + } + return false; +} + +void WatchFacePrideFlag::UpdateScreen(const Pinetime::Controllers::Settings::PrideFlag prideFlag) { + auto UseFlagData = [this](PrideFlagData flagData) { + backgroundSections.reserve(N); + for (size_t i = 0; i < N; i++) { + backgroundSections.push_back(lv_obj_create(lv_scr_act(), nullptr)); + lv_obj_set_style_local_bg_color(backgroundSections[i], LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, flagData.sectionColours[i]); + lv_obj_set_size(backgroundSections[i], LV_HOR_RES, (LV_VER_RES / N) + 1); + lv_obj_set_pos(backgroundSections[i], 0, i * LV_VER_RES / N); + lv_obj_set_style_local_radius(backgroundSections[i], LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_move_background(backgroundSections[i]); + } + lv_obj_set_style_local_text_color(labelTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, flagData.labelTimeColour); + lv_obj_set_style_local_text_color(batteryValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, flagData.defaultTopLabelColour); + lv_obj_set_style_local_text_color(labelDate, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, flagData.defaultTopLabelColour); + lv_obj_set_style_local_text_color(labelDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, flagData.defaultBottomLabelColour); + lv_obj_set_style_local_text_color(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, flagData.defaultBottomLabelColour); + lv_obj_align(batteryValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -2 * flagData.spacing); + lv_obj_align(labelDate, lv_scr_act(), LV_ALIGN_CENTER, 0, -1 * flagData.spacing); + lv_obj_align(labelDay, lv_scr_act(), LV_ALIGN_CENTER, 0, flagData.spacing); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, 2 * flagData.spacing); + }; + themeChanged = true; + for (lv_obj_t* backgroundSection : backgroundSections) { + lv_obj_del(backgroundSection); + } + backgroundSections.clear(); + switch (prideFlag) { + case Pinetime::Controllers::Settings::PrideFlag::Gay: + UseFlagData(gayFlagData); + break; + case Pinetime::Controllers::Settings::PrideFlag::Trans: + UseFlagData(transFlagData); + break; + case Pinetime::Controllers::Settings::PrideFlag::Bi: + UseFlagData(biFlagData); + break; + case Pinetime::Controllers::Settings::PrideFlag::Lesbian: + UseFlagData(lesbianFlagData); + break; + } +} diff --git a/src/displayapp/screens/WatchFacePrideFlag.h b/src/displayapp/screens/WatchFacePrideFlag.h new file mode 100644 index 00000000..10a94e8b --- /dev/null +++ b/src/displayapp/screens/WatchFacePrideFlag.h @@ -0,0 +1,102 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include "displayapp/screens/Screen.h" +#include "utility/DirtyValue.h" +#include "components/settings/Settings.h" +#include "components/battery/BatteryController.h" + +namespace Pinetime { + namespace Controllers { + class Settings; + class Battery; + class Ble; + class NotificationManager; + class MotionController; + } + + namespace Applications { + namespace Screens { + + class WatchFacePrideFlag : public Screen { + public: + WatchFacePrideFlag(Controllers::DateTime& dateTimeController, + const Controllers::Battery& batteryController, + const Controllers::Ble& bleController, + Controllers::NotificationManager& notificationManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController); + ~WatchFacePrideFlag() override; + + bool OnTouchEvent(TouchEvents event) override; + bool OnButtonPushed() override; + + void Refresh() override; + + void UpdateSelected(lv_obj_t* object, lv_event_t event); + + private: + void UpdateScreen(Pinetime::Controllers::Settings::PrideFlag); + + Utility::DirtyValue batteryPercentRemaining; + Utility::DirtyValue powerPresent; + Utility::DirtyValue bleState; + Utility::DirtyValue> currentDateTime; + Utility::DirtyValue stepCount; + Utility::DirtyValue notificationState; + Utility::DirtyValue> currentDate; + // Must be wrapped in a dirty value, since it is displayed in the day but is updated twice a day + Utility::DirtyValue ampmChar {"AM"}; + + TickType_t savedTick = 0; + + std::vector backgroundSections; + bool themeChanged = false; + lv_obj_t* bluetoothStatus; + lv_obj_t* labelTime; + lv_obj_t* labelDate; + lv_obj_t* labelDay; + lv_obj_t* batteryValue; + lv_obj_t* stepValue; + lv_obj_t* notificationText; + lv_obj_t* btnClose; + lv_obj_t* btnNextFlag; + lv_obj_t* btnPrevFlag; + + Controllers::DateTime& dateTimeController; + const Controllers::Battery& batteryController; + const Controllers::Ble& bleController; + Controllers::NotificationManager& notificationManager; + Controllers::Settings& settingsController; + Controllers::MotionController& motionController; + + lv_task_t* taskRefresh; + void CloseMenu(); + }; + } + + template <> + struct WatchFaceTraits { + static constexpr WatchFace watchFace = WatchFace::PrideFlag; + static constexpr const char* name = "Pride Flag"; + + static Screens::Screen* Create(AppControllers& controllers) { + return new Screens::WatchFacePrideFlag(controllers.dateTimeController, + controllers.batteryController, + controllers.bleController, + controllers.notificationManager, + controllers.settingsController, + controllers.motionController); + }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + } + }; + } +} From 343962da5dca50604877fa83c70ca14d8849737a Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sat, 7 Dec 2024 00:09:05 +0000 Subject: [PATCH 108/114] Disable legacy FreeRTOS functions --- src/FreeRTOSConfig.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FreeRTOSConfig.h b/src/FreeRTOSConfig.h index d877705a..fce50054 100644 --- a/src/FreeRTOSConfig.h +++ b/src/FreeRTOSConfig.h @@ -73,7 +73,7 @@ #define configUSE_QUEUE_SETS 0 #define configUSE_TIME_SLICING 0 #define configUSE_NEWLIB_REENTRANT 0 -#define configENABLE_BACKWARD_COMPATIBILITY 1 +#define configENABLE_BACKWARD_COMPATIBILITY 0 #define configUSE_TASK_NOTIFICATIONS 0 /* Hook function related definitions. */ From b3f4831e54d3e8ddbda5d799ea66adec66e93978 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Sun, 26 Jan 2025 19:23:14 +0000 Subject: [PATCH 109/114] Initialise DisplayApp components in DisplayApp context --- src/displayapp/DisplayApp.cpp | 23 +++++++++++------------ src/displayapp/DisplayApp.h | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index f5b2efde..9d9a0a77 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -129,15 +129,6 @@ void DisplayApp::Start(System::BootErrors error) { bootError = error; - lvgl.Init(); - motorController.Init(); - - if (error == System::BootErrors::TouchController) { - LoadNewScreen(Apps::Error, DisplayApp::FullRefreshDirections::None); - } else { - LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::None); - } - if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 800, this, 0, &taskHandle)) { APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } @@ -146,17 +137,25 @@ void DisplayApp::Start(System::BootErrors error) { void DisplayApp::Process(void* instance) { auto* app = static_cast(instance); NRF_LOG_INFO("displayapp task started!"); - app->InitHw(); + app->Init(); + + if (app->bootError == System::BootErrors::TouchController) { + app->LoadNewScreen(Apps::Error, DisplayApp::FullRefreshDirections::None); + } else { + app->LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::None); + } while (true) { app->Refresh(); } } -void DisplayApp::InitHw() { +void DisplayApp::Init() { + lcd.Init(); + motorController.Init(); brightnessController.Init(); ApplyBrightness(); - lcd.Init(); + lvgl.Init(); } TickType_t DisplayApp::CalculateSleepTime() { diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 2f276eaf..dabed99e 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -121,7 +121,7 @@ namespace Pinetime { TouchEvents GetGesture(); static void Process(void* instance); - void InitHw(); + void Init(); void Refresh(); void LoadNewScreen(Apps app, DisplayApp::FullRefreshDirections direction); void LoadScreen(Apps app, DisplayApp::FullRefreshDirections direction); From c1b9967d92269d9ad70a3d639f5bf915e83f4813 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Thu, 17 Oct 2024 23:13:38 +0100 Subject: [PATCH 110/114] Analog face constexpr fix --- src/displayapp/screens/WatchFaceAnalog.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 80a1c8b9..3a7a00fa 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -1,5 +1,6 @@ #include "displayapp/screens/WatchFaceAnalog.h" #include +#include #include #include "displayapp/screens/BatteryIcon.h" #include "displayapp/screens/BleIcon.h" @@ -15,8 +16,10 @@ namespace { constexpr int16_t MinuteLength = 90; constexpr int16_t SecondLength = 110; + // LVGL sin isn't constexpr (though it could be if it were C++) so fix size here + // All the types are hardcoded anyway and would need changing if the size changed // sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor - const auto LV_TRIG_SCALE = _lv_trigo_sin(90); + constexpr int16_t LV_TRIG_SCALE = std::numeric_limits::max(); // = _lv_trigo_sin(90) int16_t Cosine(int16_t angle) { return _lv_trigo_sin(angle + 90); From c3afbc59ceacc1ddef2910259671f7dabcf96a95 Mon Sep 17 00:00:00 2001 From: Titus <154823939+tituscmd@users.noreply.github.com> Date: Sun, 29 Jun 2025 16:43:41 +0200 Subject: [PATCH 111/114] (small) Music App Redesign (#2292) --- src/components/ble/MusicService.h | 6 +++--- src/displayapp/screens/Music.cpp | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index 93d94a34..e32980b4 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -71,9 +71,9 @@ namespace Pinetime { uint16_t eventHandle {}; - std::string artistName {"Waiting for"}; - std::string albumName {}; - std::string trackName {"track information.."}; + std::string trackName; + std::string albumName; + std::string artistName {"Not Playing"}; bool playing {false}; diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 0763da0f..0bd0965f 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -23,6 +23,7 @@ #include "displayapp/icons/music/disc.c" #include "displayapp/icons/music/disc_f_1.c" #include "displayapp/icons/music/disc_f_2.c" +#include "displayapp/InfiniTimeTheme.h" using namespace Pinetime::Applications::Screens; @@ -52,8 +53,7 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { lv_style_init(&btn_style); lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, 20); - lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_50); + lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, Colors::bgAlt); btnVolDown = lv_btn_create(lv_scr_act(), nullptr); btnVolDown->user_data = this; @@ -114,18 +114,18 @@ Music::Music(Pinetime::Controllers::MusicService& music) : musicService(music) { constexpr int8_t MIDDLE_OFFSET = -25; txtArtist = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(txtArtist, LV_LABEL_LONG_SROLL_CIRC); - lv_obj_align(txtArtist, nullptr, LV_ALIGN_IN_LEFT_MID, 12, MIDDLE_OFFSET + 1 * FONT_HEIGHT); + lv_obj_align(txtArtist, nullptr, LV_ALIGN_IN_LEFT_MID, 12, MIDDLE_OFFSET + 2 * FONT_HEIGHT + LINE_PAD); lv_label_set_align(txtArtist, LV_ALIGN_IN_LEFT_MID); lv_obj_set_width(txtArtist, LV_HOR_RES - 12); - lv_label_set_text_static(txtArtist, "Artist Name"); + lv_label_set_text_static(txtArtist, ""); + lv_obj_set_style_local_text_color(txtArtist, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Colors::lightGray); txtTrack = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(txtTrack, LV_LABEL_LONG_SROLL_CIRC); - lv_obj_align(txtTrack, nullptr, LV_ALIGN_IN_LEFT_MID, 12, MIDDLE_OFFSET + 2 * FONT_HEIGHT + LINE_PAD); - + lv_obj_align(txtTrack, nullptr, LV_ALIGN_IN_LEFT_MID, 12, MIDDLE_OFFSET + 1 * FONT_HEIGHT); lv_label_set_align(txtTrack, LV_ALIGN_IN_LEFT_MID); lv_obj_set_width(txtTrack, LV_HOR_RES - 12); - lv_label_set_text_static(txtTrack, "This is a very long getTrack name"); + lv_label_set_text_static(txtTrack, ""); /** Init animation */ imgDisc = lv_img_create(lv_scr_act(), nullptr); From 250e7a703290753dd99feed401347dc7ba0bfeec Mon Sep 17 00:00:00 2001 From: Titus <154823939+tituscmd@users.noreply.github.com> Date: Sun, 29 Jun 2025 17:39:48 +0200 Subject: [PATCH 112/114] Dark App Launcher Tiles (#2294) --- src/displayapp/screens/Tile.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 7c585a4b..45f715b5 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -70,8 +70,7 @@ Tile::Tile(uint8_t screenID, lv_obj_align(btnm1, nullptr, LV_ALIGN_CENTER, 0, 10); lv_obj_set_style_local_radius(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_COLOR_AQUA); + lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, Colors::bgAlt); lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_50); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, Colors::bgDark); lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); From 9afc23cba9bcf938d8c49d6e15e7662ee8e6385d Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Sat, 24 May 2025 23:42:23 +0200 Subject: [PATCH 113/114] navigation: fix greying out the app icon if not enabled Commit 0aead42fdf51 ("navigation: Add is available (#1847)") added the ability to draw the app icon in grey and in a disabled state when some prerequisits were not met. Only the Navigation app was using this mechanism due to its icons being stored in the external memory and possibly missing. Commit 63e0c4f4efb0 ("Application selection at build time") broke this by always setting the state as true: for (const auto& userApp : userApps) { apps[i++] = Screens::Tile::Applications {userApp.icon, userApp.app, true}; } Fix this by creating an isAvailable() strcuture in the app classes, similar to how the Watchfaces handle the same problem of checking availability. --- src/displayapp/DisplayApp.cpp | 4 ++-- src/displayapp/UserApps.h | 3 ++- src/displayapp/screens/Alarm.h | 4 ++++ src/displayapp/screens/Calculator.h | 4 ++++ src/displayapp/screens/Dice.h | 4 ++++ src/displayapp/screens/HeartRate.h | 4 ++++ src/displayapp/screens/InfiniPaint.h | 4 ++++ src/displayapp/screens/Metronome.h | 4 ++++ src/displayapp/screens/Motion.h | 4 ++++ src/displayapp/screens/Music.h | 4 ++++ src/displayapp/screens/Navigation.h | 4 ++++ src/displayapp/screens/Paddle.h | 4 ++++ src/displayapp/screens/Steps.h | 4 ++++ src/displayapp/screens/StopWatch.h | 4 ++++ src/displayapp/screens/Timer.h | 4 ++++ src/displayapp/screens/Twos.h | 4 ++++ src/displayapp/screens/Weather.h | 4 ++++ 17 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 9d9a0a77..bfd7dbed 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -517,8 +517,8 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio switch (app) { case Apps::Launcher: { std::array apps; - std::ranges::transform(userApps, apps.begin(), [](const auto& userApp) { - return Screens::Tile::Applications {userApp.icon, userApp.app, true}; + std::ranges::transform(userApps, apps.begin(), [this](const auto& userApp) { + return Screens::Tile::Applications {userApp.icon, userApp.app, userApp.isAvailable(controllers.filesystem)}; }); currentScreen = std::make_unique(this, settingsController, diff --git a/src/displayapp/UserApps.h b/src/displayapp/UserApps.h index 8dc11442..25926edc 100644 --- a/src/displayapp/UserApps.h +++ b/src/displayapp/UserApps.h @@ -26,6 +26,7 @@ namespace Pinetime { Apps app; const char* icon; Screens::Screen* (*create)(AppControllers& controllers); + bool (*isAvailable)(Controllers::FS& fileSystem); }; struct WatchFaceDescription { @@ -37,7 +38,7 @@ namespace Pinetime { template consteval AppDescription CreateAppDescription() { - return {AppTraits::app, AppTraits::icon, &AppTraits::Create}; + return {AppTraits::app, AppTraits::icon, &AppTraits::Create, &AppTraits::IsAvailable}; } template diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index a875b275..2dde6e87 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -78,6 +78,10 @@ namespace Pinetime { *controllers.systemTask, controllers.motorController); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Calculator.h b/src/displayapp/screens/Calculator.h index 9971f275..25bb67a7 100644 --- a/src/displayapp/screens/Calculator.h +++ b/src/displayapp/screens/Calculator.h @@ -78,6 +78,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& /* controllers */) { return new Screens::Calculator(); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Dice.h b/src/displayapp/screens/Dice.h index da91657d..d12848d3 100644 --- a/src/displayapp/screens/Dice.h +++ b/src/displayapp/screens/Dice.h @@ -56,6 +56,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Dice(controllers.motionController, controllers.motorController, controllers.settingsController); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/HeartRate.h b/src/displayapp/screens/HeartRate.h index 88b4918c..69c935de 100644 --- a/src/displayapp/screens/HeartRate.h +++ b/src/displayapp/screens/HeartRate.h @@ -48,6 +48,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::HeartRate(controllers.heartRateController, *controllers.systemTask); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/InfiniPaint.h b/src/displayapp/screens/InfiniPaint.h index b1f9741a..06552abb 100644 --- a/src/displayapp/screens/InfiniPaint.h +++ b/src/displayapp/screens/InfiniPaint.h @@ -47,6 +47,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::InfiniPaint(controllers.lvgl, controllers.motorController); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h index fab7ff87..595b30ca 100644 --- a/src/displayapp/screens/Metronome.h +++ b/src/displayapp/screens/Metronome.h @@ -47,6 +47,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Metronome(controllers.motorController, *controllers.systemTask); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Motion.h b/src/displayapp/screens/Motion.h index e13e068c..7a4d156a 100644 --- a/src/displayapp/screens/Motion.h +++ b/src/displayapp/screens/Motion.h @@ -41,6 +41,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Motion(controllers.motionController); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index 52253321..acf69c41 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -94,6 +94,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Music(*controllers.musicService); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Navigation.h b/src/displayapp/screens/Navigation.h index 5c7a0429..95b23d71 100644 --- a/src/displayapp/screens/Navigation.h +++ b/src/displayapp/screens/Navigation.h @@ -67,6 +67,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Navigation(*controllers.navigationService); }; + + static bool IsAvailable(Pinetime::Controllers::FS& filesystem) { + return Screens::Navigation::IsAvailable(filesystem); + }; }; } } diff --git a/src/displayapp/screens/Paddle.h b/src/displayapp/screens/Paddle.h index 586cccf4..aa24bea0 100644 --- a/src/displayapp/screens/Paddle.h +++ b/src/displayapp/screens/Paddle.h @@ -57,6 +57,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Paddle(controllers.lvgl); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Steps.h b/src/displayapp/screens/Steps.h index 6443582f..1a4fe647 100644 --- a/src/displayapp/screens/Steps.h +++ b/src/displayapp/screens/Steps.h @@ -51,6 +51,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Steps(controllers.motionController, controllers.settingsController); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h index 55a178dc..7256dd5b 100644 --- a/src/displayapp/screens/StopWatch.h +++ b/src/displayapp/screens/StopWatch.h @@ -69,6 +69,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::StopWatch(*controllers.systemTask); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h index a07c729b..f4ceddef 100644 --- a/src/displayapp/screens/Timer.h +++ b/src/displayapp/screens/Timer.h @@ -56,5 +56,9 @@ namespace Pinetime::Applications { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Timer(controllers.timer); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } diff --git a/src/displayapp/screens/Twos.h b/src/displayapp/screens/Twos.h index 52449fd3..9ebd7f2e 100644 --- a/src/displayapp/screens/Twos.h +++ b/src/displayapp/screens/Twos.h @@ -45,6 +45,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& /*controllers*/) { return new Screens::Twos(); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } diff --git a/src/displayapp/screens/Weather.h b/src/displayapp/screens/Weather.h index 6975311e..03266be1 100644 --- a/src/displayapp/screens/Weather.h +++ b/src/displayapp/screens/Weather.h @@ -51,6 +51,10 @@ namespace Pinetime { static Screens::Screen* Create(AppControllers& controllers) { return new Screens::Weather(controllers.settingsController, *controllers.weatherController); }; + + static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { + return true; + }; }; } } From e03414ce6d96c3acdc6bb56be59c50fb6a1721fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C4=81vis=20Mo=C5=A1enkovs?= Date: Wed, 3 Sep 2025 21:50:13 +0300 Subject: [PATCH 114/114] Setting to disable DFU and FS access (#1891) * Expose SystemTask dependency controllers Expose NotificationManager and Settings for use by the feature in next commit. This is a memory efficient way for accessing SystemTask dependencies from controllers that have SystemTask injected as a dependency. Looks like each direct dependency injection uses 4 bytes RAM. As InfiniTime is close to running out of RAM (using 16 more bytes causes build to fail with "ld: region RAM overflowed with stack") it might be helpful to use this approach more. * Add setting to disable DFU and FS access --- src/CMakeLists.txt | 1 + src/components/ble/DfuService.cpp | 14 +++++ src/components/ble/DfuService.h | 5 ++ src/components/ble/FSService.cpp | 14 +++++ src/components/ble/FSService.h | 6 ++ src/components/settings/Settings.h | 28 +++++++++ src/displayapp/DisplayApp.cpp | 4 ++ src/displayapp/apps/Apps.h.in | 1 + src/displayapp/fonts/fonts.json | 2 +- src/displayapp/screens/Symbols.h | 1 + .../screens/settings/SettingOTA.cpp | 58 +++++++++++++++++++ src/displayapp/screens/settings/SettingOTA.h | 28 +++++++++ src/displayapp/screens/settings/Settings.h | 3 +- src/systemtask/SystemTask.h | 8 +++ 14 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 src/displayapp/screens/settings/SettingOTA.cpp create mode 100644 src/displayapp/screens/settings/SettingOTA.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5cd2e656..78ff2d6a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -419,6 +419,7 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/SettingChimes.cpp displayapp/screens/settings/SettingShakeThreshold.cpp displayapp/screens/settings/SettingBluetooth.cpp + displayapp/screens/settings/SettingOTA.cpp ## Watch faces displayapp/screens/WatchFaceAnalog.cpp diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index 2427513d..ad9c99e9 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -1,6 +1,8 @@ #include "components/ble/DfuService.h" #include #include "components/ble/BleController.h" +#include "components/ble/NotificationManager.h" +#include "components/settings/Settings.h" #include "drivers/SpiNorFlash.h" #include "systemtask/SystemTask.h" #include @@ -78,6 +80,18 @@ void DfuService::Init() { } int DfuService::OnServiceData(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context) { +#ifndef PINETIME_IS_RECOVERY + if (systemTask.GetSettings().GetDfuAndFsMode() == Pinetime::Controllers::Settings::DfuAndFsMode::Disabled) { + Pinetime::Controllers::NotificationManager::Notification notif; + memcpy(notif.message.data(), denyAlert, denyAlertLength); + notif.size = denyAlertLength; + notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert; + systemTask.GetNotificationManager().Push(std::move(notif)); + systemTask.PushMessage(Pinetime::System::Messages::OnNewNotification); + return BLE_ATT_ERR_INSUFFICIENT_AUTHOR; + } +#endif + if (bleController.IsFirmwareUpdating()) { xTimerStart(timeoutTimer, 0); } diff --git a/src/components/ble/DfuService.h b/src/components/ble/DfuService.h index 6652cdc1..99be27b9 100644 --- a/src/components/ble/DfuService.h +++ b/src/components/ble/DfuService.h @@ -20,6 +20,8 @@ namespace Pinetime { namespace Controllers { class Ble; + class Settings; + class NotificationManager; class DfuService { public: @@ -87,6 +89,9 @@ namespace Pinetime { DfuImage dfuImage; NotificationManager notificationManager; + static constexpr const char denyAlert[] = "InfiniTime\0Firmware update attempted, but disabled in settings."; + static constexpr const uint8_t denyAlertLength = sizeof(denyAlert); // for this to work denyAlert MUST be array + static constexpr uint16_t dfuServiceId {0x1530}; static constexpr uint16_t packetCharacteristicId {0x1532}; static constexpr uint16_t controlPointCharacteristicId {0x1531}; diff --git a/src/components/ble/FSService.cpp b/src/components/ble/FSService.cpp index fda6b392..721ed297 100644 --- a/src/components/ble/FSService.cpp +++ b/src/components/ble/FSService.cpp @@ -1,6 +1,8 @@ #include #include "FSService.h" #include "components/ble/BleController.h" +#include "components/ble/NotificationManager.h" +#include "components/settings/Settings.h" #include "systemtask/SystemTask.h" using namespace Pinetime::Controllers; @@ -49,6 +51,18 @@ void FSService::Init() { } int FSService::OnFSServiceRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context) { +#ifndef PINETIME_IS_RECOVERY + if (systemTask.GetSettings().GetDfuAndFsMode() == Pinetime::Controllers::Settings::DfuAndFsMode::Disabled) { + Pinetime::Controllers::NotificationManager::Notification notif; + memcpy(notif.message.data(), denyAlert, denyAlertLength); + notif.size = denyAlertLength; + notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert; + systemTask.GetNotificationManager().Push(std::move(notif)); + systemTask.PushMessage(Pinetime::System::Messages::OnNewNotification); + return BLE_ATT_ERR_INSUFFICIENT_AUTHOR; + } +#endif + if (attributeHandle == versionCharacteristicHandle) { NRF_LOG_INFO("FS_S : handle = %d", versionCharacteristicHandle); int res = os_mbuf_append(context->om, &fsVersion, sizeof(fsVersion)); diff --git a/src/components/ble/FSService.h b/src/components/ble/FSService.h index b2299623..b43bc9e4 100644 --- a/src/components/ble/FSService.h +++ b/src/components/ble/FSService.h @@ -14,6 +14,8 @@ namespace Pinetime { namespace Controllers { class Ble; + class Settings; + class NotificationManager; class FSService { public: @@ -26,6 +28,10 @@ namespace Pinetime { private: Pinetime::System::SystemTask& systemTask; Pinetime::Controllers::FS& fs; + + static constexpr const char denyAlert[] = "InfiniTime\0File access attempted, but disabled in settings."; + static constexpr const uint8_t denyAlertLength = sizeof(denyAlert); // for this to work denyAlert MUST be array + static constexpr uint16_t FSServiceId {0xFEBB}; static constexpr uint16_t fsVersionId {0x0100}; static constexpr uint16_t fsTransferId {0x0200}; diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index c9615126..093a3ac6 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -4,6 +4,7 @@ #include "components/brightness/BrightnessController.h" #include "components/fs/FS.h" #include "displayapp/apps/Apps.h" +#include namespace Pinetime { namespace Controllers { @@ -37,6 +38,7 @@ namespace Pinetime { enum class PTSGaugeStyle : uint8_t { Full, Half, Numeric }; enum class PTSWeather : uint8_t { On, Off }; enum class PrideFlag : uint8_t { Gay, Trans, Bi, Lesbian }; + enum class DfuAndFsMode : uint8_t { Disabled, Enabled, EnabledTillReboot }; struct PineTimeStyle { Colors ColorTime = Colors::Teal; @@ -309,6 +311,29 @@ namespace Pinetime { return bleRadioEnabled; }; + void SetDfuAndFsMode(DfuAndFsMode mode) { + if (mode == GetDfuAndFsMode()) { + return; + } + if (mode == DfuAndFsMode::Enabled || GetDfuAndFsMode() == DfuAndFsMode::Enabled) { + settingsChanged = true; + } + settings.dfuAndFsEnabledOnBoot = (mode == DfuAndFsMode::Enabled); + dfuAndFsEnabledTillReboot = (mode == DfuAndFsMode::EnabledTillReboot); + }; + + DfuAndFsMode GetDfuAndFsMode() { + if (dfuAndFsEnabledTillReboot) { + if (settings.dfuAndFsEnabledOnBoot) { // ensure both variables are in consistent state + settingsChanged = true; + settings.dfuAndFsEnabledOnBoot = false; + NRF_LOG_ERROR("Settings: DfuAndFsMode data corrupted"); + } + return DfuAndFsMode::EnabledTillReboot; + } + return (settings.dfuAndFsEnabledOnBoot ? DfuAndFsMode::Enabled : DfuAndFsMode::Disabled); + }; + private: Pinetime::Controllers::FS& fs; @@ -338,6 +363,8 @@ namespace Pinetime { uint16_t shakeWakeThreshold = 150; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; + + bool dfuAndFsEnabledOnBoot = false; }; SettingsData settings; @@ -350,6 +377,7 @@ namespace Pinetime { * to off (false) on every boot because we always want ble to be enabled on startup */ bool bleRadioEnabled = true; + bool dfuAndFsEnabledTillReboot = false; void LoadSettingsFromFile(); void SaveSettingsToFile(); diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index bfd7dbed..5c50e85f 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -50,6 +50,7 @@ #include "displayapp/screens/settings/SettingChimes.h" #include "displayapp/screens/settings/SettingShakeThreshold.h" #include "displayapp/screens/settings/SettingBluetooth.h" +#include "displayapp/screens/settings/SettingOTA.h" #include "libs/lv_conf.h" #include "UserApps.h" @@ -620,6 +621,9 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio case Apps::SettingBluetooth: currentScreen = std::make_unique(this, settingsController); break; + case Apps::SettingOTA: + currentScreen = std::make_unique(this, settingsController); + break; case Apps::BatteryInfo: currentScreen = std::make_unique(batteryController); break; diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in index f6feeb7b..0e94d32a 100644 --- a/src/displayapp/apps/Apps.h.in +++ b/src/displayapp/apps/Apps.h.in @@ -43,6 +43,7 @@ namespace Pinetime { SettingChimes, SettingShakeThreshold, SettingBluetooth, + SettingOTA, Error }; diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index fea31605..90be1feb 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -7,7 +7,7 @@ }, { "file": "FontAwesome5-Solid+Brands+Regular.woff", - "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743, 0xf1ec, 0xf55a" + "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743, 0xf1ec, 0xf55a, 0xf3ed" } ], "bpp": 1, diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index 40699b3d..fb93e80e 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -8,6 +8,7 @@ namespace Pinetime { static constexpr const char* batteryHalf = "\xEF\x89\x82"; static constexpr const char* heartBeat = "\xEF\x88\x9E"; static constexpr const char* bluetooth = "\xEF\x8A\x94"; + static constexpr const char* shieldAlt = "\xEF\x8F\xAD"; static constexpr const char* plug = "\xEF\x87\xA6"; static constexpr const char* shoe = "\xEF\x95\x8B"; static constexpr const char* clock = "\xEF\x80\x97"; diff --git a/src/displayapp/screens/settings/SettingOTA.cpp b/src/displayapp/screens/settings/SettingOTA.cpp new file mode 100644 index 00000000..ad123dec --- /dev/null +++ b/src/displayapp/screens/settings/SettingOTA.cpp @@ -0,0 +1,58 @@ +#include "displayapp/screens/settings/SettingOTA.h" +#include +#include "displayapp/DisplayApp.h" +#include "displayapp/Messages.h" +#include "displayapp/screens/Styles.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + struct Option { + const char* name; + Pinetime::Controllers::Settings::DfuAndFsMode mode; + }; + + constexpr std::array options = {{ + {"Enabled", Pinetime::Controllers::Settings::DfuAndFsMode::Enabled}, + {"Disabled", Pinetime::Controllers::Settings::DfuAndFsMode::Disabled}, + {"Till reboot", Pinetime::Controllers::Settings::DfuAndFsMode::EnabledTillReboot}, + }}; + + std::array CreateOptionArray() { + std::array optionArray; + for (size_t i = 0; i < CheckboxList::MaxItems; i++) { + if (i >= options.size()) { + optionArray[i].name = ""; + optionArray[i].enabled = false; + } else { + optionArray[i].name = options[i].name; + optionArray[i].enabled = true; + } + } + return optionArray; + }; +} + +SettingOTA::SettingOTA(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : app {app}, + settingsController {settingsController}, + checkboxList( + 0, + 1, + "Firmware & files", + Symbols::shieldAlt, + settingsController.GetDfuAndFsMode() == Pinetime::Controllers::Settings::DfuAndFsMode::Enabled ? 0 + : settingsController.GetDfuAndFsMode() == Pinetime::Controllers::Settings::DfuAndFsMode::EnabledTillReboot ? 2 + : 1, + [&settings = settingsController](uint32_t index) { + settings.SetDfuAndFsMode(options[index].mode); + }, + CreateOptionArray()) { +} + +SettingOTA::~SettingOTA() { + lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); +} diff --git a/src/displayapp/screens/settings/SettingOTA.h b/src/displayapp/screens/settings/SettingOTA.h new file mode 100644 index 00000000..13c9a33d --- /dev/null +++ b/src/displayapp/screens/settings/SettingOTA.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include +#include + +#include "components/settings/Settings.h" +#include "displayapp/screens/Screen.h" +#include "displayapp/screens/CheckboxList.h" + +namespace Pinetime { + + namespace Applications { + namespace Screens { + + class SettingOTA : public Screen { + public: + SettingOTA(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); + ~SettingOTA() override; + + private: + DisplayApp* app; + Pinetime::Controllers::Settings& settingsController; + CheckboxList checkboxList; + }; + } + } +} diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index 3722c2be..370e83f4 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -45,8 +45,9 @@ namespace Pinetime { {Symbols::clock, "Chimes", Apps::SettingChimes}, {Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, - {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, + {Symbols::shieldAlt, "Over-the-air", Apps::SettingOTA}, + {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, {Symbols::list, "About", Apps::SysInfo}, // {Symbols::none, "None", Apps::None}, diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 0060e360..0ee877b7 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -85,6 +85,14 @@ namespace Pinetime { return nimbleController; }; + Pinetime::Controllers::NotificationManager& GetNotificationManager() { + return notificationManager; + }; + + Pinetime::Controllers::Settings& GetSettings() { + return settingsController; + }; + bool IsSleeping() const { return state != SystemTaskState::Running; }

NSiUJP*j_ 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�B>RWFSO`SNO*i1h!GsVJGJ>G{ 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 z z-X@+ht(Ff?PkVz9@%|b0%jH!ooQcgG&(0E7mmRA)JMzrhJ!uRFDVqnv7{L^^9B5S> z!DSRZF!d=6?C)}Q1IKVvf3s-~OZsRP{a1|dC!h&I`Ck+AvoOr~ z@aU)t2+C|f`zEJDlORNg6@TCJzPh=E$(3-Yk1%tKtu#ysnoTNV zqk$gx0HdVtG=yxSQ2xMYYxF4^EDMT;R12b(