我使用 GAP_ConfigDeviceAddr(ADDRMODE_PRIVATE_RESOLVE, NULL); 将CC2640R2F外设设备地址类型改为PRIVATE_RESOLVE
并使用 GAP_SetParamValue(TGAP_PRIVATE_ADDR_INT, 1); 令其每1min就改变一次地址
用BTool扫描时,发现地址确实会改变。
我现在希望在CC2640R2F外设设备程序中能获得“GAP_RANDOM_ADDR_CHANGED_EVENT”,但发现在
static void gapRole_processGAPMsg(gapEventHdr_t *pMsg) 中无法检测到这个“GAP_RANDOM_ADDR_CHANGED_EVENT”。
我该如何设置,才能检测到“GAP_RANDOM_ADDR_CHANGED_EVENT”事件?
Alvin Chen:
你好,你用的是什么协议栈?BLE5?
依据spec 5.0规定 :
Setup the device's address type. If ADDRMODE_PRIVATE_RESOLVE is selected, the address will change periodically.default: 15
Corresponding Events:
If the device is correctly configured for ADDRMODE_PRIVATE_NONRESOLVE , the calling task will receive a GAP_RANDOM_ADDR_CHANGED_EVENT of type gapRandomAddrEvent_t when the random address changes
user5397061:
回复 Alvin Chen:
Hi Alvin Chen:
非常感谢你能答复我的问题。
我用的是协议栈是 simplelink_cc2640r2_sdk_3_10_00_15 里面的
C:\ti\simplelink_cc2640r2_sdk_3_10_00_15\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_peripheral
应该不是ble5
请问:GAP_RANDOM_ADDR_CHANGED_EVENT事件是在 peripheral.c 文件里面的
static void gapRole_processGAPMsg(gapEventHdr_t *pMsg) 中检测的吗?
Alvin Chen:
回复 user5397061:
是的,你这个4.2,上面的spec 规定适用于4.2.
user5397061:
请问你说的“SimplePeripheral_processGapMessage”是在那份c文件里面?我在“simple_peripheral.c”文件内没有找到。
Alvin Chen:
回复 user5397061:
sorry,那个BLE5 demo里面的,你在 simple_peripheral.c中的GAPROLE_STARTED里面设置的?类似于下面的?case GAPROLE_STARTED:{uint8_t ownAddress[B_ADDR_LEN];uint8_t systemId[DEVINFO_SYSTEM_ID_LEN];GAP_ConfigDeviceAddr( ADDRMODE_PRIVATE_RESOLVE, NULL );GAP_SetParamValue(TGAP_PRIVATE_ADDR_INT, 1);
user5397061:
回复 Alvin Chen:
我是在“peripheral.c”文件中的case GAP_DEVICE_INIT_DONE_EVENT:里面设置地址类型的,如下
static void gapRole_processGAPMsg(gapEventHdr_t *pMsg)
{uint8_t notify = FALSE;// State changed notify the app? (default no)
switch (pMsg->opcode){case GAP_DEVICE_INIT_DONE_EVENT:{gapDeviceInitDoneEvent_t *pPkt = (gapDeviceInitDoneEvent_t *)pMsg;bStatus_t stat = pPkt->hdr.status;
if (stat == SUCCESS){// Save off the generated keysVOID osal_snv_write(BLE_NVID_IRK, KEYLEN, gapRole_IRK);VOID osal_snv_write(BLE_NVID_CSRK, KEYLEN, gapRole_SRK);
// Save off the informationVOID memcpy(gapRole_bdAddr, pPkt->devAddr, B_ADDR_LEN);
gapRole_state = GAPROLE_STARTED;//令本机采用ADDRMODE_PRIVATE_RESOLVE类型的地址
GAP_ConfigDeviceAddr(ADDRMODE_PRIVATE_RESOLVE, NULL);
//GAP_ConfigDeviceAddr(ADDRMODE_PRIVATE_NONRESOLVE, NULL);
//设置随机地址自动变更的时间=1min(若设置,则默认为15s)
GAP_SetParamValue(TGAP_PRIVATE_ADDR_INT, 1);
// Update the advertising datastat = GAP_UpdateAdvertisingData(selfEntity,TRUE, gapRole_AdvertDataLen, gapRole_AdvertData);}如上设置后,从BTool上查看确实地址已会自动改变,但我在此
static void gapRole_processGAPMsg(gapEventHdr_t *pMsg)中
添加了 case: GAP_RANDOM_ADDR_CHANGED_EVENT:后,还是无法检测到此事件(设置断点,debug时无法停在此断点)
Alvin Chen:
回复 user5397061:
截个图看看
user5397061:
回复 Alvin Chen:
上图是我修改了地址类型,及自动变更时间=1min
上图是我期望检测到“GAP_RANDOM_ADDR_CHANGED_EVENT”事件后,取反一个LED。进入debug调试后,发现无法停在这个断点。即说明没有侦测到这个“GAP_RANDOM_ADDR_CHANGED_EVENT”事件
Alvin Chen:
回复 user5397061:
你好,我复现了你的问题,我去请教我们的其他同事有了答复我会更新到这个帖子。
user5397061:
回复 Alvin Chen:
HiAlvinChen:
非常感谢!
TI中文支持网




