Part Number: CC2640R2L
Hi Team,
I have two questions about encrypted pairing.
1. I have set the option after pairing to 'false' during the initial setup, but the device will still be automatically bound after the successful connection with the mobile phone. The code I set is as follows.
// Don't send a pairing request after connecting; the peer device must
//uint32_t passkey = 0; // passkey "000000"
// initiate pairing
uint8_t pairMode = GAPBOND_PAIRING_MODE_INITIATE;
// Use authenticated pairing: require passcode.
uint8_t mitm = TRUE;
// This device only has display capabilities. Therefore, it will display the
// passcode during pairing. However, since the default passcode is being
// used, there is no need to display anything.
uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;
// Request bonding (storing long-term keys for re-encryption upon subsequent
// connections without repairing)
uint8_t bonding = FALSE;
uint8_t gapbondSecure = GAPBOND_SECURE_CONNECTION_NONE;//GAPBOND_SECURE_CONNECTION_ONLY ;
GAPBondMgr_SetParameter(GAPBOND_SECURE_CONNECTION, sizeof(uint8_t), &gapbondSecure);
//GAPBondMgr_SetParameter(GAPBOND_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);
GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);
GAPBondMgr_SetParameter(GAPBOND_MITM_PROTECTION, sizeof(uint8_t), &mitm);
GAPBondMgr_SetParameter(GAPBOND_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);
GAPBondMgr_SetParameter(GAPBOND_BONDING_ENABLED, sizeof(uint8_t), &bonding);
2. I entered the key connection event after starting the configuration. According to my needs, if the connection key is entered incorrectly, the connection will be disconnected. But after I entered the wrong key, the device connected quickly instead. Is there something wrong with the code I have set up here?
I added a disconnect handler event in the event after pairing was completed.
/*********************************************************************
* @fn SimplePeripheral_processPairState
*
* @brief Process the new paring state.
*
* @return none
*/
static void SimplePeripheral_processPairState(spPairStateData_t *pPairData)
{
uint8_t state = pPairData->state;
uint8_t status = pPairData->status;
switch (state)
{
case GAPBOND_PAIRING_STATE_STARTED:
Display_printf(dispHandle, SP_ROW_CONNECTION, 0, "Pairing started");
break;
case GAPBOND_PAIRING_STATE_COMPLETE:
if (status == SUCCESS)
{
Display_printf(dispHandle, SP_ROW_CONNECTION, 0, "Pairing success");
}
else
{
//Disconnected
HCI_EXT_DisconnectImmedCmd();
Display_printf(dispHandle, SP_ROW_CONNECTION, 0, "Pairing fail: %d", status);
}
break;
case GAPBOND_PAIRING_STATE_ENCRYPTED:
if (status == SUCCESS)
{
Display_printf(dispHandle, SP_ROW_CONNECTION, 0, "Encryption success");
}
else
{
Display_printf(dispHandle, SP_ROW_CONNECTION, 0, "Encryption failed: %d", status);
//HCI_EXT_DisconnectImmedCmd();
}
break;
case GAPBOND_PAIRING_STATE_BOND_SAVED:
if (status == SUCCESS)
{
Display_printf(dispHandle, SP_ROW_CONNECTION, 0, "Bond save success");
}
else
{
//Display_printf(dispHandle, SP_ROW_CONNECTION, 0, "Bond save failed: %d", status);
//HCI_EXT_DisconnectImmedCmd();
}
break;
default:
break;
}
}
Regards,
Katherine