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

背景

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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路人 假

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值