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 Mesh(二)BLE Mesh 基础

    Bluetooth Mesh Basics 1 Mesh vs Point to Point2 Devices and Nodes3 Elements4 Messages5 Addresses6 Publish Subscribe7 Sta
  • BLE Mesh(四)BLE Mesh 安全

    BLE Mesh Security 1 Mesh Security is Mandatory2 Mesh Security Fundamentals3 Separation of Concerns and Mesh Security Key
  • BLE中的Service(服务)和characteristic(特征值)

    Service 服务 和characteristic 特征值 之间的关系 Service 服务 服务是用来完成特定功能或特性的数据和相关行为的集合 在GATT中 服务由其服务定义来定义 服务定义可能包含所包含的服务 强制性特征和可选特征 可
  • ESP32-C3 学习测试 蓝牙 篇(四、GATT Server 示例解析)

    了解了蓝牙 GATT 相关概念 趁热打铁 分析一下官方示例 GATT Server 的应用程序架构 目录 前言 一 GATT Server 示例分析 1 1 初始化 1 2 回调函数 gatts event handler gap even
  • Telink泰凌微TLSR8258蓝牙开发笔记(一)

    一 开发环境搭建 1 1 软件开发环境 1 1 1 开发的IDE IDE下载链接 1 1 2 烧录工具 DBT下载地址 1 1 3 蓝牙SDK 蓝牙SDK下载地址 1 2 硬件开发环境 8258开发板 烧录工具一套 二 运行例程 并使能打印
  • BLE低功耗蓝牙协议栈

    目录 一 BLE低功耗蓝牙协议栈 1 蓝牙核心协议 Bluetooth Core 2 蓝牙应用层协议 Bluetooth Application 3 BLE低功耗蓝牙核心协议层详解 Bluetooth Core 物理层 PHY 链路层 LL
  • App 和设备通过蓝牙连接收发数据

    一 Android 中进行蓝牙开发需要用到的类和执行过程 1 使用BluetoothAdapter startLeScance来扫描设备 2 在扫描到设备的回调函数中的得到BluetoothDevice 对象 并使用Bluetooth st
  • BLE MESH组网(一)简介和基本概念

    BLE MESH组网 一 BLE MESH简介 BLE MESH来源 BLE MESH用处 BLE MESH的通讯方式 管理洪水 市场内蓝牙设备支持 安全性 BLE MESH协议栈模型 BLE MESH基本概念 节点 元素 模型和状态 地址
  • Android(Java)开发之获取BLE广播包(扫描后获取:广播数据+扫描应答数据+RSSI)

    一 安卓BLE的广播包数据从哪获取 通常 安卓APP读写BLE设备的数据都是建立连接后通过GATT获取或修改 但是 BLE设备向外广播时本身会携带一部分有用信息 如将传感数据存放到广播包的自定义数据段 最近接触的一个iBeacon Eddy
  • ESP32-C3 学习测试 蓝牙 篇(七、GATT 数据通信 — 发送自定义数据)

    前面我们已经入门了 GATT 的开发 更进一步 进行想要的数据通信 目录 前言 1 通信问题思考 2 如何才能每次传输不同的数据 3 对 handle 的认识 4 继续尝试 5 测试成功 结语 前言 本来计划直接做一个蓝牙的小应用 首先得实
  • 蓝牙PHY6222添加OTA升级功能

    主要步骤 1 代码添加 ota app service 2 keil软件添加ota app代码 3 烧录软件添加ota设置 4 手机ota app升级 准备 奉加微电子官网下载6222的代码SDK V3 0以上 下载官网的PhyPlusKi
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络 低功耗 低功耗蓝牙 低功耗蓝牙 Bluetooth Low Energy 是一项相当成功的无线技术 如今已经很难找到不支持低功耗蓝牙的智能手机或平板电脑了 可以说它是可穿戴技术兴起的关键因素 在医疗设
  • 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 比较特殊 它表示要发给周边所有设备 即广
  • 蓝牙Mesh LPN节点

    选择LPN模式的原因 能有效的降低产品功耗 比如 一个温湿度传感器产品 需要超过设定阈值才会从上送数据 这样就没有长时间唤醒时间 就无法接收到网关下发的设置数据 这时候就需要LPN模式 LPN的节点正常还是超过阈值才会上报数据 然后会过一段
  • Uniapp低功耗蓝牙操作实例

    uniapp低功耗蓝牙在移动端使用较为平常 本文相较于官方文档介绍一下低功耗蓝牙的操作案例 即取即用 低功耗蓝牙虽工作原理与经典蓝牙类似 但是有着独特的架构体系 所以LE独立出来成为一种蓝牙形态 不过LE和经典蓝牙使用相同的2 4G无线电频
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络基本概念 本周跟大家分享解密蓝牙mesh系列第四篇 点这里查看第一篇 第二篇和第三篇文章 同时也是蓝牙mesh网络基本概念的第二部分 借助蓝牙mesh 您将能够创建大型网络并支持成千上万的设备之间进行安
  • 蓝牙解析(part7):BLE的连接

    转自Wowo大神的http www wowotech net bluetooth ble connection html 1 前言 了解蓝牙的人都知道 在经典蓝牙中 保持连接 Connection 是一个相当消耗资源 power和带宽 的过
  • 使用Arduino开发ESP32(22):蓝牙作为客户端使用

    文章目录 目的 基础准备 搜索蓝牙设备 搜索设备 信息查询 连接与交互 总结 目的 ESP32的蓝牙除了作为服务器 从设备 使用还可以作为客户端 主机 使用 这篇文章将对相关内容做个简单说明 基础准备 这篇文章中测试需要先准备一个蓝牙服务器
  • Telink BLE MESH开发

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

随机推荐

  • 大疆没有边界:刚拳打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是应用层的数据传输长度 这个是链