@@ -326,13 +326,38 @@ static bool is_mucr_supported(attribute_store_node_t endpoint_node)
326326static  sl_status_t  zwave_command_class_user_code_number_get (
327327  attribute_store_node_t  node , uint8_t  * frame , uint16_t  * frame_length )
328328{
329-   (void )node ;  // unused. 
329+   attribute_store_node_t  endpoint_node 
330+     =  attribute_store_get_first_parent_with_type (node , ATTRIBUTE_ENDPOINT_ID );
331+   attribute_store_node_t  version_node 
332+     =  attribute_store_get_first_child_by_type (endpoint_node ,
333+                                               ATTRIBUTE (VERSION ));
334+   // We need to check the version of the supporting node: 
335+   zwave_cc_version_t  supporting_node_version  =  0 ;
336+   attribute_store_get_reported (version_node ,
337+                                & supporting_node_version ,
338+                                sizeof (supporting_node_version ));
339+ 
340+   if  (supporting_node_version  ==  0 ) {
341+     // Wait to know the supporting node version 
342+     * frame_length  =  0 ;
343+     return  SL_STATUS_IS_WAITING ;
344+   }
345+ 
346+   if  (supporting_node_version  ==  1 ) {
347+     ZW_USERS_NUMBER_GET_FRAME  * get_frame 
348+       =  (ZW_USERS_NUMBER_GET_FRAME  * )frame ;
349+   get_frame -> cmdClass  =  COMMAND_CLASS_USER_CODE ;
350+   get_frame -> cmd       =  USERS_NUMBER_GET ;
351+   * frame_length        =  sizeof (ZW_USERS_NUMBER_GET_FRAME );
352+   }
353+   else  {
330354  // This is a static payload. 
331355  ZW_USERS_NUMBER_GET_V2_FRAME  * get_frame 
332356    =  (ZW_USERS_NUMBER_GET_V2_FRAME  * )frame ;
333357  get_frame -> cmdClass  =  COMMAND_CLASS_USER_CODE_V2 ;
334358  get_frame -> cmd       =  USERS_NUMBER_GET_V2 ;
335359  * frame_length        =  sizeof (ZW_USERS_NUMBER_GET_V2_FRAME );
360+   }
336361  return  SL_STATUS_OK ;
337362}
338363
@@ -378,8 +403,8 @@ static sl_status_t zwave_command_class_user_code_get(
378403      * frame_length  =  0 ;
379404      return  SL_STATUS_ALREADY_EXISTS ;
380405    }
381-     frame [0 ]      =  COMMAND_CLASS_USER_CODE_V2 ;
382-     frame [1 ]      =  USER_CODE_GET_V2 ;
406+     frame [0 ]      =  COMMAND_CLASS_USER_CODE ;
407+     frame [1 ]      =  USER_CODE_GET ;
383408    frame [2 ]      =  (uint8_t )user_id ;
384409    * frame_length  =  3 ;
385410    return  SL_STATUS_OK ;
@@ -540,7 +565,30 @@ static sl_status_t zwave_command_class_user_code_admin_code_get(
540565static  sl_status_t  zwave_command_class_user_code_keypad_mode_get (
541566  attribute_store_node_t  node , uint8_t  * frame , uint16_t  * frame_length )
542567{
543-   (void )node ;  // unused. 
568+   attribute_store_node_t  endpoint_node 
569+     =  attribute_store_get_first_parent_with_type (node , ATTRIBUTE_ENDPOINT_ID );
570+   attribute_store_node_t  version_node 
571+     =  attribute_store_get_first_child_by_type (endpoint_node ,
572+                                               ATTRIBUTE (VERSION ));
573+   // We need to check the version of the supporting node: 
574+   zwave_cc_version_t  supporting_node_version  =  0 ;
575+   attribute_store_get_reported (version_node ,
576+                                & supporting_node_version ,
577+                                sizeof (supporting_node_version ));
578+ 
579+   if  (supporting_node_version  ==  0 ) {
580+     // Wait to know the supporting node version 
581+     * frame_length  =  0 ;
582+     return  SL_STATUS_IS_WAITING ;
583+   }
584+ 
585+   if  (supporting_node_version  ==  1 ) {
586+     sl_log_warning (LOG_TAG , "Admin Code attribute found for v1 node. Deleting" );
587+     attribute_store_delete_node (node );
588+     * frame_length  =  0 ;
589+     return  SL_STATUS_ALREADY_EXISTS ;
590+   }
591+ 
544592  zwave_minimum_frame_t  * get_frame  =  (zwave_minimum_frame_t  * )frame ;
545593  get_frame -> command_class          =  COMMAND_CLASS_USER_CODE_V2 ;
546594  get_frame -> command                =  USER_CODE_KEYPAD_MODE_GET_V2 ;
@@ -560,6 +608,30 @@ static sl_status_t zwave_command_class_user_code_keypad_mode_get(
560608static  sl_status_t  zwave_command_class_user_code_keypad_mode_set (
561609  attribute_store_node_t  node , uint8_t  * frame , uint16_t  * frame_length )
562610{
611+   attribute_store_node_t  endpoint_node 
612+     =  attribute_store_get_first_parent_with_type (node , ATTRIBUTE_ENDPOINT_ID );
613+   attribute_store_node_t  version_node 
614+     =  attribute_store_get_first_child_by_type (endpoint_node ,
615+                                               ATTRIBUTE (VERSION ));
616+   // We need to check the version of the supporting node: 
617+   zwave_cc_version_t  supporting_node_version  =  0 ;
618+   attribute_store_get_reported (version_node ,
619+                                & supporting_node_version ,
620+                                sizeof (supporting_node_version ));
621+ 
622+   if  (supporting_node_version  ==  0 ) {
623+     // Wait to know the supporting node version 
624+     * frame_length  =  0 ;
625+     return  SL_STATUS_IS_WAITING ;
626+   }
627+ 
628+   if  (supporting_node_version  ==  1 ) {
629+     sl_log_warning (LOG_TAG , "Admin Code attribute found for v1 node. Deleting" );
630+     attribute_store_delete_node (node );
631+     * frame_length  =  0 ;
632+     return  SL_STATUS_ALREADY_EXISTS ;
633+   }
634+ 
563635  ZW_USER_CODE_KEYPAD_MODE_SET_V2_FRAME  * set_frame 
564636    =  (ZW_USER_CODE_KEYPAD_MODE_SET_V2_FRAME  * )frame ;
565637  set_frame -> cmdClass  =  COMMAND_CLASS_USER_CODE_V2 ;
@@ -653,8 +725,8 @@ static sl_status_t zwave_command_class_user_code_set(
653725                                              & user_id_status ,
654726                                              sizeof (user_id_status ));
655727
656-     frame [0 ] =  COMMAND_CLASS_USER_CODE_V2 ;
657-     frame [1 ] =  USER_CODE_SET_V2 ;
728+     frame [0 ] =  COMMAND_CLASS_USER_CODE ;
729+     frame [1 ] =  USER_CODE_SET ;
658730    frame [2 ] =  (uint8_t )user_id ;
659731    frame [3 ] =  user_id_status ;
660732    if  (user_id_status  ==  0 ) {
@@ -788,8 +860,8 @@ static sl_status_t zwave_command_class_user_code_delete_all(
788860  if  (supporting_node_version  ==  1 ) {
789861    ZW_USER_CODE_SET_4BYTE_FRAME  * set_frame 
790862      =  (ZW_USER_CODE_SET_4BYTE_FRAME  * )frame ;
791-     set_frame -> cmdClass        =  COMMAND_CLASS_USER_CODE_V2 ;
792-     set_frame -> cmd             =  USER_CODE_SET_V2 ;
863+     set_frame -> cmdClass        =  COMMAND_CLASS_USER_CODE ;
864+     set_frame -> cmd             =  USER_CODE_SET ;
793865    set_frame -> userIdentifier  =  0 ;
794866    set_frame -> userIdStatus    =  0 ;
795867    set_frame -> userCode1       =  0 ;
0 commit comments