Bluetooth BLE写入命令(无响应写入)

Bluetooth BLE写入命令(无响应写入),bluetooth,bluetooth-lowenergy,Bluetooth,Bluetooth Lowenergy,在蓝牙4.0-4.2规范第3卷F部分中,我可以找到以下文字: 已收到但无法处理的命令和通知,原因是 应丢弃缓冲区溢出或其他原因。因此,这些PDU 必须被认为是不可靠的 我想知道,谁收到了?对于写入命令,是从ATT客户端接收的ATT服务器,还是从丢弃写入命令的客户端应用接收发送写入命令请求的发送方主机的ATT层,也就是说,它甚至在通过空中发送之前就被丢弃了?空中接口通常在为连接事件缓冲的数据包数量上受到限制。同上,通知与另一个方向的指示(服务器到客户端)空中接口通常在其为连接事件缓冲的数据包数量上

在蓝牙4.0-4.2规范第3卷F部分中,我可以找到以下文字:

已收到但无法处理的命令和通知,原因是 应丢弃缓冲区溢出或其他原因。因此,这些PDU 必须被认为是不可靠的


我想知道,谁收到了?对于写入命令,是从ATT客户端接收的ATT服务器,还是从丢弃写入命令的客户端应用接收发送写入命令请求的发送方主机的ATT层,也就是说,它甚至在通过空中发送之前就被丢弃了?

空中接口通常在为连接事件缓冲的数据包数量上受到限制。同上,通知与另一个方向的指示(服务器到客户端)

空中接口通常在其为连接事件缓冲的数据包数量上受到限制。同上,通知与其他方向的指示(服务器到客户端)

“收到的命令和通知…”

例如,命令将请求从客户端写入服务器,因此服务器是接收方。该过程是客户端向服务器发送写请求,当服务器接收到写请求(较低层首先接收到)但发现该写请求没有缓冲区(或其他原因)时,客户端将丢弃该写请求(较高层不会接收该写请求)

相反,通知是从服务器发送到客户端的,因此客户端是接收者。当客户端收到通知但没有缓冲区(或其他原因)时,它将放弃通知。 这是关于通信协议的流量控制,而不仅仅是针对蓝牙。所以,如果您了解流量控制,您可能不会有这种困惑

“收到的命令和通知…”

例如,命令将请求从客户端写入服务器,因此服务器是接收方。该过程是客户端向服务器发送写请求,当服务器接收到写请求(较低层首先接收到)但发现该写请求没有缓冲区(或其他原因)时,客户端将丢弃该写请求(较高层不会接收该写请求)

相反,通知是从服务器发送到客户端的,因此客户端是接收者。当客户端收到通知但没有缓冲区(或其他原因)时,它将放弃通知。 这是关于通信协议的流量控制,而不仅仅是针对蓝牙。所以,如果您了解流量控制,您可能不会有这种困惑

我想知道,谁收到了?对于写入命令,是ATT服务器从ATT客户端接收

是的,是ATT服务器。ATT和GATT都不可靠。然而,链路层是可靠的。我假设较高的一层(例如应用程序)应构成可靠性检查

或者它也可能是接收数据的发送方主机的ATT层 请求从删除 Write命令,即它在发送之前就被删除了 空气

这是不符合规格的,我认为蓝牙堆栈应该返回相应的错误,例如“故障”,因为没有内存

我想知道,谁收到了?对于写入命令,是ATT服务器从ATT客户端接收

是的,是ATT服务器。ATT和GATT都不可靠。然而,链路层是可靠的。我假设较高的一层(例如应用程序)应构成可靠性检查

或者它也可能是接收数据的发送方主机的ATT层 请求从删除 Write命令,即它在发送之前就被删除了 空气


这不符合规范,我认为蓝牙堆栈应该返回相应的错误,例如由于没有内存而导致的“failer”。

是的,控制器用于传出数据包的空间有限。所以你的意思是我引用的这句话也可以指从主机接收传出数据包的控制器(通过空中传送)?正确。我对这一点的解释是,接收方会悄悄地丢弃溢出其数据包缓冲区的数据包。对于已确认的操作,这不是问题,因为GATT操作不能重叠,因此最多只有一个操作未完成-不可能溢出任何缓冲区。是的,控制器用于传出数据包的空间有限。所以你的意思是我引用的这句话也可以指从主机接收传出数据包的控制器(通过空中传送)?正确。我对这一点的解释是,接收方会悄悄地丢弃溢出其数据包缓冲区的数据包。对于已确认的操作,这不是一个问题,因为GATT操作不能重叠,因此最多只有一个操作未完成-不可能溢出任何缓冲区。因此,您的解释是,如果应用程序太快发送太多写入命令,蓝牙堆栈应回复“已满,没有剩余缓冲区空间”?错误代码取决于不同堆栈供应商的实现。但是,如果你太快地调用“writeCharacteristic”,返回值就不应该是真的。我也看到Chris St John在下面的评论,但是由于缺乏声誉数字,我不能在他的行下发表评论。本地堆栈不应丢弃来自上层的任何数据,L2CAP flush命令除外(这是另一种情况),如果本地堆栈无法将数据发送到固件或air,则应返回错误。让我们回到本主题的最初目的:包含这些词的核心规范“3.3.2顺序协议”主要描述了客户端和服务器的通信机制。因此,您的解释是,如果应用程序发送太多写命令太快,蓝牙堆栈应回复“已满,没有剩余缓冲空间”?错误代码取决于不同堆栈供应商的实现。但是如果你打电话