@@ -185,4 +185,100 @@ void test_send_nop_to_node()
185185 test_discard_timeout_ms ,
186186 test_callback ,
187187 test_user ));
188- }
188+ }
189+
190+ void test_zwave_command_class_list_pack_empty ()
191+ {
192+ zwave_node_info_t node_info = {.listening_protocol = 2 ,
193+ .optional_protocol = 3 ,
194+ .basic_device_class = 4 ,
195+ .generic_device_class = 5 ,
196+ .specific_device_class = 6 ,
197+ .command_class_list_length = 0 ,
198+ .command_class_list = {0 }};
199+
200+ uint8_t nif [ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH * 2 ] = {0 };
201+ uint8_t nif_length = 0 ;
202+
203+ zwave_command_class_list_pack (& node_info , nif , & nif_length );
204+ TEST_ASSERT_EQUAL (0 , nif_length );
205+ zwave_command_class_list_unpack (& node_info , nif , nif_length );
206+ TEST_ASSERT_EQUAL (0 , node_info .command_class_list_length );
207+ }
208+
209+ void test_zwave_command_class_list_pack ()
210+ {
211+ zwave_node_info_t node_info = {.listening_protocol = 2 ,
212+ .optional_protocol = 3 ,
213+ .basic_device_class = 4 ,
214+ .generic_device_class = 5 ,
215+ .specific_device_class = 6 ,
216+ .command_class_list_length = 3 ,
217+ .command_class_list = {0x01 , 0xF0 , 0xFF }};
218+
219+ uint8_t nif [ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH ] = {0 };
220+ uint8_t nif_length = 0 ;
221+
222+ zwave_command_class_list_pack (& node_info , nif , & nif_length );
223+
224+ TEST_ASSERT_EQUAL (node_info .command_class_list_length , nif_length );
225+ TEST_ASSERT_EQUAL (node_info .command_class_list [0 ], nif [0 ]);
226+ TEST_ASSERT_EQUAL (node_info .command_class_list [1 ], nif [1 ]);
227+ TEST_ASSERT_EQUAL (node_info .command_class_list [2 ], nif [2 ]);
228+ }
229+
230+ void test_zwave_command_class_list_pack_extended ()
231+ {
232+ zwave_node_info_t node_info = {
233+ .listening_protocol = 2 ,
234+ .optional_protocol = 3 ,
235+ .basic_device_class = 4 ,
236+ .generic_device_class = 5 ,
237+ .specific_device_class = 6 ,
238+ .command_class_list_length = 3 + 3 ,
239+ .command_class_list = {0x20 , 0xEF , 0xF0 , 0xF100 , 0xF101 , 0xFFFF }
240+ };
241+
242+ uint8_t nif [ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH * 2 ] = {0 };
243+ uint8_t nif_length = 0 ;
244+
245+ zwave_command_class_list_pack (& node_info , nif , & nif_length );
246+
247+ TEST_ASSERT_EQUAL (3 + 3 * 2 , nif_length );
248+
249+ TEST_ASSERT_EQUAL (node_info .command_class_list [0 ], nif [0 ]);
250+ TEST_ASSERT_EQUAL (node_info .command_class_list [1 ], nif [1 ]);
251+ TEST_ASSERT_EQUAL (node_info .command_class_list [2 ], nif [2 ]);
252+ TEST_ASSERT_EQUAL (node_info .command_class_list [3 ], (nif [3 ] << 8 ) | nif [4 ]);
253+ TEST_ASSERT_EQUAL (node_info .command_class_list [4 ], (nif [5 ] << 8 ) | nif [6 ]);
254+ TEST_ASSERT_EQUAL (node_info .command_class_list [5 ], (nif [7 ] << 8 ) | nif [8 ]);
255+ zwave_command_class_list_unpack (& node_info , nif , nif_length );
256+ TEST_ASSERT_EQUAL (3 + 3 , node_info .command_class_list_length );
257+ }
258+
259+ void test_zwave_command_class_list_pack_extended_full ()
260+ {
261+ zwave_node_info_t node_info = {
262+ .listening_protocol = 2 ,
263+ .optional_protocol = 3 ,
264+ .basic_device_class = 4 ,
265+ .generic_device_class = 5 ,
266+ .specific_device_class = 6 ,
267+ .command_class_list_length
268+ = ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH ,
269+ };
270+
271+ for (int i = 0 ; i < ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH ; i ++ ) {
272+ node_info .command_class_list [i ] = 0xFFFF ;
273+ }
274+ uint8_t nif [ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH * 2 ] = {0 };
275+ uint8_t nif_length = 0 ;
276+
277+ zwave_command_class_list_pack (& node_info , nif , & nif_length );
278+ TEST_ASSERT_EQUAL (ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH * 2 ,
279+ nif_length );
280+
281+ zwave_command_class_list_unpack (& node_info , nif , nif_length );
282+ TEST_ASSERT_EQUAL (ZWAVE_CONTROLLER_MAXIMUM_COMMAND_CLASS_LIST_LENGTH ,
283+ node_info .command_class_list_length );
284+ }
0 commit comments