diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-04-10 13:25:41 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-04-10 14:07:20 (GMT) |
| commit | 4d8a0d3300345b71dcbd7e86d1e7c4cfcc3cf200 (patch) | |
| tree | 14e9254f671f5d77fc543509417fd19ac63f1f52 | |
| parent | 42a64f15867a35ccdab44b3b2c09aa15fd6f9ae1 (diff) | |
New chimes engine
| -rw-r--r-- | src/components/datetime/DateTimeController.cpp | 14 | ||||
| -rw-r--r-- | src/components/datetime/DateTimeController.h | 5 | ||||
| -rw-r--r-- | src/components/settings/Settings.h | 2 | ||||
| -rw-r--r-- | src/displayapp/screens/settings/SettingChimes.cpp | 13 | ||||
| -rw-r--r-- | src/displayapp/screens/settings/SettingChimes.h | 2 | ||||
| -rw-r--r-- | src/systemtask/Messages.h | 2 | ||||
| -rw-r--r-- | src/systemtask/SystemTask.cpp | 39 |
7 files changed, 50 insertions, 27 deletions
diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index fbaa01b..01e2859 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -38,7 +38,7 @@ void DateTime::SetTime( UpdateTime(systickCounter); NRF_LOG_INFO("* %d %d %d ", this->hour, this->minute, this->second); - NRF_LOG_INFO("* %d %d %d ", this->day, this->month, this->year); + NRF_LOG_INFO("* %d %d %d ", this->day, ((int)this->month), this->year); systemTask->PushMessage(System::Messages::OnNewTime); } @@ -82,15 +82,15 @@ void DateTime::UpdateTime(uint32_t systickCounter) { isHourAlreadyNotified = false; } - if ((minute == 0 || minute == 30) && !isHalfHourAlreadyNotified) { - isHalfHourAlreadyNotified = true; + if (minute%chimePeriod) { + hasChimed = false; + } else if (!hasChimed) { if (systemTask != nullptr) { - systemTask->PushMessage(System::Messages::OnNewHalfHour); + systemTask->PushMessage(System::Messages::OnChime); + hasChimed = true; } - } else if (minute != 0 && minute != 30) { - isHalfHourAlreadyNotified = 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 2126ca1..ca7320c 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -97,7 +97,10 @@ namespace Pinetime { bool isMidnightAlreadyNotified = false; bool isHourAlreadyNotified = true; - bool isHalfHourAlreadyNotified = true; + bool hasChimed = true; + public: + uint8_t chimePeriod = 5; + private: System::SystemTask* systemTask = nullptr; Controllers::Settings& settingsController; }; diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 2d5f1d5..b85b5b4 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -10,7 +10,7 @@ namespace Pinetime { public: enum class ClockType : uint8_t { H24, H12 }; enum class Notification : uint8_t { ON, OFF }; - enum class ChimesOption : uint8_t { None, Hours, HalfHours }; + enum class ChimesOption : uint8_t { None, Hours, HalfHours, FiveMinutes }; enum class WakeUpMode : uint8_t { SingleTap = 0, DoubleTap = 1, diff --git a/src/displayapp/screens/settings/SettingChimes.cpp b/src/displayapp/screens/settings/SettingChimes.cpp index 543b5e0..ae89a49 100644 --- a/src/displayapp/screens/settings/SettingChimes.cpp +++ b/src/displayapp/screens/settings/SettingChimes.cpp @@ -71,6 +71,16 @@ SettingChimes::SettingChimes(Pinetime::Applications::DisplayApp* app, Pinetime:: } optionsTotal++; + cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text_static(cbOption[optionsTotal], " Every 5 mins"); + cbOption[optionsTotal]->user_data = this; + lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); + SetRadioButtonStyle(cbOption[optionsTotal]); + if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::FiveMinutes) { + lv_checkbox_set_checked(cbOption[optionsTotal], true); + } + + optionsTotal++; } SettingChimes::~SettingChimes() { @@ -92,6 +102,9 @@ void SettingChimes::UpdateSelected(lv_obj_t* object, lv_event_t event) { if (i == 2) { settingsController.SetChimeOption(Controllers::Settings::ChimesOption::HalfHours); } + if (i == 3) { + settingsController.SetChimeOption(Controllers::Settings::ChimesOption::FiveMinutes); + } } else { lv_checkbox_set_checked(cbOption[i], false); } diff --git a/src/displayapp/screens/settings/SettingChimes.h b/src/displayapp/screens/settings/SettingChimes.h index a251e95..836edef 100644 --- a/src/displayapp/screens/settings/SettingChimes.h +++ b/src/displayapp/screens/settings/SettingChimes.h @@ -20,7 +20,7 @@ namespace Pinetime { private: Controllers::Settings& settingsController; uint8_t optionsTotal; - lv_obj_t* cbOption[3]; + lv_obj_t* cbOption[4]; }; } } diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index d5759d2..86e26c1 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -22,7 +22,7 @@ namespace Pinetime { DisableSleeping, OnNewDay, OnNewHour, - OnNewHalfHour, + OnChime, OnChargingEvent, OnPairing, SetOffAlarm, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 4d803cd..3e4f8f6 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -406,24 +406,31 @@ void SystemTask::Work() { stepCounterMustBeReset = true; break; case Messages::OnNewHour: + case Messages::OnChime: using Pinetime::Controllers::AlarmController; - if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && alarmController.State() != AlarmController::AlarmState::Alerting) { - if (isSleeping && !isWakingUp) { - GoToRunning(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); + if (alarmController.State() != AlarmController::AlarmState::Alerting) do { + auto chimeOption = settingsController.GetChimeOption(); + if (chimeOption != Controllers::Settings::ChimesOption::None) { + uint8_t chimeDuration; + bool chimeWakeup = false; + uint8_t minute; + if (message == Messages::OnNewHour) { + chimeDuration = 22; + chimeWakeup = true; + } else if (chimeOption >= Controllers::Settings::ChimesOption::HalfHours && (minute = dateTimeController.Minutes()) == 30) { + chimeDuration = 18; + } else if (chimeOption > Controllers::Settings::ChimesOption::HalfHours) { + chimeDuration = 11; + } else { + break; + } + if (chimeWakeup && isSleeping && !isWakingUp) { + GoToRunning(); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); + } + motorController.RunForDuration(chimeDuration); } - motorController.RunForDuration(35); - } - break; - case Messages::OnNewHalfHour: - using Pinetime::Controllers::AlarmController; - if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && alarmController.State() != AlarmController::AlarmState::Alerting) { - if (isSleeping && !isWakingUp) { - GoToRunning(); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); - } - motorController.RunForDuration(35); - } + } while(0); break; case Messages::OnChargingEvent: batteryController.ReadPowerState(); |
