如何让一个Central和两个Peripheral建立连接,并且Central能和这两个建立连接的Peripheral能相互发送数据?
我现在一个Central和一个Peripheral建立连接,Central通过写CHAR1和读CHAR2与Peripheral进行数据通信。BLE-CC254x-1.3.2版本的BLE协议栈的Central和Peripheral的例子好像一个Central不能和多个Peripheral建立连接。如果要一个Central不能和多个Peripheral建立连接应该如何做?
Central的是client, Peripheral都是server。
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能否相同呢?
上面的代码是 simpleBLECentral.c 里 static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )函数的一部分。
Hi Qin,
你得修改一下代码.
因为一旦连上一个设备后, 按键里面有判断, 不会再去做新的查找.
你改一下simpleBLECentral_HandleKeys() 里面的代码.
两个从设备Server UUID 一样没问题.
但是一个Central和多个Peripheral建立连接后,他们的连接句柄simpleBLEConnHandle都不一样吧?
这个也会不一样.
你就用个数组, 或者多几个全局变量呗.
如果从机的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 );
}
}
。。。 。。。
我的思路是这样的。先让Central和一个Peripheral连接成功后,再和另一个Peripheral进行连接。
这个思路行不行呢?
可以.
欢迎做各种尝试 :)
我现在可以直接和两个从机相连接了,而且两个从机都可以使用notification的方式给主机发送数据。我现在的问题就出现在主机怎么同时给两个从机发送数据。想着应该是static uint16 simpleBLEConnHandle = GAP_CONNHANDLE_ALL;这个地方需要修改。。
你是怎么连接的呢?
GATT_WriteCharValue( /*simpleBLEConnHandle*/handle[0], &req, simpleBLETaskId );
GATT_WriteCharValue( /*simpleBLEConnHandle*/handle[1], &req, simpleBLETaskId );
你这是给两个从设备发送数据吧?那你怎么和两个从设备建立连接的呢?
想想办法, 改改代码哈