// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "AlarmMessageHandler.hpp" #include "ServiceTime.hpp" #include #include #include namespace alarms { AlarmMessageHandler::AlarmMessageHandler(stm::ServiceTime *service, std::unique_ptr &&alarmOperations) : service{service}, alarmOperations{std::move(alarmOperations)} {}; auto AlarmMessageHandler::handleTimeUpdate(TimePoint time) -> void { alarmOperations->updateEventsCache(time); } auto AlarmMessageHandler::handleGetAlarm(AlarmGetRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmGetRequestMessage *request, IAlarmOperations::OnGetAlarmProcessed callback) { alarmOperations->getAlarm(request->id, callback); }); } auto AlarmMessageHandler::handleGetAlarmWithStatus(AlarmGetWithStatusRequestMessage *request) -> std::shared_ptr { return handleWithCallback>( request, [&](AlarmGetWithStatusRequestMessage *request, IAlarmOperations::OnGetAlarmWithStatusProcessed callback) { alarmOperations->getAlarmWithStatus(request->id, callback); }); } auto AlarmMessageHandler::handleAddAlarm(AlarmAddRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmAddRequestMessage *request, IAlarmOperations::OnAddAlarmProcessed callback) { alarmOperations->addAlarm(request->alarmEvent, callback); }); } auto AlarmMessageHandler::handleUpdateAlarm(AlarmUpdateRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmUpdateRequestMessage *request, IAlarmOperations::OnUpdateAlarmProcessed callback) { alarmOperations->updateAlarm(request->alarmEvent, callback); }); } auto AlarmMessageHandler::handleRemoveAlarm(AlarmRemoveRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmRemoveRequestMessage *request, IAlarmOperations::OnRemoveAlarmProcessed callback) { alarmOperations->removeAlarm(request->id, callback); }); } auto AlarmMessageHandler::handleToggleAll(AlarmToggleAllRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmToggleAllRequestMessage *request, IAlarmOperations::OnToggleAllProcessed callback) { alarmOperations->toggleAll(request->toggle, callback); }); } auto AlarmMessageHandler::handleGetAlarmsInRange(AlarmsGetInRangeRequestMessage *request) -> std::shared_ptr { return handleWithCallback, std::uint32_t>>( request, [&](AlarmsGetInRangeRequestMessage *request, IAlarmOperations::OnGetAlarmsInRangeProcessed callback) { alarmOperations->getAlarmsInRange(request->offset, request->limit, std::move(callback)); }); } auto AlarmMessageHandler::handleGetNextSingleEvents(AlarmGetNextSingleEventsRequestMessage *request) -> std::shared_ptr { return handleWithCallback>( request, [&](AlarmGetNextSingleEventsRequestMessage *request, IAlarmOperations::OnGetAlarmsProcessed callback) { alarmOperations->getNextSingleEvents(TimePointNow(), callback); }); } auto AlarmMessageHandler::handleTurnOffRingingAlarm(RingingAlarmTurnOffRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](RingingAlarmTurnOffRequestMessage *request, IAlarmOperations::OnTurnOffRingingAlarm callback) { alarmOperations->turnOffRingingAlarm(request->id, callback); }); } auto AlarmMessageHandler::handleTurnOffSnooze(TurnOffSnoozeRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](TurnOffSnoozeRequestMessage *request, IAlarmOperations::OnTurnOffRingingAlarm callback) { alarmOperations->turnOffSnoozedAlarm(request->id, callback); }); } auto AlarmMessageHandler::handleSnoozeRingingAlarm(RingingAlarmSnoozeRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](RingingAlarmSnoozeRequestMessage *request, IAlarmOperations::OnSnoozeRingingAlarm callback) { alarmOperations->snoozeRingingAlarm(request->id, request->nextAlarmTime, callback); }); } auto AlarmMessageHandler::handlePostponeSnooze(PostponeSnoozeRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](PostponeSnoozeRequestMessage *request, IAlarmOperations::OnSnoozeRingingAlarm callback) { alarmOperations->postponeSnooze(request->id, request->nextAlarmTime, callback); }); } auto AlarmMessageHandler::handleMinuteUpdated() -> void { alarmOperations->minuteUpdated(TimePointNow()); } auto AlarmMessageHandler::handleStopAllSnoozedAlarms() -> void { alarmOperations->stopAllSnoozedAlarms(); } auto AlarmMessageHandler::handleAddSnoozedAlarmCountChangeCallback( AlarmOperationsCommon::OnSnoozedAlarmsCountChange callback) -> void { alarmOperations->addSnoozedAlarmsCountChangeCallback(callback); } auto AlarmMessageHandler::handleAddActiveAlarmCountChangeCallback( AlarmOperationsCommon::OnActiveAlarmCountChange callback) -> void { alarmOperations->addActiveAlarmCountChangeCallback(callback); alarmOperations->updateEventsCache(TimePointNow()); } auto AlarmMessageHandler::handleGetSnoozedAlarms(GetSnoozedAlarmsRequestMessage *request) -> std::shared_ptr { return handleWithCallback>( request, [&](GetSnoozedAlarmsRequestMessage *request, IAlarmOperations::OnGetSnoozedAlarms callback) { alarmOperations->getSnoozedAlarms(callback); }); } auto AlarmMessageHandler::handleBatteryStateChange(sevm::BatteryStateChangeMessage *request) -> void { switch (request->getState()) { case BatteryState::State::Normal: alarmOperations->handleNormalBatteryLevel(); break; case BatteryState::State::Shutdown: case BatteryState::State::CriticalCharging: case BatteryState::State::CriticalNotCharging: alarmOperations->handleCriticalBatteryLevel(); break; } } auto AlarmMessageHandler::handleTurnOffPreWakeUp(TurnOffPreWakeUpRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](TurnOffPreWakeUpRequestMessage *request, IAlarmOperations::OnTurnOffPreWakeUp callback) { alarmOperations->turnOffPreWakeUp(callback); }); } template auto AlarmMessageHandler::handleWithCallback( RequestType *request, const std::function)> &alarmOperationsCallback) -> std::shared_ptr { auto callback = [&, requestPtr = std::make_shared(*request)](CallbackParamType param) { auto response = std::make_shared(param); service->bus.sendResponse(response, requestPtr); }; alarmOperationsCallback(request, callback); return sys::MessageNone{}; } } // namespace alarms