// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "BatteryLevelCheck.hpp" #include "service-evtmgr/BatteryMessages.hpp" #include "SystemManager/Constants.hpp" #include #include #include #include #include namespace battery_level_check { namespace { unsigned int batteryLevelCritical = 0; sys::Service *parentService = nullptr; std::unique_ptr settings; bool isBatteryLevelCritical(unsigned int level) { return level < batteryLevelCritical; } void batteryLevelSettingsCallback(std::string setting) { if (!setting.empty()) { batteryLevelCritical = utils::getNumericValue(setting); } } } // namespace void init(sys::Service *service) { parentService = service; settings = std::make_unique(service); settings->registerValueChange(settings::Battery::criticalLevel, [&](std::string value) { batteryLevelSettingsCallback(value); }); } void deinit() { settings->unregisterValueChange(settings::Battery::criticalLevel); settings.reset(); } void checkBatteryLevelCritical() { if (Store::Battery::get().state == Store::Battery::State::Discharging) { if (isBatteryLevelCritical(Store::Battery::get().level)) { auto levelCriticalMessage = std::make_shared(); sys::Bus::SendUnicast(levelCriticalMessage, service::name::system_manager, parentService); } } } void setBatteryCriticalLevel(unsigned int level) { batteryLevelCritical = level; settings->setValue(settings::Battery::criticalLevel, std::to_string(batteryLevelCritical)); checkBatteryLevelCritical(); } } // namespace battery_level_check