TI中文支持网
TI专业的中文技术问题搜集分享网站

如何在连接的状态下改变蓝牙模块(从机)和 APP之间的 通讯间隔?急,希望有高人回复,谢谢!

大家都知道蓝牙模块作为从机和手机APP连接时,可以发送通讯间隔参数请求APP更新为自己设置的参数,这个是可以实现毋庸置疑!

但是我现在想实现,刚与APP连接上之后,前面2秒 是以 20ms给APP发送数据,发送完数据后 我想讲通讯间隔从 20ms改为1s,

这个该怎么实现?即在连接的状态下怎么更改通讯间隔??

 

PS:我试过,转完数据后将 蓝牙模块和APP自动断开,然后在重新广播再重新连接APP,可以更改过来,但是这样感觉有点不合适。

也试过:在连接状态下,再次发送请求更新通讯间隔参数,但是没反应!!

我的问题:能不能在不断开重新连接的状态下(连接状态下)就能直接更改通讯间隔呢?? 如果在连接状态下更改,是APP端来实现还是蓝牙模块(下位机)

来请求更新呢? 

 

Barbara Wu:

调用接口

bStatus_t GAPRole_SendUpdateParam( uint16 minConnInterval, uint16 maxConnInterval, uint16 latency, uint16 connTimeout, uint8 handleFailure )

发送参数更新请求

haidong wang:

回复 Barbara Wu:

WBJ,您好:

    谢谢你的回复,我刚试了  调用GAPRole_SendUpdateParam(80,800,0,1000,1);这个函数,设置为 通讯间隔为1s,但是未成功!

可能你没看我的条件,我这个是  在连接的状态下更改通讯间隔的 ,我程序的开始时使能了更新请求的,开机后连接APP是按照我设置的值运行的!

#define DEFAULT_ENABLE_UPDATE_REQUEST         TRUE

uint8 enable_update_request = DEFAULT_ENABLE_UPDATE_REQUEST;

 GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_ENABLE, sizeof( uint8 ), &enable_update_request );

GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_ENABLE, sizeof( uint8 ), &enable_update_request ); GAPRole_SetParameter( GAPROLE_MIN_CONN_INTERVAL, sizeof( uint16 ), &desired_min_interval ); GAPRole_SetParameter( GAPROLE_MAX_CONN_INTERVAL, sizeof( uint16 ), &desired_max_interval ); GAPRole_SetParameter( GAPROLE_SLAVE_LATENCY, sizeof( uint16 ), &desired_slave_latency ); GAPRole_SetParameter( GAPROLE_TIMEOUT_MULTIPLIER, sizeof( uint16 ), &desired_conn_timeout );

但是,在蓝牙模块 和APP 连接的状态下,发送更新请求是不起作用的,你说的GAPRole_SendUpdateParam这个函数的功能应该和我上面调用的是

同一个功能,还有没有其他的办法?

还有一个我想确认的是, 连接状态 是不是只有主机才能更改了?连接状态下,主机是不是不接收从机的 更新请求了?

Barbara Wu:

回复 haidong wang:

在连接中也可以调用这个函数修改

一调用这个函数就应该会有connection parameter update request发出来, 如果主机这边接收,就能更新了

建议您用抓包的工具看一下1.是否这个命令发出来了 2.如果发出来了,主机那边是否接收了

这个过程在sniffer的包里面应该都能体现的

如果主机是iOS设备,连接参数需要满足其要求,主机才能够接收的,所以请确认您需要更新的参数是多少

haidong wang:

回复 Barbara Wu:

WBJ,您好:

    谢谢,现在确定连接中也可以发送更新请求了!

  我现在手上没有sniffer抓包工具,APP是找别人帮忙写的,但是我设置断点时,是可以执行到GAPRole_SendUpdateParam(80,800,0,1000,1);这个函数,

按道理来说应该是发送请求了!

  还有个问题想跟您确认一下,假设我的请求已经发出去了,我使用的是安卓系统下的APP,  APP那端接收到 请求以后需要做什么处理吗??  还是说 安卓

底层自会处理??     首次连接APP发出的请求 和  连接状态下发出的更新请求 有什么区别?

Barbara Wu:

回复 haidong wang:

APP应该不用处理,应该是底层自己处理的

首次发是协议栈自动帮你发的,从协议栈角度来说发的命令都是一样的,区别在于一个是在连接刚刚建立的时候发的,一个是在你调用的时候发的。

haidong wang:

回复 Barbara Wu:

也就是说要蓝牙模块(下位机)发送更新请求,APP开发人员不用做处理,安卓蓝牙底层就会自动调用更新通讯间隔参数了。

这个函数这样调用GAPRole_SendUpdateParam(80,800,0,1000,1)有问题吗?  我这边已经确认程序可以执行到这个函数,按道理应该是发了

请求了,我设置GAPROLE_MIN_CONN_INTERVAL=80,GAPROLE_MAX_CONN_INTERVAL=800,GAPROLE_SLAVE_LATENCY=0,

GAPROLE_TIMEOUT_MULTIPLIER = 1000,这个参数值应该是对的啊!为什么我用示波器测 发送管脚 通讯间隔没有变化,还是20ms。

请问还有什么方法确认哪个环节出问题了吗??

我手上没有抓包工具,APP使用的是 TI 的 BLE Device Monitor。

haidong wang:

回复 Barbara Wu:

WBJ,您好:

    我刚试了一下,连接状态下调用GAPRole_SendUpdateParam(80,800,0,1000,1)发送请求没反应,但是 重新断开 APP  然后在重新连接(重新连接APP不会再调用GAPRole_SendUpdateParam) 通讯间隔 就更改为  

GAPRole_SendUpdateParam(80,800,0,1000,1)这个函数设置的参数了!  

    是不是连接状态下从机 发送请求  主机不允许更改你呢?  为什么要断开 重新连接才能更改过来??

haidong wang:

回复 haidong wang:

还有人 吗??  我在初始化过程中  调用 GAPRole_SendUpdateParam(80,800,0,1000,1)这个函数都没有起作用!! 求助求助!!

是不是调用 GAPRole_SendUpdateParam(80,800,0,1000,1)之后要断开APP重新连接才生效?!!!

haidong wang:

回复 haidong wang:

自己顶上!求关注

haidong wang:

回复 haidong wang:

刚刚又发现 在simpleBLEperipheral.C下的peripheralStateNotificationCB()->case:GAPROLE_CONNECTED下或者

performPeriodicTask这个周期 函数里的第一句话  调用GAPRole_SendUpdateParam(80,400,0,1000,GAPROLE_NO_ACTION)

这个函数就能起作用,而  我在 连接状态下的  performPeriodicTask这个周期 函数里的中间 或者 末尾 调用 就不起作用呢!!??

已确认 程序是可以执行到GAPRole_SendUpdateParam这个函数的!感觉发送更新参数请求只能是在连接的第一时间做的第一件事情,

如果过了这个时间,连接状态下再怎么发送都不起作用力!现在的情况看来确实是如此!

但是我确实想在连接上运行一段时间后,再来更新连接间隔的参数呢!?  能不能实现!? 求TI员工出来解答解答!

坐等求解,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 如何在连接的状态下改变蓝牙模块(从机)和 APP之间的 通讯间隔?急,希望有高人回复,谢谢!
分享到: 更多 (0)