UserCredential#

Modules#

u3c_user_

u3c_credential_metadata_

u3c_credential_

u3c_credential_identifier_

u3c_event_data_validate_

u3c_event_data_learn_read_done_

u3c_credential_learn_event_data_

u3c_admin_code_metadata_

Enumerations#

enum
U3C_DB_OPERATION_RESULT_SUCCESS
U3C_DB_OPERATION_RESULT_ERROR
U3C_DB_OPERATION_RESULT_ERROR_IO
U3C_DB_OPERATION_RESULT_ERROR_DUPLICATE
U3C_DB_OPERATION_RESULT_FAIL_DNE
U3C_DB_OPERATION_RESULT_FAIL_FULL
U3C_DB_OPERATION_RESULT_FAIL_OCCUPIED
U3C_DB_OPERATION_RESULT_FAIL_REASSIGN
U3C_DB_OPERATION_RESULT_FAIL_IDENTICAL
}
enum
MODIFIER_TYPE_DNE = CREDENTIAL_REPORT_DNE
MODIFIER_TYPE_UNKNOWN
MODIFIER_TYPE_Z_WAVE
MODIFIER_TYPE_LOCALLY
MODIFIER_TYPE_MOBILE_APP_OR_OTHER_IOT_TECHNOLOGY
}
enum
CREDENTIAL_TYPE_NONE
CREDENTIAL_TYPE_PIN_CODE = CREDENTIAL_REPORT_PIN_CODE
CREDENTIAL_TYPE_PASSWORD
CREDENTIAL_TYPE_RFID_CODE
CREDENTIAL_TYPE_BLE
CREDENTIAL_TYPE_NFC
CREDENTIAL_TYPE_UWB
CREDENTIAL_TYPE_EYE_BIOMETRIC
CREDENTIAL_TYPE_FACE_BIOMETRIC
CREDENTIAL_TYPE_FINGER_BIOMETRIC
CREDENTIAL_TYPE_HAND_BIOMETRIC
CREDENTIAL_TYPE_UNSPECIFIED_BIOMETRIC
CREDENTIAL_TYPE_NUMBER_OF_TYPES
}
enum
CREDENTIAL_REP_TYPE_ADDED = CREDENTIAL_REPORT_ADDED
CREDENTIAL_REP_TYPE_MODIFIED = CREDENTIAL_REPORT_MODIFIED
CREDENTIAL_REP_TYPE_DELETED = CREDENTIAL_REPORT_DELETED
CREDENTIAL_REP_TYPE_UNCHANGED = CREDENTIAL_REPORT_UNCHANGED
CREDENTIAL_REP_TYPE_RESPONSE_TO_GET = CREDENTIAL_REPORT_RESPONSE_TO_GET
CREDENTIAL_REP_TYPE_ADD_AGAINST_OCCUPIED = CREDENTIAL_REPORT_ADD_AGAINST_OCCUPIED
CREDENTIAL_REP_TYPE_MODIF_AGAINST_EMPTY = CREDENTIAL_REPORT_MODIFY_AGAINST_EMPTY
CREDENTIAL_REP_TYPE_DUPLICATE = CREDENTIAL_REPORT_DUPLICATE
CREDENTIAL_REP_TYPE_MANUFACTURER_SECURITY_RULES = CREDENTIAL_REPORT_MANUFACTURER_SECURITY_RULES
CREDENTIAL_REP_TYPE_WRONG_UUID = CREDENTIAL_REPORT_WRONG_USER_UNIQUE_IDENTIFIER
CREDENTIAL_REP_TYPE_DUPLICATE_ADMIN_PIN_CODE = CREDENTIAL_REPORT_DUPLICATE_ADMIN_PIN_CODE
}
enum
CL_STATUS_STARTED = CREDENTIAL_LEARN_REPORT_STARTED
CL_STATUS_SUCCESS = CREDENTIAL_LEARN_REPORT_SUCCESS
CL_STATUS_ALREADY_IN_PROGRESS = CREDENTIAL_LEARN_REPORT_ALREADY_IN_PROGRESS
CL_STATUS_ENDED_NOT_DUE_TO_TIMEOUT = CREDENTIAL_LEARN_REPORT_ENDED_NOT_DUE_TO_TIMEOUT
CL_STATUS_TIMEOUT = CREDENTIAL_LEARN_REPORT_TIMEOUT
CL_STATUS_STEP_RETRY = CREDENTIAL_LEARN_REPORT_CREDENTIAL_LEARN_STEP_RETRY
CL_STATUS_INVALID_ADD_OPERATION_TYPE = CREDENTIAL_LEARN_REPORT_INVALID_CREDENTIAL_LEARN_ADD_OPERATION_TYPE
CL_STATUS_INVALID_MODIFY_OPERATION_TYPE = CREDENTIAL_LEARN_REPORT_INVALID_CREDENTIAL_LEARN_MODIFY_OPERATION_TYPE
}
enum
U3C_UCAR_STATUS_SUCCESS = USER_CREDENTIAL_ASSOCIATION_REPORT_SUCCESS
U3C_UCAR_STATUS_CREDENTIAL_TYPE_INVALID = USER_CREDENTIAL_ASSOCIATION_REPORT_CREDENTIAL_TYPE_INVALID
U3C_UCAR_STATUS_SOURCE_CREDENTIAL_SLOT_INVALID = USER_CREDENTIAL_ASSOCIATION_REPORT_SOURCE_CREDENTIAL_SLOT_INVALID
U3C_UCAR_STATUS_SOURCE_CREDENTIAL_SLOT_EMPTY = USER_CREDENTIAL_ASSOCIATION_REPORT_SOURCE_CREDENTIAL_SLOT_EMPTY
U3C_UCAR_STATUS_DESTINATION_USER_UNIQUE_IDENTIFIER_INVALID = USER_CREDENTIAL_ASSOCIATION_REPORT_DESTINATION_USER_UNIQUE_IDENTIFIER_INVALID
U3C_UCAR_STATUS_DESTINATION_USER_UNIQUE_IDENTIFIER_NONEXISTENT = USER_CREDENTIAL_ASSOCIATION_REPORT_DESTINATION_USER_UNIQUE_IDENTIFIER_NONEXISTENT
U3C_UCAR_STATUS_DESTINATION_CREDENTIAL_SLOT_INVALID = USER_CREDENTIAL_ASSOCIATION_REPORT_DESTINATION_CREDENTIAL_SLOT_INVALID
U3C_UCAR_STATUS_DESTINATION_CREDENTIAL_SLOT_OCCUPIED = USER_CREDENTIAL_ASSOCIATION_REPORT_DESTINATION_CREDENTIAL_SLOT_OCCUPIED
}
enum
USER_REP_TYPE_ADDED = USER_REPORT_ADDED
USER_REP_TYPE_MODIFIED = USER_REPORT_MODIFIED
USER_REP_TYPE_DELETED = USER_REPORT_DELETED
USER_REP_TYPE_UNCHANGED = USER_REPORT_UNCHANGED
USER_REP_TYPE_RESPONSE_TO_GET = USER_REPORT_RESPONSE_TO_GET
USER_REP_TYPE_ADD_AGAINST_OCCUPIED = USER_REPORT_ADD_AGAINST_OCCUPIED
USER_REP_TYPE_MODIF_AGAINST_EMPTY = USER_REPORT_MODIFY_AGAINST_EMPTY
USER_REP_TYPE_Z_EXP_MIN_INVALID = USER_REPORT_ZERO_EXPIRING_MINUTES_INVALID
}
enum
USER_TYPE_GENERAL = 0x00
USER_TYPE_PROGRAMMING = 0x03
USER_TYPE_NON_ACCESS = 0x04
USER_TYPE_DURESS = 0x05
USER_TYPE_DISPOSABLE = 0x06
USER_TYPE_EXPIRING = 0x07
USER_TYPE_REMOTE_ONLY = 0x09
USER_TYPE_END
}
enum
CREDENTIAL_RULE_SINGLE = 0x01
CREDENTIAL_RULE_DUAL
CREDENTIAL_RULE_TRIPLE
}
enum
USER_NAME_ENCODING_STANDARD_ASCII
USER_NAME_ENCODING_STANDARD_AND_OEM_EXTENDED_ASCII
USER_NAME_ENCODING_UNICODE_UTF_16
}
enum
ADMIN_CODE_OPERATION_RESULT_MODIFIED = 0x01
ADMIN_CODE_OPERATION_RESULT_UNMODIFIED = 0x03
ADMIN_CODE_OPERATION_RESULT_GET_RESP = 0x04
ADMIN_CODE_OPERATION_RESULT_FAIL_DUPLICATE_CRED = 0x07
ADMIN_CODE_OPERATION_RESULT_FAIL_MANUF_RULE = 0x08
ADMIN_CODE_OPERATION_RESULT_ERROR_AC_NOT_SUPPORTED = 0x0D
ADMIN_CODE_OPERATION_RESULT_ERROR_ACD_NOT_SUPPORTED = 0x0E
ADMIN_CODE_OPERATION_RESULT_ERROR_NODE = 0x0F
ADMIN_CODE_OPERATION_RESULT_INTERNAL_DUPLICATE_AC = 0x13
ADMIN_CODE_OPERATION_RESULT_INTERNAL_NONE = 0x14
ADMIN_CODE_OPERATION_RESULT_INTERNAL_INVALID_LENGTH = 0x1F
ADMIN_CODE_OPERATION_RESULT_INTERNAL_INVALID_CHAR = 0x2F
}

This operation result can optionally be injected into an Admin Code Report to pass information back to the controlling node, in lieu of another report type.

enum
U3C_OPERATION_TYPE_ADD = 0
U3C_OPERATION_TYPE_MODIFY = 1
U3C_OPERATION_TYPE_DELETE = 2
}
enum
CC_USER_CREDENTIAL_EVENT_VALIDATE = 1
CC_USER_CREDENTIAL_EVENT_VALIDATE_VALID = 2
CC_USER_CREDENTIAL_EVENT_VALIDATE_INVALID = 3
CC_USER_CREDENTIAL_EVENT_LEARN_START_REQUEST = 4
CC_USER_CREDENTIAL_EVENT_LEARN_START = 5
CC_USER_CREDENTIAL_EVENT_LEARN_STEP_START = 6
CC_USER_CREDENTIAL_EVENT_LEARN_READ_DONE = 7
CC_USER_CREDENTIAL_EVENT_LEARN_SUCCESS = 8
CC_USER_CREDENTIAL_EVENT_LEARN_FAILED = 9
CC_USER_CREDENTIAL_EVENT_LEARN_STEP_RETRY = 10
CC_USER_CREDENTIAL_EVENT_LEARN_TIMEOUT = 11
CC_USER_CREDENTIAL_EVENT_LEARN_CANCEL_REMOTE = 12
CC_USER_CREDENTIAL_EVENT_LEARN_CANCEL_LOCAL = 13
}

Typedefs#

This operation result can optionally be injected into an Admin Code Report to pass information back to the controlling node, in lieu of another report type.

typedef struct u3c_user_

Payload for CC_USER_CREDENTIAL_EVENT_VALIDATE, received from the application.

Payload for CC_USER_CREDENTIAL_EVENT_LEARN_READ_DONE, passed to the application.

Credential Learn information passed to application layer.

Functions#

void

Resets the User Credential Command Class database to a blank state, removing all existing users, credentials and the admin code.

void

Initializes the User Credential Command Class database to a consistent state.

CC_UserCredential_get_user(uint16_t unique_identifier, u3c_user *user, uint8_t *name)

Copies the data for a given User from the database to an arbitrary location in memory.

uint16_t
CC_UserCredential_get_next_user(uint16_t unique_identifier)

Finds the first or next available User Unique Identifier.

CC_UserCredential_modify_user(u3c_user *user, uint8_t *name)

Modifies a user in the database.

CC_UserCredential_get_credential(uint16_t user_unique_identifier, u3c_credential_type credential_type, uint16_t credential_slot, u3c_credential_metadata *credential_metadata, uint8_t *credential_data)

Copies the data for a given Credential from the database to an arbitrary location in memory.

bool
CC_UserCredential_get_next_credential(uint16_t user_unique_identifier, u3c_credential_type credential_type, uint16_t credential_slot, u3c_credential_type *next_credential_type, uint16_t *next_credential_slot)

Finds the first or next available Credential entry for a given User or Credential Type (set either one of these parameters to 0 to disable filtering by that property).

CC_UserCredential_add_credential(u3c_credential *credential)

Adds a new credential to the database.

CC_UserCredential_delete_credential(u3c_credential_type credential_type, uint16_t credential_slot)

Deletes a Credential.

CC_UserCredential_move_credential(u3c_credential_type credential_type, uint16_t source_credential_slot, uint16_t destination_user_uid, uint16_t destination_credential_slot)

Moves a credential from one slot to another and/or assigns a credential from one User Unique Identifier to another one.

CC_UserCredential_get_admin_code_info(u3c_admin_code_metadata_t *code)

Retrieves the admin code information from the node.

CC_UserCredential_set_admin_code(u3c_admin_code_metadata_t *code)

Sets the admin code on the node, if supported.

CC_UserCredential_add_user_and_report(u3c_user *p_user, uint8_t *p_name, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Tries to add a new user to the database and reports the result.

CC_UserCredential_modify_user_and_report(u3c_user *p_user, uint8_t *p_name, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Tries to modify a user in the database and reports the result.

CC_UserCredential_delete_user_and_report(uint16_t uuid, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Tries to delete a user from the database and reports the result.

CC_UserCredential_add_credential_and_report(u3c_credential *p_credential, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Tries to add a new credential to the database and reports the result.

CC_UserCredential_modify_credential_and_report(u3c_credential *p_credential, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Tries to modify a credential in the database and reports the result.

CC_UserCredential_delete_credential_and_report(uint16_t uuid, u3c_credential_type credential_type, uint16_t credential_slot, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Tries to delete a credential from the database and reports the result.

CC_UserCredential_move_credential_and_report(u3c_credential_type credential_type, uint16_t source_credential_slot, uint16_t destination_uuid, uint16_t destination_credential_slot, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Tries to assign a credential to a different slot or user.

bool
CC_UserCredential_send_association_report(u3c_credential_metadata const *const p_source_metadata, u3c_credential_metadata const *const p_destination_metadata, u3c_user_credential_association_report_status_t const status, RECEIVE_OPTIONS_TYPE_EX *const p_rx_options)

Sends a USER_CREDENTIAL_ASSOCIATION_REPORT frame.

void
CC_UserCredential_delete_all_credentials_of_type(uint16_t uuid, u3c_credential_type filter_type)

Deletes all Credentials of a given type for a User.

bool

Validates a Credential according to the manufacturer's security rules.

bool

Validates the following conditions and requirements: CC:0083.01.1A.11.011 - Code follows all manufacturer security rules.

void
CC_UserCredential_UserReport_tx(const u3c_user_report_type_t report_type, const u3c_user *const p_user, const uint8_t *const p_name, const uint16_t next_uuid, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Sends one or more User Report frames to the appropriate destinations depending on the type of the report.

void
CC_UserCredential_CredentialReport_tx(const u3c_credential_report_type_t report_type, const u3c_credential *p_credential, const u3c_credential_type next_credential_type, const uint16_t next_credential_slot, RECEIVE_OPTIONS_TYPE_EX *p_rx_options)

Sends one or more Credential Report frames to the appropriate destinations depending on the type of the report.

CC_User_Credential_UsageNotification_tx(const uint8_t notification_event, const uint16_t uuid, const uint8_t credential_count, const u3c_credential_metadata *const p_credential_metadata)

Sends a Notification Report frame with Event/State parameters containing the Credential Usage Data.

Macros#

#define
U3C_CREDENTIAL_TYPE_PIN_CODE_MIN_LENGTH_REQUIREMENT 4
#define
ASCII_AC_MAX 0x7F
#define
AC_MIN_LENGTH 4
#define
AC_MAX_LENGTH 10
#define
U3C_BUFFER_SIZE_USER_NAME CC_USER_CREDENTIAL_MAX_LENGTH_USER_NAME

Enumeration Documentation#

u3c_db_operation_result_#

u3c_db_operation_result_
Enumerator
U3C_DB_OPERATION_RESULT_SUCCESS

The operation completed succesfully.

U3C_DB_OPERATION_RESULT_ERROR

An error occurred.

U3C_DB_OPERATION_RESULT_ERROR_IO

An I/O error occurred.

U3C_DB_OPERATION_RESULT_ERROR_DUPLICATE

Duplicate Entry in table.

U3C_DB_OPERATION_RESULT_FAIL_DNE

The object does not exist.

U3C_DB_OPERATION_RESULT_FAIL_FULL

There is no space left for the object.

U3C_DB_OPERATION_RESULT_FAIL_OCCUPIED

The object already exists.

U3C_DB_OPERATION_RESULT_FAIL_REASSIGN

The credential is assigned to a different user.

U3C_DB_OPERATION_RESULT_FAIL_IDENTICAL

The new data is identical to the data already stored locally.


u3c_modifier_type_#

u3c_modifier_type_
Enumerator
MODIFIER_TYPE_DNE
MODIFIER_TYPE_UNKNOWN
MODIFIER_TYPE_Z_WAVE
MODIFIER_TYPE_LOCALLY
MODIFIER_TYPE_MOBILE_APP_OR_OTHER_IOT_TECHNOLOGY

u3c_credential_type_#

u3c_credential_type_
Enumerator
CREDENTIAL_TYPE_NONE
CREDENTIAL_TYPE_PIN_CODE
CREDENTIAL_TYPE_PASSWORD
CREDENTIAL_TYPE_RFID_CODE
CREDENTIAL_TYPE_BLE
CREDENTIAL_TYPE_NFC
CREDENTIAL_TYPE_UWB
CREDENTIAL_TYPE_EYE_BIOMETRIC
CREDENTIAL_TYPE_FACE_BIOMETRIC
CREDENTIAL_TYPE_FINGER_BIOMETRIC
CREDENTIAL_TYPE_HAND_BIOMETRIC
CREDENTIAL_TYPE_UNSPECIFIED_BIOMETRIC
CREDENTIAL_TYPE_NUMBER_OF_TYPES

_u3c_credential_report_type_t_#

_u3c_credential_report_type_t_
Enumerator
CREDENTIAL_REP_TYPE_ADDED
CREDENTIAL_REP_TYPE_MODIFIED
CREDENTIAL_REP_TYPE_DELETED
CREDENTIAL_REP_TYPE_UNCHANGED
CREDENTIAL_REP_TYPE_RESPONSE_TO_GET
CREDENTIAL_REP_TYPE_ADD_AGAINST_OCCUPIED
CREDENTIAL_REP_TYPE_MODIF_AGAINST_EMPTY
CREDENTIAL_REP_TYPE_DUPLICATE
CREDENTIAL_REP_TYPE_MANUFACTURER_SECURITY_RULES
CREDENTIAL_REP_TYPE_WRONG_UUID
CREDENTIAL_REP_TYPE_DUPLICATE_ADMIN_PIN_CODE

u3c_credential_learn_status_#

u3c_credential_learn_status_
Enumerator
CL_STATUS_STARTED
CL_STATUS_SUCCESS
CL_STATUS_ALREADY_IN_PROGRESS
CL_STATUS_ENDED_NOT_DUE_TO_TIMEOUT
CL_STATUS_TIMEOUT
CL_STATUS_STEP_RETRY
CL_STATUS_INVALID_ADD_OPERATION_TYPE
CL_STATUS_INVALID_MODIFY_OPERATION_TYPE

u3c_user_credential_association_report_status_t#

u3c_user_credential_association_report_status_t
Enumerator
U3C_UCAR_STATUS_SUCCESS
U3C_UCAR_STATUS_CREDENTIAL_TYPE_INVALID
U3C_UCAR_STATUS_SOURCE_CREDENTIAL_SLOT_INVALID
U3C_UCAR_STATUS_SOURCE_CREDENTIAL_SLOT_EMPTY
U3C_UCAR_STATUS_DESTINATION_USER_UNIQUE_IDENTIFIER_INVALID
U3C_UCAR_STATUS_DESTINATION_USER_UNIQUE_IDENTIFIER_NONEXISTENT
U3C_UCAR_STATUS_DESTINATION_CREDENTIAL_SLOT_INVALID
U3C_UCAR_STATUS_DESTINATION_CREDENTIAL_SLOT_OCCUPIED

u3c_user_report_type_t_#

u3c_user_report_type_t_
Enumerator
USER_REP_TYPE_ADDED
USER_REP_TYPE_MODIFIED
USER_REP_TYPE_DELETED
USER_REP_TYPE_UNCHANGED
USER_REP_TYPE_RESPONSE_TO_GET
USER_REP_TYPE_ADD_AGAINST_OCCUPIED
USER_REP_TYPE_MODIF_AGAINST_EMPTY
USER_REP_TYPE_Z_EXP_MIN_INVALID

u3c_user_type_#

u3c_user_type_
Enumerator
USER_TYPE_GENERAL
USER_TYPE_PROGRAMMING
USER_TYPE_NON_ACCESS
USER_TYPE_DURESS
USER_TYPE_DISPOSABLE
USER_TYPE_EXPIRING
USER_TYPE_REMOTE_ONLY
USER_TYPE_END

u3c_credential_rule_#

u3c_credential_rule_
Enumerator
CREDENTIAL_RULE_SINGLE
CREDENTIAL_RULE_DUAL
CREDENTIAL_RULE_TRIPLE

u3c_user_name_encoding_#

u3c_user_name_encoding_
Enumerator
USER_NAME_ENCODING_STANDARD_ASCII
USER_NAME_ENCODING_STANDARD_AND_OEM_EXTENDED_ASCII
USER_NAME_ENCODING_UNICODE_UTF_16

_u3c_admin_code_operation_result_#

_u3c_admin_code_operation_result_

This operation result can optionally be injected into an Admin Code Report to pass information back to the controlling node, in lieu of another report type.

Reports MUST be sent for Get operations, but MAY be sent for Set operations.

See specification for more requirement details.

Enumerator
ADMIN_CODE_OPERATION_RESULT_MODIFIED

Admin Code was modified (Set, External).

ADMIN_CODE_OPERATION_RESULT_UNMODIFIED

Admin code was not modified as current code was identical.

ADMIN_CODE_OPERATION_RESULT_GET_RESP

Default response, or response to successful Get.

ADMIN_CODE_OPERATION_RESULT_FAIL_DUPLICATE_CRED

Admin Code was not modified (Set) due to duplicate existing PIN code credential.

ADMIN_CODE_OPERATION_RESULT_FAIL_MANUF_RULE

Admin Code was not modified (Set) due to a manufacturer security rule.

ADMIN_CODE_OPERATION_RESULT_ERROR_AC_NOT_SUPPORTED

Failed due to Admin Code not being supported (Get/Set).

ADMIN_CODE_OPERATION_RESULT_ERROR_ACD_NOT_SUPPORTED

Failed due to Admin Code Deactivation not being supported (Set).

ADMIN_CODE_OPERATION_RESULT_ERROR_NODE

Failed due to unspecified node error.

ADMIN_CODE_OPERATION_RESULT_INTERNAL_DUPLICATE_AC

Internal validation result; Code is the same as the current admin code.

ADMIN_CODE_OPERATION_RESULT_INTERNAL_NONE

Internal validation result; No error.

ADMIN_CODE_OPERATION_RESULT_INTERNAL_INVALID_LENGTH

Internal validation result; Code has an invalid length.

ADMIN_CODE_OPERATION_RESULT_INTERNAL_INVALID_CHAR

Internal validation result; Code has one or more invalid characters.


u3c_operation_type_t#

u3c_operation_type_t
Enumerator
U3C_OPERATION_TYPE_ADD
U3C_OPERATION_TYPE_MODIFY
U3C_OPERATION_TYPE_DELETE

u3c_event_#

u3c_event_
Enumerator
CC_USER_CREDENTIAL_EVENT_VALIDATE

Application is requesting a Credential to be validated.

CC_USER_CREDENTIAL_EVENT_VALIDATE_VALID

Credential found and User has sufficient rights.

CC_USER_CREDENTIAL_EVENT_VALIDATE_INVALID

Credential not found or User has insufficient rights.

CC_USER_CREDENTIAL_EVENT_LEARN_START_REQUEST

Application is requesting to start Credential Learn.

CC_USER_CREDENTIAL_EVENT_LEARN_START

Credential Learn process started.

CC_USER_CREDENTIAL_EVENT_LEARN_STEP_START

Application progressed to new Credential Learn step.

CC_USER_CREDENTIAL_EVENT_LEARN_READ_DONE

Credential data is ready to be entered into the database.

CC_USER_CREDENTIAL_EVENT_LEARN_SUCCESS

Credential has been accepted into the database.

CC_USER_CREDENTIAL_EVENT_LEARN_FAILED
CC_USER_CREDENTIAL_EVENT_LEARN_STEP_RETRY

Local Credential read failed, trying to read again.

CC_USER_CREDENTIAL_EVENT_LEARN_TIMEOUT

Credential Learn step timed out.

CC_USER_CREDENTIAL_EVENT_LEARN_CANCEL_REMOTE

Remote node cancelled Credential Learn process.

CC_USER_CREDENTIAL_EVENT_LEARN_CANCEL_LOCAL

Application cancelled Credential Learn process.


Typedef Documentation#

u3c_db_operation_result#

typedef enum u3c_db_operation_result_ u3c_db_operation_result

u3c_modifier_type#

typedef enum u3c_modifier_type_ u3c_modifier_type

u3c_credential_type#

typedef enum u3c_credential_type_ u3c_credential_type

u3c_credential_report_type_t#

typedef enum _u3c_credential_report_type_t_ u3c_credential_report_type_t

u3c_credential_learn_status#

typedef enum u3c_credential_learn_status_ u3c_credential_learn_status

u3c_user_report_type_t#

typedef enum u3c_user_report_type_t_ u3c_user_report_type_t

u3c_user_type#

typedef enum u3c_user_type_ u3c_user_type

u3c_credential_rule#

typedef enum u3c_credential_rule_ u3c_credential_rule

u3c_user_name_encoding#

typedef enum u3c_user_name_encoding_ u3c_user_name_encoding

u3c_admin_code_operation_result#

typedef enum _u3c_admin_code_operation_result_ u3c_admin_code_operation_result

This operation result can optionally be injected into an Admin Code Report to pass information back to the controlling node, in lieu of another report type.

Reports MUST be sent for Get operations, but MAY be sent for Set operations.

See specification for more requirement details.


u3c_user#

typedef struct u3c_user_ u3c_user

u3c_credential_metadata#

typedef struct u3c_credential_metadata_ u3c_credential_metadata

u3c_credential#

typedef struct u3c_credential_ u3c_credential

u3c_credential_identifier#

typedef struct u3c_credential_identifier_ u3c_credential_identifier

u3c_event_data_validate#

typedef struct u3c_event_data_validate_ u3c_event_data_validate

Payload for CC_USER_CREDENTIAL_EVENT_VALIDATE, received from the application.


u3c_event_data_learn_read_done#

typedef struct u3c_event_data_learn_read_done_ u3c_event_data_learn_read_done

Payload for CC_USER_CREDENTIAL_EVENT_LEARN_READ_DONE, passed to the application.


u3c_credential_learn_event_data#

typedef struct u3c_credential_learn_event_data_ u3c_credential_learn_event_data

Credential Learn information passed to application layer.


u3c_admin_code_metadata_t#

typedef struct u3c_admin_code_metadata_ u3c_admin_code_metadata_t

u3c_event_type#

typedef enum u3c_event_ u3c_event_type

Function Documentation#

CC_UserCredential_factory_reset#

void CC_UserCredential_factory_reset (void )

Resets the User Credential Command Class database to a blank state, removing all existing users, credentials and the admin code.

Parameters
TypeDirectionArgument NameDescription
voidN/A

CC_UserCredential_init_database#

void CC_UserCredential_init_database (void )

Initializes the User Credential Command Class database to a consistent state.

Parameters
TypeDirectionArgument NameDescription
voidN/A

This function is called automatically by the Z-Wave Application Framework when the application starts.


CC_UserCredential_get_user#

u3c_db_operation_result CC_UserCredential_get_user (uint16_t unique_identifier, u3c_user * user, uint8_t * name)

Copies the data for a given User from the database to an arbitrary location in memory.

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]unique_identifier

Unique Identifier of the requested User

u3c_user *[out]user

The memory location where the User data will be copied, or NULL if not requested

uint8_t *[out]name

The memory location where the User name will be copied, or NULL if not requested. If not NULL, user cannot be NULL either.

Returns

  • the result of the operation


CC_UserCredential_get_next_user#

uint16_t CC_UserCredential_get_next_user (uint16_t unique_identifier)

Finds the first or next available User Unique Identifier.

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]unique_identifier

Unique Identifier of the current User, or 0 if the first available User Unique Identifier is requested

Returns

  • The Unique Identifier of the next User if available, otherwise 0


CC_UserCredential_add_user#

u3c_db_operation_result CC_UserCredential_add_user (u3c_user * user, uint8_t * name)
Parameters
TypeDirectionArgument NameDescription
u3c_user *N/Auser
uint8_t *N/Aname

CC_UserCredential_modify_user#

u3c_db_operation_result CC_UserCredential_modify_user (u3c_user * user, uint8_t * name)

Modifies a user in the database.

Parameters
TypeDirectionArgument NameDescription
u3c_user *[in]user

Pointer to the user's new metadata

uint8_t *[in]name

Pointer to the user's new name (set to NULL to keep old name)


CC_UserCredential_delete_user#

u3c_db_operation_result CC_UserCredential_delete_user (uint16_t user_unique_identifier)
Parameters
TypeDirectionArgument NameDescription
uint16_tN/Auser_unique_identifier

CC_UserCredential_get_credential#

u3c_db_operation_result CC_UserCredential_get_credential (uint16_t user_unique_identifier, u3c_credential_type credential_type, uint16_t credential_slot, u3c_credential_metadata * credential_metadata, uint8_t * credential_data)

Copies the data for a given Credential from the database to an arbitrary location in memory.

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]user_unique_identifier

Unique Identifier of the Credential's associated User (0 matches any UUID)

u3c_credential_type[in]credential_type

Type of the requested Credential

uint16_t[in]credential_slot

Slot of the requested Credential

u3c_credential_metadata *[out]credential_metadata

The memory location where the Credential metadata will be copied, or NULL if not requested

uint8_t *[out]credential_data

The memory location where the Credential data will be copied, or NULL if not requested

Returns

  • the result of the operation


CC_UserCredential_get_next_credential#

bool CC_UserCredential_get_next_credential (uint16_t user_unique_identifier, u3c_credential_type credential_type, uint16_t credential_slot, u3c_credential_type * next_credential_type, uint16_t * next_credential_slot)

Finds the first or next available Credential entry for a given User or Credential Type (set either one of these parameters to 0 to disable filtering by that property).

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]user_unique_identifier

Unique Identifier of the Credential's associated User (0 matches any UUID)

u3c_credential_type[in]credential_type

Type of the current Credential (0 matches any Credential Type)

uint16_t[in]credential_slot

Slot of the current Credential (0 to get the first available Credential)

u3c_credential_type *[out]next_credential_type

Type of the next available Credential, if available

uint16_t *[out]next_credential_slot

Slot of the next available Credential, if available

Set credential_slot to 0 to get the first available Credential matching the filter criteria.

Returns

  • true if a subsequent Credential matching the criteria is found


CC_UserCredential_add_credential#

u3c_db_operation_result CC_UserCredential_add_credential (u3c_credential * credential)

Adds a new credential to the database.

Parameters
TypeDirectionArgument NameDescription
u3c_credential *[in]credential

Pointer to the credential to be added

Returns

  • The result of the operation


CC_UserCredential_modify_credential#

u3c_db_operation_result CC_UserCredential_modify_credential (u3c_credential * credential)
Parameters
TypeDirectionArgument NameDescription
u3c_credential *N/Acredential

CC_UserCredential_delete_credential#

u3c_db_operation_result CC_UserCredential_delete_credential (u3c_credential_type credential_type, uint16_t credential_slot, credential_slot)

Deletes a Credential.

Parameters
TypeDirectionArgument NameDescription
u3c_credential_type[in]credential_type

Unique Identifier of the Credential's associated User (0 matches any UUID)

uint16_t[in]credential_slot

Type of the current Credential

[in]credential_slot

Slot of the current Credential

Returns

  • the result of the operation


CC_UserCredential_move_credential#

u3c_db_operation_result CC_UserCredential_move_credential (u3c_credential_type credential_type, uint16_t source_credential_slot, uint16_t destination_user_uid, uint16_t destination_credential_slot)

Moves a credential from one slot to another and/or assigns a credential from one User Unique Identifier to another one.

Parameters
TypeDirectionArgument NameDescription
u3c_credential_type[in]credential_type

Type of the credential

uint16_t[in]source_credential_slot

Slot of the credential to be moved

uint16_t[in]destination_user_uid

The new desired UUID to assign the credential to

uint16_t[in]destination_credential_slot

The new desired slot number for the credential


CC_UserCredential_get_admin_code_info#

u3c_db_operation_result CC_UserCredential_get_admin_code_info (u3c_admin_code_metadata_t * code)

Retrieves the admin code information from the node.

Parameters
TypeDirectionArgument NameDescription
u3c_admin_code_metadata_t *[out]code

Admin Code information. If Admin Code is not supported, the struct will be fully zeroed out upon return.

Can be used to ensure node supports the functionality.

Returns

  • U3C_DB_OPERATION_SUCCESS if successful

  • U3C_DB_OPERATION_ERROR otherwise


CC_UserCredential_set_admin_code#

u3c_db_operation_result CC_UserCredential_set_admin_code (u3c_admin_code_metadata_t * code)

Sets the admin code on the node, if supported.

Parameters
TypeDirectionArgument NameDescription
u3c_admin_code_metadata_t *[in]code

Admin Code information to apply to node

Returns

  • U3C_DB_OPERATION_ERROR_DUPLICATE if Admin Code is a duplicate of an existing PIN Code or Admin Code

  • U3C_OPERATION_SUCCESS if successful

  • U3C_OPERATION_ERROR otherwise


CC_UserCredential_add_user_and_report#

u3c_db_operation_result CC_UserCredential_add_user_and_report (u3c_user * p_user, uint8_t * p_name, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Tries to add a new user to the database and reports the result.

Parameters
TypeDirectionArgument NameDescription
u3c_user *[in]p_user

Pointer to the new user's metadata

uint8_t *[in]p_name

Pointer to the new user's name

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the details of the received frame

Returns

  • The result of the operation


CC_UserCredential_modify_user_and_report#

u3c_db_operation_result CC_UserCredential_modify_user_and_report (u3c_user * p_user, uint8_t * p_name, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Tries to modify a user in the database and reports the result.

Parameters
TypeDirectionArgument NameDescription
u3c_user *[in]p_user

Pointer to the user's new metadata

uint8_t *[in]p_name

Pointer to the new user's new name

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the details of the received frame

Returns

  • The result of the operation


CC_UserCredential_delete_user_and_report#

u3c_db_operation_result CC_UserCredential_delete_user_and_report (uint16_t uuid, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Tries to delete a user from the database and reports the result.

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]uuid

The target user's unique identifier or 0 to delete all users.

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the details of the received frame

Returns

  • The result of the operation


CC_UserCredential_add_credential_and_report#

u3c_db_operation_result CC_UserCredential_add_credential_and_report (u3c_credential * p_credential, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Tries to add a new credential to the database and reports the result.

Parameters
TypeDirectionArgument NameDescription
u3c_credential *[in]p_credential

Pointer to the new credential

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the details of the received frame

Returns

  • The result of the operation


CC_UserCredential_modify_credential_and_report#

u3c_db_operation_result CC_UserCredential_modify_credential_and_report (u3c_credential * p_credential, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Tries to modify a credential in the database and reports the result.

Parameters
TypeDirectionArgument NameDescription
u3c_credential *[in]p_credential

Pointer to the credential with the new desired data

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the details of the received frame

Returns

  • The result of the operation


CC_UserCredential_delete_credential_and_report#

u3c_db_operation_result CC_UserCredential_delete_credential_and_report (uint16_t uuid, u3c_credential_type credential_type, uint16_t credential_slot, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Tries to delete a credential from the database and reports the result.

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]uuid

The UUID that the credentials are assigned to (only used for bulk operations), 0 to disable filtering by user

u3c_credential_type[in]credential_type

Type of the target credential

uint16_t[in]credential_slot

Slot of the target credential, or 0 for all credentials

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the details of the received frame

Returns

  • The result of the operation


CC_UserCredential_move_credential_and_report#

u3c_db_operation_result CC_UserCredential_move_credential_and_report (u3c_credential_type credential_type, uint16_t source_credential_slot, uint16_t destination_uuid, uint16_t destination_credential_slot, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Tries to assign a credential to a different slot or user.

Parameters
TypeDirectionArgument NameDescription
u3c_credential_type[in]credential_type

Type of the credential

uint16_t[in]source_credential_slot

Slot of the original credential

uint16_t[in]destination_uuid

New desired UUID to assign the credential to

uint16_t[in]destination_credential_slot

New desired slot number for the credential

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the details of the received frame

Returns

  • The result of the operation


CC_UserCredential_send_association_report#

bool CC_UserCredential_send_association_report (u3c_credential_metadata const *const p_source_metadata, u3c_credential_metadata const *const p_destination_metadata, u3c_user_credential_association_report_status_t const status, RECEIVE_OPTIONS_TYPE_EX *const p_rx_options, status, p_rx_options)

Sends a USER_CREDENTIAL_ASSOCIATION_REPORT frame.

Parameters
TypeDirectionArgument NameDescription
u3c_credential_metadata const *const[out]p_source_metadata

Address of frame memory to fill.

u3c_credential_metadata const *const[inout]p_destination_metadata

Frame buffer length. Will be overwritten with the filled frame length.

u3c_user_credential_association_report_status_t const[in]status

Source credential metadata.

RECEIVE_OPTIONS_TYPE_EX *const[in]p_rx_options

Destination credential metadata.

[in]status

Status of association set action.

[in]p_rx_options

Pointer to the details of the received frame.

Returns

  • true if the frame was enqueued succesfully.


CC_UserCredential_delete_all_credentials_of_type#

void CC_UserCredential_delete_all_credentials_of_type (uint16_t uuid, u3c_credential_type filter_type)

Deletes all Credentials of a given type for a User.

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]uuid

User Unique Identifier

u3c_credential_type[in]filter_type

The type of Credentials to delete, set this to CREDENTIAL_TYPE_NONE to delete every Credential


CC_UserCredential_manufacturer_validate_credential#

bool CC_UserCredential_manufacturer_validate_credential (u3c_credential * credential)

Validates a Credential according to the manufacturer's security rules.

Parameters
TypeDirectionArgument NameDescription
u3c_credential *N/Acredential

Returns

  • True if the Credential conforms to the security rules


CC_UserCredential_manufacturer_validate_admin_pin_code#

bool CC_UserCredential_manufacturer_validate_admin_pin_code (u3c_admin_code_metadata_t * code)

Validates the following conditions and requirements: CC:0083.01.1A.11.011 - Code follows all manufacturer security rules.

Parameters
TypeDirectionArgument NameDescription
u3c_admin_code_metadata_t *N/Acode

Pointer to structure containing Admin Code information.

Should not be called if AC is not supported.

Returns

  • True if all checks pass. If checks do not pass, returns false, and result code populated in code struct.

Note

  • result code of a successful check should be ignored, but in practice ensure it is set to ADMIN_CODE_OPERATION_RESULT_NONE in this case.


CC_UserCredential_UserReport_tx#

void CC_UserCredential_UserReport_tx (const u3c_user_report_type_t report_type, const u3c_user *const p_user, const uint8_t *const p_name, const uint16_t next_uuid, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Sends one or more User Report frames to the appropriate destinations depending on the type of the report.

Parameters
TypeDirectionArgument NameDescription
const u3c_user_report_type_t[in]report_type

The type of report to send

const u3c_user *const[in]p_user

Pointer to the User metadata

const uint8_t *const[in]p_name

Pointer to the User Name

const uint16_t[in]next_uuid

The UUID of the next User

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the properties of the incoming frame


CC_UserCredential_CredentialReport_tx#

void CC_UserCredential_CredentialReport_tx (const u3c_credential_report_type_t report_type, const u3c_credential * p_credential, const u3c_credential_type next_credential_type, const uint16_t next_credential_slot, RECEIVE_OPTIONS_TYPE_EX * p_rx_options)

Sends one or more Credential Report frames to the appropriate destinations depending on the type of the report.

Parameters
TypeDirectionArgument NameDescription
const u3c_credential_report_type_t[in]report_type

The type of report to send

const u3c_credential *[in]p_credential

Pointer to the metadata and content of the credential

const u3c_credential_type[in]next_credential_type

The type of the next credential

const uint16_t[in]next_credential_slot

The slot number of the next credential

RECEIVE_OPTIONS_TYPE_EX *[in]p_rx_options

Pointer to the properties of the incoming frame


CC_User_Credential_UsageNotification_tx#

JOB_STATUS CC_User_Credential_UsageNotification_tx (const uint8_t notification_event, const uint16_t uuid, const uint8_t credential_count, const u3c_credential_metadata *const p_credential_metadata)

Sends a Notification Report frame with Event/State parameters containing the Credential Usage Data.

Parameters
TypeDirectionArgument NameDescription
const uint8_t[in]notification_event

The type of notification to send

const uint16_t[in]uuid

The unique identifier of the user

const uint8_t[in]credential_count

The number of credentials in the notification

const u3c_credential_metadata *const[in]p_credential_metadata

Pointer to the metadata of the credentials

Returns

  • Whether the transmission was successful