From 66e4b16b9aebd8875f91fc4a46b38e7d2628643f Mon Sep 17 00:00:00 2001 From: Zischknall Date: Wed, 15 Jan 2025 18:06:16 +0100 Subject: [PATCH 1/3] chimes: Add chime option for every quarter hour --- src/components/datetime/DateTimeController.cpp | 9 +++++++++ src/components/datetime/DateTimeController.h | 1 + src/components/settings/Settings.h | 2 +- src/displayapp/screens/settings/SettingChimes.cpp | 3 ++- src/systemtask/Messages.h | 1 + src/systemtask/SystemTask.cpp | 8 ++++++++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index d439821b90..ddc9be0159 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -126,6 +126,15 @@ void DateTime::UpdateTime(uint32_t systickCounter, bool forceUpdate) { isHalfHourAlreadyNotified = false; } + if ((minute == 0 || minute == 15 || minute == 30 || minute == 45) && !isQuarterHourAlreadyNotified) { + isQuarterHourAlreadyNotified = true; + if (systemTask != nullptr) { + systemTask->PushMessage(System::Messages::OnNewQuarterHour); + } + } else if (minute != 0 && minute != 15 && minute != 30 && minute != 45) { + isQuarterHourAlreadyNotified = false; + } + // Notify new day to SystemTask if (hour == 0 and not isMidnightAlreadyNotified) { isMidnightAlreadyNotified = true; diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index a005f9ac43..16f45fe9e9 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -154,6 +154,7 @@ namespace Pinetime { bool isMidnightAlreadyNotified = false; bool isHourAlreadyNotified = true; bool isHalfHourAlreadyNotified = true; + bool isQuarterHourAlreadyNotified = true; System::SystemTask* systemTask = nullptr; Controllers::Settings& settingsController; }; diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 602de3a585..3e02a3a8d0 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -12,7 +12,7 @@ namespace Pinetime { enum class ClockType : uint8_t { H24, H12 }; enum class WeatherFormat : uint8_t { Metric, Imperial }; enum class Notification : uint8_t { On, Off, Sleep }; - enum class ChimesOption : uint8_t { None, Hours, HalfHours }; + enum class ChimesOption : uint8_t { None, Hours, HalfHours, QuarterHours }; enum class WakeUpMode : uint8_t { SingleTap = 0, DoubleTap = 1, RaiseWrist = 2, Shake = 3, LowerWrist = 4 }; enum class Colors : uint8_t { White, diff --git a/src/displayapp/screens/settings/SettingChimes.cpp b/src/displayapp/screens/settings/SettingChimes.cpp index 2d3473debf..e40e2c38bf 100644 --- a/src/displayapp/screens/settings/SettingChimes.cpp +++ b/src/displayapp/screens/settings/SettingChimes.cpp @@ -14,10 +14,11 @@ namespace { const char* name; }; - constexpr std::array options = {{ + constexpr std::array options = {{ {Pinetime::Controllers::Settings::ChimesOption::None, "Off"}, {Pinetime::Controllers::Settings::ChimesOption::Hours, "Every hour"}, {Pinetime::Controllers::Settings::ChimesOption::HalfHours, "Every 30 mins"}, + {Pinetime::Controllers::Settings::ChimesOption::QuarterHours, "Every 15 mins"}, }}; std::array CreateOptionArray() { diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index fee94bb747..70b8a67339 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -22,6 +22,7 @@ namespace Pinetime { OnNewDay, OnNewHour, OnNewHalfHour, + OnNewQuarterHour, OnChargingEvent, OnPairing, SetOffAlarm, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index eb013d6d1a..9f27f49b27 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -336,6 +336,14 @@ void SystemTask::Work() { displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); } break; + case Messages::OnNewQuarterHour: + using Pinetime::Controllers::AlarmController; + if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && + settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::QuarterHours && !alarmController.IsAlerting()) { + GoToRunning(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); + } + break; case Messages::OnChargingEvent: batteryController.ReadPowerState(); GoToRunning(); From 5621869ec83240c6cd9a415a7c994740457c4437 Mon Sep 17 00:00:00 2001 From: Zischknall Date: Wed, 15 Jan 2025 21:23:56 +0100 Subject: [PATCH 2/3] chimes: Different vibration patterns for each time of hour --- .../datetime/DateTimeController.cpp | 23 ++++++++++----- src/components/datetime/DateTimeController.h | 3 +- src/displayapp/DisplayApp.cpp | 28 +++++++++++++++++-- src/displayapp/Messages.h | 5 +++- src/systemtask/Messages.h | 3 +- src/systemtask/SystemTask.cpp | 22 +++++++++++---- 6 files changed, 66 insertions(+), 18 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index ddc9be0159..bbd67fd777 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -117,22 +117,31 @@ void DateTime::UpdateTime(uint32_t systickCounter, bool forceUpdate) { isHourAlreadyNotified = false; } - if ((minute == 0 || minute == 30) && !isHalfHourAlreadyNotified) { + if (minute == 15 && !isQuarterHourAlreadyNotified) { + isQuarterHourAlreadyNotified = true; + if (systemTask != nullptr) { + systemTask->PushMessage(System::Messages::OnNewQuarterHour); + } + } else if (minute != 15) { + isQuarterHourAlreadyNotified = false; + } + + if (minute == 30 && !isHalfHourAlreadyNotified) { isHalfHourAlreadyNotified = true; if (systemTask != nullptr) { systemTask->PushMessage(System::Messages::OnNewHalfHour); } - } else if (minute != 0 && minute != 30) { + } else if (minute != 30) { isHalfHourAlreadyNotified = false; } - if ((minute == 0 || minute == 15 || minute == 30 || minute == 45) && !isQuarterHourAlreadyNotified) { - isQuarterHourAlreadyNotified = true; + if (minute == 45 && !isThreeQuarterHourAlreadyNotified) { + isThreeQuarterHourAlreadyNotified = true; if (systemTask != nullptr) { - systemTask->PushMessage(System::Messages::OnNewQuarterHour); + systemTask->PushMessage(System::Messages::OnNewThreeQuarterHour); } - } else if (minute != 0 && minute != 15 && minute != 30 && minute != 45) { - isQuarterHourAlreadyNotified = false; + } else if (minute != 45) { + isThreeQuarterHourAlreadyNotified = false; } // Notify new day to SystemTask diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index 16f45fe9e9..bdf91bf83f 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -153,8 +153,9 @@ namespace Pinetime { bool isMidnightAlreadyNotified = false; bool isHourAlreadyNotified = true; - bool isHalfHourAlreadyNotified = true; bool isQuarterHourAlreadyNotified = true; + bool isHalfHourAlreadyNotified = true; + bool isThreeQuarterHourAlreadyNotified = true; System::SystemTask* systemTask = nullptr; Controllers::Settings& settingsController; }; diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 6671ac9e51..c7dc4d1497 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -471,9 +471,33 @@ void DisplayApp::Refresh() { case Messages::BleRadioEnableToggle: PushMessageToSystemTask(System::Messages::BleRadioEnableToggle); break; - case Messages::Chime: + case Messages::FullHourChime: LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::None); - motorController.RunForDuration(35); + motorController.RunForDuration(100); + vTaskDelay(pdMS_TO_TICKS(500)); + motorController.RunForDuration(100); + vTaskDelay(pdMS_TO_TICKS(500)); + motorController.RunForDuration(100); + vTaskDelay(pdMS_TO_TICKS(500)); + motorController.RunForDuration(100); + break; + case Messages::QuarterHourChime: + LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::None); + motorController.RunForDuration(100); + break; + case Messages::HalfHourChime: + LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::None); + motorController.RunForDuration(100); + vTaskDelay(pdMS_TO_TICKS(500)); + motorController.RunForDuration(100); + break; + case Messages::ThreeQuarterHourChime: + LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::None); + motorController.RunForDuration(100); + vTaskDelay(pdMS_TO_TICKS(500)); + motorController.RunForDuration(100); + vTaskDelay(pdMS_TO_TICKS(500)); + motorController.RunForDuration(100); break; case Messages::OnChargingEvent: motorController.RunForDuration(15); diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index d2abc8e58d..9171bd5590 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -22,7 +22,10 @@ namespace Pinetime { NotifyDeviceActivity, ShowPairingKey, AlarmTriggered, - Chime, + FullHourChime, + QuarterHourChime, + HalfHourChime, + ThreeQuarterHourChime, BleRadioEnableToggle, OnChargingEvent, }; diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 70b8a67339..78fc28ce9e 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -21,8 +21,9 @@ namespace Pinetime { DisableSleeping, OnNewDay, OnNewHour, - OnNewHalfHour, OnNewQuarterHour, + OnNewHalfHour, + OnNewThreeQuarterHour, OnChargingEvent, OnPairing, SetOffAlarm, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 9f27f49b27..49de3dd958 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -323,25 +323,35 @@ void SystemTask::Work() { case Messages::OnNewHour: using Pinetime::Controllers::AlarmController; if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && - settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && !alarmController.IsAlerting()) { + settingsController.GetChimeOption() != Controllers::Settings::ChimesOption::None && !alarmController.IsAlerting()) { GoToRunning(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::FullHourChime); + } + break; + case Messages::OnNewQuarterHour: + using Pinetime::Controllers::AlarmController; + if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && + settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::QuarterHours && !alarmController.IsAlerting()) { + GoToRunning(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::QuarterHourChime); } break; case Messages::OnNewHalfHour: using Pinetime::Controllers::AlarmController; if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && - settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && !alarmController.IsAlerting()) { + (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours || + settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::QuarterHours) && + !alarmController.IsAlerting()) { GoToRunning(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::HalfHourChime); } break; - case Messages::OnNewQuarterHour: + case Messages::OnNewThreeQuarterHour: using Pinetime::Controllers::AlarmController; if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::QuarterHours && !alarmController.IsAlerting()) { GoToRunning(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Chime); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::ThreeQuarterHourChime); } break; case Messages::OnChargingEvent: From 8be6e88bd965a52c162904a297946f04ad8c6ae0 Mon Sep 17 00:00:00 2001 From: Zischknall Date: Thu, 16 Jan 2025 19:10:43 +0100 Subject: [PATCH 3/3] chimes: fix formatting --- src/systemtask/SystemTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 49de3dd958..931740b437 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -340,7 +340,7 @@ void SystemTask::Work() { using Pinetime::Controllers::AlarmController; if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep && (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours || - settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::QuarterHours) && + settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::QuarterHours) && !alarmController.IsAlerting()) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::HalfHourChime);