- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 iOS 上使用蓝牙低能耗广告时,作为 CBAdvertisementDataLocalNameKey 广告的数据的最大大小是多少?在进行一些测试时,我使用以下代码进行 BLE 广告:
var manager: CBPeripheralManager!
//...
let customData = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
manager.startAdvertising([CBAdvertisementDataServiceUUIDsKey:[serviceCBUUID], CBAdvertisementDataLocalNameKey: customData])
我注意到,在检测到外围设备时调用委托(delegate)方法中的第二个设备上(funccentralManager(_central: CBCentralManager, didDiscovereripheral: CBPeripheral,advertisementData: [String : Any], rssi RSSI: NSNumber)
) 我的自定义数据被剪切为以下字符串:“01234567”,因此它只有 8 个字节。 startAdvertising 函数的文档提到了“对于支持的广告数据键的任意组合,初始广告数据中最多有 28 个字节的空间”。有人能解释一下为什么在我的例子中它只有 8 个字节吗?实际上,iOS 上的 CBAdvertisementDataLocalNameKey 总是 8 个字节,还是这个数字可以更改?如何计算广告数据包中将成功发送的字节数(在我的例子中为 8 字节)?在 iOS 上使用 BLE 时,有什么办法可以通告超过 8 个字节吗?同时宣传的服务数量有限制吗?例如,是否可以同时通告 10 个不同的 uuid,每个 uuid 各有 8 个字节,总共允许同时通告 80 个字节?
最佳答案
与大多数 BLE 事物一样,这取决于情况。但通常广告数据包的大小为 31 字节,除非您有扩展广告(有时在较新的手机和较新版本的 iOS 上可用,更多信息见下文)。完整的广告区域为 37 字节减去 MAC 的 6 个强制字节。其中包括所有内容:您发送的每件内容的长度、标签和值(value) (LTV)。
首先,会有标志,它是三个字节(长度、标签、值)。所以现在我们处于记录的 28 字节。
所以您想发送一些服务 UUD。我假设 serviceCBUUID 是 128 位临时 UIUD,而不是 16 位分配的 UUID。这是一个 2 字节 header (长度、128 位服务 UUID 的完整列表),加上 16 字节数据。
现在我们有 10 个字节。
您的名字无法容纳 10 个字节,因此我假设它正在发送“缩短的本地名称”标签,以及适合的 8 个字节(包括一个长度字节)。
如果您想发送更长的名称,则需要缩短有效负载中的其他内容。
就您而言,您可能只想删除 CBAdvertisementDataServiceUUIDsKey。如果有空间,Apple 通常会为您管理。如果没有空间,那么苹果公司有一个聪明的专有技巧,可以将数据哈希到溢出区域。只要您只想被其他 Apple 设备扫描,这种方式就非常有效,您无需花费广告您的完整服务 UUID 的费用即可摆脱困境。不过,如果您需要使用 Apple 设备以外的设备进行扫描,则它不起作用。
如果您确实需要宣传您的服务 UUID,并且您还希望为您的本地名称提供更多空间,那么您需要 buy an assigned UUID 。这些花费 2,500 美元,并且是 16 位而不是 128 位,这将为您的本地名称返回 14 个字节。
关于您关于“10 个不同的 uuid,每个都有 8 个字节”的问题,我不确定您从哪里得到这些数字。 BLE UUID 为 16 字节(128 位)或 2(16 位)。但是,如果您尝试通告 10 个 16 字节 UUID,就会溢出。 iOS 可能会尽可能多地发布广告,然后将剩余的散列到溢出区域(如上所述)。服务 UUID 的完整列表在连接时仍然可用,即使它们没有公布。
如果您有 10 个 16 位 UUID,则需要 22 个字节,这可以轻松放入广告数据包(没有本地名称)。要获得两个以上的 16 位 UUID,您至少需要是 Associate Member蓝牙 SIG 的成员。每年的费用为 7,500 美元或 35,000 美元,具体取决于您公司的规模。采用者(免费层)只能以每人 2,500 美元的价格注册其中两个。
现在,如果这只适用于运行相当新版本的 iOS(我认为是 12+)的相当新的 iPhone(我认为是 8+),那么就会有扩展的广告,最多允许 124 字节的有效负载。请参阅"What's New in Core Bluetooth"详情请参阅 WWDC 2019。扫描设备还需要支持扩展扫描才能发挥作用。
关于ios - iOS 上的 BLE 广告和 CBAdvertisementDataLocalNameKey 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63382273/
这个问题在这里已经有了答案: C sizeof a passed array [duplicate] (7 个回答) 8年前关闭。 在一个函数中,我声明了一个数组: int char_count_ar
简而言之,文件系统如何与 block 设备通信? 最佳答案 我对 block 大小不太了解。我认为 ext4(Linux)的文件系统的 block 大小是 4KB,考虑到现代处理器的页面大小(4KB)
我知道 tinyint(1) 和 tinyint(2) 具有相同的存储空间范围。 唯一的区别是显示宽度不同。这是否意味着 tinyint(1) 将存储所有类型的整数但只正确显示 0 到 9 的范围?而
今晚我已经研究了以下代码几个小时,但我只是摸不着头脑。 当使用函数从标准输入填充数组时,我不断收到“大小 8 的无效写入”和“大小 8 的无效读取”。 如有任何帮助,我们将不胜感激...我知道 Sta
我有一个 valgrind 错误,我不知道如何摆脱它们: ==5685== Invalid read of size 8 ==5685== at 0x4008A1: main (in /home
我对 Hadoop 的概念有点困惑。 Hadoop block 大小、拆分大小和 block 大小 之间有什么区别? 提前致谢。 最佳答案 block 大小和 block 大小相同。 拆分大小 可能与
我想不出一个好的标题,所以希望可以。 我正在做的是创建一个离线 HTML5 webapp。 “出于某些原因”我不希望将某些文件放在缓存 list 中,而是希望将内容放在 localStorage 中。
无法将 xamarin apk 大小减少到 80 MB 以下,已执行以下操作: 启用混淆器 配置:发布 平台:事件(任何 CPU)。 启用 Multi-Dex:true 启用开发人员检测(调试和分析)
我正在开发一个程序,需要将大量 csv 文件(数千个)加载到数组中。 csv 文件的尺寸为 45x100,我想创建一个尺寸为 nx45x100 的 3-d 数组。目前,我使用 pd.read_csv(
Hello World 示例的 React Native APK 大小约为 20M (in recent versions),因为支持不同的硬件架构(ARMv7、ARMv8、X86 等),而同一应用程
我有一个包含 n 个十进制元素的列表,其中每个元素都是两个字节长。 可以说: x = [9000 , 5000 , 2000 , 400] 这个想法是将每个元素拆分为 MSB 和 LSB 并将其存储在
如何设置 GtKTextView 的大小?我想我不能使用 gtk_widget_set_usize。 最佳答案 您不能直接控制小部件的大小,而是由其容器完成。您可以使用 gtk_widget_set_
这个问题在这里已经有了答案: c++ sizeof() of a class with functions (7 个答案) 关闭 5 年前。 结果是 12。 foobar 函数存储在内存中的什么位置
当我在 ffmpeg(或任何其他程序)中使用这样的命令时: ffmpeg -i input.mp4 image%d.jpg 所有图像的组合文件大小总是比视频本身大。我尝试减少每秒帧数、降低压缩设置、模
我是 clojurescript 的新手。 高级编译后出现“77 KB”的javascript文件是否正常? 我有一个 clojurescript 文件: 我正在使用 leinigen: lein c
我想要一个 QPixmap尺寸为 50 x 50。 我试过 : QPixmap watermark(QSize(50,50)); watermark.load(":/icoMenu/preparati
我正在尝试从一篇研究论文中重新创建一个 cnn,但我对深度学习还是个新手。 我得到了一个大小为 32x32x7 的 3d 补丁。我首先想执行一个大小为 3x3 的卷积,具有 32 个特征和步幅为 2。
我一直在尝试调整 View Controller 内的 View 大小,但到目前为止没有运气。基本上,我的 View 最底部有一个按钮,当方向从纵向更改为横向时,该按钮不再可见,因为它现在太靠下了。
如何使用此功能检查图像的尺寸?我只是想在上传之前检查一下... $("#LINK_UPLOAD_PHOTO").submit(function () { var form = $(this);
我用 C++ 完成了这个,因为你可以通过引用传递参数。我无法弄清楚如何在 JavaScript 中执行此操作。我的代码需要更改什么?我的输出是1 this.sizeOfBst = function()
我是一名优秀的程序员,十分优秀!