我正在运行一个Android应用程序(自定义),扫描附近的蓝牙低功耗设备,我注意到某些设备的广告数据包比规格规定更长。扫描设备是运行Android 6.0的Nexus 5.
我在ScanResult对象02 01 06 (flags)
0D FF DF 00 57 30 46 30 30 33 43 45 56 5A (manufacturer specific data)
11 07 6D 69 73 66 69 74 A6 34 4A 7D 7F 95 01(<-expected end of advertise) 00 DA 3D (UUID, 128-bit)
07 09 46 6F 73 73 69 6C (device name)
03 03 12 18 (UUID, 16-bit)
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (leftover bytes)
上使用以下行来获取字节数组
我知道ScanRecord的字节数组实际上是由广告数据(不包括mac地址)和扫描响应构成的,所以我希望每个字节有31个字节,总共62个字节。这是我收到的总数组的大小,但看起来广告数据使其成为数组的响应部分。格式遵循规范,其中GAP的第一个字节是长度,下一个字节是GAP类型,下一个长度为1个字节是数据。
但是使用这种格式,有问题的设备会将数据字段扩展到响应部分。以下是十六进制数组的示例,每个GAP位于不同的行:
{{1}}
我并不真正关心扫描响应数据,但我很困惑BLE设备如何发送大于31字节的广告包,如果它是4.2规格(我知道蓝牙5允许更大的数据包,但是制造商声明它使用4.2)。我还可以看到设备的名称显示应该,但在响应部分。
有谁知道为什么会出现这种情况?感谢。
答案 0 :(得分:0)
可能这些设备根本不遵循规范(要求输入不要越过数据包边界)。所以你的设备可能会发送
@{
Layout = null;
}
@model NSDataComponent.Home
<section id="home" data-stellar-background-ratio="0.6" data-stellar-vertical-offset="20">
作为广告数据和
02 01 06 0D FF DF 00 57 30 46 30 30 33 43 45 56 5A 11 07 6D 69 73 66 69 74 A6 34 4A 7D 7F 95
作为扫描响应数据。例如,您可以在HCI日志中看到这是否正确。如果是这样,您应该向该BLE设备的制造商投诉。