我现在一个Central和一个Peripheral建立连接,Central通过写CHAR1和读CHAR2与Peripheral进行数据通信。BLE-CC254x-1.3.2版本的BLE协议栈的Central和Peripheral的例子好像一个Central不能和多个Peripheral建立连接。如果要一个Central不能和多个Peripheral建立连接应该如何做?
Central的是client, Peripheral都是server。
Qin Daohong:
case GAP_DEVICE_INFO_EVENT:
// if filtering device discovery results based on service UUID
if ( DEFAULT_DEV_DISC_BY_SVC_UUID == TRUE )
{
if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV_UUID, pEvent->deviceInfo.pEvtData, pEvent->deviceInfo.dataLen ) )
{
simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );
}
}
这里是只发现的Server UUID的为SIMPLEPROFILE_SERV_UUID的从设备吗?
那两个从设备的Server UUID能否相同呢?
Qin Daohong:
回复 Qin Daohong:
上面的代码是 simpleBLECentral.c 里 static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )函数的一部分。
Yan:
Hi Qin,
你得修改一下代码.
因为一旦连上一个设备后, 按键里面有判断, 不会再去做新的查找.
你改一下simpleBLECentral_HandleKeys() 里面的代码.
Yan:
回复 Qin Daohong:
两个从设备Server UUID 一样没问题.
Qin Daohong:
回复 Yan:
但是一个Central和多个Peripheral建立连接后,他们的连接句柄simpleBLEConnHandle都不一样吧?
Yan:
回复 Qin Daohong:
这个也会不一样.
你就用个数组, 或者多几个全局变量呗.
Qin Daohong:
回复 Yan:
如果从机的Server UUID 一样的话,主机就只能发现一个设备。即simpleBLEScanRes值为1。但是如果不一样的话,simpleBLEScanRes值就为2,表明应该发现了两个设备。
static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent ){
。。。 。。。
if ( DEFAULT_DEV_DISC_BY_SVC_UUID == TRUE )
{
//发现Server UUID 为SIMPLEPROFILE_SERV1_UUID从机
if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV1_UUID, pEvent->deviceInfo.pEvtData, pEvent->deviceInfo.dataLen ) )
{
simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );
}
//发现Server UUID 为SIMPLEPROFILE_SERV2_UUID从机
if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV2_UUID, pEvent->deviceInfo.pEvtData, pEvent->deviceInfo.dataLen ) )
{
simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );
}
}
。。。 。。。
Qin Daohong:
回复 Yan:
我的思路是这样的。先让Central和一个Peripheral连接成功后,再和另一个Peripheral进行连接。
Qin Daohong:
回复 Yan:
这个思路行不行呢?
Yan:
回复 Qin Daohong:
可以.
欢迎做各种尝试 🙂