小编meg*_*bri的帖子

在Mavericks OSX下生成的iBeacons有效但与iOS有一些不同的字节

我在OSX下遵循这个示例项目BeaconEmitter来生成样本iBeacons,用于在iPhone上开发应用程序.BeaconEmitter应用程序基于Matthew Robinson的教程,直到Apple决定在OSX的Core Location上引入iBeacon支持,生成iBeacon的唯一机会是使用IO Bluetooth Framework从头开始构建广告数据包.

但是......那不起作用!

我当然也尝试过iOS上的Apple的AirLocate教程代码,以及可以正常使用的iOS设备之间的代码.但是,如果您尝试使用OSX(BeaconEmitter)生成iBeacon并使用不起作用的iOS设备(AirLocate)接收它.

我有一个基于CC2540 TI芯片的BLE RF嗅探器,以及Windows上的TI嗅探器软件.所以我观察到从AirLocate和BeaconEmitter生成的iBeacons数据包有点不同.

这是使用AirLocate生成的iBeacon: 在此输入图像描述

Thah是使用BeaconEmitter生成的ibeacon: 在此输入图像描述

这篇文章中的逆向工程师(因为Apple尚未发布iBeacons规范)之后,可以看出Adv PDU Header与两种情况不同.在OSX中,Type = 2且TxAdd = 0,在iOS中Type = 0且TxAdd = 1.

为何如此区别?

以女巫的方式可以强制OSX发送iOS的相同Adv PDU Header?

似乎在AdvData的前5个字节中,两个数据包不等于:

OSX:02 01 06 1A FF

iOS:02 01 1A 1A FF

AdvData有效负载的其余部分与上面链接的逆向工程师帖子一致.

再次,为什么这个字节不同?

我没有找到OSX示例中依赖于哪些代码部分.

更新:它的工作原理

因为BeaconEmitter生成的iBeacon未被AirLocate识别的主要原因是我的错.我不明白AirLocate过滤UUID的一些具体示例,即:E2C56DB5-DFFB-48D2-B060-D0F5A71096E0或5A4BCFCE-174E-4BAC-A814-092E77F6B7E5或74278BDA-B644-4520-8F0C-720EAF059935并非每个UUID值.

因此,BeaconEmitter生成的随机UUID肯定与AirLocate中预先写好的UUID不匹配.

如果您可以从BeaconEmitter"强制"使用具有良好值的UUID,则AirLocate可以识别它:

BeaconEmitter

所以这是iOS AirLocate示例应用程序中的成功测试:

AirLocate

保持上述相同字节的差异......只有嗅探器可以看到:).

iphone macos ios core-bluetooth ibeacon

12
推荐指数
1
解决办法
1529
查看次数

标签 统计

core-bluetooth ×1

ibeacon ×1

ios ×1

iphone ×1

macos ×1