diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-03-26 04:21:00 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-03-26 04:21:23 (GMT) |
| commit | e8b879835c2375a680cda5c51043c3c03d7481df (patch) | |
| tree | 079a0042e842663645a3930981863b51635e7488 /src/components/alarm | |
| parent | 5215bc45a6520258c021a6df3940de9f1f16d6ff (diff) | |
sans alarm
Diffstat (limited to 'src/components/alarm')
| -rw-r--r-- | src/components/alarm/AlarmController.cpp | 114 | ||||
| -rw-r--r-- | src/components/alarm/AlarmController.h | 67 |
2 files changed, 0 insertions, 181 deletions
diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp deleted file mode 100644 index 28b328d..0000000 --- a/src/components/alarm/AlarmController.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2021 mruss77, Florian - - This file is part of InfiniTime. - - InfiniTime is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - InfiniTime is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <https://www.gnu.org/licenses/>. -*/ -#include "components/alarm/AlarmController.h" -#include "systemtask/SystemTask.h" -#include "app_timer.h" -#include "task.h" -#include <chrono> - -using namespace Pinetime::Controllers; -using namespace std::chrono_literals; - -AlarmController::AlarmController(Controllers::DateTime& dateTimeController) : dateTimeController {dateTimeController} { -} - -APP_TIMER_DEF(alarmAppTimer); - -namespace { - void SetOffAlarm(void* p_context) { - auto* controller = static_cast<Pinetime::Controllers::AlarmController*>(p_context); - if (controller != nullptr) { - controller->SetOffAlarmNow(); - } - } -} - -void AlarmController::Init(System::SystemTask* systemTask) { - app_timer_create(&alarmAppTimer, APP_TIMER_MODE_SINGLE_SHOT, SetOffAlarm); - this->systemTask = systemTask; -} - -void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) { - hours = alarmHr; - minutes = alarmMin; -} - -void AlarmController::ScheduleAlarm() { - // Determine the next time the alarm needs to go off and set the app_timer - app_timer_stop(alarmAppTimer); - - auto now = dateTimeController.CurrentDateTime(); - alarmTime = now; - time_t ttAlarmTime = std::chrono::system_clock::to_time_t(alarmTime); - tm* tmAlarmTime = std::localtime(&ttAlarmTime); - - // If the time being set has already passed today,the alarm should be set for tomorrow - if (hours < dateTimeController.Hours() || (hours == dateTimeController.Hours() && minutes <= dateTimeController.Minutes())) { - tmAlarmTime->tm_mday += 1; - // tm_wday doesn't update automatically - tmAlarmTime->tm_wday = (tmAlarmTime->tm_wday + 1) % 7; - } - - tmAlarmTime->tm_hour = hours; - tmAlarmTime->tm_min = minutes; - tmAlarmTime->tm_sec = 0; - - // if alarm is in weekday-only mode, make sure it shifts to the next weekday - if (recurrence == RecurType::Weekdays) { - if (tmAlarmTime->tm_wday == 0) { // Sunday, shift 1 day - tmAlarmTime->tm_mday += 1; - } else if (tmAlarmTime->tm_wday == 6) { // Saturday, shift 2 days - tmAlarmTime->tm_mday += 2; - } - } - tmAlarmTime->tm_isdst = -1; // use system timezone setting to determine DST - - // now can convert back to a time_point - alarmTime = std::chrono::system_clock::from_time_t(std::mktime(tmAlarmTime)); - auto mSecToAlarm = std::chrono::duration_cast<std::chrono::milliseconds>(alarmTime - now).count(); - app_timer_start(alarmAppTimer, APP_TIMER_TICKS(mSecToAlarm), this); - - state = AlarmState::Set; -} - -uint32_t AlarmController::SecondsToAlarm() { - return std::chrono::duration_cast<std::chrono::seconds>(alarmTime - dateTimeController.CurrentDateTime()).count(); -} - -void AlarmController::DisableAlarm() { - app_timer_stop(alarmAppTimer); - state = AlarmState::Not_Set; -} - -void AlarmController::SetOffAlarmNow() { - state = AlarmState::Alerting; - systemTask->PushMessage(System::Messages::SetOffAlarm); -} - -void AlarmController::StopAlerting() { - systemTask->PushMessage(System::Messages::StopRinging); - - // Alarm state is off unless this is a recurring alarm - if (recurrence == RecurType::None) { - state = AlarmState::Not_Set; - } else { - state = AlarmState::Set; - // set next instance - ScheduleAlarm(); - } -} diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h deleted file mode 100644 index f39fbde..0000000 --- a/src/components/alarm/AlarmController.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2021 mruss77, Florian - - This file is part of InfiniTime. - - InfiniTime is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - InfiniTime is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <https://www.gnu.org/licenses/>. -*/ -#pragma once - -#include <cstdint> -#include "components/datetime/DateTimeController.h" - -namespace Pinetime { - namespace System { - class SystemTask; - } - namespace Controllers { - class AlarmController { - public: - AlarmController(Controllers::DateTime& dateTimeController); - - void Init(System::SystemTask* systemTask); - void SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin); - void ScheduleAlarm(); - void DisableAlarm(); - void SetOffAlarmNow(); - uint32_t SecondsToAlarm(); - void StopAlerting(); - enum class AlarmState { Not_Set, Set, Alerting }; - enum class RecurType { None, Daily, Weekdays }; - uint8_t Hours() const { - return hours; - } - uint8_t Minutes() const { - return minutes; - } - AlarmState State() const { - return state; - } - RecurType Recurrence() const { - return recurrence; - } - void SetRecurrence(RecurType recurType) { - recurrence = recurType; - } - - private: - Controllers::DateTime& dateTimeController; - System::SystemTask* systemTask = nullptr; - uint8_t hours = 7; - uint8_t minutes = 0; - std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> alarmTime; - AlarmState state = AlarmState::Not_Set; - RecurType recurrence = RecurType::None; - }; - } -} |
