M module-bluetooth/tests/tests-BluetoothDevicesModel.cpp => module-bluetooth/tests/tests-BluetoothDevicesModel.cpp +20 -2
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <catch2/catch.hpp>
@@ 93,7 93,7 @@ TEST_CASE("Device handling")
REQUIRE(devicesModel.getDevices().size() == 4);
}
- SECTION("Merge device list")
+ SECTION("Merge device list - std::vector<Devicei> as argument")
{
std::vector<Devicei> devicesList, targetList;
Devicei dummy{"dummyDevice"};
@@ 112,6 112,24 @@ TEST_CASE("Device handling")
REQUIRE(devicesModel.getDevices().size() == 3);
}
+ SECTION("Merge device list - Devicei as argument")
+ {
+ std::vector<Devicei> targetList;
+ Devicei newDevice{"newDevice"};
+ newDevice.setAddress(&addr3);
+
+ targetList.push_back(device1);
+ targetList.push_back(device2);
+ targetList.push_back(device3);
+
+ devicesModel.mergeDevicesList(newDevice);
+
+ REQUIRE_FALSE(devicesModel.getDeviceByAddress(addr1Str).value().get().name.empty());
+ REQUIRE_FALSE(devicesModel.getDeviceByAddress(addr2Str).value().get().name.empty());
+ REQUIRE_FALSE(devicesModel.getDeviceByAddress(addr3Str).value().get().name.empty());
+ REQUIRE(devicesModel.getDevices().size() == 3);
+ }
+
SECTION("Get device with wrong address")
{
std::string addrStr{"10:12:6F:E8:9D:05"};
M module-services/service-bluetooth/ServiceBluetooth.cpp => module-services/service-bluetooth/ServiceBluetooth.cpp +1 -2
@@ 250,13 250,12 @@ auto ServiceBluetooth::handle(BluetoothPairResultMessage *msg) -> std::shared_pt
{
auto device = msg->getDevice();
if (msg->isSucceed()) {
- bluetoothDevicesModel->mergeDevicesList(bluetooth::GAP::getDevicesList());
+ bluetoothDevicesModel->mergeDevicesList(device);
bluetoothDevicesModel->setInternalDeviceState(device, DeviceState::Paired);
}
else {
bluetoothDevicesModel->removeDevice(device);
}
-
bluetoothDevicesModel->syncDevicesWithApp();
/// TODO error code handing added in next PRs
M module-services/service-bluetooth/service-bluetooth/BluetoothDevicesModel.cpp => module-services/service-bluetooth/service-bluetooth/BluetoothDevicesModel.cpp +14 -5
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "BluetoothDevicesModel.hpp"
@@ 9,11 9,8 @@
BluetoothDevicesModel::BluetoothDevicesModel(sys::Service *service) : service{service}
{}
-void BluetoothDevicesModel::mergeDevicesList(const std::vector<Devicei> &devicesList)
+void BluetoothDevicesModel::removeDeviceDuplicates()
{
- devices.insert(std::end(devices), std::begin(devicesList), std::end(devicesList));
-
- // remove duplicates
auto end = std::end(devices);
for (auto it = std::begin(devices); it != end; ++it) {
end = std::remove(it + 1, end, *it);
@@ 21,6 18,18 @@ void BluetoothDevicesModel::mergeDevicesList(const std::vector<Devicei> &devices
devices.erase(end, std::end(devices));
}
+void BluetoothDevicesModel::mergeDevicesList(const Devicei &device)
+{
+ devices.emplace_back(device);
+ removeDeviceDuplicates();
+}
+
+void BluetoothDevicesModel::mergeDevicesList(const std::vector<Devicei> &devicesList)
+{
+ devices.insert(std::end(devices), std::begin(devicesList), std::end(devicesList));
+ removeDeviceDuplicates();
+}
+
void BluetoothDevicesModel::insertDevice(const Devicei &device)
{
devices.emplace_back(device);
M module-services/service-bluetooth/service-bluetooth/BluetoothDevicesModel.hpp => module-services/service-bluetooth/service-bluetooth/BluetoothDevicesModel.hpp +3 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 15,6 15,7 @@ class BluetoothDevicesModel
public:
explicit BluetoothDevicesModel(sys::Service *service);
+ void mergeDevicesList(const Devicei &device);
void mergeDevicesList(const std::vector<Devicei> &devicesList);
auto getDeviceByAddress(const std::string &address) -> std::optional<std::reference_wrapper<Devicei>>;
auto getDeviceByAddress(const bd_addr_t address) -> std::optional<std::reference_wrapper<Devicei>>;
@@ 28,4 29,5 @@ class BluetoothDevicesModel
private:
std::vector<Devicei> devices{};
sys::Service *service = nullptr;
+ void removeDeviceDuplicates();
};