// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "BluetoothMessagesHandler.hpp" #include "BluetoothEventMessages.hpp" #include "BluetoothHelper.hpp" #include #include #include namespace sdesktop::bluetooth { class ResponseEvent : public sdesktop::bluetooth::BluetoothEvent { public: ResponseEvent(json11::Json::object responseBody) { context.setResponseBody(std::move(responseBody)); } }; } // namespace sdesktop::bluetooth using namespace sdesktop::bluetooth; namespace btConstants = parserFSM::json::bluetooth; namespace { json11::Json::object device2json(const Devicei &device) { LOG_DEBUG("Device: name=%s, address=%s", device.name.c_str(), bd_addr_to_str(device.address)); return json11::Json::object{{btConstants::devicesValues::address, std::string(bd_addr_to_str(device.address))}, {btConstants::devicesValues::name, device.name}}; } json11::Json::array devices2json(const std::vector &devices) { json11::Json::array serialized; serialized.reserve(devices.size()); for (const auto &device : devices) { serialized.emplace_back(device2json(device)); } return serialized; } } // namespace BluetoothMessagesHandler::BluetoothMessagesHandler(sys::Service *ownerService) : ownerService(ownerService) {} auto BluetoothMessagesHandler::handle(message::bluetooth::ResponseStatus *msg) -> std::shared_ptr { auto status = msg->getStatus(); json11::Json::object responseBody( {{btConstants::state, json11::Json::object{ {btConstants::states::power, status.state == BluetoothStatus::State::On ? btConstants::on : btConstants::off}, {btConstants::states::visibility, status.visibility ? btConstants::on : btConstants::off}}}}); send(std::make_unique(std::move(responseBody))); return std::make_shared(); } auto BluetoothMessagesHandler::handle(message::bluetooth::ResponseBondedDevices *msg) -> std::shared_ptr { LOG_DEBUG("Currently connected device address=%s", msg->getAddressOfConnectedDevice().c_str()); json11::Json::object responseBody({{btConstants::devices, devices2json(msg->getDevices())}, {btConstants::devicesValues::address, msg->getAddressOfConnectedDevice()}}); send(std::make_unique(std::move(responseBody))); return std::make_shared(); } auto BluetoothMessagesHandler::handle(message::bluetooth::ResponseVisibleDevices *msg) -> std::shared_ptr { json11::Json::object responseBody({{btConstants::devices, devices2json(msg->getDevices())}}); send(std::make_unique(std::move(responseBody))); return std::make_shared(); } void BluetoothMessagesHandler::send(std::unique_ptr event) { auto message = std::make_shared(std::move(event)); ownerService->bus.sendUnicast(std::move(message), service::name::service_desktop); }