Skip to content

Commit 6cb75b8

Browse files
adigieArekBalysNordic
authored andcommitted
applications: matter_bridge: Add support for UniqueID attribute
Add support for UniqueID attribute in Bridged Device Basic Information cluster. Signed-off-by: Adrian Gielniewski <[email protected]>
1 parent 9aa4702 commit 6cb75b8

25 files changed

+257
-88
lines changed

applications/matter_bridge/doc/adding_bridged_matter_device.rst

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ The following steps show how to add support for a new Matter device type, using
3333
class PressureSensorDevice : public Nrf::MatterBridgedDevice {
3434
public:
3535

36-
PressureSensorDevice(const char *nodeLabel);
36+
PressureSensorDevice(const char *uniqueID, const char *nodeLabel);
3737
static constexpr uint16_t kPressureSensorDeviceTypeId = 0x0305;
3838
3939
};
@@ -44,7 +44,8 @@ The following steps show how to add support for a new Matter device type, using
4444

4545
#include "pressure_sensor.h"
4646

47-
PressureSensorDevice::PressureSensorDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) {}
47+
PressureSensorDevice::PressureSensorDevice(const char *uniqueID, const char *nodeLabel)
48+
: MatterBridgedDevice(uniqueID, nodeLabel) {}
4849
4950
#. Declare all clusters that are mandatory for the Pressure Sensor device type, according to the Matter device library specification, and fill the appropriate :c:struct:`MatterBridgedDevice` class fields in the :c:struct:`PressureSensorDevice` class constructor.
5051

@@ -98,7 +99,8 @@ The following steps show how to add support for a new Matter device type, using
9899

99100
.. code-block:: C++
100101

101-
PressureSensorDevice::PressureSensorDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel)
102+
PressureSensorDevice::PressureSensorDevice(const char *uniqueID, const char *nodeLabel)
103+
: MatterBridgedDevice(uniqueID, nodeLabel)
102104
{
103105
mDataVersionSize = kPressureDataVersionSize;
104106
mEp = &bridgedPressureEndpoint;
@@ -394,11 +396,11 @@ The following steps show how to add support for a new Matter device type, using
394396
.. code-block:: C++
395397

396398
{ PressureSensorDevice::kPressureSensorDeviceTypeId,
397-
[checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * {
398-
if (!checkLabel(nodeLabel)) {
399+
[checkUniqueID, checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * {
400+
if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) {
399401
return nullptr;
400402
}
401-
return chip::Platform::New<PressureSensorDevice>(nodeLabel);
403+
return chip::Platform::New<PressureSensorDevice>(uniqueID, nodeLabel);
402404
} },
403405
404406
- :file:`src/simulated_providers/simulated_bridged_device_factory.cpp`, :c:func:`GetDataProviderFactory` method

applications/matter_bridge/snippets/onoff_plug/bridge.zap

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5539,6 +5539,22 @@
55395539
"maxInterval": 65534,
55405540
"reportableChange": 0
55415541
},
5542+
{
5543+
"name": "UniqueID",
5544+
"code": 18,
5545+
"mfgCode": null,
5546+
"side": "server",
5547+
"type": "char_string",
5548+
"included": 1,
5549+
"storageOption": "External",
5550+
"singleton": 0,
5551+
"bounded": 0,
5552+
"defaultValue": "",
5553+
"reportable": 1,
5554+
"minInterval": 1,
5555+
"maxInterval": 65534,
5556+
"reportableChange": 0
5557+
},
55425558
{
55435559
"name": "GeneratedCommandList",
55445560
"code": 65528,
@@ -6129,4 +6145,4 @@
61296145
"parentEndpointIdentifier": null
61306146
}
61316147
]
6132-
}
6148+
}

applications/matter_bridge/snippets/onoff_plug/zap-generated/endpoint_config.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
}
6363

6464
// This is an array of EmberAfAttributeMetadata structures.
65-
#define GENERATED_ATTRIBUTE_COUNT 190
65+
#define GENERATED_ATTRIBUTE_COUNT 191
6666
#define GENERATED_ATTRIBUTES \
6767
{ \
6868
/* Endpoint: 0, Cluster: Descriptor (server) */ \
@@ -425,6 +425,8 @@
425425
{ ZAP_EMPTY_DEFAULT(), 0x0000000E, 65, ZAP_TYPE(CHAR_STRING), 0 }, /* ProductLabel */ \
426426
{ ZAP_EMPTY_DEFAULT(), 0x0000000F, 33, ZAP_TYPE(CHAR_STRING), 0 }, /* SerialNumber */ \
427427
{ ZAP_SIMPLE_DEFAULT(1), 0x00000011, 1, ZAP_TYPE(BOOLEAN), 0 }, /* Reachable */ \
428+
{ ZAP_EMPTY_DEFAULT(), 0x00000012, 33, ZAP_TYPE(CHAR_STRING), \
429+
ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* UniqueID */ \
428430
{ ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \
429431
{ ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \
430432
\
@@ -1029,7 +1031,7 @@
10291031
/* Endpoint: 3, Cluster: Bridged Device Basic Information (server) */ \
10301032
.clusterId = 0x00000039, \
10311033
.attributes = ZAP_ATTRIBUTE_INDEX(160), \
1032-
.attributeCount = 16, \
1034+
.attributeCount = 17, \
10331035
.clusterSize = 650, \
10341036
.mask = ZAP_CLUSTER_MASK(SERVER), \
10351037
.functions = NULL, \
@@ -1041,7 +1043,7 @@
10411043
{ \
10421044
/* Endpoint: 3, Cluster: Switch (server) */ \
10431045
.clusterId = 0x0000003B, \
1044-
.attributes = ZAP_ATTRIBUTE_INDEX(176), \
1046+
.attributes = ZAP_ATTRIBUTE_INDEX(177), \
10451047
.attributeCount = 4, \
10461048
.clusterSize = 8, \
10471049
.mask = ZAP_CLUSTER_MASK(SERVER), \
@@ -1054,7 +1056,7 @@
10541056
{ \
10551057
/* Endpoint: 3, Cluster: Temperature Measurement (server) */ \
10561058
.clusterId = 0x00000402, \
1057-
.attributes = ZAP_ATTRIBUTE_INDEX(180), \
1059+
.attributes = ZAP_ATTRIBUTE_INDEX(181), \
10581060
.attributeCount = 5, \
10591061
.clusterSize = 12, \
10601062
.mask = ZAP_CLUSTER_MASK(SERVER), \
@@ -1067,7 +1069,7 @@
10671069
{ \
10681070
/* Endpoint: 3, Cluster: Relative Humidity Measurement (server) */ \
10691071
.clusterId = 0x00000405, \
1070-
.attributes = ZAP_ATTRIBUTE_INDEX(185), \
1072+
.attributes = ZAP_ATTRIBUTE_INDEX(186), \
10711073
.attributeCount = 5, \
10721074
.clusterSize = 12, \
10731075
.mask = ZAP_CLUSTER_MASK(SERVER), \

applications/matter_bridge/src/app_task.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ CHIP_ERROR AppTask::RestoreBridgedDevices()
126126
LOG_INF("Loaded bridged device on endpoint id %d from the storage", device.mEndpointId);
127127

128128
#ifdef CONFIG_BRIDGED_DEVICE_BT
129-
BleBridgedDeviceFactory::CreateDevice(device.mDeviceType, btAddr, device.mNodeLabel, indexes[i],
130-
device.mEndpointId);
129+
BleBridgedDeviceFactory::CreateDevice(device.mDeviceType, btAddr, device.mUniqueID, device.mNodeLabel,
130+
indexes[i], device.mEndpointId);
131131
#else
132-
SimulatedBridgedDeviceFactory::CreateDevice(device.mDeviceType, device.mNodeLabel,
132+
SimulatedBridgedDeviceFactory::CreateDevice(device.mDeviceType, device.mUniqueID, device.mNodeLabel,
133133
chip::Optional<uint8_t>(indexes[i]),
134134
chip::Optional<uint16_t>(device.mEndpointId));
135135
#endif

applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.cpp

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ CHIP_ERROR StoreDevice(MatterBridgedDevice *device, BridgedDeviceDataProvider *p
8787

8888
bridgedDevice.mEndpointId = device->GetEndpointId();
8989
bridgedDevice.mDeviceType = device->GetDeviceType();
90+
bridgedDevice.mUniqueIDLength = strlen(device->GetUniqueID());
91+
memcpy(bridgedDevice.mUniqueID, device->GetUniqueID(), bridgedDevice.mUniqueIDLength);
9092
bridgedDevice.mNodeLabelLength = strlen(device->GetNodeLabel());
91-
memcpy(bridgedDevice.mNodeLabel, device->GetNodeLabel(), strlen(device->GetNodeLabel()));
93+
memcpy(bridgedDevice.mNodeLabel, device->GetNodeLabel(), bridgedDevice.mNodeLabelLength);
9294

9395
/* Fill BT address information as a part of implementation specific user data. */
9496
bridgedDevice.mUserDataSize = sizeof(addr);
@@ -122,8 +124,8 @@ CHIP_ERROR StoreDevice(MatterBridgedDevice *device, BridgedDeviceDataProvider *p
122124
return CHIP_NO_ERROR;
123125
}
124126

125-
CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8_t count, const char *nodeLabel,
126-
BridgedDeviceDataProvider *provider, uint8_t indexes[] = nullptr,
127+
CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8_t count, const char *uniqueID,
128+
const char *nodeLabel, BridgedDeviceDataProvider *provider, uint8_t indexes[] = nullptr,
127129
uint16_t endpointIds[] = nullptr)
128130
{
129131
VerifyOrReturnError(provider != nullptr, CHIP_ERROR_INVALID_ARGUMENT, LOG_ERR("No valid data provider!"));
@@ -144,7 +146,7 @@ CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8
144146
uint8_t addedDevicesCount = 0;
145147
for (; addedDevicesCount < count; addedDevicesCount++) {
146148
newBridgedDevices[addedDevicesCount] = BleBridgedDeviceFactory::GetBridgedDeviceFactory().Create(
147-
deviceTypes[addedDevicesCount], nodeLabel);
149+
deviceTypes[addedDevicesCount], uniqueID, nodeLabel);
148150

149151
if (!newBridgedDevices[addedDevicesCount]) {
150152
LOG_ERR("Cannot allocate Matter device of given type");
@@ -199,6 +201,7 @@ CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8
199201
struct BluetoothConnectionContext {
200202
MatterBridgedDevice::DeviceType deviceTypes[BridgeManager::kMaxBridgedDevicesPerProvider];
201203
uint8_t count;
204+
char uniqueID[MatterBridgedDevice::kUniqueIDSize] = { 0 };
202205
char nodeLabel[MatterBridgedDevice::kNodeLabelSize] = { 0 };
203206
BLEBridgedDeviceProvider *provider;
204207
bt_addr_le_t address;
@@ -223,7 +226,7 @@ CHIP_ERROR BluetoothDeviceConnected(bool success, void *context)
223226
chip::Optional<uint16_t> endpointIds[BridgeManager::kMaxBridgedDevicesPerProvider];
224227
/* AddMatterDevices takes the ownership of the passed provider object and will
225228
delete it in case the BridgeManager fails to accept this object. */
226-
CHIP_ERROR err = AddMatterDevices(ctx->deviceTypes, ctx->count, ctx->nodeLabel, ctx->provider);
229+
CHIP_ERROR err = AddMatterDevices(ctx->deviceTypes, ctx->count, ctx->uniqueID, ctx->nodeLabel, ctx->provider);
227230
chip::Platform::Delete(ctx);
228231

229232
return err;
@@ -232,6 +235,14 @@ CHIP_ERROR BluetoothDeviceConnected(bool success, void *context)
232235

233236
BleBridgedDeviceFactory::BridgedDeviceFactory &BleBridgedDeviceFactory::GetBridgedDeviceFactory()
234237
{
238+
auto checkUniqueID = [](const char *uniqueID) {
239+
/* If node uniqueID is provided it must fit the maximum defined length */
240+
if (!uniqueID || (uniqueID && (strlen(uniqueID) < Nrf::MatterBridgedDevice::kUniqueIDSize))) {
241+
return true;
242+
}
243+
return false;
244+
};
245+
235246
auto checkLabel = [](const char *nodeLabel) {
236247
/* If node label is provided it must fit the maximum defined length */
237248
if (!nodeLabel || (nodeLabel && (strlen(nodeLabel) < MatterBridgedDevice::kNodeLabelSize))) {
@@ -243,47 +254,52 @@ BleBridgedDeviceFactory::BridgedDeviceFactory &BleBridgedDeviceFactory::GetBridg
243254
static BridgedDeviceFactory sBridgedDeviceFactory{
244255
#ifdef CONFIG_BRIDGE_HUMIDITY_SENSOR_BRIDGED_DEVICE
245256
{ MatterBridgedDevice::DeviceType::HumiditySensor,
246-
[checkLabel](const char *nodeLabel) -> MatterBridgedDevice * {
247-
if (!checkLabel(nodeLabel)) {
257+
[checkUniqueID, checkLabel](const char *uniqueID,
258+
const char *nodeLabel) -> Nrf::MatterBridgedDevice * {
259+
if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) {
248260
return nullptr;
249261
}
250-
return chip::Platform::New<HumiditySensorDevice>(nodeLabel);
262+
return chip::Platform::New<HumiditySensorDevice>(uniqueID, nodeLabel);
251263
} },
252264
#endif
253265
#ifdef CONFIG_BRIDGE_ONOFF_LIGHT_BRIDGED_DEVICE
254266
{ MatterBridgedDevice::DeviceType::OnOffLight,
255-
[checkLabel](const char *nodeLabel) -> MatterBridgedDevice * {
256-
if (!checkLabel(nodeLabel)) {
267+
[checkUniqueID, checkLabel](const char *uniqueID,
268+
const char *nodeLabel) -> Nrf::MatterBridgedDevice * {
269+
if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) {
257270
return nullptr;
258271
}
259-
return chip::Platform::New<OnOffLightDevice>(nodeLabel);
272+
return chip::Platform::New<OnOffLightDevice>(uniqueID, nodeLabel);
260273
} },
261274
#endif
262275
#ifdef CONFIG_BRIDGE_TEMPERATURE_SENSOR_BRIDGED_DEVICE
263276
{ MatterBridgedDevice::DeviceType::TemperatureSensor,
264-
[checkLabel](const char *nodeLabel) -> MatterBridgedDevice * {
265-
if (!checkLabel(nodeLabel)) {
277+
[checkUniqueID, checkLabel](const char *uniqueID,
278+
const char *nodeLabel) -> Nrf::MatterBridgedDevice * {
279+
if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) {
266280
return nullptr;
267281
}
268-
return chip::Platform::New<TemperatureSensorDevice>(nodeLabel);
282+
return chip::Platform::New<TemperatureSensorDevice>(uniqueID, nodeLabel);
269283
} },
270284
#endif
271285
#ifdef CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE
272286
{ MatterBridgedDevice::DeviceType::GenericSwitch,
273-
[checkLabel](const char *nodeLabel) -> MatterBridgedDevice * {
274-
if (!checkLabel(nodeLabel)) {
287+
[checkUniqueID, checkLabel](const char *uniqueID,
288+
const char *nodeLabel) -> Nrf::MatterBridgedDevice * {
289+
if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) {
275290
return nullptr;
276291
}
277-
return chip::Platform::New<GenericSwitchDevice>(nodeLabel);
292+
return chip::Platform::New<GenericSwitchDevice>(uniqueID, nodeLabel);
278293
} },
279294
#endif
280295
#ifdef CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE
281296
{ MatterBridgedDevice::DeviceType::OnOffLightSwitch,
282-
[checkLabel](const char *nodeLabel) -> MatterBridgedDevice * {
283-
if (!checkLabel(nodeLabel)) {
297+
[checkUniqueID, checkLabel](const char *uniqueID,
298+
const char *nodeLabel) -> Nrf::MatterBridgedDevice * {
299+
if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) {
284300
return nullptr;
285301
}
286-
return chip::Platform::New<OnOffLightSwitchDevice>(nodeLabel);
302+
return chip::Platform::New<OnOffLightSwitchDevice>(uniqueID, nodeLabel);
287303
} },
288304
#endif
289305
};
@@ -311,8 +327,8 @@ BleBridgedDeviceFactory::BleDataProviderFactory &BleBridgedDeviceFactory::GetDat
311327
return sDeviceDataProvider;
312328
}
313329

314-
CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *nodeLabel,
315-
uint8_t index, uint16_t endpointId)
330+
CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *uniqueID,
331+
const char *nodeLabel, uint8_t index, uint16_t endpointId)
316332
{
317333
CHIP_ERROR err;
318334

@@ -322,8 +338,8 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t bt
322338
*/
323339
BLEBridgedDeviceProvider *provider = BLEConnectivityManager::Instance().FindBLEProvider(btAddress);
324340
if (provider) {
325-
return AddMatterDevices(reinterpret_cast<MatterBridgedDevice::DeviceType *>(&deviceType), 1, nodeLabel,
326-
provider, &index, &endpointId);
341+
return AddMatterDevices(reinterpret_cast<MatterBridgedDevice::DeviceType *>(&deviceType), 1, uniqueID,
342+
nodeLabel, provider, &index, &endpointId);
327343
}
328344

329345
ServiceUuid providerType;
@@ -342,8 +358,8 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t bt
342358
/* Confirm that the first connection was done and this will be only the device recovery. */
343359
provider->ConfirmInitialConnection();
344360
provider->InitializeBridgedDevice(btAddress, nullptr, nullptr);
345-
err = AddMatterDevices(reinterpret_cast<MatterBridgedDevice::DeviceType *>(&deviceType), 1, nodeLabel, provider,
346-
&index, &endpointId);
361+
err = AddMatterDevices(reinterpret_cast<MatterBridgedDevice::DeviceType *>(&deviceType), 1, uniqueID, nodeLabel,
362+
provider, &index, &endpointId);
347363

348364
if (err != CHIP_NO_ERROR) {
349365
return err;
@@ -359,7 +375,8 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t bt
359375
return err;
360376
}
361377

362-
CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *nodeLabel,
378+
CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *uniqueID,
379+
const char *nodeLabel,
363380
BLEConnectivityManager::ConnectionSecurityRequest *request)
364381
{
365382
/* Check if there is already existing provider for given address.
@@ -396,6 +413,10 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(uint16_t uuid, bt_addr_le_t btA
396413
contextPtr->deviceTypes[i] = deviceTypes[i];
397414
}
398415

416+
if (uniqueID) {
417+
strcpy(contextPtr->uniqueID, uniqueID);
418+
}
419+
399420
if (nodeLabel) {
400421
strcpy(contextPtr->nodeLabel, nodeLabel);
401422
}

applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ enum ServiceUuid : uint16_t { LedButtonService = 0xbcd1, EnvironmentalSensorServ
4949
using UpdateAttributeCallback = Nrf::BridgedDeviceDataProvider::UpdateAttributeCallback;
5050
using InvokeCommandCallback = Nrf::BridgedDeviceDataProvider::InvokeCommandCallback;
5151
using DeviceType = uint16_t;
52-
using BridgedDeviceFactory = Nrf::DeviceFactory<Nrf::MatterBridgedDevice, DeviceType, const char *>;
5352
using BleDataProviderFactory = Nrf::DeviceFactory<Nrf::BridgedDeviceDataProvider, ServiceUuid, UpdateAttributeCallback, InvokeCommandCallback>;
53+
using BridgedDeviceFactory = Nrf::DeviceFactory<Nrf::MatterBridgedDevice, DeviceType, const char *, const char *>;
5454

5555
BridgedDeviceFactory &GetBridgedDeviceFactory();
5656
BleDataProviderFactory &GetDataProviderFactory();
@@ -60,28 +60,31 @@ BleDataProviderFactory &GetDataProviderFactory();
6060
*
6161
* @param deviceType the Matter device type of a bridged device to be created
6262
* @param btAddress the Bluetooth LE address of a device to be bridged with created Matter device
63+
* @param uniqueID UniqueID of a Matter device to be created
6364
* @param nodeLabel node label of a Matter device to be created
6465
* @param index index that will be assigned to the created device
6566
* @param endpointId endpoint id that will be assigned to the created device
6667
* @return CHIP_NO_ERROR on success
6768
* @return other error code on failure
6869
*/
69-
CHIP_ERROR CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *nodeLabel, uint8_t index,
70-
uint16_t endpointId);
70+
CHIP_ERROR CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *uniqueID, const char *nodeLabel,
71+
uint8_t index, uint16_t endpointId);
7172

7273
/**
7374
* @brief Create a bridged device using a specific Bluetooth LE service and leaving index and endpoint ID selection to
7475
* the default algorithm.
7576
*
7677
* @param uuid the Bluetooth LE service UUID of a bridged device provider that will be paired with bridged device
7778
* @param btAddress the Bluetooth LE address of a device to be bridged with created Matter device
79+
* @param uniqueID UniqueID of a Matter device to be created
7880
* @param nodeLabel node label of a Matter device to be created
7981
* @param request address of connection request object for handling additional security information requiered by the connection.
8082
* Can be nullptr, if connection does not use security.
8183
* @return CHIP_NO_ERROR on success
8284
* @return other error code on failure
8385
*/
84-
CHIP_ERROR CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *nodeLabel, Nrf::BLEConnectivityManager::ConnectionSecurityRequest * request = nullptr);
86+
CHIP_ERROR CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *uniqueID, const char *nodeLabel,
87+
Nrf::BLEConnectivityManager::ConnectionSecurityRequest *request = nullptr);
8588

8689
/**
8790
* @brief Remove bridged device.

0 commit comments

Comments
 (0)