TI的技术大牛们,
我最近在研究BLE协议栈1.3.2的一对多连接应用:5至8个从机将自己的sensor的状态发出来,1个主机接受数据汇总。
1.CC2540可以建立一对多连接吗?
2.如果采用每次1对1连接,是不是需要让主机接受到一个从机的数据后,主机和从机都主动断开此次1对1连接,以便主机再次scan其他从机?那么stack中在哪里能够控制主机、从机在connected状态下,主动断开连接?
谢谢!
HG:
CC2540可以一对多,但是5-8个么就很困难了。看看CC2640怎么样,BLE4.1协议栈,支持multi role,有demo
http://processors.wiki.ti.com/index.php/Cc2640_MultiRole_Demo
Longyu Chen:
回复 HG:
Hi Holly,
谢谢你的回复,那么我想试试在2540上实现connected状态下,从机和主机主动断开连接的功能。
请问有语句能实现吗?
比如如下语句可以控制从机是否广播(未connected),那有没有语句可以在connected的状态下断开连接?谢谢!
new_adv_enabled_status = FALSE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &new_adv_enabled_status );
HG:
回复 Longyu Chen:
试试GAPRole_TerminateConnection() or HCI_EXT_DisconnectImmedCmd
Longyu Chen:
回复 HG:
Hi Holly,
谢谢!
目前我们想用从机一直广播,主机连一个、读数据、断开、再连接下一个的方法。
具体步骤如下:
主机上电自动scan=>发现device=>主机连接一个从机=>主机收到从机数据=>主机主动断开连接 gStatus = GAPCentralRole_TerminateLink( simpleBLEConnHandle );
=>主机再重新启动:
simpleBLEScanning = FALSE; simpleBLEScanRes=0;
osal_set_event( simpleBLETaskId, START_DEVICE_EVT );
我们用一个主机、5个从机,发现主机上电的第一次扫描能够找到5个device,但是后面的每次主动断开再启动后只能扫到4个或3个device。
请问是这样操作主机有问题?还是2540一对多连接能力问题?
有什么更好的方法实现 5个从机广播,1个主机轮流连接读数据?
非常感谢!
Longyu Chen:
回复 HG:
Hi Holly,
之前device小于5个的问题解决了,是因为我在device info更新event中做的修改不当。
另外想请教一下,有没有主机与一个从机连接超过一定时间,主机能够自动断开,重新启动并扫描的设置?
目前我们的设计是主机接收到从机的数据后,会自动断开,再启动、扫描。但是如果从机数据没有过来,主机就不会和他断开了,就不会再去重启连接其他从机了。
Longyu Chen:
回复 Longyu Chen:
在主机和从机代码特定地方加入串口打印语句,便于我观察主机和从机的状态。
我发现,有时主机会被触发GAP_LINK_ESTABLISHED_EVENT事件,但是它所连地址对应的从机并没有被触发case GAPROLE_CONNECTED。
这样从机不会发数据,主机也不会接收数据后按照我的代码主动断开,这个连接就会一直保持下去。
请问什么情况下会出现主机检测到GAP_LINK_ESTABLISHED_EVENT,而对应从机却没有触发case GAPROLE_CONNECTED?
或者有主机连接超时自动断开的功能?
谢谢!