在Peripheral低功耗蓝牙从机例程中,连接之后可以通过接口函数读取主机的信号强度,那么在广播状态如何获取主机的信号强度呢?
蓝牙主机在搜到广播后会发起扫描请求,蓝牙从机收到该请求便可以获取到蓝牙主机的信号强度,蓝牙从机端添加一个接收扫描请求的回调即可,下面是增加回调接口的方法。
一.添加peripheralScanReqRecv函数:
// Broadcast Callbacks
static gapRolesBroadcasterCBs_t Broadcaster_BroadcasterCBs = {
NULL, // Not used in peripheral role
peripheralScanReqRecv // Receive scan request callback
};
二.peripheralScanReqRecv函数定义:
static void peripheralScanReqRecv(gapScanRec_t * pEvent){
PRINT("eventType=%d\n",pEvent->eventType);
PRINT("addrType=%d\n",pEvent->addrType);
PRINT("addrType=");
for(uint8_t i=0;i<6;i++){
PRINT("%02x ",pEvent->addr[i]);
}
PRINT("\n");
PRINT("rssi=%d\n",pEvent->rssi);
}
三.获取参数说明:
typedef struct
{
uint8_t eventType; // 广播事件类型:标识广播者使用的广播类型,具体定义参考 GAP_ADVERTISEMENT_REPORT_TYPE_DEFINES
uint8_t addrType; // 设备地址类型:0x00-公有设备地址/公有标识地址 0x01-随机设备地址/随机(静态)标识地址
uint8_t addr[B_ADDR_LEN]; // 设备MAC地址/蓝牙设备地址(长度由B_ADDR_LEN定义)
int8_t rssi; // 接收信号强度指示(单位:dBm,值越大信号越强)
} gapScanRec_t;
若只是需要获取发起扫描请求的蓝牙主机设备的mac地址,只需要Peripheral_Init初始化调用:
// Enable scan req notify
GAP_SetParamValue(TGAP_ADV_SCAN_REQ_NOTIFY, ENABLE);
在此回调中获取mac地址:
/*********************************************************************
* @fn Peripheral_ProcessGAPMsg
*
* @brief Process an incoming task message.
*
* @param pMsg - message to process
*
* @return none
*/
static void Peripheral_ProcessGAPMsg(gapRoleEvent_t *pEvent)
{
switch(pEvent->gap.opcode)
{
case GAP_SCAN_REQUEST_EVENT:
{
PRINT("Receive scan req from %x %x %x %x %x %x ..\n", pEvent->scanReqEvt.scannerAddr[0],
pEvent->scanReqEvt.scannerAddr[1], pEvent->scanReqEvt.scannerAddr[2], pEvent->scanReqEvt.scannerAddr[3],
pEvent->scanReqEvt.scannerAddr[4], pEvent->scanReqEvt.scannerAddr[5]);
break;
}
case GAP_PHY_UPDATE_EVENT:
{
PRINT("Phy update Rx:%x Tx:%x ..\n", pEvent->linkPhyUpdate.connRxPHYS, pEvent->linkPhyUpdate.connTxPHYS);
break;
}
default:
break;
}
}
浙公网安备 33010602011771号