Skip to content

Commit a3c8925

Browse files
committed
GH-43: ZPC User Credential Discovery Commands
- User Capabilities - Credential Capabilities - All User Checksum - User Get/Report - Credential Get/Report Merged : UIC-3222: Fix Supported Credential Types UIC-3222: Ignore User ID 0 & don't create duplicates UIC-3222: Delayed interview UIC-3222: User Credential User Name Encoding under UUID (No real advantage to put this under USER_NAME) UIC-3222: Fix user discovery UIC-3222: Credential get log UIC-3222: Discovery fix (credential and user get) UIC-3222: Discovery interview remove all users before user interview UIC-3222: Fix credential report if credential data is missing UIC-3222: Remove user if User modifier type is DNE UIC-3222: Correctly remove all user credential before discovery UIC-3222: set_reported_attribute return correct status and undefined desired UIC-3222: Add get_desired user id node function UIC-3222: get_credential_type can now be searched as desired value Bug-SiliconLabs: UIC-3222 Bug-GitHub: #43 Signed-off-by: Philippe Coval <philippe.coval@silabs.com>
1 parent ab50297 commit a3c8925

File tree

9 files changed

+3350
-0
lines changed

9 files changed

+3350
-0
lines changed

applications/zpc/components/zpc_attribute_store/include/attribute_store_defined_attribute_types.h

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,87 @@ DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_SOUND_SWITCH_TONE_INFO_NAME,
916916
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_SOUND_SWITCH_TONE_PLAY,
917917
((COMMAND_CLASS_SOUND_SWITCH << 8) | 0x08))
918918

919+
920+
/////////////////////////////////////////////////
921+
// User Credential Command Class
922+
///< This represents the version of the User CredentialCommand class.
923+
/// zwave_cc_version_t
924+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_VERSION,
925+
ZWAVE_CC_VERSION_ATTRIBUTE(COMMAND_CLASS_USER_CREDENTIAL))
926+
927+
928+
/// > User Capabilities
929+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_NUMBER_OF_USERS,
930+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x02))
931+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_RULES,
932+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x03))
933+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_MAX_USERNAME_LENGTH,
934+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x04))
935+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_USER_SCHEDULE,
936+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x05))
937+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_ALL_USERS_CHECKSUM,
938+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x06))
939+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_USER_CHECKSUM,
940+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x07))
941+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_USER_TYPES,
942+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x08))
943+
944+
/// > Credential Capabilities
945+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_CREDENTIAL_CHECKSUM,
946+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x09))
947+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_TYPE,
948+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x0A))
949+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_LEARN_READ_BACK_SUPPORT,
950+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x0B))
951+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SUPPORTED_SLOT_COUNT,
952+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x0C))
953+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MIN_LENGTH,
954+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x0D))
955+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MAX_LENGTH,
956+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x0E))
957+
958+
/// > All Users Checksum
959+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_ALL_USERS_CHECKSUM,
960+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x0F))
961+
962+
/// > Users
963+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID,
964+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x10))
965+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_MODIFIER_TYPE,
966+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x11))
967+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_MODIFIER_NODE_ID,
968+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x12))
969+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_TYPE,
970+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x13))
971+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_ACTIVE_STATE,
972+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x14))
973+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_NAME,
974+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x15))
975+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_NAME_ENCODING,
976+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x16))
977+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_RULE,
978+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x17))
979+
980+
/// > Credentials
981+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_TYPE,
982+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x18))
983+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_DATA_LENGTH,
984+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x19))
985+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_DATA,
986+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x1A))
987+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SLOT,
988+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x1B))
989+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_READ_BACK,
990+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x1C))
991+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MODIFIER_TYPE,
992+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x1D))
993+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MODIFIER_NODE_ID,
994+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x1E))
995+
// Specific to Credential SET
996+
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_OPERATION_TYPE,
997+
((COMMAND_CLASS_USER_CREDENTIAL << 8) | 0x1F))
998+
999+
9191000
/////////////////////////////////////////////////
9201001
// Z-Wave Plus Info CC
9211002
DEFINE_ATTRIBUTE(ATTRIBUTE_COMMAND_ZWAVEPLUS_INFO_VERSION,
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/******************************************************************************
2+
* # License
3+
* <b>Copyright 2023 Silicon Laboratories Inc. www.silabs.com</b>
4+
******************************************************************************
5+
* The licensor of this software is Silicon Laboratories Inc. Your use of this
6+
* software is governed by the terms of Silicon Labs Master Software License
7+
* Agreement (MSLA) available at
8+
* www.silabs.com/about-us/legal/master-software-license-agreement. This
9+
* software is distributed to you in Source Code format and is governed by the
10+
* sections of the MSLA applicable to Source Code.
11+
*
12+
*****************************************************************************/
13+
14+
/**
15+
* @defgroup zwave_command_class_user_credential_types Type definitions for attribute storage of the Sound Switch Command Class
16+
* @ingroup zpc_attribute_store_command_classes_types
17+
* @brief Type definitions for the Sound Switch Command Class.
18+
*
19+
* @{
20+
*/
21+
22+
#ifndef ZWAVE_COMMAND_CLASS_USER_CREDENTIALS_TYPES_H
23+
#define ZWAVE_COMMAND_CLASS_USER_CREDENTIALS_TYPES_H
24+
25+
#include <stdint.h>
26+
27+
///> Supported credential rules bitmask. uint8_t
28+
typedef uint8_t user_credential_supported_credential_rules_t;
29+
30+
///> Supported user type bitmask. uint32_t
31+
typedef uint32_t user_credential_supported_user_type_bitmask_t;
32+
33+
///> All user checksum. uint16_t
34+
typedef uint16_t user_credential_all_users_checksum_t;
35+
36+
///> User Unique ID. uint16_t
37+
typedef uint16_t user_credential_user_unique_id_t;
38+
///> User Modifier Type. uint8_t
39+
typedef uint8_t user_credential_user_modifier_type_t;
40+
///> User Modifier Node ID. uint16_t
41+
typedef uint16_t user_credential_user_modifier_node_id_t;
42+
///> User Type. uint8_t
43+
typedef uint8_t user_credential_user_type_t;
44+
45+
///> Credential type. uint8_t
46+
typedef uint8_t user_credential_type_t;
47+
48+
///> Credential slot. uint16_t
49+
typedef uint16_t user_credential_slot_t;
50+
51+
///> Operation type. uint8_t
52+
typedef uint8_t user_credential_operation_type_t;
53+
54+
#ifdef __cplusplus
55+
extern "C" {
56+
#endif
57+
58+
#ifdef __cplusplus
59+
}
60+
#endif
61+
62+
#endif //ZWAVE_COMMAND_CLASS_USER_CREDENTIALS_TYPES_H
63+
/** @} end zwave_command_class_user_credentials_types */

applications/zpc/components/zpc_attribute_store/src/zpc_attribute_store_type_registration.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,56 @@ static const std::vector<attribute_schema_t> attribute_schema = {
353353
{ATTRIBUTE_COMMAND_CLASS_USER_CODE_SUPPORTED_KEYS, "Supported Keys bitmask", ATTRIBUTE_COMMAND_CLASS_USER_CODE_CAPABILITIES, BYTE_ARRAY_STORAGE_TYPE},
354354
{ATTRIBUTE_COMMAND_CLASS_USER_CODE_CHECKSUM, "User Code Checksum", ATTRIBUTE_COMMAND_CLASS_USER_CODE_DATA, U16_STORAGE_TYPE},
355355
{ATTRIBUTE_COMMAND_CLASS_USER_CODE_KEYPAD_MODE, "Keypad Mode", ATTRIBUTE_COMMAND_CLASS_USER_CODE_DATA, U8_STORAGE_TYPE},
356+
357+
358+
/////////////////////////////////////////////////////////////////////
359+
// User Credential Command Class attributes
360+
/////////////////////////////////////////////////////////////////////
361+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_VERSION, "User Credential Version", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
362+
363+
// User capabilities
364+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_NUMBER_OF_USERS, "User Credential User Count", ATTRIBUTE_ENDPOINT_ID, U16_STORAGE_TYPE},
365+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_RULES, "User Credential Supported Rules", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
366+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_MAX_USERNAME_LENGTH, "User Credential Max Username Length", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
367+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_USER_SCHEDULE, "User Credential Support User Schedule", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
368+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_ALL_USERS_CHECKSUM, "User Credential Support All User Checksum", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
369+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_USER_CHECKSUM, "User Credential Support By User Checksum", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
370+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_USER_TYPES, "User Credential Supported User types", ATTRIBUTE_ENDPOINT_ID, U32_STORAGE_TYPE},
371+
372+
// Credential capabilities
373+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORT_CREDENTIAL_CHECKSUM, "User Credential Support Credential Checksum", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
374+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_TYPE, "User Credential Supported Credential Type", ATTRIBUTE_ENDPOINT_ID, U8_STORAGE_TYPE},
375+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_LEARN_READ_BACK_SUPPORT, "User Credential Type Read Back Support", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_TYPE, U8_STORAGE_TYPE},
376+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SUPPORTED_SLOT_COUNT, "User Credential Supported Slot Count", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_TYPE, U16_STORAGE_TYPE},
377+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MIN_LENGTH, "User Credential Min Length", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_TYPE, U16_STORAGE_TYPE},
378+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MAX_LENGTH, "User Credential Max Length", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_SUPPORTED_CREDENTIAL_TYPE, U16_STORAGE_TYPE},
379+
380+
// All Users Checksum
381+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_ALL_USERS_CHECKSUM, "User Credential All User Checksum", ATTRIBUTE_ENDPOINT_ID, U16_STORAGE_TYPE},
382+
383+
// User
384+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, "User Credential User Unique Identifier", ATTRIBUTE_ENDPOINT_ID, U16_STORAGE_TYPE},
385+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_MODIFIER_TYPE, "User Credential User Modifier Type", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U8_STORAGE_TYPE},
386+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_MODIFIER_NODE_ID, "User Credential User Modifier Node ID", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U16_STORAGE_TYPE},
387+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_TYPE, "User Credential User Type", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U8_STORAGE_TYPE},
388+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_ACTIVE_STATE, "User Credential User Active State", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U8_STORAGE_TYPE},
389+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_NAME, "User Credential User Name", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, C_STRING_STORAGE_TYPE},
390+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_NAME_ENCODING, "User Credential User Name Encoding", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U8_STORAGE_TYPE},
391+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_RULE, "User Credential User Credential Rule", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U8_STORAGE_TYPE},
392+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_OPERATION_TYPE, "User Credential User Operation type", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U8_STORAGE_TYPE},
393+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_EXPIRING_TIMEOUT_MINUTES, "User Credential User Expiring Timeout Minutes", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U16_STORAGE_TYPE},
394+
395+
// Credential
396+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_TYPE, "User Credential Credential Type", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_USER_UNIQUE_ID, U8_STORAGE_TYPE},
397+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SLOT, "User Credential Credential Slot", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_TYPE, U16_STORAGE_TYPE},
398+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_DATA_LENGTH, "User Credential Credential Data Length", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SLOT, U8_STORAGE_TYPE},
399+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_DATA, "User Credential Credential Data", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_DATA_LENGTH, BYTE_ARRAY_STORAGE_TYPE},
400+
401+
402+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_READ_BACK, "User Credential Credential Read Back Flag", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SLOT, U8_STORAGE_TYPE},
403+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MODIFIER_TYPE, "User Credential Credential Modifier type", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SLOT, U8_STORAGE_TYPE},
404+
{ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_MODIFIER_NODE_ID, "User Credential Credential Node ID", ATTRIBUTE_COMMAND_CLASS_USER_CREDENTIAL_CREDENTIAL_SLOT, U16_STORAGE_TYPE},
405+
356406
/////////////////////////////////////////////////////////////////////
357407
// Z-Wave Plus Info Command Class attributes
358408
/////////////////////////////////////////////////////////////////////

applications/zpc/components/zwave_command_classes/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ add_library(
4848
src/zwave_command_class_thermostat_setpoint.c
4949
src/zwave_command_class_time.c
5050
src/zwave_command_class_user_code.c
51+
src/zwave_command_class_user_credential.cpp
5152
src/zwave_command_class_version.c
5253
src/zwave_command_class_wake_up.c
5354
src/zwave_command_class_zwave_plus_info.c

0 commit comments

Comments
 (0)