49 uint8_t deviceListSize, uint8_t devicesPairIndexes[]);
66 uint8_t deviceListSize, uint8_t devicesPairIndexes[], uint16_t endpointIds[]);
91 return CHIP_ERROR_INVALID_ARGUMENT;
94 if (maxSize < mDevicesIndexesCounter) {
95 return CHIP_ERROR_BUFFER_TOO_SMALL;
98 memcpy(indexes, mDevicesIndexes, mDevicesIndexesCounter);
99 count = mDevicesIndexesCounter;
100 return CHIP_NO_ERROR;
120 static CHIP_ERROR
HandleRead(uint16_t index, chip::ClusterId clusterId,
121 const EmberAfAttributeMetadata *attributeMetadata, uint8_t *buffer,
122 uint16_t maxReadLength);
123 static CHIP_ERROR
HandleWrite(uint16_t index, chip::ClusterId clusterId,
124 const EmberAfAttributeMetadata *attributeMetadata, uint8_t *buffer);
126 chip::AttributeId attributeId,
void *data,
size_t dataSize);
128 chip::CommandId commandId, Nrf::Matter::BindingHandler::InvokeCommand invokeCommand);
137 struct BridgedDevicePair {
138 BridgedDevicePair() : mDevice(nullptr), mProvider(nullptr) {}
139 BridgedDevicePair(MatterBridgedDevice *device, BridgedDeviceDataProvider *dataProvider)
140 : mDevice(device), mProvider(dataProvider)
146 chip::Platform::Delete(mDevice);
147 chip::Platform::Delete(mProvider);
153 BridgedDevicePair(
const BridgedDevicePair &other) =
delete;
154 BridgedDevicePair &operator=(
const BridgedDevicePair &other) =
delete;
156 BridgedDevicePair(BridgedDevicePair &&other)
158 mDevice = other.mDevice;
159 mProvider = other.mProvider;
161 other.mDevice =
nullptr;
162 other.mProvider =
nullptr;
165 BridgedDevicePair &operator=(BridgedDevicePair &&other)
167 if (
this != &other) {
168 this->~BridgedDevicePair();
169 mDevice = other.mDevice;
170 mProvider = other.mProvider;
171 other.mDevice =
nullptr;
172 other.mProvider =
nullptr;
177 operator bool()
const {
return mDevice || mProvider; }
178 bool operator==(
const BridgedDevicePair &other)
180 return (mDevice == other.mDevice) || (mProvider == other.mProvider);
183 MatterBridgedDevice *mDevice;
184 BridgedDeviceDataProvider *mProvider;
187 static constexpr uint8_t kMaxDataProviders = CONFIG_BRIDGE_MAX_BRIDGED_DEVICES_NUMBER;
189 using DeviceMap = FiniteMap<uint16_t, BridgedDevicePair, kMaxBridgedDevices>;
204 CHIP_ERROR AddSingleDevice(MatterBridgedDevice *device, BridgedDeviceDataProvider *dataProvider,
205 chip::Optional<uint8_t> &devicesPairIndex, uint16_t endpointId);
206 CHIP_ERROR SafelyRemoveDevice(uint8_t index);
226 CHIP_ERROR DoAddBridgedDevices(MatterBridgedDevice *devices[], BridgedDeviceDataProvider *dataProvider,
227 uint8_t deviceListSize, uint8_t devicesPairIndexes[], uint16_t endpointIds[],
228 chip::Optional<uint8_t> indexes[]);
245 CHIP_ERROR AddDevices(MatterBridgedDevice *devices[], BridgedDeviceDataProvider *dataProvider,
246 uint8_t deviceListSize, chip::Optional<uint8_t> devicesPairIndexes[],
247 uint16_t endpointIds[]);
257 CHIP_ERROR CreateEndpoint(uint8_t index, uint16_t endpointId);
259 DeviceMap mDevicesMap;
260 uint16_t mNumberOfProviders{ 0 };
262 uint8_t mDevicesIndexesCounter;
264 chip::EndpointId mFirstDynamicEndpointId;
265 chip::EndpointId mCurrentDynamicEndpointId;
266 bool mIsInitialized =
false;