我用过Peripheral和CentPeri例程都无法被多个手机同时连接
已经将config.h的PERIPHERAL_MAX_CONNECTION改为3个
现象是只要有一个手机连接上,CH579就没有了广播,直接去连接也无法连上。
我用过Peripheral和CentPeri例程都无法被多个手机同时连接
已经将config.h的PERIPHERAL_MAX_CONNECTION改为3个
现象是只要有一个手机连接上,CH579就没有了广播,直接去连接也无法连上。
这种问题都不是问题,你连主机从机都没搞清楚。手机当然只能连一个了,PERIPHERAL_MAX_CONNECTION是指该蓝牙作为主机时最多能连接的从机数是3,你的明白?
这种问题都不是问题,你连主机从机都没搞清楚。手机当然只能连一个了,PERIPHERAL_MAX_CONNECTION是指该蓝牙作为主机时最多能连接的从机数是3,你的明白?
我还是没明白,如何修改才能让多个手机同时连接一个蓝牙设备呢?
除了将 PERIPHERAL_MAX_CONNECTION 改为3外
还需要在每次连接的事件里判断如果已经建立的连接没有达到最大的连接数, 再次手动开启广播.
楼上正解,已经修改以下地方的代码,可以多个手机同时连接蓝牙设备了
原代码:
static void Peripheral_LinkEstablished( gapRoleEvent_t * pEvent )
{
gapEstLinkReqEvent_t *event = (gapEstLinkReqEvent_t *) pEvent;
// See if already connected
if( peripheralConnList.connHandle != GAP_CONNHANDLE_INIT )
{
GAPRole_TerminateLink( pEvent->linkCmpl.connectionHandle );
PRINT( "Connection max...\n" );
}
...
因为定义peripheralConnList时就定义了一个connHandle,当第一个连接建立时peripheralConnList.connHandle已经被第一个连接使用,所以当第二个连接建立时peripheralConnList.connHandle 必然!= GAP_CONNHANDLE_INIT ,导致第二个连接被终止。
解决的方法就是修改定义
static peripheralConnItem_t peripheralConnList[PERIPHERAL_MAX_CONNECTION];
当连接建立时遍历peripheralConnList[PERIPHERAL_MAX_CONNECTION],将新连接的event->connectionHandle给未使用的peripheralConnList[i].connHandle。
然后判断是否已经达到最大的连接数,是否开启广播。