关于主机向从机发起连接请求
主机扫描到从机后,会发送一个连接请求,请求里面会包括一些连接参数,比如连接时间间隔、从机潜伏、连接超时等等参数,但是看主机的连接函数:
GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,DEFAULT_LINK_WHITE_LIST,addrType, peerAddr );
是调用了这个函数:
GAP_EstablishLinkReq( ¶ms );
而GAP_EstablishLinkReq( ¶ms );传递的就是主机的连接请求,这个连接请求的数据类型是个结构体,这个结构体定义如下:
typedef struct
{
uint8 taskID; //!< Requesting App/Profile's Task ID
uint8 highDutyCycle; //!< TRUE to high duty cycle scan, FALSE if not.
uint8 whiteList; //!< Determines use of the white list: @ref GAP_WHITELIST_DEFINES
uint8 addrTypePeer; //!< Address type of the advertiser: @ref GAP_ADDR_TYPE_DEFINES
uint8 peerAddr[B_ADDR_LEN]; //!< Advertiser's address
} gapEstLinkReq_t;
这个结构体里面并没有对主机和从机的连接间隔、从机潜伏、连接超时等等参数进行定义呀?所以我不是很难明白主机和从机的连接间隔、从机潜伏、连接超时等等参数是如何在连接的时候传递到从机上面的?
另外我看TI的主机例程(central)里面定义了
#define DEFAULT_UPDATE_MIN_CONN_INTERVAL 400
#define DEFAULT_UPDATE_MAX_CONN_INTERVAL 800
我想问的是主从机的连接间隔不是一个定值吗?这个连接间隔难道是400-800ms范围内的任意值吗?如果真是在范围内取值的话,我想把时间间隔定为一个确定的值,是不是只要把最小时间间隔和最大时间间隔设为相等就可以了,比如想设时间间隔为500,只需定义DEFAULT_UPDATE_MIN_CONN_INTERVAL 和DEFAULT_UPDATE_MAX_CONN_INTERVAL均为500 ?
希望大神们能不吝赐教一二!感激不尽!
楼主可以参考下面贴子中的内容,希望可以帮到你。
http://blog.csdn.net/ooakk/article/details/7302425
好像没回答楼主的问题
我也有同样的疑问。根据我的理解,蓝牙4.0的协议里提到过建立链接需要传递参数,但是TI应该是使用了默认的参数。在建立连接后,主机使用GAPCentralRole_UpdateLink来配置新的参数,估计在之后的协议栈版本中会有改进
经过验证,看来我说的没错,不过TI现有协议栈里已经包含相关的设置,只不过没有在例程中体现出来。如果不想使用默认参数,需要在初始化时加入以下设置
GAP_SetParamValue( TGAP_CONN_EST_INT_MIN, DEFAULT_UPDATE_MIN_CONN_INTERVAL );
GAP_SetParamValue( TGAP_CONN_EST_INT_MAX, DEFAULT_UPDATE_MAX_CONN_INTERVAL);
GAP_SetParamValue( TGAP_CONN_EST_LATENCY , DEFAULT_UPDATE_SLAVE_LATENCY );
GAP_SetParamValue( TGAP_CONN_EST_SUPERV_TIMEOUT ,DEFAULT_UPDATE_CONN_TIMEOUT );
然后在建立连接时会自动调用这些参数。
其中DEFAULT_UPDATE_MIN_CONN_INTERVAL,DEFAULT_UPDATE_MAX_CONN_INTERVAL, DEFAULT_UPDATE_SLAVE_LATENCY,DEFAULT_UPDATE_CONN_TIMEOUT是你自己定义的参数
TI的协议栈还是比较完善的,值得深究
你好,请问你改的这些参数是从机里面的还是主机里面的?
是主机里的,连接参数是由发起者来定义的。从机可以在连接后进行更新