芯片:CC2650R2F
工程:SimplePeripheral
问题:如题,在应用中,我不知道即将请求联接的设备ID,但是我希望只与发送特定请求连接数据包的设备进行连接,但是我看到示例程序中只有读取标志位是否为succ的动作,没有读取请求连接数据包的动作,请问这个数据在GAP层能读到吗?如果不能,我要怎么实现我的设想?
case GAP_LINK_ESTABLISHED_EVENT:{gapEstLinkReqEvent_t *pPkt = (gapEstLinkReqEvent_t *)pMsg;// Display the amount of current connectionsuint8_t numActive = linkDB_NumActive();Display_printf(dispHandle, SP_ROW_STATUS_2, 0, "Num Conns: %d",(uint16_t)numActive);if (pPkt->hdr.status == SUCCESS){// Add connection to list and start RSSISimplePeripheral_addConn(pPkt->connectionHandle);// Display the address of this connectionDisplay_printf(dispHandle, SP_ROW_STATUS_1, 0, "Connected to %s",Util_convertBdAddr2Str(pPkt->devAddr));// Enable connection selection optiontbm_setItemStatus(&spMenuMain, SP_ITEM_SELECT_CONN, TBM_ITEM_NONE);// Start Periodic Clock.Util_startClock(&clkPeriodic);}if (numActive < MAX_NUM_BLE_CONNS){// Start advertising since there is room for more connectionsGapAdv_enable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);GapAdv_enable(advHandleLongRange, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);}else{// Stop advertising since there is no room for more connectionsGapAdv_disable(advHandleLongRange, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);GapAdv_disable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);}break;}
Viki Shi:
看你的描述,类似白名单功能,可调用HCI_LE_AddWhiteListCmd(HCI_PUBLIC_DEVICE_ADDRESS, &bdAddr);实现
z z46:
回复 Viki Shi:
我查看了这个函数,它需要把目标地址写入白名单,但我的设备是不知道目标设备地址的,我希望能读取接收到的请求连接的数据包,并对里面的数据做一些分析,判断是否符合我的连接规则,如果符合就创建这个连接,请问在GAP层如何查看接收到的请求连接的数据?
Alvin Chen:
回复 z z46:
我认为这个是个逻辑问题:
举例:
可以通过pairing来做也可以连接成功后启动一个timer 来等一个固定的数据包,超时没有收到就断开,并把该地址写入一个黑名单。
z z46:
回复 Alvin Chen:
你说的pairing是怎么做,有介绍的文档或函数吗?另外,scanresponse和发起连接的内容都是下层自发进行的吗?GAP层能看到并修改数据吗?
Alvin Chen:
回复 z z46:
GAP不能获取,bluetooth的pairing
blog.csdn.net/…/81196122
z z46:
回复 Alvin Chen:
请求连接包是GAP下层直接生成的?用户无法指定请求连接包的数据内容?