Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 9 additions & 15 deletions src/components/datetime/DateTimeController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,22 +86,16 @@ 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);
}
} else if (minute != 0) {
isHourAlreadyNotified = false;
}

if ((minute == 0 || minute == 30) && !isHalfHourAlreadyNotified) {
isHalfHourAlreadyNotified = true;
if (systemTask != nullptr) {
systemTask->PushMessage(System::Messages::OnNewHalfHour);
if (systemTask != nullptr) {
uint8_t chimesFrequency = settingsController.GetChimesFrequency();
if (chimesFrequency != 0 && minute % chimesFrequency == 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
Expand Down
3 changes: 1 addition & 2 deletions src/components/datetime/DateTimeController.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down
24 changes: 17 additions & 7 deletions src/components/settings/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -57,14 +56,24 @@ 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<uint8_t>(frequency, 60);
settingsChanged = true;
}
settings.chimesOption = chimeOption;
};
ChimesOption GetChimeOption() const {
return settings.chimesOption;
uint8_t GetChimesFrequency() const {
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) {
Expand Down Expand Up @@ -222,7 +231,8 @@ namespace Pinetime {
Notification notificationStatus = Notification::On;

uint8_t clockFace = 0;
ChimesOption chimesOption = ChimesOption::None;
uint8_t chimesFrequency = 0;
uint8_t chimesDuration = 35;

PineTimeStyle PTS;

Expand Down
35 changes: 18 additions & 17 deletions src/displayapp/screens/settings/SettingChimes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<SettingChimes*>(obj->user_data);
screen->UpdateSelected(obj, event);
screen->UpdateFrequency(obj, event);
}
}

constexpr std::array<SettingChimes::Option, 3> SettingChimes::options;
constexpr std::array<SettingChimes::Option, 4> SettingChimes::frequencyOptions;

SettingChimes::SettingChimes(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
: Screen(app), settingsController {settingsController} {
Expand Down Expand Up @@ -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]);
}
}

Expand All @@ -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);
}
}
}
Expand Down
18 changes: 10 additions & 8 deletions src/displayapp/screens/settings/SettingChimes.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +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<Option, 3> options = {{
{Controllers::Settings::ChimesOption::None, " Off"},
{Controllers::Settings::ChimesOption::Hours, " Every hour"},
{Controllers::Settings::ChimesOption::HalfHours, " Every 30 mins"}

static constexpr std::array<Option, 4> frequencyOptions = {{
{0, " Off"},
{60, " Every hour"},
{30, " Every 30 mins"},
{15, " Every 15 mins"}
}};

std::array<lv_obj_t*, options.size()> cbOption;
std::array<lv_obj_t*, frequencyOptions.size()> frequencyCheckBoxes;

Controllers::Settings& settingsController;
};
Expand Down
3 changes: 1 addition & 2 deletions src/systemtask/Messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ namespace Pinetime {
EnableSleeping,
DisableSleeping,
OnNewDay,
OnNewHour,
OnNewHalfHour,
OnChime,
OnChargingEvent,
OnPairing,
SetOffAlarm,
Expand Down
17 changes: 2 additions & 15 deletions src/systemtask/SystemTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -387,28 +387,15 @@ 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();
displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock);
}
motorController.RunForDuration(35);
motorController.RunForDuration(settingsController.GetChimesDuration());
}
break;
case Messages::OnChargingEvent:
Expand Down