nRF Connect SDK API 3.3.99
Loading...
Searching...
No Matches
bridge_storage_manager.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5 */
6
7#pragma once
8
10#include "persistent_storage/persistent_storage.h"
11
12#ifdef CONFIG_BRIDGED_DEVICE_BT
13#include <zephyr/bluetooth/addr.h>
14#endif
15
16namespace Nrf
17{
18
19/*
20 * The class implements the following key-values storage structure:
21 *
22 * /br/
23 * /brd_cnt/ /<uint8_t>/
24 * /brd_ids/ /<uint8_t[brd_cnt]>/
25 * /brd/
26 * /0/ /<BridgedDevice>/
27 * /1/ /<BridgedDevice>/
28 * .
29 * .
30 * /n/ /<BridgedDevice>/
31 * /ver/ <uint8_t>
32 */
34public:
35 static inline constexpr auto kMaxUserDataSize = 128u;
36
37 constexpr static auto kBridgePrefix = "br";
38 constexpr static auto kBridgedDevicesCountPrefix = "brd_cnt";
39 constexpr static auto kBridgedDevicesIndexesPrefix = "brd_ids";
40 constexpr static auto kBridgedDevicePrefix = "brd";
41 constexpr static auto kVersionPrefix = "ver";
42
43#ifdef CONFIG_BRIDGE_MIGRATE_PRE_2_7_0
44 constexpr static auto kBridgedDeviceEndpointIdPrefix = "eid";
45 constexpr static auto kBridgedDeviceLabelPrefix = "label";
46 constexpr static auto kBridgedDeviceTypePrefix = "type";
47#ifdef CONFIG_BRIDGED_DEVICE_BT
48 constexpr static auto kBtPrefix = "bt";
49 constexpr static auto kBtAddrPrefix = "addr";
50#endif
51#endif
52
53#ifdef CONFIG_BRIDGE_MIGRATE_VERSION_1
54 struct BridgedDeviceV1 {
55 uint16_t mEndpointId;
56 uint16_t mDeviceType;
57 size_t mNodeLabelLength;
58 char mNodeLabel[MatterBridgedDevice::kNodeLabelSize] = { 0 };
59 size_t mUserDataSize = 0;
60 uint8_t *mUserData = nullptr;
61 };
62#endif
63
74
76 static constexpr uint8_t kCurrentVersion = 2;
77
78 static constexpr auto kMaxIndexLength = 3;
79
81 : mBridge(kBridgePrefix, strlen(kBridgePrefix)),
82 mBridgedDevicesCount(kBridgedDevicesCountPrefix, strlen(kBridgedDevicesCountPrefix), &mBridge),
83 mBridgedDevicesIndexes(kBridgedDevicesIndexesPrefix, strlen(kBridgedDevicesIndexesPrefix), &mBridge),
84 mBridgedDevice(kBridgedDevicePrefix, strlen(kBridgedDevicePrefix), &mBridge),
85 mVersion(kVersionPrefix, strlen(kVersionPrefix), &mBridge)
86#ifdef CONFIG_BRIDGE_MIGRATE_PRE_2_7_0
87 ,
88 mBridgedDeviceEndpointId(kBridgedDeviceEndpointIdPrefix, strlen(kBridgedDeviceEndpointIdPrefix),
89 &mBridgedDevice),
90 mBridgedDeviceNodeLabel(kBridgedDeviceLabelPrefix, strlen(kBridgedDeviceLabelPrefix),
91 &mBridgedDevice),
92 mBridgedDeviceType(kBridgedDeviceTypePrefix, strlen(kBridgedDeviceTypePrefix), &mBridgedDevice)
93#ifdef CONFIG_BRIDGED_DEVICE_BT
94 ,
95 mBt(kBtPrefix, strlen(kBtPrefix), &mBridgedDevice),
96 mBtAddress(kBtAddrPrefix, strlen(kBtAddrPrefix), &mBt)
97#endif
98#endif
99 {
100 }
101
103 {
104 static BridgeStorageManager sInstance;
105 return sInstance;
106 }
107
114 bool Init();
115
120
128 bool StoreBridgedDevicesCount(uint8_t count);
129
137 bool LoadBridgedDevicesCount(uint8_t &count);
138
147 bool StoreBridgedDevicesIndexes(uint8_t *indexes, uint8_t count);
148
158 bool LoadBridgedDevicesIndexes(uint8_t *indexes, uint8_t maxCount, size_t &count);
159
172 template <typename T = BridgedDevice> bool LoadBridgedDevice(T &device, uint8_t index);
173
183 bool StoreBridgedDevice(BridgedDevice &device, uint8_t index);
184
192 bool RemoveBridgedDevice(uint8_t bridgedDeviceIndex);
193
194private:
205 bool MigrateData();
206
207#ifdef CONFIG_BRIDGE_MIGRATE_PRE_2_7_0
218 bool MigrateDataOldScheme(uint8_t bridgedDeviceIndex);
219#endif
220
221#ifdef CONFIG_BRIDGE_MIGRATE_VERSION_1
231 bool MigrateDataVersion1(uint8_t bridgedDeviceIndex);
232#endif
233
234 /* The below methods are deprecated and used only for the migration purposes between the older scheme versions.
235 */
236
237#ifdef CONFIG_BRIDGE_MIGRATE_PRE_2_7_0
246 bool LoadBridgedDeviceEndpointId(uint16_t &endpointId, uint8_t bridgedDeviceIndex);
247
255 bool RemoveBridgedDeviceEndpointId(uint8_t bridgedDeviceIndex);
256
267 bool LoadBridgedDeviceNodeLabel(char *label, size_t labelMaxLength, size_t &labelLength,
268 uint8_t bridgedDeviceIndex);
269
277 bool RemoveBridgedDeviceNodeLabel(uint8_t bridgedDeviceIndex);
278
287 bool LoadBridgedDeviceType(uint16_t &deviceType, uint8_t bridgedDeviceIndex);
288
296 bool RemoveBridgedDeviceType(uint8_t bridgedDeviceIndex);
297
298#ifdef CONFIG_BRIDGED_DEVICE_BT
307 bool LoadBtAddress(bt_addr_le_t &addr, uint8_t bridgedDeviceIndex);
308
316 bool RemoveBtAddress(uint8_t bridgedDeviceIndex);
317#endif
318#endif
319
320 Nrf::PersistentStorageNode mBridge;
321 Nrf::PersistentStorageNode mBridgedDevicesCount;
322 Nrf::PersistentStorageNode mBridgedDevicesIndexes;
323 Nrf::PersistentStorageNode mBridgedDevice;
324 Nrf::PersistentStorageNode mVersion;
325
326#ifdef CONFIG_BRIDGE_MIGRATE_PRE_2_7_0
327 /* The below fields are deprecated and used only for the migration purposes between the older scheme versions.
328 */
329 Nrf::PersistentStorageNode mBridgedDeviceEndpointId;
330 Nrf::PersistentStorageNode mBridgedDeviceNodeLabel;
331 Nrf::PersistentStorageNode mBridgedDeviceType;
332#ifdef CONFIG_BRIDGED_DEVICE_BT
333 Nrf::PersistentStorageNode mBt;
334 Nrf::PersistentStorageNode mBtAddress;
335#endif
336#endif
337};
338
339} /* namespace Nrf */
static constexpr auto kBridgedDevicesCountPrefix
Definition bridge_storage_manager.h:38
void FactoryReset()
Factory reset the storage.
static constexpr auto kBridgedDevicesIndexesPrefix
Definition bridge_storage_manager.h:39
bool Init()
Initialize BridgeStorageManager module.
static constexpr auto kMaxIndexLength
Definition bridge_storage_manager.h:78
bool StoreBridgedDevicesIndexes(uint8_t *indexes, uint8_t count)
Store bridged devices indexes into settings.
BridgeStorageManager()
Definition bridge_storage_manager.h:80
bool LoadBridgedDevicesIndexes(uint8_t *indexes, uint8_t maxCount, size_t &count)
Load bridged devices indexes from settings.
static BridgeStorageManager & Instance()
Definition bridge_storage_manager.h:102
bool LoadBridgedDevicesCount(uint8_t &count)
Load bridged devices count from settings.
static constexpr auto kBridgePrefix
Definition bridge_storage_manager.h:37
static constexpr auto kBridgedDevicePrefix
Definition bridge_storage_manager.h:40
static constexpr auto kMaxUserDataSize
Definition bridge_storage_manager.h:35
static constexpr auto kVersionPrefix
Definition bridge_storage_manager.h:41
bool StoreBridgedDevicesCount(uint8_t count)
Store bridged devices count into settings.
bool StoreBridgedDevice(BridgedDevice &device, uint8_t index)
Store bridged device into settings. Helper method allowing to store endpoint id, node label and devic...
bool RemoveBridgedDevice(uint8_t bridgedDeviceIndex)
Remove bridged device entry from settings.
bool LoadBridgedDevice(T &device, uint8_t index)
Load bridged device from settings.
static constexpr uint8_t kCurrentVersion
Definition bridge_storage_manager.h:76
Definition bridge_storage_manager.h:33
static constexpr uint8_t kNodeLabelSize
Definition matter_bridged_device.h:97
static constexpr uint8_t kUniqueIDSize
Definition matter_bridged_device.h:98
Definition ble_connectivity_manager.h:21
uint16_t mDeviceType
Definition bridge_storage_manager.h:66
size_t mUniqueIDLength
Definition bridge_storage_manager.h:67
size_t mNodeLabelLength
Definition bridge_storage_manager.h:69
char mNodeLabel[MatterBridgedDevice::kNodeLabelSize]
Definition bridge_storage_manager.h:70
uint16_t mEndpointId
Definition bridge_storage_manager.h:65
size_t mUserDataSize
Definition bridge_storage_manager.h:71
uint8_t * mUserData
Definition bridge_storage_manager.h:72
char mUniqueID[MatterBridgedDevice::kUniqueIDSize]
Definition bridge_storage_manager.h:68
Definition bridge_storage_manager.h:64