CC2540作为主机如何获取当前的连接参数
大家好,以下有几个问题向大家咨询:
1. CC2540在作为从机时,可以通过GAPRole_SetParameter()及GAPRole_GetParameter()来设置及获取连接参数,请问CC2540作为主机时是如何设置及读取连接参数的?GAPCentralRole_SetParameter()中并没有连接参数的读写。
2. 从机在初始化时会设置连接参数,并且需要使能连接参数更新,才会请求主机更新连接参数。那么在更新连接前的连接参数是由主机设定的吗?还是BLE底层本身在连接时就有特定的默认参数呢?
3. GAPCentralRole_SetParameter()中有几个参数每看懂,希望能帮忙描述下:
GAPCENTRALROLE_IRK
GAPCENTRALROLE_SRK
GAPCENTRALROLE_SIGNCOUNTER
Shaokai,
1. 主机和从机不一样,不会请求从机去更新连接参数。主机会接受从机的更新参数请求,然后进行参数更新。主机可以用 GAPCentralRole_UpdateLink() 来更新参数。
2. 底层没有默认参数,协议栈规定了一些范围。就像1 说的一样,从机可以请求主机更新成从机想要的参数,通过 GAPRole_SendUpdateParam()向主机发送请求。 在初始化的哦时候使能不是能参数更新,跟你想不想要手动更新没有关系。你手动调用GAPRole_SendUpdateParam()也能达到目的。请仔细追踪一下使能之后的代码就会明白。
3. 这几个是配对绑定用的,会在初始化的时候从flash里面读出来,这个跟你要开发的应用程序没有任何关系,不必关心。
Yan
在simpleBLECentral工程中,我通过simpleBLECentralEventCB()来监听 连接更新事件:
case GAP_LINK_PARAM_UPDATE_EVENT://连接参数更新
{
NPI_WriteTransport("Param Update\n",13);
}
break;
在主机与设备建立连接几秒后,就会自动触发这个事件。
而我使用函数GAPCentralRole_UpdateLink(),也能触发这个事件的发生。
请问:
1. 第一次事件的触发,是来自从机的更新连接参数请求吗?如果不是,那应该如何解释。
2. 你说的第一点中“主机不会请求从机更新连接参数”,那么我调用GAPCentralRole_UpdateLink()这个函数更新的参数是...
——换句话说,我调用这个函数并不是去请求从机更新连接参数,那么我给这个函数输入的几个参数是给谁用的呢?我就没明白这个函数到底做了什么。。。
simpleBLEConnHandle,
DEFAULT_UPDATE_MIN_CONN_INTERVAL,
DEFAULT_UPDATE_MAX_CONN_INTERVAL,
DEFAULT_UPDATE_SLAVE_LATENCY,
DEFAULT_UPDATE_CONN_TIMEOUT
shaokai,
1. 是的,第一次应该是从机的请求。
2. GAPCentralRole_UpdateLink()这个就直接去更新连接参数了,而不会去请求从机去更新。注意,在BLE中,只允许主机去更新连接参数,从机只能发出请求,“主机,求求你,根据我的要求,帮我更新一下连接参数吧,好吗?”, 明白了?
Yan
如前所述,第一次连接更新是从机请求的,第二次是我自己调用GAPCentralRol_UpdateLink()触发的。
我暂且这么理解:调用GAPCentralRol_UpdateLink()是 应用层将参数 更新到链路层(不知道这么理解对不对)。
既然前面从机已经请求过,我现在在主机中又再请求一次。如果这两组参数不兼容的话,在第二次更新连接参数后会怎么样?是否会造成连接异常呢。
好吧,也许我的理解能力比较有限,还希望你能包容包容。(*^__^*)
shaokai,
你的理解是对的。
主机再请求一次的话,那么就以新的参数为准。
每次更新,都会放弃原来参数,而采用新的参数。
Yan
那么为保证连接的稳定性,我是否应该这么做:
在从机请求过连接更新事件 之后,主机就尽量不要再调用GAPCentralRole_UpdateLink()来更新连接参数了?
Thanks