Bluetooth is a registered trademark of Bluetooth SIG, Inc.
All trademarks are the property of their respective owners.
The CC2564C device is TI’s third generation of the CC2564 dual mode Bluetooth® and Bluetooth Low Energy single-chip solution compliant with Bluetooth 5.1. Bluetooth 5.1 support is implemented in TI Dual-Mode Bluetooth stack. For detailed features, performance, and functionality of the CC2564C device, see the respective documents:
The CC2564C device is pin compatible to the CC2564B device.
Any design (schematics and layout) for the CC2564B device is compatible with the CC2564C device.
The only BOM difference is the different generic part number for the CC2564C device is replacing the CC2564B device.
QDID links:
When migrating from CC2564B to CC2564C, the host stack must be upgraded to support CC2564C even if the BT5.1 features of CC2564C are not used. Additionally, the host stack must use the appropriate device-specific service pack for initialization.
Following are the TI dual-mode Bluetooth stack releases compatible with CC2564C.
The low-energy secure connections feature introduces a new security model. The feature uses an Elliptic Curve Diffie Hellman (ECDH) algorithm for key generation, and it uses a new pairing procedure for the key exchange. This feature raises the bar and helps solve man-in-the-middle issues and other passive eavesdropping mechanisms.
Changes are marked in RED text.
int BTPSAPI GAP_LE_Request_Security (
unsigned int BluetoothStackID,
BD_ADDR_t BD_ADDR,
GAP_LE_Bonding_Type_t Bonding_Type,
Boolean_t MITM,
Boolean_t SC,Boolean_t Keypress,Boolean_t P256Debug,
GAP_LE_Event_Callback_t GAP_LE_Event_Callback,
unsigned long CallbackParameter)
int BTPSAPI GAP_LE_SC_OOB_Generate_Parameters( unsigned int BluetoothStackID,
SM_Random_Value_t *OOB_Local_Rand_Result, SM_Confirm_Value_t *OOB_Local_Confirm_Result) int BTPSAPI GAP_LE_SC_Send_Keypress_Notification(
unsigned int BluetoothStackID, BD_ADDR_t BD_ADDR, GAP_LE_Keypress_t *Keypress_Notification_Type) int
BTPSAPI GAP_LE_SC_Only_Mode( unsigned int BluetoothStackID, Boolean_t EnableSCOnly) int BTPSAPI GAP_LE_SC_Regenerate_P256_Local_Keys(
unsigned int BluetoothStackID)
typedef struct _tagGAP_LE_Pairing_Capabilities_t
{
GAP_LE_IO_Capability_t IO_Capability;
Boolean_t OOB_Present;
GAP_LE_Bonding_Type_t Bonding_Type;
Boolean_t MITM; Boolean_t SC; Boolean_t Keypress; Boolean_t P256DebugMode; Byte_t Maximum_Encryption_Key_Size;
GAP_LE_Key_Distribution_t Receiving_Keys;
GAP_LE_Key_Distribution_t Sending_Keys;
} GAP_LE_Pairing_Capabilities_t;
typedef struct _tagGAP_LE_SC_OOB_Data_t { SM_Random_Value_t RemoteRand;
SM_Confirm_Value_t RemoteConfirmation; } GAP_LE_SC_OOB_Data_t;
typedef struct _tagGAP_LE_Authentication_Response_Information_t
{
GAP_LE_Authentication_Response_Type_t GAP_LE_Authentication_Type;
Byte_t Authentication_Data_Length;
union
{
GAP_LE_Long_Term_Key_Information_t Long_Term_Key_Information;
GAP_LE_Pairing_Capabilities_t Pairing_Capabilities;
GAP_LE_OOB_Data_t Out_Of_Band_Data;
DWord_t Passkey;
Boolean_t AcceptedNumericValue; GAP_LE_SC_OOB_Data_t SC_Out_Of_Band_Data;
Byte_t Error_Code;
GAP_LE_Encryption_Information_t Encryption_Information;
GAP_LE_Identity_Information_t Identity_Information;
GAP_LE_Signing_Information_t Signing_Information;
} Authentication_Data;
} GAP_LE_Authentication_Response_Information_t;
typedef struct _tagGAP_LE_Slave_Security_Information_t
{
GAP_LE_Bonding_Type_t Bonding_Type;
Boolean_t MITM;
Boolean_t SC; Boolean_t Keypress; Boolean_t P256DebugMode;
} GAP_LE_Slave_Security_Information_t;
typedef struct _tagGAP_LE_Encryption_Change_Event_Data_t
{
BD_ADDR_t BD_ADDR;
Byte_t Encryption_Change_Status;
GAP_Encryption_Mode_t Encryption_Mode;
Boolean_t SC; Long_Term_Key_t LTK; Boolean_t Reestablish; Byte_t Encryption_Key_Size;
} GAP_LE_Encryption_Change_Event_Data_t;
typedef struct _tagGAP_LE_Authentication_Event_Data_t
{
GAP_LE_Authentication_Event_Type_t GAP_LE_Authentication_Event_Type;
BD_ADDR_t BD_ADDR;
union
{
GAP_LE_Key_Request_Info_t Long_Term_Key_Request;
GAP_LE_Pairing_Capabilities_t Pairing_Request;
GAP_LE_Security_Request_t Security_Request;
GAP_LE_Confirmation_Request_t Confirmation_Request;
GAP_LE_Pairing_Status_t Pairing_Status;
GAP_LE_Encryption_Request_Information_t Encryption_Request_Information;
GAP_LE_Encryption_Information_t Encryption_Information;
GAP_LE_Identity_Information_t Identity_Information;
GAP_LE_Signing_Information_t Signing_Information;
GAP_LE_Security_Establishment_Complete_t Security_Establishment_Complete;
GAP_LE_Keypress_t Keypress_Type;
} Authentication_Event_Data;
} GAP_LE_Authentication_Event_Data_t;
typedef struct _tagGAP_LE_Security_Request_t
{
GAP_LE_Bonding_Type_t Bonding_Type;
Boolean_t MITM;
Boolean_t SC; Boolean_t Keypress;
} GAP_LE_Security_Request_t;
typedef enum
{
larLongTermKey,
larOutOfBandData,
larPairingCapabilities,
larPasskey,
larUserConfirmation,
larConfirmation,
larError,
larEncryptionInformation,
larIdentityInformation,
larSigningInformation
} GAP_LE_Authentication_Response_Type_t;
typedef
enum
{
latLongTermKeyRequest,
latSecurityRequest,
latPairingRequest,
latKeypressNotification,
latConfirmationRequest,
latPairingStatus,
latEncryptionInformationRequest,
latIdentityInformationRequest,
latSigningInformationRequest,
latEncryptionInformation,
latIdentityInformation,
latSigningInformation,
latSecurityEstablishmentComplete
} GAP_LE_Authentication_Event_Type_t;
typedef
enum
{
crtNone,
crtNumeric,
crtPasskey,
crtDisplay,
crtOOB
} GAP_LE_Confirmation_Request_Type_t;
#define GAP_LE_PAIRING_STATUS_DHKEY_CHECK_FAILED 0x0E #define GAP_LE_PAIRING_STATUS_NUMERIC_COMPARISON_FAILED
0x0F
BTPSAPI_DECLARATION int BTPSAPI HCI_Read_Authenticated_Payload_Timeout(
unsigned int BluetoothStackID, Word_t Connection_Handle, Byte_t *StatusResult, Word_t *Connection_HandleResult,
Word_t *Authenticated_Payload_TimeoutResult);
BTPSAPI_DECLARATION int BTPSAPI HCI_Write_Authenticated_Payload_Timeout(
unsigned int BluetoothStackID, Word_t Connection_Handle, Word_t Authenticated_Payload_Timeout, Byte_t
*StatusResult, Word_t *Connection_HandleResult);
BTPSAPI_DECLARATION int BTPSAPI HCI_Read_Extended_Page_Timeout( unsigned
int BluetoothStackID, Byte_t *StatusResult, Word_t *Extended_Page_TimeoutResult);
BTPSAPI_DECLARATION int BTPSAPI HCI_Write_Extended_Page_Timeout( unsigned
int BluetoothStackID, Word_t Extended_Page_Timeout, Byte_t *StatusResult);
BTPSAPI_DECLARATION int BTPSAPI HCI_Read_Extended_Inquiry_Length( unsigned
int BluetoothStackID, Byte_t *StatusResult, Word_t *Extended_Inquiry_LengthResult);
BTPSAPI_DECLARATION int BTPSAPI HCI_Write_Extended_Inquiry_Length(
unsigned int BluetoothStackID, Word_t Extended_Inquiry_Length, Byte_t *StatusResult);
int BTPSAPI HCI_Write_Secure_Connections_Test_Mode( unsigned int BluetoothStackID,
Word_t Connection_Handle, Byte_t DM1_ACLU_Mode, Byte_t ESCO_Loopback_Mode, Byte_t *StatusResult, Word_t
*Connection_HandleResult)
BTPSAPI_DECLARATION int BTPSAPI HCI_LE_Remote_Connection_Parameter_Request_Reply(
unsigned int BluetoothStackID, Word_t Connection_Handle, Word_t Conn_Interval_Min, Word_t Conn_Interval_Max,
Word_t Conn_Latency, Word_t Supervision_Timeout, Word_t Minimum_CE_Length, Word_t Maximum_CE_Length,
Byte_t *StatusResult, Word_t *Connection_HandleResult);
BTPSAPI_DECLARATION int BTPSAPI HCI_LE_Remote_Connection_Parameter_Request_Negative_Reply(
unsigned int BluetoothStackID, Word_t Connection_Handle, Byte_t Reason, Byte_t *StatusResult, Word_t
*Connection_HandleResult);
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_Read_Authenticated_Payload_Timeout_Command_t
{ HCI_Command_Header_t HCI_Command_Header; NonAlignedWord_t Connection_Handle; } __PACKED_STRUCT_END__
HCI_Read_Authenticated_Payload_Timeout_Command_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_Write_Authenticated_Payload_Timeout_Command_t
{ HCI_Command_Header_t HCI_Command_Header; NonAlignedWord_t Connection_Handle; NonAlignedWord_t Authenticated_Payload_Timeout;
} __PACKED_STRUCT_END__ HCI_Write_Authenticated_Payload_Timeout_Command_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_LE_Remote_Connection_Parameter_Request_Reply_Command_t
{ HCI_Command_Header_t HCI_Command_Header; NonAlignedWord_t Connection_Handle; NonAlignedWord_t Interval_Min;
NonAlignedWord_t Interval_Max; NonAlignedWord_t Latency; NonAlignedWord_t Timeout; NonAlignedWord_t Minimum_CE_Length;
NonAlignedWord_t Maximum_CE_Length; } __PACKED_STRUCT_END__ HCI_LE_Remote_Connection_Parameter_Request_Reply_Command_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_LE_Remote_Connection_Parameter_Request_Negative_Reply_Command_t
{ HCI_Command_Header_t HCI_Command_Header; NonAlignedWord_t Connection_Handle; Byte_t Reason; } __PACKED_STRUCT_END__
HCI_LE_Remote_Connection_Parameter_Request_Negative_Reply_Command_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_LE_Remote_Connection_Parameter_Request_Event_t
HCI_LE_Meta_Event_Header_t HCI_LE_Meta_Event_Header; NonAlignedWord_t Connection_Handle; NonAlignedWord_t
Conn_Interval_Min; NonAlignedWord_t Conn_Interval_Max; NonAlignedWord_t Conn_Latency; NonAlignedWord_t
Supervision_Timeout; } __PACKED_STRUCT_END__ HCI_LE_Remote_Connection_Parameter_Request_Event_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_Authenticated_Payload_Timeout_Expired_Event_t
{ HCI_Event_Header_t HCI_Event_Header; NonAlignedWord_t Connection_Handle; } __PACKED_STRUCT_END__ HCI_Authenticated_Payload_Timeout_Expired_Event_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_Read_Authenticated_Payload_Timeout_Command_Complete_Event_t
{ HCI_Command_Complete_Event_Header_t HCI_Event_Header; Byte_t Status; NonAlignedWord_t Connection_Handle;
NonAlignedWord_t Authenticated_Payload_Timeout; } __PACKED_STRUCT_END__ HCI_Read_Authenticated_Payload_Timeout_Command_Complete_Event_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_Write_Authenticated_Payload_Timeout_Command_Complete_Event_t
{ HCI_Command_Complete_Event_Header_t HCI_Event_Header; Byte_t Status; NonAlignedWord_t Connection_Handle;
} __PACKED_STRUCT_END__ HCI_Write_Authenticated_Payload_Timeout_Command_Complete_Event_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_LE_Remote_Connection_Parameter_Request_Reply_Command_Complete_t
{ HCI_Command_Complete_Event_Header_t HCI_Event_Header; Byte_t Status; NonAlignedWord_t Connection_Handle;
} __PACKED_STRUCT_END__ HCI_LE_Remote_Connection_Parameter_Request_Reply_Command_Complete_t;
typedef __PACKED_STRUCT_BEGIN__ struct _tagHCI_LE_Remote_Connection_Parameter_Request_Negative_Reply_Command_Complete_t
{ HCI_Command_Complete_Event_Header_t HCI_Event_Header; Byte_t Status; NonAlignedWord_t Connection_Handle;
} __PACKED_STRUCT_END__ HCI_LE_Remote_Connection_Parameter_Request_Negative_Reply_Command_Complete_t;
typedef struct _tagHCI_LE_Remote_Connection_Parameter_Request_Event_Data_t
{ Word_t Connection_Handle; Word_t Conn_Interval_Min; Word_t Conn_Interval_Max; Word_t Conn_Latency;
Word_t Supervision_Timeout; } HCI_LE_Remote_Connection_Parameter_Request_Event_Data_t;
typedef struct _tagHCI_LE_Meta_Event_Data_t
HCI_LE_Meta_Event_Type_t LE_Event_Data_Type;
union
{
HCI_LE_Connection_Complete_Event_Data_t HCI_LE_Connection_Complete_Event_Data;
HCI_LE_Advertising_Report_Event_Data_t HCI_LE_Advertising_Report_Event_Data;
HCI_LE_Connection_Update_Complete_Event_Data_t HCI_LE_Connection_Update_Complete_Event_Data;
HCI_LE_Read_Remote_Used_Features_Complete_Event_Data_t HCI_LE_Read_Remote_Used_Features_Complete_Event_Data;
HCI_LE_Long_Term_Key_Request_Event_Data_t HCI_LE_Long_Term_Key_Request_Event_Data;
HCI_LE_Remote_Connection_Parameter_Request_Event_Data_t HCI_LE_Remote_Connection_Parameter_Request_Event_Data;
} Event_Data;
} HCI_LE_Meta_Event_Data_t;
typedef struct _tagHCI_Authenticated_Payload_Timeout_Expired_Event_Data_t
{ Word_t Connection_Handle; } HCI_Authenticated_Payload_Timeout_Expired_Event_Data_t;
typedef struct _tagHCI_Event_Data_t
{
HCI_Event_Type_t Event_Data_Type;
Word_t Event_Data_Size;
union
{
HCI_Inquiry_Complete_Event_Data_t *HCI_Inquiry_Complete_Event_Data;
HCI_Inquiry_Result_Event_Data_t *HCI_Inquiry_Result_Event_Data;
.
.
.
HCI_Triggered_Clock_Capture_Event_Data_t *HCI_Triggered_Clock_Capture_Event_Data;
HCI_Synchronization_Train_Complete_Event_Data_t *HCI_Synchronization_Train_Complete_Event_Data; HCI_Synchronization_Train_Received_Event_Data_t
*HCI_Synchronization_Train_Received_Event_Data; HCI_Connectionless_Slave_Broadcast_Receive_Event_Data_t
*HCI_Connectionless_Slave_Broadcast_Receive_Event_Data; HCI_Connectionless_Slave_Broadcast_Timeout_Event_Data_t
*HCI_Connectionless_Slave_Broadcast_Timeout_Event_Data; HCI_Truncated_Page_Complete_Event_Data_t *HCI_Truncated_Page_Complete_Event_Data;
HCI_Connectionless_Slave_Broadcast_Channel_Map_Change_Event_Data_t *HCI_Connectionless_Slave_Broadcast_Channel_Map_Change_Event_Data;
HCI_Inquiry_Response_Notification_Event_Data_t *HCI_Inquiry_Response_Notification_Event_Data; HCI_Authenticated_Payload_Timeout_Expired_Event_Data_t
*HCI_Authenticated_Payload_Timeout_Expired_Event_Data;
HCI_Platform_Specific_Event_Data_t *HCI_Platform_Specific_Event_Data;
void *HCI_Unknown_Event_Data;
} Event_Data;
} HCI_Event_Data_t;
#define HCI_ENABLE_ALL_HCI_LE_EVENTS_IN_EVENT_MASK(_x) \
{ \
ASSIGN_EVENT_MASK((_x), 0, 0, 0, 0, 0, 0, 0, 0); \
SET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_CONNECTION_COMPLETE_BIT_NUMBER); \
SET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_ADVERTISING_REPORT_BIT_NUMBER); \
SET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_CONNECTION_UPDATE_COMPLETE_BIT_NUMBER); \
SET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_READ_REMOTE_USED_FEATURES_COMPLETE_BIT_NUMBER); \
SET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_LONG_TERM_KEY_REQUEST_BIT_NUMBER); \
SET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_REMOTE_CONNECTION_PARAMETER_REQUEST_BIT_NUMBER);
\
#define HCI_DISABLE_ALL_HCI_LE_EVENTS_IN_EVENT_MASK(_x) \
{ \
ASSIGN_EVENT_MASK((_x), 0, 0, 0, 0, 0, 0, 0, 0); \
RESET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_CONNECTION_COMPLETE_BIT_NUMBER); \
RESET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_ADVERTISING_REPORT_BIT_NUMBER); \
RESET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_CONNECTION_UPDATE_COMPLETE_BIT_NUMBER); \
RESET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_READ_REMOTE_USED_FEATURES_COMPLETE_BIT_NUMBER); \
RESET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_LONG_TERM_KEY_REQUEST_BIT_NUMBER); \
RESET_EVENT_MASK_BIT((_x), HCI_LE_EVENT_MASK_REMOTE_CONNECTION_PARAMETER_REQUEST_BIT_NUMBER);
\
}
typedef enum
{
etInquiry_Complete_Event,
etInquiry_Result_Event,
.
.
.
etTriggered_Clock_Capture_Event, etSynchronization_Train_Complete_Event, etSynchronization_Train_Received_Event,
etConnectionless_Slave_Broadcast_Receive_Event, etConnectionless_Slave_Broadcast_Timeout_Event, etTruncated_Page_Complete_Event,
etSlave_Page_Response_Timeout_Event, etConnectionless_Slave_Broadcast_Channel_Map_Change_Event, etInquiry_Response_Notification_Event,
etAuthenticated_Payload_Timeout_Expired_Event
} HCI_Event_Type_t;
typedef enum
{
meConnection_Complete_Event, meAdvertising_Report_Event,
meConnection_Update_Complete_Event, meRead_Remote_Used_Features_Complete_Event, meLong_Term_Key_Request_Event,
meRemote_Connection_Parameter_Request_Event
} HCI_LE_Meta_Event_Type_t;
int BTPSAPI ISPP_Get_Configuration_Parameters( unsigned int BluetoothStackID,
ISPP_Configuration_Params_t *ISPPConfigurationParams)
int BTPSAPI ISPP_Set_Configuration_Parameters( unsigned int BluetoothStackID,
ISPP_Configuration_Params_t *ISPPConfigurationParams)
typedef struct _tagISPP_Configuration_Params_t
{
unsigned int RetransmitAttempts;
unsigned int PacketTimeout;
Word_t MaximumFrameSize;
unsigned int TransmitBufferSize;
unsigned int ReceiveBufferSize;
unsigned int MaxOutstandingPackets;
unsigned int MaxCumulativeAcks; unsigned int CumulativeAckTimeout;
unsigned int SessionTypesSupported;
Word_t SupportedMessages;
} ISPP_Configuration_Params_t;