关于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协议数据的**

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WinForms是一种用于创建Windows桌面应用程序的框架,BLE蓝牙通信是一种低功耗蓝牙技术,用于在设备间进行无线通信。在WinForms应用程序中实现BLE蓝牙通信可以通过使用C#编程语言和相关的BLE库实现。 首先,需要在WinForms应用程序中添加BLE蓝牙通信功能的相关库,并进行引用。然后,通过调用相关的API和库函数来实现BLE蓝牙设备的搜索、连接和数据通信功能。可以通过事件驱动的方式来处理蓝牙设备的连接状态变化、数据接收等情况,从而实现与BLE设备的交互。 在WinForms界面中可以设计相关的UI元素,如按钮、文本框等,用于触发BLE设备搜索、连接等操作,同时显示蓝牙设备的连接状态和接收到的数据。通过编写相关的事件处理函数来实现UI元素与BLE蓝牙通信功能的交互。 在编程过程中,需要考虑BLE蓝牙通信的低功耗特性和数据传输的稳定性,可以通过优化程序代码和使用合适的BLE通信协议来提高通信效率和可靠性。 最后,可以通过调试和测试来验证BLE蓝牙通信功能的可靠性和稳定性,确保WinForms应用程序能够与BLE设备进行正常的通信,并实现预期的功能。 综合而言,在WinForms应用程序中实现BLE蓝牙通信需要充分理解BLE蓝牙通信技术和WinForms框架,通过编程实现与BLE设备的连接和数据通信功能,同时结合界面设计和调试测试来确保功能的实现和用户体验的良好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

古木12345

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

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

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

打赏作者

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

抵扣说明:

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

余额充值