From 5c97989eac1bf3c11236505c1be4a8218bea4516 Mon Sep 17 00:00:00 2001 From: Galdor Takacs Date: Sun, 17 Jul 2022 13:58:01 +0200 Subject: [PATCH 1/3] Add chime option QuarterHour and refactor --- .../datetime/DateTimeController.cpp | 36 ++++++++++++------- src/components/datetime/DateTimeController.h | 3 +- .../screens/settings/SettingChimes.cpp | 2 +- .../screens/settings/SettingChimes.h | 5 +-- src/systemtask/Messages.h | 3 +- src/systemtask/SystemTask.cpp | 15 +------- 6 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index ba04705fd0..6306e9587a 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -86,22 +86,32 @@ void DateTime::UpdateTime(uint32_t systickCounter) { minute = time.minutes().count(); second = time.seconds().count(); - if (minute == 0 && !isHourAlreadyNotified) { - isHourAlreadyNotified = true; - if (systemTask != nullptr) { - systemTask->PushMessage(System::Messages::OnNewHour); + auto chimeOption = settingsController.GetChimeOption(); + if (chimeOption != Controllers::Settings::ChimesOption::None && + systemTask != nullptr) { + uint8_t chimeModulo = 0; + switch(chimeOption) { + case Controllers::Settings::ChimesOption::Hours: + chimeModulo = 60; + break; + case Controllers::Settings::ChimesOption::HalfHours: + chimeModulo = 30; + break; + case Controllers::Settings::ChimesOption::QuarterHours: + chimeModulo = 15; + break; + default: + chimeModulo = 0; } - } else if (minute != 0) { - isHourAlreadyNotified = false; - } - if ((minute == 0 || minute == 30) && !isHalfHourAlreadyNotified) { - isHalfHourAlreadyNotified = true; - if (systemTask != nullptr) { - systemTask->PushMessage(System::Messages::OnNewHalfHour); + if (chimeModulo > 0 && minute % chimeModulo == 0) { + if (!isChimeAlreadyNotified) { + isChimeAlreadyNotified = true; + systemTask->PushMessage(System::Messages::OnChime); + } + } else { + isChimeAlreadyNotified = false; } - } else if (minute != 0 && minute != 30) { - isHalfHourAlreadyNotified = false; } // Notify new day to SystemTask diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index 00bbc2ee45..948eae34fc 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -90,8 +90,7 @@ namespace Pinetime { std::chrono::seconds uptime {0}; bool isMidnightAlreadyNotified = false; - bool isHourAlreadyNotified = true; - bool isHalfHourAlreadyNotified = true; + bool isChimeAlreadyNotified = true; System::SystemTask* systemTask = nullptr; Controllers::Settings& settingsController; }; diff --git a/src/displayapp/screens/settings/SettingChimes.cpp b/src/displayapp/screens/settings/SettingChimes.cpp index 7f519f7539..2ce1cecf71 100644 --- a/src/displayapp/screens/settings/SettingChimes.cpp +++ b/src/displayapp/screens/settings/SettingChimes.cpp @@ -14,7 +14,7 @@ namespace { } } -constexpr std::array SettingChimes::options; +constexpr std::array SettingChimes::options; SettingChimes::SettingChimes(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) : Screen(app), settingsController {settingsController} { diff --git a/src/displayapp/screens/settings/SettingChimes.h b/src/displayapp/screens/settings/SettingChimes.h index e48432c695..3af66ca79c 100644 --- a/src/displayapp/screens/settings/SettingChimes.h +++ b/src/displayapp/screens/settings/SettingChimes.h @@ -23,10 +23,11 @@ namespace Pinetime { Controllers::Settings::ChimesOption chimesOption; const char* name; }; - static constexpr std::array options = {{ + static constexpr std::array options = {{ {Controllers::Settings::ChimesOption::None, " Off"}, {Controllers::Settings::ChimesOption::Hours, " Every hour"}, - {Controllers::Settings::ChimesOption::HalfHours, " Every 30 mins"} + {Controllers::Settings::ChimesOption::HalfHours, " Every 30 mins"}, + {Controllers::Settings::ChimesOption::QuarterHours, " Every 15 mins"} }}; std::array cbOption; diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 7a46e0609c..d9033f1890 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -21,8 +21,7 @@ namespace Pinetime { EnableSleeping, DisableSleeping, OnNewDay, - OnNewHour, - OnNewHalfHour, + OnChime, OnChargingEvent, OnPairing, SetOffAlarm, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 1c871fd2b3..2c732eedd2 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -387,22 +387,9 @@ void SystemTask::Work() { // Remember we'll have to reset the counter next time we're awake stepCounterMustBeReset = true; break; - case Messages::OnNewHour: + case Messages::OnChime: using Pinetime::Controllers::AlarmController; if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && - settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && - alarmController.State() != AlarmController::AlarmState::Alerting) { - if (state == SystemTaskState::Sleeping) { - GoToRunning(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); - } - motorController.RunForDuration(35); - } - break; - 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) { if (state == SystemTaskState::Sleeping) { GoToRunning(); From 8790db51ff4bf88605dd8c0df8e746010b723d94 Mon Sep 17 00:00:00 2001 From: Galdor Takacs Date: Wed, 17 Aug 2022 12:15:13 +0200 Subject: [PATCH 2/3] Refactor chime frequency option naming --- .../datetime/DateTimeController.cpp | 22 ++---------- src/components/settings/Settings.h | 13 ++++--- .../screens/settings/SettingChimes.cpp | 35 ++++++++++--------- .../screens/settings/SettingChimes.h | 19 +++++----- 4 files changed, 37 insertions(+), 52 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 6306e9587a..13b12edca9 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -86,25 +86,9 @@ void DateTime::UpdateTime(uint32_t systickCounter) { minute = time.minutes().count(); second = time.seconds().count(); - auto chimeOption = settingsController.GetChimeOption(); - if (chimeOption != Controllers::Settings::ChimesOption::None && - systemTask != nullptr) { - uint8_t chimeModulo = 0; - switch(chimeOption) { - case Controllers::Settings::ChimesOption::Hours: - chimeModulo = 60; - break; - case Controllers::Settings::ChimesOption::HalfHours: - chimeModulo = 30; - break; - case Controllers::Settings::ChimesOption::QuarterHours: - chimeModulo = 15; - break; - default: - chimeModulo = 0; - } - - if (chimeModulo > 0 && minute % chimeModulo == 0) { + if (systemTask != nullptr) { + uint8_t chimesFrequency = settingsController.GetChimesFrequency(); + if (chimesFrequency != 0 && minute % chimesFrequency == 0) { if (!isChimeAlreadyNotified) { isChimeAlreadyNotified = true; systemTask->PushMessage(System::Messages::OnChime); diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 478408f647..6371125189 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -10,7 +10,6 @@ namespace Pinetime { public: enum class ClockType : uint8_t { H24, H12 }; enum class Notification : uint8_t { On, Off, Sleep }; - enum class ChimesOption : uint8_t { None, Hours, HalfHours }; enum class WakeUpMode : uint8_t { SingleTap = 0, DoubleTap = 1, @@ -57,14 +56,14 @@ namespace Pinetime { return settings.clockFace; }; - void SetChimeOption(ChimesOption chimeOption) { - if (chimeOption != settings.chimesOption) { + void SetChimesFrequency(uint8_t frequency) { + if (frequency != settings.chimesFrequency) { + settings.chimesFrequency = std::min(frequency, 60); settingsChanged = true; } - settings.chimesOption = chimeOption; }; - ChimesOption GetChimeOption() const { - return settings.chimesOption; + uint8_t GetChimesFrequency() const { + return settings.chimesFrequency; }; void SetPTSColorTime(Colors colorTime) { @@ -222,7 +221,7 @@ namespace Pinetime { Notification notificationStatus = Notification::On; uint8_t clockFace = 0; - ChimesOption chimesOption = ChimesOption::None; + uint8_t chimesFrequency = 0; PineTimeStyle PTS; diff --git a/src/displayapp/screens/settings/SettingChimes.cpp b/src/displayapp/screens/settings/SettingChimes.cpp index 2ce1cecf71..72acd08e57 100644 --- a/src/displayapp/screens/settings/SettingChimes.cpp +++ b/src/displayapp/screens/settings/SettingChimes.cpp @@ -8,13 +8,13 @@ using namespace Pinetime::Applications::Screens; namespace { - void event_handler(lv_obj_t* obj, lv_event_t event) { + void onFrequencyChange(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast(obj->user_data); - screen->UpdateSelected(obj, event); + screen->UpdateFrequency(obj, event); } } -constexpr std::array SettingChimes::options; +constexpr std::array SettingChimes::frequencyOptions; SettingChimes::SettingChimes(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) : Screen(app), settingsController {settingsController} { @@ -42,15 +42,16 @@ SettingChimes::SettingChimes(Pinetime::Applications::DisplayApp* app, Pinetime:: 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); - if (settingsController.GetChimeOption() == options[i].chimesOption) { - lv_checkbox_set_checked(cbOption[i], true); + uint8_t selectedFrequency = settingsController.GetChimesFrequency(); + for (unsigned int i = 0; i < frequencyOptions.size(); i++) { + frequencyCheckBoxes[i] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text(frequencyCheckBoxes[i], frequencyOptions[i].label); + if (selectedFrequency == frequencyOptions[i].value) { + lv_checkbox_set_checked(frequencyCheckBoxes[i], true); } - cbOption[i]->user_data = this; - lv_obj_set_event_cb(cbOption[i], event_handler); - SetRadioButtonStyle(cbOption[i]); + frequencyCheckBoxes[i]->user_data = this; + lv_obj_set_event_cb(frequencyCheckBoxes[i], onFrequencyChange); + SetRadioButtonStyle(frequencyCheckBoxes[i]); } } @@ -59,14 +60,14 @@ SettingChimes::~SettingChimes() { settingsController.SaveSettings(); } -void SettingChimes::UpdateSelected(lv_obj_t* object, lv_event_t event) { +void SettingChimes::UpdateFrequency(lv_obj_t* object, lv_event_t event) { if (event == LV_EVENT_VALUE_CHANGED) { - for (uint8_t i = 0; i < options.size(); i++) { - if (object == cbOption[i]) { - lv_checkbox_set_checked(cbOption[i], true); - settingsController.SetChimeOption(options[i].chimesOption); + for (uint8_t i = 0; i < frequencyOptions.size(); i++) { + if (object == frequencyCheckBoxes[i]) { + lv_checkbox_set_checked(frequencyCheckBoxes[i], true); + settingsController.SetChimesFrequency(frequencyOptions[i].value); } else { - lv_checkbox_set_checked(cbOption[i], false); + lv_checkbox_set_checked(frequencyCheckBoxes[i], false); } } } diff --git a/src/displayapp/screens/settings/SettingChimes.h b/src/displayapp/screens/settings/SettingChimes.h index 3af66ca79c..9f4d698b1b 100644 --- a/src/displayapp/screens/settings/SettingChimes.h +++ b/src/displayapp/screens/settings/SettingChimes.h @@ -16,21 +16,22 @@ namespace Pinetime { SettingChimes(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~SettingChimes() override; - void UpdateSelected(lv_obj_t* object, lv_event_t event); + void UpdateFrequency(lv_obj_t* object, lv_event_t event); private: struct Option { - Controllers::Settings::ChimesOption chimesOption; - const char* name; + uint8_t value; + const char* label; }; - static constexpr std::array options = {{ - {Controllers::Settings::ChimesOption::None, " Off"}, - {Controllers::Settings::ChimesOption::Hours, " Every hour"}, - {Controllers::Settings::ChimesOption::HalfHours, " Every 30 mins"}, - {Controllers::Settings::ChimesOption::QuarterHours, " Every 15 mins"} + + static constexpr std::array frequencyOptions = {{ + {0, " Off"}, + {60, " Every hour"}, + {30, " Every 30 mins"}, + {15, " Every 15 mins"} }}; - std::array cbOption; + std::array frequencyCheckBoxes; Controllers::Settings& settingsController; }; From be85ee448ee86fff86c9457c67bf4fab5ffa8e22 Mon Sep 17 00:00:00 2001 From: Galdor Takacs Date: Thu, 18 Aug 2022 06:03:09 +0200 Subject: [PATCH 3/3] settings: Add chimes duration (not settable yet) --- src/components/settings/Settings.h | 11 +++++++++++ src/systemtask/SystemTask.cpp | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 6371125189..fda050c737 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -66,6 +66,16 @@ namespace Pinetime { return settings.chimesFrequency; }; + void SetChimesDuration(uint8_t duration) { + if (duration != settings.chimesDuration) { + settings.chimesDuration = duration; + settingsChanged = true; + } + }; + uint8_t GetChimesDuration() const { + return settings.chimesDuration; + }; + void SetPTSColorTime(Colors colorTime) { if (colorTime != settings.PTS.ColorTime) settingsChanged = true; @@ -222,6 +232,7 @@ namespace Pinetime { uint8_t clockFace = 0; uint8_t chimesFrequency = 0; + uint8_t chimesDuration = 35; PineTimeStyle PTS; diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 2c732eedd2..833162a975 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -395,7 +395,7 @@ void SystemTask::Work() { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); } - motorController.RunForDuration(35); + motorController.RunForDuration(settingsController.GetChimesDuration()); } break; case Messages::OnChargingEvent: