对于上述介绍的两种修改连接参数的方法,个人建议还是采用第二种方法,因为第一种方法在修改某一个参数的时候,可能会导致其他参数的变化,比如我们只修改了连接间隔,但从机延时可能会随之改变,这样我们就无法根据自己的需求控制连接参数的更新。
第二种方法在使用的时候有可能碰到一种情况,就是我们只想修改某一个或者某两个连接参数,剩下的参数想保持原有的,这样的话,我们需要在修改连接参数之前先去读取连接参数,然后将需要修改的参数进行重新设置即可,读取连接参数的代码如下:
uint16 interval;uint16 latency;uint16 timeout;GAPRole_GetParameter(GAPROLE_CONN_INTERVAL, &interval); GAPRole_GetParameter(GAPROLE_CONN_LATENCY, &latency); GAPRole_GetParameter(GAPROLE_CONN_TIMEOUT, &timeout);
下面我们通过一个实例来具体了解下连接参数修改的方法,需求是将连接间隔修改为25,从机延迟修改为8,超时时间不修改,更新失败后重新发送参数更新请求,本实例中主设备是安卓设备,从设备是CC2541。代码实现如下:
uint16 interval;uint16 latency;uint16 timeout;GAPRole_GetParameter(GAPROLE_CONN_INTERVAL, &interval); GAPRole_GetParameter(GAPROLE_CONN_LATENCY, &latency); GAPRole_GetParameter(GAPROLE_CONN_TIMEOUT, &timeout); GAPRole_SendUpdateParam( 25, 25, 8, timeout, GAPROLE_RESEND_PARAM_UPDATE);
该过程抓包显示如下:
从抓到的包中我们看到首先是S->M,即从设备发送连接参数更新请求,请求中带有申请的连接参数,然后M->S,即主设备返回连接参数更新响应,Result为0,表示同意修改更新。最后M->S发送Datatype为Control的链路层连接参数更新控制规程,携带同意的连接参数,这样,新的连接