连接间隔
就是两个连接事件之间的时间间隔,连接间隔以1.25为单位,连接间隔的值为6(7.5ms)~3200(4s).不同的应用可能要求不同的时间间隔。长的时间间隔的优势是显著地节省功耗,因为设备可以在连接事件之间有较长时间的休眠,坏处是当设备有应用数据需要发送时,必须要等到下一个连接事件;短的时间间隔优势是两设备连接频发,可以更快地收发数据,不利之处是设备因连接事件的到来而被频繁的唤醒,会有较多功耗.
在实际应用的时候,有时候需要发送数据快一点,这个时候我们可以把连接间隔改小一点,这样发送数据快,但是功耗大,当把数据发完的时候,可把连接间隔改小一点,这样可以降低功耗,达到一个均衡.比如穿戴设备连接上的时候,可能需要快速把本地数据发给手机,这个时候就可以把连接间隔设置小点。传送完毕后间隔设置大点。这样功耗就不会太大。
这个间隔 是指成功连接后 的周期性通讯时间,主机会根据使用情况 在 这个取值范围内 选择合适的 间隔时间,这个具体值是不可控的,所以需要划定一个范围使得通讯响应在自己的可控范围之内。这个具体值会影响到下一次通讯数据包的响应时间,需要根据自己的情况来调整这个范围达到 既省电又匹配程序响应速度 的目的。
比如:
大数据传递时:通讯数据包是连续传递的,主机会选择min值来进行通讯。
无数据传递时:通讯是空闲状态,主机会选择max值来定期询问从机状态,以保持连接不中断。(在空闲时,由于使用max的值作为通讯周期,会影响到程序的下一个命令的发送时间)
2
SLAVE_LATENCY: (从机所存)
Slaver设备没有数据要发时,跳过一定数目的ConnectionEvent的值,Rang:0-499.
跳过的interval个数,设置为0则每次interval都连接。数字约小通信速度越快,但是功耗越高
注意:这个参数更重要的应用 :比如在距离远或者干扰大的时候 无数据通信的时候。把这个值设大可以减少掉线概率。
比如防丢器:放在口袋里面假如这个参数设置为0 表示规定时间内必须响应从机,不然就以为是蓝牙断开了。假如设置为5。假如信号不好的时候,即使中间丢了4个,只接受了1个就表示连接了。因为他会跳过其中4个 ,保证了不掉线的概率
3.
TIMEOUT:(连接超时)
超时时间,就是两个设备在连接的这段时间没有发生通讯而导致连接自动断开的值。Range(10ms-----32s)
连接超时时间,用在信号不太好的情况下, 给对方一点时间。超过这个时间通信就建立失败
有阅读蓝牙协议栈和一些材料,简单的说就是主机决定连接参数的值( connection interval, slave latency, timeout),从机可以请求更新这些参数,主机决定是不是接受,接受的值是多少。所以是会出现手机接受参数后和从机请求的参数有偏差,或者甚至是拒绝(ios)。
这里不得不提到:android 和 ios 的ble开发与兼容不是一个等级。
相同点:android 和 ios 都是在手机和设备建立连接时就会默认设置这些参数,app开发是无法修改这些参数的,这些默认参数由手机厂商决定。
不同点:当产品基于功耗等的考虑是应该要修改这些参数的,都是由从机提出更新申请,ios 有保护机制当从机给的参数超过它的范围它会拒绝这些不合理参数,然后使用默认值。而android 目前(4.3 4.4)是都会接受从机的更新参数,即使不合理。这里就会照成一种 设备通信 ios可以 android出问题 而且android即使接受参数并且使用这些参数更新后还会出现和参数不和的现象,典型的就在这个timeOut上,是会比更新请求里的timeOut长而且不同手机长的时间不一样。ios 好像是长5秒
举例:
gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; // 0.5sec 连接间隔时间,指定一个最大值和最小值,以供Master 建立连接
gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;// 1sec ,连接间隔时间,1.25毫秒的倍数,7.5ms~4s之间
gap_conn_params.slave_latency = SLAVE_LATENCY;// 从机潜伏,允许设备跳过的最大连接次数,为0,能快速收到Master发送过来的数据
gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT;// 监督超时时间,超时没有收到数据则认为连接断开