252 lines
7.8 KiB
C
252 lines
7.8 KiB
C
/* Include Files */
|
|
#include "KTag.h"
|
|
|
|
/* Local Definitions and Constants */
|
|
|
|
/* Public Variables */
|
|
|
|
/* Private Variables */
|
|
|
|
static bool removeBondListFlag = false;
|
|
|
|
/* Private Function Prototypes */
|
|
|
|
/* Public Functions */
|
|
|
|
/*******************************************************************************
|
|
* Function Name: App_DisplayBondList()
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* This function displays the bond list.
|
|
*
|
|
*******************************************************************************/
|
|
void App_DisplayBondList(void)
|
|
{
|
|
#ifdef TRACE_BLE
|
|
cy_en_ble_api_result_t apiResult;
|
|
cy_stc_ble_gap_peer_addr_info_t bondedDeviceInfo[CY_BLE_MAX_BONDED_DEVICES];
|
|
cy_stc_ble_gap_bonded_device_list_info_t bondedDeviceList =
|
|
{
|
|
.bdHandleAddrList = bondedDeviceInfo
|
|
};
|
|
uint8_t deviceCount;
|
|
|
|
/* Find out whether the device has bonded information stored already or not */
|
|
apiResult = Cy_BLE_GAP_GetBondList(&bondedDeviceList);
|
|
if (apiResult != CY_BLE_SUCCESS)
|
|
{
|
|
COMM_Console_Print_String("[BLE] Cy_BLE_GAP_GetBondList API Error: 0x");
|
|
COMM_Console_Print_UInt32AsHex(apiResult);
|
|
COMM_Console_Print_String("\n");
|
|
}
|
|
else
|
|
{
|
|
deviceCount = bondedDeviceList.noOfDevices;
|
|
|
|
if(deviceCount != 0u)
|
|
{
|
|
uint8_t counter;
|
|
|
|
COMM_Console_Print_String("[BLE] Bond list:\n");
|
|
|
|
do
|
|
{
|
|
COMM_Console_Print_String(" ");
|
|
COMM_Console_Print_UInt8(deviceCount);
|
|
COMM_Console_Print_String(". ");
|
|
|
|
deviceCount--;
|
|
|
|
if(bondedDeviceList.bdHandleAddrList[deviceCount].bdAddr.type == CY_BLE_GAP_ADDR_TYPE_RANDOM)
|
|
{
|
|
COMM_Console_Print_String("Peer Random Address:");
|
|
}
|
|
else
|
|
{
|
|
COMM_Console_Print_String("Peer Public Address:");
|
|
}
|
|
|
|
for (counter = CY_BLE_GAP_BD_ADDR_SIZE; counter > 0u; counter--)
|
|
{
|
|
COMM_Console_Print_String(" ");
|
|
COMM_Console_Print_UInt8AsHex(bondedDeviceList.bdHandleAddrList[deviceCount].bdAddr.bdAddr[counter - 1u]);
|
|
}
|
|
COMM_Console_Print_String(", bdHandle: 0x");
|
|
COMM_Console_Print_UInt8AsHex(bondedDeviceList.bdHandleAddrList[deviceCount].bdHandle);
|
|
COMM_Console_Print_String("\n");
|
|
} while (deviceCount != 0u);
|
|
COMM_Console_Print_String("\n");
|
|
}
|
|
}
|
|
#endif // TRACE_BLE
|
|
}
|
|
|
|
|
|
/*******************************************************************************
|
|
* Function Name: App_RemoveDevidesFromBondList
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* Remove devices from the bond list.
|
|
*
|
|
*******************************************************************************/
|
|
void App_RemoveDevicesFromBondList(void)
|
|
{
|
|
#if(CY_BLE_BONDING_REQUIREMENT == CY_BLE_BONDING_YES)
|
|
cy_en_ble_api_result_t apiResult;
|
|
cy_stc_ble_gap_bd_addr_t peerBdAddr = { .type = 0u };
|
|
#ifdef TRACE_BLE
|
|
COMM_Console_Print_String("[BLE] Cleaning Bond List...\n\n");
|
|
#endif // TRACE_BLE
|
|
|
|
/* Remove all bonded devices in the list */
|
|
apiResult = Cy_BLE_GAP_RemoveBondedDevice(&peerBdAddr);
|
|
if (apiResult != CY_BLE_SUCCESS)
|
|
{
|
|
#ifdef TRACE_BLE
|
|
COMM_Console_Print_String("[BLE] Cy_BLE_GAP_RemoveBondedDevice API Error: 0x");
|
|
COMM_Console_Print_UInt32AsHex(apiResult);
|
|
COMM_Console_Print_String("\n");
|
|
#endif // TRACE_BLE
|
|
}
|
|
else
|
|
{
|
|
#ifdef TRACE_BLE
|
|
COMM_Console_Print_String("[BLE] Cy_BLE_GAP_RemoveBondedDevice complete.\n\n");
|
|
#endif // TRACE_BLE
|
|
}
|
|
#else
|
|
#ifdef TRACE_BLE
|
|
COMM_Console_Print_String("[BLE] Bonding is disabled...no need to remove bonded devices.\n\n");
|
|
#endif // TRACE_BLE
|
|
#endif /* (CY_BLE_BONDING_REQUIREMENT == CY_BLE_BONDING_YES) */
|
|
|
|
/* Clean flag */
|
|
removeBondListFlag = false;
|
|
}
|
|
|
|
|
|
/*******************************************************************************
|
|
* Function Name: App_GetCountOfBondedDevices()
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* This function returns the count of bonded devices
|
|
*
|
|
* Return:
|
|
* uint32_t The count of bonded devices
|
|
*
|
|
*******************************************************************************/
|
|
uint32_t App_GetCountOfBondedDevices(void)
|
|
{
|
|
cy_en_ble_api_result_t apiResult;
|
|
cy_stc_ble_gap_peer_addr_info_t bondedDeviceInfo[CY_BLE_MAX_BONDED_DEVICES];
|
|
cy_stc_ble_gap_bonded_device_list_info_t bondedDeviceList =
|
|
{
|
|
.bdHandleAddrList = bondedDeviceInfo
|
|
};
|
|
uint32_t deviceCount = 0u;
|
|
|
|
/* Find out whether the device has bonded information stored already or not */
|
|
apiResult = Cy_BLE_GAP_GetBondList(&bondedDeviceList);
|
|
if (apiResult != CY_BLE_SUCCESS)
|
|
{
|
|
#ifdef TRACE_BLE
|
|
COMM_Console_Print_String("[BLE] Cy_BLE_GAP_GetBondList API Error: 0x");
|
|
COMM_Console_Print_UInt32AsHex(apiResult);
|
|
COMM_Console_Print_String("\n");
|
|
#endif // TRACE_BLE
|
|
}
|
|
else
|
|
{
|
|
deviceCount = bondedDeviceList.noOfDevices;
|
|
}
|
|
|
|
return (deviceCount);
|
|
}
|
|
|
|
|
|
/*******************************************************************************
|
|
* Function Name: App_IsDeviceInBondList()
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* This function check if device with bdHandle is in the bond list
|
|
*
|
|
* Parameters:
|
|
* bdHandle - bond device handler
|
|
*
|
|
* Return:
|
|
* bool - true value when bdHandle exists in bond list
|
|
*
|
|
*******************************************************************************/
|
|
bool App_IsDeviceInBondList(uint32_t bdHandle)
|
|
{
|
|
cy_en_ble_api_result_t apiResult;
|
|
cy_stc_ble_gap_peer_addr_info_t bondedDeviceInfo[CY_BLE_MAX_BONDED_DEVICES];
|
|
cy_stc_ble_gap_bonded_device_list_info_t bondedDeviceList =
|
|
{
|
|
.bdHandleAddrList = bondedDeviceInfo
|
|
};
|
|
bool deviceIsDetected = false;
|
|
uint32_t deviceCount;
|
|
|
|
/* Find out whether the device has bonding information stored already or not */
|
|
apiResult = Cy_BLE_GAP_GetBondList(&bondedDeviceList);
|
|
if (apiResult != CY_BLE_SUCCESS)
|
|
{
|
|
#ifdef TRACE_BLE
|
|
COMM_Console_Print_String("[BLE] Cy_BLE_GAP_GetBondList API Error: 0x");
|
|
COMM_Console_Print_UInt32AsHex(apiResult);
|
|
COMM_Console_Print_String("\n");
|
|
#endif // TRACE_BLE
|
|
}
|
|
else
|
|
{
|
|
deviceCount = bondedDeviceList.noOfDevices;
|
|
|
|
if(deviceCount != 0u)
|
|
{
|
|
do
|
|
{
|
|
deviceCount--;
|
|
if(bdHandle == bondedDeviceList.bdHandleAddrList[deviceCount].bdHandle)
|
|
{
|
|
deviceIsDetected = 1u;
|
|
}
|
|
} while(deviceCount != 0u);
|
|
}
|
|
}
|
|
return(deviceIsDetected);
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* Function Name: App_SetRemoveBondListFlag()
|
|
********************************************************************************
|
|
* Summary:
|
|
* Set flag for removing bond list
|
|
*
|
|
*******************************************************************************/
|
|
void App_SetRemoveBondListFlag(void)
|
|
{
|
|
removeBondListFlag = true;
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* Function Name: App_IsRemoveBondListFlag()
|
|
********************************************************************************
|
|
* Summary:
|
|
* Get value of remove bond list flag
|
|
*
|
|
* Return:
|
|
* true - remove bond list flag is set
|
|
* false - remove bond list flag is clear
|
|
*
|
|
*******************************************************************************/
|
|
bool App_IsRemoveBondListFlag(void)
|
|
{
|
|
return ((removeBondListFlag == true) ? true : false);
|
|
}
|
|
|
|
/* Private Functions */
|