我是蓝牙系统的新手,我正在努力了解苹果新技术iBeacon所使用的数据。
已经有一些很好的答案解释了它是如何工作的,我一直在阅读我能找到的一切(尤其是蓝牙规范)。尽管如此,我还是遗漏了一些要点,我将首先举一个例子:(我使用设置广告数据命令,它在这里遗漏了OGF之前的hcitool cmd
)
0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 C5 6D B5 DF FB 48 D2 B0 60 D0 F5 A7 10 96 E0 00 00 00 00 C5 00
我将在这里列出我不理解或找不到的信息。
- 有关于OGF的任何信息吗(这里是
0x08
)我知道它代表OpCode Group Field,但与OGF后面的OCF相反,我什么都没找到 02 01 1A 1A
字节行代表什么我知道第一个字节1E
告诉其余数据的长度,在这一行之后,从FF
开始,您将获得制造商特定的数据。但我找不到关于这4个字节的任何信息- 幂字节是如何工作的这里是
C5
。我知道,当测距我的iBeacon(例如在我的iPhone上)时,我得到的是dBm值。我知道这个值越高(在功率字节上),功率就越高,这意味着更高的精度,但也意味着更多的能耗但是你如何使用这个字节呢?您可以设置的最小值和最大值是多少?或者有什么公式吗?你是否为字节上的设置值获得了一个设置的dBm值(在距离iBeacon一米处)
谢谢。
前两个问题的答案可以在巨大的蓝牙4.0核心规范中找到
-
0x08的OGF为LE控制器组OCF命令:
对于LE控制器命令,OGF代码定义为0x08。(蓝牙规范4.0版[第2卷],第1114页)
因为0x0008 OCF命令是一个控制器命令,所以必须使用0x08 OGF代码。混淆了吗?忘了它。只知道你使用0x08 0x0008来设置使用
hcitool
的广告数据。 -
开始广告的字节序列如下:
1E Number of bytes that follow in the advertisement 02 Number of bytes that follow in first AD structure 01 Flags AD type 1A Flags value 0x1A = 000011010 bit 0 (OFF) LE Limited Discoverable Mode bit 1 (ON) LE General Discoverable Mode bit 2 (OFF) BR/EDR Not Supported bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller) bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host) 1A Number of bytes that follow in second (and last) AD structure FF Manufacturer specific data AD type 4C Company identifier code LSB 00 Company identifier code MSB (0x004C == Apple) 02 Byte 0 of iBeacon advertisement indicator 15 Byte 1 of iBeacon advertisement indicator
--蓝牙规范4.0版[第3卷],"广告和扫描响应数据格式",第375页
--蓝牙规范4.0版[第3卷],附录C(规范):EIR和AD格式",第401页
-
功率字段只是一个1字节2的补码,表示一米外RSSI中的"测量功率"。简单地说,
这是如何工作的:
- 手持iBeacon扫描仪(如iOS版iBeacon的Locate),距离您的iBeacon发射器一米远
- 读取RSSI中的信号强度。它将是一个介于-1和-127之间的数字。(-1表示非常强,-127表示非常弱)
- 用二的补码把这个数字转换成十六进制。(加256,然后转换为十六进制)
注意:功率场可以是80-FF。如果是00,iOS根本不会进行距离计算。你可以在这里阅读更多关于如何使用它的信息。