From edc7fd63cb0c677709ffb2f5cf8aac089aa0dada Mon Sep 17 00:00:00 2001 From: SP2FET Date: Thu, 10 Dec 2020 16:52:43 +0100 Subject: [PATCH] [EGD-4579] Add bluetooth settings storage Add settings storage to bluetooth related items --- changelog.md | 1 + .../service-bluetooth/CMakeLists.txt | 1 + .../service-bluetooth/ServiceBluetooth.cpp | 37 ++----------- .../service-bluetooth/ServiceBluetooth.hpp | 8 +-- .../service-bluetooth/SettingsHolder.cpp | 45 ++++++++++++++++ .../service-bluetooth/SettingsHolder.hpp | 54 +++++++++++++++++++ 6 files changed, 106 insertions(+), 40 deletions(-) create mode 100644 module-services/service-bluetooth/service-bluetooth/SettingsHolder.cpp create mode 100644 module-services/service-bluetooth/service-bluetooth/SettingsHolder.hpp diff --git a/changelog.md b/changelog.md index 47005d7a44a542e49ffedebb1da7ae21a60e5b75..227519278c0feb9c9f9c00965227a55afc83232f 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,7 @@ ### Added * `[PowerManagement]` Critial battery level notification to SystemManager. +* `[Bluetooth]` Add settings storage to bluetooth related items ## [0.51.1 2020-12-18] diff --git a/module-services/service-bluetooth/CMakeLists.txt b/module-services/service-bluetooth/CMakeLists.txt index 6ef1d60d73d8fb7a8893839fd0b4a986244c36b0..52c814326e3ca8a840213ffae59c4ba891d1a24f 100644 --- a/module-services/service-bluetooth/CMakeLists.txt +++ b/module-services/service-bluetooth/CMakeLists.txt @@ -4,6 +4,7 @@ message( "${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}" ) set(SOURCES ServiceBluetooth.cpp + service-bluetooth/SettingsHolder.cpp ) add_library(${PROJECT_NAME} STATIC ${SOURCES}) diff --git a/module-services/service-bluetooth/ServiceBluetooth.cpp b/module-services/service-bluetooth/ServiceBluetooth.cpp index 4ad3719666680df1982f0920dd130c2beb933b78..adc15c9d8579e7f5720337cd00578e98bef4f5f3 100644 --- a/module-services/service-bluetooth/ServiceBluetooth.cpp +++ b/module-services/service-bluetooth/ServiceBluetooth.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include @@ -20,9 +19,10 @@ #include #include -ServiceBluetooth::ServiceBluetooth() - : sys::Service(service::name::bluetooth), settingsProvider(std::make_unique(this)) +ServiceBluetooth::ServiceBluetooth() : sys::Service(service::name::bluetooth) { + auto settings = std::make_unique(this); + settingsHolder = std::make_unique(std::move(settings)); LOG_INFO("[ServiceBluetooth] Initializing"); } @@ -37,14 +37,6 @@ sys::ReturnCodes ServiceBluetooth::InitHandler() { LOG_ERROR("Bluetooth experimental!"); worker = std::make_unique(this); - settingsProvider->registerValueChange(settings::Bluetooth::state, - [this](std::string value) { stateSettingChanged(value); }); - settingsProvider->registerValueChange(settings::Bluetooth::deviceVisibility, - [this](std::string value) { deviceVisibilitySettingChanged(value); }); - settingsProvider->registerValueChange(settings::Bluetooth::deviceName, - [this](std::string value) { deviceNameSettingChanged(value); }); - settingsProvider->registerValueChange(settings::Bluetooth::bondedDevices, - [this](std::string value) { bondedDevicesSettingChanged(value); }); return sys::ReturnCodes::Success; } @@ -135,26 +127,3 @@ sys::ReturnCodes ServiceBluetooth::SwitchPowerModeHandler(const sys::ServicePowe return sys::ReturnCodes::Success; } -void ServiceBluetooth::stateSettingChanged(std::string value) -{ - LOG_DEBUG("Received new bt_state: %s", value.c_str()); - settingsProvider->unregisterValueChange(settings::Bluetooth::state); -} - -void ServiceBluetooth::deviceVisibilitySettingChanged(std::string value) -{ - LOG_DEBUG("Received new bt_device_visibility: %s", value.c_str()); - settingsProvider->unregisterValueChange(settings::Bluetooth::deviceVisibility); -} - -void ServiceBluetooth::deviceNameSettingChanged(std::string value) -{ - LOG_DEBUG("Received new bt_device_name: %s", value.c_str()); - settingsProvider->unregisterValueChange(settings::Bluetooth::deviceName); -} - -void ServiceBluetooth::bondedDevicesSettingChanged(std::string value) -{ - LOG_DEBUG("Received new bt_bonded_devices: %s", value.c_str()); - settingsProvider->unregisterValueChange(settings::Bluetooth::bondedDevices); -} diff --git a/module-services/service-bluetooth/service-bluetooth/ServiceBluetooth.hpp b/module-services/service-bluetooth/service-bluetooth/ServiceBluetooth.hpp index cd63bea65b0b4ee4f42f519ff905991435fa498a..916ce4067530496c6bce36a129f4eca94f967830 100644 --- a/module-services/service-bluetooth/service-bluetooth/ServiceBluetooth.hpp +++ b/module-services/service-bluetooth/service-bluetooth/ServiceBluetooth.hpp @@ -7,6 +7,7 @@ #include #include #include +#include "service-bluetooth/SettingsHolder.hpp" #include // for unique_ptr @@ -30,10 +31,5 @@ class ServiceBluetooth : public sys::Service private: std::unique_ptr worker; - std::unique_ptr settingsProvider; - - void stateSettingChanged(std::string value); - void deviceVisibilitySettingChanged(std::string value); - void deviceNameSettingChanged(std::string value); - void bondedDevicesSettingChanged(std::string value); + std::unique_ptr settingsHolder; }; diff --git a/module-services/service-bluetooth/service-bluetooth/SettingsHolder.cpp b/module-services/service-bluetooth/service-bluetooth/SettingsHolder.cpp new file mode 100644 index 0000000000000000000000000000000000000000..17ef89648ce3c3f81428642efb4294dbc8ce8370 --- /dev/null +++ b/module-services/service-bluetooth/service-bluetooth/SettingsHolder.cpp @@ -0,0 +1,45 @@ +// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "SettingsHolder.hpp" +#include +namespace Bluetooth +{ + std::map SettingsHolder::settingString{ + {Settings::DeviceName, settings::Bluetooth::deviceName}, + {Settings::Visibility, settings::Bluetooth::deviceVisibility}, + {Settings::Power, settings::Bluetooth::state}, + {Settings::BondedDevices, settings::Bluetooth::bondedDevices}, + }; + + auto SettingsHolder::getValue(const Settings setting) -> SettingEntry + { + return settingsMap[setting]; + } + void SettingsHolder::setValue(const Settings &newSetting, const SettingEntry &value) + { + settingsMap[newSetting] = value; + + settingsProvider->setValue(settingString[newSetting], std::visit(StringVisitor(), value)); + } + SettingsHolder::SettingsHolder(std::unique_ptr settingsPtr) + : settingsProvider(std::move(settingsPtr)) + { + settingsProvider->registerValueChange(settings::Bluetooth::state, [this](std::string value) { + setValue(Settings::Power, value); + this->settingsProvider->unregisterValueChange(settings::Bluetooth::state); + }); + settingsProvider->registerValueChange(settings::Bluetooth::deviceVisibility, [this](std::string value) { + setValue(Settings::Visibility, value); + this->settingsProvider->unregisterValueChange(settings::Bluetooth::deviceVisibility); + }); + settingsProvider->registerValueChange(settings::Bluetooth::deviceName, [this](std::string value) { + setValue(Settings::DeviceName, value); + this->settingsProvider->unregisterValueChange(settings::Bluetooth::deviceName); + }); + settingsProvider->registerValueChange(settings::Bluetooth::bondedDevices, [this](std::string value) { + setValue(Settings::BondedDevices, value); + this->settingsProvider->unregisterValueChange(settings::Bluetooth::bondedDevices); + }); + } +} // namespace Bluetooth diff --git a/module-services/service-bluetooth/service-bluetooth/SettingsHolder.hpp b/module-services/service-bluetooth/service-bluetooth/SettingsHolder.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4380198c7706f5e44ee87976a6145eeee5be8149 --- /dev/null +++ b/module-services/service-bluetooth/service-bluetooth/SettingsHolder.hpp @@ -0,0 +1,54 @@ +// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include +#include +#include +#include +#include +#include + +namespace Bluetooth +{ + + enum class Settings + { + DeviceName, + Visibility, + Power, + BondedDevices + }; + + constexpr inline auto trueStr = "true"; + constexpr inline auto falseStr = "false"; + + using SettingEntry = std::variant; + struct StringVisitor + { + auto operator()(int input) const -> std::string + { + return utils::to_string(input); + } + auto operator()(bool input) const -> std::string + { + return input ? trueStr : falseStr; + } + auto operator()(const std::string &input) const -> std::string + { + return input; + } + }; + + class SettingsHolder + { + public: + explicit SettingsHolder(std::unique_ptr settingsPtr); + auto getValue(const Settings setting) -> SettingEntry; + void setValue(const Settings &newSetting, const SettingEntry &value); + + private: + static std::map settingString; + std::unique_ptr settingsProvider; + std::map settingsMap; + }; +} // namespace Bluetooth