@@ -128,11 +128,27 @@ class WpcCallbackTest : public WpcTest
128
128
uint8_t expected_dst_ep;
129
129
};
130
130
131
+ struct ConfigDataItemCb : public BaseCallbackHandler
132
+ {
133
+ void reset ()
134
+ {
135
+ std::lock_guard<std::mutex> lock (mutex);
136
+ callback_called = false ;
137
+ payload.clear ();
138
+ expected_endpoint = 0 ;
139
+ }
140
+
141
+ std::vector<uint8_t > payload;
142
+
143
+ uint16_t expected_endpoint;
144
+ };
145
+
131
146
inline static StackStatusCb stack_status_cb;
132
147
inline static ScanNeighborsCb scan_neighbors_cb;
133
148
inline static AppConfigCb app_config_cb;
134
149
inline static DataSentCb data_sent_cb;
135
150
inline static DataReceivedCb data_received_cb;
151
+ inline static ConfigDataItemCb config_data_item_cb;
136
152
137
153
static void onStackStatusReceived (uint8_t status)
138
154
{
@@ -195,13 +211,29 @@ class WpcCallbackTest : public WpcTest
195
211
return true ;
196
212
}
197
213
214
+ static void onConfigDataItemReceived (const uint16_t endpoint,
215
+ const uint8_t * const payload,
216
+ const uint8_t size)
217
+ {
218
+ if (endpoint != config_data_item_cb.expected_endpoint ) {
219
+ return ;
220
+ }
221
+
222
+ std::lock_guard<std::mutex> lock (config_data_item_cb.mutex );
223
+ config_data_item_cb.callback_called = true ;
224
+
225
+ config_data_item_cb.payload .resize (size);
226
+ std::memcpy (config_data_item_cb.payload .data (), payload, size);
227
+ }
228
+
198
229
void SetUp () override
199
230
{
200
231
stack_status_cb.reset ();
201
232
scan_neighbors_cb.reset ();
202
233
app_config_cb.reset ();
203
234
data_sent_cb.reset ();
204
235
data_received_cb.reset ();
236
+ config_data_item_cb.reset ();
205
237
}
206
238
207
239
void TearDown () override
@@ -210,6 +242,7 @@ class WpcCallbackTest : public WpcTest
210
242
WPC_unregister_from_scan_neighbors_done ();
211
243
WPC_unregister_from_app_config_data ();
212
244
WPC_unregister_for_data ();
245
+ WPC_unregister_from_config_data_item ();
213
246
}
214
247
};
215
248
@@ -376,3 +409,25 @@ TEST_F(WpcCallbackTest, testSendFragmentedDataWithReceiveCallback)
376
409
}
377
410
}
378
411
412
+ TEST_F (WpcCallbackTest, testConfigDataItemCallback)
413
+ {
414
+ const uint16_t TEST_ENDPOINT = 0x4156 ;
415
+ const uint8_t TEST_DATA[] = { 0x95 , 0x85 , 0x75 };
416
+
417
+ {
418
+ std::lock_guard<std::mutex> lock (data_received_cb.mutex );
419
+ config_data_item_cb.expected_endpoint = TEST_ENDPOINT;
420
+ }
421
+
422
+ ASSERT_EQ (APP_RES_OK, WPC_register_for_config_data_item (onConfigDataItemReceived));
423
+
424
+ ASSERT_EQ (APP_RES_OK, WPC_set_config_data_item (TEST_ENDPOINT, TEST_DATA, sizeof (TEST_DATA)));
425
+
426
+ ASSERT_NO_FATAL_FAILURE (config_data_item_cb.WaitForCallback ());
427
+
428
+ {
429
+ std::lock_guard<std::mutex> lock (config_data_item_cb.mutex );
430
+ ASSERT_EQ (sizeof (TEST_DATA), config_data_item_cb.payload .size ());
431
+ ASSERT_EQ_ARRAY (TEST_DATA, (uint8_t *)config_data_item_cb.payload .data (), sizeof (TEST_DATA));
432
+ }
433
+ }
0 commit comments