关于BLE通信中WithoutResponse详细介绍

什么是WithoutResponse

在蓝牙低功耗(BLE)协议栈中,Characteristic 的写操作具有两种属性,分别为 "write" 和 "writeWithoutResponse"。

  • 使用 "write" 属性发送命令时,需要接收端发送确认(ACK);
  • 而使用 "writeWithoutResponse" 属性发送命令时,则不需要接收端发送确认(ACK)。

为了更灵活地控制写操作的行为,我们的操作系统引入了一个设置参数WithoutResponse。

  • 通过设置 WithoutResponse=true,表示使用 "writeWithoutResponse" 属性进行写操作
  • 通过设置 WithoutResponse=false,表示使用 "write" 属性进行写操作

WithoutResponse在不同的操作系统下的差异

  • 在Windows/安卓系统下,可以在特征没有writeWithoutResponse属性,只有write属性的情况下,发送WithoutResponse=true命令
  • 在macOs/ISO系统下,不可以在特征没有writeWithoutResponse属性,只有write属性的情况下,发送WithoutResponse=true命令

注意:

确切地说,只有在GATT(Generic Attribute Profile)中,特定的Characteristic声明了支持**Write Without Response属性时,才能在写操作中设置WithoutResponse**为true。

在BLE中,GATT表明了设备之间的通信协议,包括服务、特征(Characteristic)以及它们的属性。如果一个Characteristic声明了支持**Write Without Response属性,那么在实际的写操作中,你可以选择设置WithoutResponse**为true,以提高数据传输效率。在这种情况下,接收端不会发送ACK确认,从而加快了数据传输速度。

在WinRT中,特征(Characteristic)是否支持**Write Without Response属性可能受到操作系统或BLE堆栈的一些默认设置或行为影响。有时,操作系统或BLE堆栈可能会允许在特征不显式声明支持Write Without Response的情况下发送WithoutResponse=true的写操作。在实际应用中,这可能是由于操作系统或堆栈的实现选择了一种默认行为,或者可能是特定的BLE堆栈或驱动程序允许这种行为。这种情况可能是特定于操作系统、BLE堆栈版本或硬件平台。虽然某些系统可能允许这样的写入,但为了确保应用程序的可移植性和与规范的一致性,最好还是在进行写操作之前检查Characteristic的属性,以确保它明确支持Write Without Response**

抓包分析WithoutResponse在BLE的ATT协议中的定义

Windows下通过Wireshark抓包分析

  1. WithoutResponse=false

  2. WithoutResponse=true

MacOs下通过PacketLogger抓包分析ATT协议

  1. WithoutResponse=false
  2. WithoutResponse=true
    1. 注意在macOs下如果特征没有writeWithoutResponse属性,发送**WithoutResponse=true命令是无法抓到ATT协议数据的**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/337773.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿赵UE学习笔记——9、材质和材质实例

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎,这次来了解一下UE里面关于材质的一些概念性的东西。 一、材质 材质这个概念,在所有三维软件里面都会有,比如3Dsmax里面的材质球,或者Unity里面的Material…

企业是否需要呼叫外包

随着企业的不断扩大业务不断增加,对于外呼和企业客服的质量有着更高的要求了,本着专业的人干专业的事情,呼叫中心外包服务成为许多企业的不二选择。然而,对于企业是否应该合作外包呼叫中心,仍需要从多个角度进行考虑。…

Python3 安装教程(windows)

Python (官网)是这两年来比较流行的一门编程语言。相对简单的语法以及丰富的第三方库。 步骤有三步: 1.下载 Python 安装包 2.安装 Python 3.查验是否安装成功 一.下载 Python 安装包 (Python、Sublime 官方下载地址是外国的服…

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域并放大,Kotlin(3)

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域并放大,Kotlin(3) 在文章2 Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域,Kotlin(2)-CSDN博客 的基础上&…

NVIDIA GPU 与服务器型号匹配查询

NVIDIA GPU 与服务器型号匹配查询 1. Qualified System Catalog (认证服务器目录)2. NVIDIA L40S2.1. NVIDIA L40S GPU Specifications References 1. Qualified System Catalog (认证服务器目录) https://www.nvidia.cn/data-center/data-center-gpus/qualified-system-catal…

jmeter监控服务器资源使用情况

GitHub - undera/perfmon-agent: Server metrics fetching agent, based on SIGAR 下载安装包:ServerAgent-2.2.3.zip 解压先 启动,如果是windows运行startAgent.bat,如果是linux运行startAgent.sh 注意:linux上注意权限的问题…

NPN PNP磁性开关区别

自记: 网上有些前后内容是相反的,估计自己就没明白,此为分析后得出结论,看完后可懂 1、NPN(源型):当导通时输出低电平 当导通时,信号输出线out和0v线连接,相当于输出低电…

还不会python 实现常用的数据编码和对称加密?看这篇文章就够啦~

相信很多使用 python 的小伙伴在工作中都遇到过,对数据进行相关编码或加密的需求,今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式,如何使用 python 去实现。话不多说,接下来直接进入主题: 前言 1…

基于6个IGBT的全桥电路simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 三相逆变器全桥电路原理 4.2 全桥电路应用领域 5.完整工程文件 1.课题概述 基于6个IGBT的全桥电路simulink建模与仿真. 2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a 02_018m …

VUE3相比VUE2升级了哪些内容

目录 一、Vue 3 、Vue 2 对比及提升项 二、 Vue 3 创建app.vue示例 三、Vue3 的setup、Vue2 的 data对比 一、Vue 3 、Vue 2 对比及提升项 性能提升:Vue 3 做了大量的优化工作,提升了运行时的性能。例如,在模板编译时进行的静态分析和优化…

文心、讯飞、ChatGPT大模型横向比较

三种大模型的横向比较分析发现,大模型最终的优异表现依赖于模型规模的突破。 通过比较不同规模的大模型,分析发现大模型的强大生成能力主要源自模型的参数量级的飞跃。尽管方法论上大同小异,但参数量的指数级增长是实现质的飞跃的关键所在。“大力出奇迹”可以说是大模型取得辉…

刷题第十五天-存在重复元素Ⅲ

存在重复元素Ⅲ 题目要求 解题思路 主要使用滑动窗口方法,让滑动窗口代销固定为t。 本题最大的难点在于快速地找到滑动窗口内的最大值和最小值,以及删除指定元素。 如果遍历求滑动窗口内的最大值和最小值,时间复杂度是O(K&#…