一、直接连接无扫描
CH58x芯片作为主机建立连接是通过MAC地址方式,即先搜索周围从机的MAC,然后与内部保存的MAC比对并决定是否建立连接。
可以省略搜索周围从机而直接根据MAC发起连接,通过GAPRole_CentralEstablishLink即可。
if(events & EstablishLink_EVT)
{
printf("establish\n");
if(linkflag == 1){
linkflag = 0;
printf("link\n");
GAPRole_CentralEstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
DEFAULT_LINK_WHITE_LIST,
0,
PeerAddrDef);
tmos_start_task(centralTaskId, Judge_EVT, 4800);
}
tmos_start_task(centralTaskId, EstablishLink_EVT, 3200);
return (events ^ EstablishLink_EVT);
}
if(events & Judge_EVT)
{
if(!connectflag){ //2s未建立连接,则停止直接连接,否则功耗会很高
GAPRole_TerminateLink(INVALID_CONNHANDLE);
}
return (events ^ Judge_EVT);
}
二、通过设备名称建立连接
- 默认通过MAC地址建立连接,修改为通过设备名称建立连接;
- 先获取到扫描应答包中的设备名称,然后跟内部存放的设备名称通过strstr对比;
- 对比成功再获取到该设备的MAC地址并建立连接。
static uint8_t PeerAddrDef[B_ADDR_LEN] = {0x02, 0x02, 0x03, 0xE4, 0xC2, 0x84}; //不可屏蔽,后面会重新赋值用到
//static uint8_t PeerDeviceName[] = {'O','P','P','O','\0'}; //使用的是strstr,对比字符串,所以需要在最后加上\0表示结束
static uint8_t* PeerDeviceName = "OPPO"; //输入待连接的从机名称
case GAP_DEVICE_INFO_EVENT:
{
if((pbuf = strstr(pEvent->deviceInfo.pEvtData, PeerDeviceName)) != 0) //对比扫描到的名称
{
PRINT("pbuf = %s\r\n", pbuf);
centralAddDeviceInfo(pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType);
}
}
break;
标签:CH58xCentral,杂谈,连接,MAC,名称,Judge,EVT,events From: https://www.cnblogs.com/gscw/p/17717800.html