summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichele Bini <michele.bini@gmail.com>2022-04-10 13:25:41 (GMT)
committerMichele Bini <michele.bini@gmail.com>2022-04-10 14:07:20 (GMT)
commit4d8a0d3300345b71dcbd7e86d1e7c4cfcc3cf200 (patch)
tree14e9254f671f5d77fc543509417fd19ac63f1f52
parent42a64f15867a35ccdab44b3b2c09aa15fd6f9ae1 (diff)
New chimes engine
-rw-r--r--src/components/datetime/DateTimeController.cpp14
-rw-r--r--src/components/datetime/DateTimeController.h5
-rw-r--r--src/components/settings/Settings.h2
-rw-r--r--src/displayapp/screens/settings/SettingChimes.cpp13
-rw-r--r--src/displayapp/screens/settings/SettingChimes.h2
-rw-r--r--src/systemtask/Messages.h2
-rw-r--r--src/systemtask/SystemTask.cpp39
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();