TI中文支持网
TI专业的中文技术问题搜集分享网站

关于CC2640R2F的“GAP_RANDOM_ADDR_CHANGED_EVENT”事件

我使用   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:

非常感谢!

赞(0)
未经允许不得转载:TI中文支持网 » 关于CC2640R2F的“GAP_RANDOM_ADDR_CHANGED_EVENT”事件
分享到: 更多 (0)