diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp
index d439821b90..bbd67fd777 100644
--- a/src/components/datetime/DateTimeController.cpp
+++ b/src/components/datetime/DateTimeController.cpp
@@ -117,15 +117,33 @@ 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 == 45 && !isThreeQuarterHourAlreadyNotified) {
+ isThreeQuarterHourAlreadyNotified = true;
+ if (systemTask != nullptr) {
+ systemTask->PushMessage(System::Messages::OnNewThreeQuarterHour);
+ }
+ } else if (minute != 45) {
+ isThreeQuarterHourAlreadyNotified = 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..bdf91bf83f 100644
--- a/src/components/datetime/DateTimeController.h
+++ b/src/components/datetime/DateTimeController.h
@@ -153,7 +153,9 @@ namespace Pinetime {
bool isMidnightAlreadyNotified = false;
bool isHourAlreadyNotified = true;
+ bool isQuarterHourAlreadyNotified = true;
bool isHalfHourAlreadyNotified = true;
+ bool isThreeQuarterHourAlreadyNotified = 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/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/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