CC2642 数据长度扩展(LE Data Length Extension)

2023-11-03

概要

数据长度扩展(LE Data Length Extension)功能允许LE控制器在连接状态下发送具有高达251字节的PDU。在连接期间的任何时刻,主从设备可以协商该PDU大小。

这个和MTU不同,MTU是应用层的数据传输长度,这个是链路层的长度,即空口传输的数据长度。如果MTU比这个长度大时,那么L2CAP会进行分包再发送

数据长度扩展HCI命令和事件

以下HCI命令可用于与数据长度扩展功能相关的控制器交互:

        LE读取建议的默认数据长度命令,HCI_LE_ReadSuggestedDefaultDataLenCmd

        LE写入建议的默认数据长度命令,HCI_LE_WriteSuggestedDefaultDataLenCmd

        LE读取最大数据长度命令,HCI_LE_ReadMaxDataLenCmd

        LE设置数据长度命令,HCI_LE_SetDataLenCmd

使用示例

1、调用HCI_LE_ReadSuggestedDefaultDataLenCmd接口,返回HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH事件

static uint8_t SimplePeripheral_processStackMsg(ICall_Hdr *pMsg)
{
  // Always dealloc pMsg unless set otherwise
  uint8_t safeToDealloc = TRUE;

  switch (pMsg->event)
  {
    case HCI_GAP_EVENT_EVENT:
    {
      // Process HCI message
      switch(pMsg->status)
      {
        // Process HCI Command Complete Events here
        case HCI_COMMAND_COMPLETE_EVENT_CODE:
        {
          SimplePeripheral_processCmdCompleteEvt((hciEvt_CmdComplete_t *) pMsg);
        }break;
      }

    }break;
  }

  return (safeToDealloc);
}

static void SimplePeripheral_processCmdCompleteEvt(hciEvt_CmdComplete_t *pMsg)
{
  switch (pMsg->cmdOpcode)
  {
    case HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH:
    {
      u_printf("HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH\r\n");    

	  // 0: Status
	  // 1: Initial Max Tx Octets LSB
	  // 2: Initial Max Tx Octets MSB
	  // 3: Initial Max Tx Time LSB
	  // 4: Initial Max Tx Time MSB
      u_printf_hex((char *)pMsg->pReturnParam,5);
    }break;
  }
}

2、调用HCI_LE_ReadMaxDataLenCmd接口,返回HCI_LE_READ_MAX_DATA_LENGTH事件

static uint8_t SimplePeripheral_processStackMsg(ICall_Hdr *pMsg)
{
  // Always dealloc pMsg unless set otherwise
  uint8_t safeToDealloc = TRUE;

  switch (pMsg->event)
  {
    case HCI_GAP_EVENT_EVENT:
    {
      // Process HCI message
      switch(pMsg->status)
      {
        // Process HCI Command Complete Events here
        case HCI_COMMAND_COMPLETE_EVENT_CODE:
        {
          SimplePeripheral_processCmdCompleteEvt((hciEvt_CmdComplete_t *) pMsg);
        }break;
      }

    }break;
  }

  return (safeToDealloc);
}

static void SimplePeripheral_processCmdCompleteEvt(hciEvt_CmdComplete_t *pMsg)
{
  switch (pMsg->cmdOpcode)
  {
    case HCI_LE_READ_MAX_DATA_LENGTH:
    {
      u_printf("HCI_LE_READ_MAX_DATA_LENGTH\r\n");    

	  // 0: Status
	  // 1: Supported Max Tx Octets LSB
	  // 2: Supported Max Tx Octets MSB
	  // 3: Supported Max Tx Time LSB
	  // 4: Supported Max Tx Time MSB
	  // 5: Supported Max Rx Octets LSB
	  // 6: Supported Max Rx Octets MSB
	  // 7: Supported Max Rx Time LSB
	  // 8: Supported Max Rx Time MSB
      u_printf_hex((char *)pMsg->pReturnParam,9);
    }break;
  }
}

3、调用HCI_LE_WriteSuggestedDefaultDataLenCmd接口,返回HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH事件

static uint8_t SimplePeripheral_processStackMsg(ICall_Hdr *pMsg)
{
  // Always dealloc pMsg unless set otherwise
  uint8_t safeToDealloc = TRUE;

  switch (pMsg->event)
  {
    case HCI_GAP_EVENT_EVENT:
    {
      // Process HCI message
      switch(pMsg->status)
      {
        // Process HCI Command Complete Events here
        case HCI_COMMAND_COMPLETE_EVENT_CODE:
        {
          SimplePeripheral_processCmdCompleteEvt((hciEvt_CmdComplete_t *) pMsg);
        }break;
      }

    }break;
  }

  return (safeToDealloc);
}

static void SimplePeripheral_processCmdCompleteEvt(hciEvt_CmdComplete_t *pMsg)
{
  switch (pMsg->cmdOpcode)
  {
    case HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH:
    {
      u_printf("HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH\r\n");   

	  // 0: Status	
      u_printf_hex((char *)pMsg->pReturnParam,1);

    }break;
  }
}

4、调用HCI_LE_SetDataLenCmd接口,返回HCI_LE_SET_DATA_LENGTH事件

static uint8_t SimplePeripheral_processStackMsg(ICall_Hdr *pMsg)
{
  // Always dealloc pMsg unless set otherwise
  uint8_t safeToDealloc = TRUE;

  switch (pMsg->event)
  {
    case HCI_GAP_EVENT_EVENT:
    {
      // Process HCI message
      switch(pMsg->status)
      {
        // Process HCI Command Complete Events here
        case HCI_COMMAND_COMPLETE_EVENT_CODE:
        {
          SimplePeripheral_processCmdCompleteEvt((hciEvt_CmdComplete_t *) pMsg);
        }break;
      }

    }break;
  }

  return (safeToDealloc);
}

static void SimplePeripheral_processCmdCompleteEvt(hciEvt_CmdComplete_t *pMsg)
{
  switch (pMsg->cmdOpcode)
  {
    case HCI_LE_SET_DATA_LENGTH:
    {
      u_printf("HCI_LE_SET_DATA_LENGTH\r\n");   

      // 0: Status
      // 1: Connection Handle LSB
      // 2: Connection Handle MSB
      u_printf_hex((char *)pMsg->pReturnParam,3);

    }break;
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CC2642 数据长度扩展(LE Data Length Extension) 的相关文章

  • [BLE]CC2640之定时器(Clock)事件

    一 定时器 xff08 Clock xff09 所谓定时器本质上递减计数器 xff0c 当计数器减到零时可以触发某种动作的执行 这种动作可以通过回调函数来实现 xff0c 当定时器计时完成后 xff0c 自定义的回调函数会立即被调用 回调函
  • 蓝牙5.1的ble那些事儿

    既然要说5 1的那些事儿 那么必须的聊聊蓝牙4 0 本文就不在此长篇大论班门弄斧了 要了解4 0的同学请出门左拐直接去参考蜗窝科技大佬的文章 本人觉得对于想入门全面了解4 0的同学 此文章是不二选择的经典 在此只有膜拜的份了 不是广告哈哈
  • 蓝牙5.1的ble那些事儿

    到这里 对于非连接状态应该有一些新的认识了 接下来 顺其自然当然就是连接了 你谈对象 忙活半天 当然是想干点什么事情了 当然也有老司机翻车 连接上后 一端要主动向另一端发起问候 否则长时间不联系 那么就断开好了 主动问候的一端我们称之为ma
  • 蓝牙BLE---DA14683的SPI主机通信讲解

    DA14683的SPI主机通信例程 Date 2018 12 19 Create Jim 导入例程 首先导入ble peripheral例程或者pxp reporter例程 再到以下位置打开硬件SPI的宏定义 xff1a 获取SPI例程源码
  • BLE中的Service(服务)和characteristic(特征值)

    Service 服务 和characteristic 特征值 之间的关系 Service 服务 服务是用来完成特定功能或特性的数据和相关行为的集合 在GATT中 服务由其服务定义来定义 服务定义可能包含所包含的服务 强制性特征和可选特征 可
  • 【BLE】蓝牙抓包器 Ellisys 使用说明

    BLE 蓝牙抓包器 Ellisys 使用说明 常用功能 设备过滤 抓包的类型 添加观察的项目 协议解析 连接过程 Connection Indication LLCP Feature Request Response LLCP Length
  • 2021/9/29 TX POWER 蓝牙发射功率

    1 觉得挺奇葩 如果不是扩展包的话 就是TX power 设定 没法通过hci 下发 就是 在controller 设定好 也没法中途去变化 扩展包 有这个选项 能够改变 可以通过HCI 下发指令来更改 2 AD9361 设置发射功率 要注
  • 微信小程序之蓝牙 BLE 踩坑记录

    前言 前段时间接手了一个微信小程序的开发 主要使用了小程序在今年 3 月开放的蓝牙 API 此过程踩坑无数 特此记录一下跳坑过程 顺便开了另一个相关的小项目 欢迎 start 和 fork BLE MiniProgram API简介 微信小
  • BLE 和 Zigbee 肉眼读数(更新ing)

    BLE1M 画相位图 可以读出preamble 01010101 同步码 01101011 通过向下向上的轨迹来肉眼读 原理是需要看如何进行调制的 toolbox中是GMSK调制 所以反着推回去 就知道画相位图能直接肉眼读数了 同理Zigb
  • BLE低功耗的设置参数

    广播间隔 连接间隔 扫描间隔 扫描窗口 广播间隔 两个相邻广播事件之间的时间称为广播间隔 可以选择 20ms 10 28s 不等的间隔 通常 一个广播中的设备会每一秒广播一次 必须是 0 625ms 的整数倍 由于设备间的时钟会不同程度的漂
  • BLE蓝牙笔记----数据包解析

    本文是参考一些博文和书籍做的笔记 如有不适联系删除 参考 https www cnblogs com iini p 8977806 html BLE4 0 低功耗蓝牙 协议 总结 目录 1 广播包 1 1 PDU Type 1 2 MAC地
  • 蓝牙协议介绍

    1 广播 ADV Advertising 1 1 BLE 报文结构 BLE引入access address 概念 用来指明接收者身份 概 其中 0x8E89BED6 这个access address 比较特殊 它表示要发给周边所有设备 即广
  • Android - BlueTooth BLE 之 Central 与 Peripheral

    一 前言 Andorid 5 0 之前是无法进行 外围设备开发的 在Android 5 0 API 21 android bluetooth le包下 新增加 Scaner相关类和 Advertiser 相关类 目前最后使用Scanner相
  • ESP32-C3 应用 篇(实例二、通过蓝牙将传感器数据发送给手机,手机端控制 SK6812 LED)

    ESP32 C3 蓝牙部分我们学习了GATT 本文尝试使用蓝牙做一个简单的小应用 目录 前言 一 整体框架 二 数据传输部分 2 1 添加温湿度驱动组件 2 2 传感器数据传输程序 再次说明 ESP GATTS READ EVT 事件 2
  • 蓝牙解析(part7):BLE的连接

    转自Wowo大神的http www wowotech net bluetooth ble connection html 1 前言 了解蓝牙的人都知道 在经典蓝牙中 保持连接 Connection 是一个相当消耗资源 power和带宽 的过
  • Dialog DA14585——基本硬件资源配置

    GPIO DA14585共有3中类型的封装 WLCSP34pin QFN40pin QFN48pin 除去专用的RST GND XTAL ANT VBAT脚后 分别有14 25 32个IO口可用 目前最常用的封装类型是QFN40 处理单元
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络 友谊篇 低功耗蓝牙 Bluetooth Low Energy 是全球最具节能性的短距离无线通信技术之一 其低功耗的特性广受开发者和消费者赞誉 随着蓝牙mesh网络的推出 开发者可能想知道蓝牙mesh网
  • Telink BLE MESH开发

    一 前言 官网资料介绍建议采用DMA传输 串口数据的接收是放到了fifo中 但是串口发送也是采用的DMA 问题在于串口发送并没有建立缓冲器 而是判断当前DMA是否忙 如果忙数据直接丢弃 这样做显然不合理 如果发送时DMA忙应该将数据放到缓冲
  • win32下Qt5BLE蓝牙开发笔记

    BLE简介 BLE蓝牙是蓝牙2 0以上的蓝牙模块 经典蓝牙是蓝牙2 0以下的蓝牙 蓝牙分为客户端和服务器两端 经典蓝牙可以通过socket编程进行客户端与服务器之间的通信 与网络socket相似 BLE蓝牙则无法使用这种方式进行通信 BLE
  • 蓝牙ble tips3-MAC地址

    和计算机网络IP地址类似 BLE也会有属于自己的一个地址 BLE设备地址 蓝牙地址 也称作 Bluetooth MAC Media Access Control 地址 是一个48位的唯一硬件标识符 用于在蓝牙设备之间建立连接和通信 它由全球

随机推荐

  • 大疆没有边界:刚拳打GoPro,又脚踢优必选

    李根 发自 纽凹非寺 量子位 报道 公众号 QbitAI 干一行 干好一行 而且刚一出手就卓尔不凡 配得上这样标准的公司全球都不多 但DJI大疆创新肯定位列名单 刚刚推出的教育机器人产品 也在印证上述判断 挺进教育领域 6月12日 大疆发布
  • 百度2011.10.16校园招聘会笔试题

    百度2011 10 16校园招聘会笔试题 一 算法设计 1 设rand s t 返回 s t 之间的随机小数 利用该函数在一个半径为R的圆内找随机n个点 并给出时间复杂度分析 解 通过求得点的坐标的方法 代码如下 void GetNPoin
  • python逻辑控制

    usr bin python encoding utf8 while循环 Fibonacci series 斐波纳契数列 两个元素的总和确定了下一个数 a b 0 1 while b lt 10 print b a b b a b if判断
  • 全字母句(字符串) SDUT

    全字母句 Time Limit 1000 ms Memory Limit 65536 KiB Problem Description 全字母句 pangram 指包含字母表中全部 26 种英文字母 不区分大小写 的句子 其常被用于展示英文字
  • 该怎么学习区块链技术?

    1 入圈之前 出来学习的第一步是出来 在区块链的世界里面 链上的数据都是资产 所以骗子多 入圈的第一步当然是要保护好自己 建议在正式入圈前 先完整的阅读这个文档 这是安全大牛余弦出品 必属精品 看完这个文档之后 对于常见的概念以及对 Met
  • compilation error错误是什么原因_Java专题讲解——Java错误处理机制

    世界上并不存在不会出错的系统 只要是软件系统就一定会在运行的过程中出现开发人员无法预料的错误 如何处理意外发生就是我们作为一名开发人员所必须深入思考的问题 Java语言提供了完善的异常处理机制 它有效的降低了编写以及维护的门槛 这也是Jav
  • 多数据源dynamic.datasource,SpringBoot+MybatisPlus+PostgreSQL连接数据库

    所需依赖
  • 软件从一个计算机系统转换到另一个,MatrikonOPC常见问答:如何将MatrikonOPC软件许可证从一台计算机转移到另一台计算机?...

    MatrikonOPC常见问答 如何将MatrikonOPC软件许可证从一台计算机转移到另一台计算机 如题 如何将MatrikonOPC软件许可证从一台计算机转移到另一台计算机 许可程序 解决方案 解除许可程序 授权实用程序 我们的大多数软
  • python中anaconda怎么样_python中anaconda有什么用

    python中anaconda有什么用 发布时间 2020 11 16 10 05 49 来源 亿速云 阅读 61 作者 小新 了解python中anaconda有什么用 这个问题可能是我们日常学习或工作经常见到的 希望通过这个问题能让你收
  • 36小时极客嘉年华

    FISCO BCOS是完全开源的联盟区块链底层技术平台 由金融区块链合作联盟 深圳 简称金链盟 成立开源工作组通力打造 开源工作组成员包括博彦科技 华为 深证通 神州数码 四方精创 腾讯 微众银行 亦笔科技和越秀金科等金链盟成员机构 代码仓
  • python之__init__()、__call__()、__str__()、__del()__和__all__,以及pytorch的nn.Module的forward函数在实例化的时候不需要被调用。

    python基础语言之 init call str del 和 all 的用法及讲解 以及为什么pytorch的nn Module的forward函数在实例化的时候不需要被调用 下面的所有内容都来自于这些链接 1 python基础语言之 i
  • 网校搭建7:上架第一门课

    主页设置完了 网校没课程怎么行呢 现在就来添加第一门课 Step1 添加分类 在MeEdu的框架下 每一个课程都是属于一个分类 比如我有六门数学课 分别对应一年级到六年级 但是都属于是数学 那么分类就是数学 路径 视频 分类 添加保存即可
  • 剑指Offer第四十五题:扑克牌顺子

    题目描述 LL今天心情特别好 因为他去买了一副扑克牌 发现里面居然有2个大王 2个小王 一副牌原本是54张 他随机从中抽出了5张牌 想测测自己的手气 看看能不能抽到顺子 如果抽到的话 他决定去买体育彩票 嘿嘿 红心A 黑桃3 小王 大王 方
  • Docker 部署 Seata Server(使用nacos 做为注册中心和配置中心)

    组件版本关系 版本说明 每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本 经过验证 自行搭配各组件版本不保证可用 如下表所示 最新版本用 标记 docker 拉取 seata镜像 seata github地
  • Where is the xm Command in XenServer

    For those of you have used vanilla Xen will know about the xm command and what it does While I ve found in a few places
  • 小黑升级记----记ThinkPad470p加装固态盘

    目录 一 缘起 二 拆机 三 配件选择 四 安装 五 系统迁移 六 总结 一 缘起 本着做开发来用的目的 两年前买了ThinkPad T系列的470P 之所以选择ThinkPad 是因为之前R系列的本 用了接近10年 除了USB插口老化 里
  • vue中多个表单同时校验

    vue中多个表单同时校验 开发过程中 有时候会遇到需要对多个表单进行校验 需要利用Promise的特性进行解决 使用Promise进行一个队列校验 表单校验 submitForm refName string return new Prom
  • Vcenter 6.7添加主机报错解决方法

    出现故障环境为 Vcenter 6 7 40000 Esxi 6 7 update3 14320388 在添加新ESXI主机时进度条在80 报错 出现了常规系统错误 Unable to push CA certificates and CR
  • GD32替代STM32全过程记录

    文章目录 看完就懂 GD32替代STM32全过程记录 一 前言 二 GD32与STM32 什么是GD32 GD32F10x F30x和STM32F10x资源对比 GD32F10x F30x与STM32F10x软硬件设计对比 三 程序下载方法
  • CC2642 数据长度扩展(LE Data Length Extension)

    概要 数据长度扩展 LE Data Length Extension 功能允许LE控制器在连接状态下发送具有高达251字节的PDU 在连接期间的任何时刻 主从设备可以协商该PDU大小 这个和MTU不同 MTU是应用层的数据传输长度 这个是链