cc2640官方demo更新连接参数service-CCservice

来源:互联网 发布:个人收支软件app 编辑:程序博客网 时间:2024/06/09 18:29

背景

cc2640项目需要添加oad功能,为了降低功耗,默认连接参数设置的比较大,这将导致oad时间过长,此时需要在oad之前先更新一组较小的连接参数,提高oad的速度。

更新连接参数的api

/******************************************************************** * @fn          GAPRole_SendUpdateParam * * @brief       Update the parameters of an existing connection * * @param       minConnInterval - the new min connection interval * @param       maxConnInterval - the new max connection interval * @param       latency - the new slave latency * @param       connTimeout - the new timeout value * @param       handleFailure - what to do if the update does not occur. *              Method may choose to terminate connection, try again,  *              or take no action * * @return      SUCCESS, bleNotConnected, or bleInvalidRange */bStatus_t GAPRole_SendUpdateParam(uint16_t minConnInterval,                                   uint16_t maxConnInterval,                                  uint16_t latency, uint16_t connTimeout,                                   uint8_t handleFailure)

移植官方ccservice的回调函数

/********************************************************************* * @fn      ccChangeCB * * @brief   Callback from Connection Control indicating a value change * * @param   paramID - parameter ID of the value that was changed. * * @return  none */static void ccChangeCB( uint8 paramID ){  // CCSERVICE_CHAR1: read & notify only  // CCSERVICE_CHAR: requested connection parameters  if (paramID == CCSERVICE_CHAR2)  {    uint8_t buf[CCSERVICE_CHAR2_LEN];    // Get new connection parameters    CcService_getParameter( CCSERVICE_CHAR2, buf);    // Update connection parameters    GAPRole_SendUpdateParam( BUILD_UINT16(buf[0],buf[1]),                             BUILD_UINT16(buf[2],buf[3]), // minConnInterval, maxConnInterval                            BUILD_UINT16(buf[4],buf[5]),                             BUILD_UINT16(buf[6],buf[7]),  // slaveLatency, timeoutMultiplier                            GAPROLE_TERMINATE_LINK);  }  // CCSERVICE_CHAR3: Disconnect request  else if (paramID == CCSERVICE_CHAR3)  {    // Any change in the value will terminate the connection    GAPRole_TerminateConnection();  }}

更新现象

测试发现按照官方demo这样直接更新连接参数,会导致断开连接,细查发现是会导致死机

解决方法

分析导致死机可能是跟ti-rtos有关,没有细查死机原因,解决这个死机问题,只需要将更新连接参数的接口放到其它地方执行,而不能在回调函数里面直接执行。

参考方法:使用定时器任务

0 0
原创粉丝点击