CH58X/CH59X 多设备绑定时指定设备回连并指定白名单设备

在某些应用场景中需要绑定多个设备并加入白名单,并且指定某个设备进行回连,其他设备无法回连。

主要使用到的函数如下:

1 GAPBondMgr_SetParameter(GAPBOND_DISABLE_SINGLEBOND, sizeof(parameterBuffer), parameterBuffer);
2 GAPBondMgr_SetParameter(GAPBOND_ENABLE_SINGLEBOND, sizeof(parameterBuffer), parameterBuffer);

添加白名单:

 uint8_t sync_resolve_list = TRUE;
 GAPBondMgr_SetParameter(GAPBOND_AUTO_SYNC_RL, sizeof(sync_resolve_list), &sync_resolve_list);
 uint8_t filter_policy = GAP_FILTER_POLICY_WHITE;
GAPRole_SetParameter(GAPROLE_ADV_FILTER_POLICY,
sizeof(uint8_t), &filter_policy);

具体使用方式如下:

以绑定两个设备为例,AB两个设备同时绑定,此时只允许A或者B回连。常用的绑定回连的方式没有办法做到,就要用到上面的函数去实现。

下面是使用的具体实例,配置了一个GPIO根据IO的电平状态根据GPIO的状态去选择回连的设备。

上电初始化的时候会根据是否绑定选择默认的会连设备。当然这部分及选择谁去回连这部分逻辑都是可以自己做的。

具体代码实现如下:

//上电初始化:
uint8_t bondcnt_int=0; GAPBondMgr_GetParameter(GAPBOND_BOND_COUNT, &bondcnt_int); if(bondcnt_int) { uint8_t peerbond_icfo[7]; peerbond_icfo[0] = 0; gapBondRec_t gapBond_init; tmos_snv_read(mainRecordNvID(0), sizeof(gapBond_init), gapBond_init.publicAddr); //获取第一个绑定MAC tmos_memcpy(&peerbond_icfo[1], gapBond_init.publicAddr, 6); printf("MAC 1 = "); for(uint8_t j = 0; j < sizeof(gapBond_init.publicAddr); j++){ printf("%02x ", peerbond_icfo[j+1]); }printf("\r\n"); peerbond_icfo[0]= 0; uint8_t res_staus; res_staus = GAPBondMgr_SetParameter(GAPBOND_ENABLE_SINGLEBOND, sizeof(peerbond_icfo), peerbond_icfo); PRINT("res %d\n",res_staus); tmos_memset(peerbond_icfo,0,7); //清空buf tmos_snv_read(mainRecordNvID(1), sizeof(gapBond_init), gapBond_init.publicAddr); //获取第二个绑定MAC tmos_memcpy(&peerbond_icfo[1], gapBond_init.publicAddr, 6); peerbond_icfo[0]=0; printf("MAC 2 = "); for(uint8_t k = 0; k < sizeof(gapBond_init.publicAddr); k++){ printf("%02x ", peerbond_icfo[k+1]); }printf("\r\n"); res_staus = GAPBondMgr_SetParameter(GAPBOND_DISABLE_SINGLEBOND, sizeof(peerbond_icfo), peerbond_icfo); PRINT("res2: %d\n",res_staus); // GAPBondMgr_SetParameter(GAPBOND_ENABLE_SINGLEBOND, sizeof(parameterBuffer), parameterBuffer); PRINT("sync_resolve_list\n"); uint8_t sync_resolve_list = TRUE; GAPBondMgr_SetParameter(GAPBOND_AUTO_SYNC_RL, sizeof(sync_resolve_list), &sync_resolve_list); uint8_t filter_policy = GAP_FILTER_POLICY_WHITE; GAPRole_SetParameter(GAPROLE_ADV_FILTER_POLICY, sizeof(uint8_t), &filter_policy); }
   
选择具体需要回连的设备,
       uint8_t bondcnt=0; GAPBondMgr_GetParameter(GAPBOND_BOND_COUNT, &bondcnt ); GetStaticMAC(); uint8_t parameterBuffer[7]; parameterBuffer[0] = 0; uint8_t res_staus; gapBondRec_t gapBond_er; if(bondcnt>1) { if(GPIOB_ReadPortPin(GPIO_Pin_4)!=0) { tmos_snv_read(mainRecordNvID(0), sizeof(gapBond_er), gapBond_er.publicAddr); //获取第一个绑定MAC tmos_memcpy(&parameterBuffer[1], gapBond_er.publicAddr, 6); printf("MAC 1 = "); for(uint8_t j = 0; j < sizeof(gapBond_er.publicAddr); j++){ printf("%02x ", parameterBuffer[j+1]); }printf("\r\n"); parameterBuffer[0]= 0; res_staus = GAPBondMgr_SetParameter(GAPBOND_ENABLE_SINGLEBOND, sizeof(parameterBuffer), parameterBuffer); PRINT("res %d\n",res_staus); tmos_memset(parameterBuffer,0,7); //清空buf tmos_snv_read(mainRecordNvID(1), sizeof(gapBond_er), gapBond_er.publicAddr); //获取第二个绑定MAC tmos_memcpy(&parameterBuffer[1], gapBond_er.publicAddr, 6); printf("MAC 2 = "); for(uint8_t k = 0; k < sizeof(gapBond_er.publicAddr); k++){ printf("%02x ", parameterBuffer[k+1]); }printf("\r\n"); GAPBondMgr_SetParameter(GAPBOND_DISABLE_SINGLEBOND, sizeof(parameterBuffer), parameterBuffer); PRINT("sync_resolve_list\n"); uint8_t sync_resolve_list = TRUE; GAPBondMgr_SetParameter(GAPBOND_AUTO_SYNC_RL, sizeof(sync_resolve_list), &sync_resolve_list); uint8_t filter_policy = GAP_FILTER_POLICY_WHITE; GAPRole_SetParameter(GAPROLE_ADV_FILTER_POLICY, sizeof(uint8_t), &filter_policy); } else { tmos_memset(parameterBuffer,0,7); tmos_snv_read(mainRecordNvID(0), sizeof(gapBond_er), gapBond_er.publicAddr); //获取第一个绑定MAC tmos_memcpy(&parameterBuffer[1], gapBond_er.publicAddr, 6); printf("MAC 1 = "); for(uint8_t j = 0; j < sizeof(gapBond_er.publicAddr); j++){ printf("%02x ", parameterBuffer[j+1]); }printf("\r\n"); parameterBuffer[0]= 0; res_staus = GAPBondMgr_SetParameter(GAPBOND_DISABLE_SINGLEBOND, sizeof(parameterBuffer), parameterBuffer); PRINT("res %d\n",res_staus); tmos_memset(parameterBuffer,0,7); //清空buf tmos_snv_read(mainRecordNvID(1), sizeof(gapBond_er), gapBond_er.publicAddr); //获取第二个绑定MAC tmos_memcpy(&parameterBuffer[1], gapBond_er.publicAddr, 6); parameterBuffer[0]=0; printf("MAC 2 = "); for(uint8_t k = 0; k < sizeof(gapBond_er.publicAddr); k++){ printf("%02x ", parameterBuffer[k+1]); }printf("\r\n"); GAPBondMgr_SetParameter(GAPBOND_ENABLE_SINGLEBOND, sizeof(parameterBuffer), parameterBuffer); PRINT("sync_resolve_list\n"); uint8_t sync_resolve_list = TRUE; GAPBondMgr_SetParameter(GAPBOND_AUTO_SYNC_RL, sizeof(sync_resolve_list), &sync_resolve_list); uint8_t filter_policy = GAP_FILTER_POLICY_WHITE; GAPRole_SetParameter(GAPROLE_ADV_FILTER_POLICY, sizeof(uint8_t), &filter_policy); } }

 

posted @ 2026-05-29 16:27  小舟从此逝_1  阅读(30)  评论(0)    收藏  举报