蓝牙广播数据格式和动态改变

广播内容的自定义是蓝牙BLE开发的基本技能,用户最多能够设置31字节。但是用户定义是必须要遵循BLE协议的。另外,ibeacon应用和一些特定的应用要利用广播来传递数据,而且不同时间段的广播内容还会改变,如ibeacon的major/minor和电量显示等待。本文即阐述蓝牙的广播数据格式和动态改变。

 

参考文档:bluetooth specification version 4.0, p1735-p1738

一、广播数据格式

总共31字节,由一个或者多个广播结构单元组成,每个单元由长度Length、广播内容类型AD Type、广播数据AD Data组成;长度为AD Type加上AD Data的长度,不包括长度自身所占字节。

二、常见广播内容类型AD Type

1.flag

AD Type是0x1,代表广播模式。LElimited Discoverable(AD data是0x0)是有限时间广播,而General Discoverable(AD data是0x1)是无限广播,直到被主动停止广播。

 

2. Manufacture specific data

AD Type是0xff,代表厂商数据,自定义的数据可以写到这里。很多第三方场景应用都是利用这个字段来进一步定义应用协议格式࿰

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
低功耗蓝牙广播数据格式是由广播数据包(Advertising Data Packet)和扫描响应数据包(Scan Response Data Packet)组成的。广播数据包和扫描响应数据包都是由若干个广播数据段(Advertising Data Segment)组成,每个广播数据段又由两部分组成:类型(Type)和数据(Data)。 广播数据包和扫描响应数据包的数据格式如下: | 字段 | 长度(字节) | 描述 | | --- | --- | --- | | Length | 1 | 数据包长度 | | Type | 1 | 数据段类型 | | Data | Length - 1 | 数据段 | 其中,Length 字段表示数据包长度,包括 Type 和 Data 两部分;Type 字段表示数据段类型,包括以下几种: | 类型 | 描述 | | --- | --- | | Flags | 标识设备类型和状态 | | Incomplete List of 16-bit Service Class UUIDs | 不完整的 16 位服务类 UUID 列表 | | Complete List of 16-bit Service Class UUIDs | 完整的 16 位服务类 UUID 列表 | | Incomplete List of 32-bit Service Class UUIDs | 不完整的 32 位服务类 UUID 列表 | | Complete List of 32-bit Service Class UUIDs | 完整的 32 位服务类 UUID 列表 | | Incomplete List of 128-bit Service Class UUIDs | 不完整的 128 位服务类 UUID 列表 | | Complete List of 128-bit Service Class UUIDs | 完整的 128 位服务类 UUID 列表 | | Shortened Local Name | 简化本地名称 | | Complete Local Name | 完整本地名称 | | Tx Power Level | 发射功率级别 | | Class of Device | 设备类型 | | Simple Pairing Hash C/C-192 | 简单配对哈希值 C/C-192 | | Simple Pairing Randomizer R/R-192 | 简单配对随机数 R/R-192 | | Security Manager TK Value | 安全管理器 TK 值 | | Security Manager Out of Band Flags | 安全管理器 OOB 标志 | | Slave Connection Interval Range | 从机连接间隔范围 | | Service Solicitation: 16-bit UUIDs | 服务请求:16 位 UUID | | Service Solicitation: 128-bit UUIDs | 服务请求:128 位 UUID | | Service Data | 服务数据 | | Public Target Address | 公共目标地址 | | Random Target Address | 随机目标地址 | | Appearance | 外观 | | Advertising Interval | 广播间隔 | | LE Bluetooth Device Address | LE 蓝牙设备地址 | | LE Role | LE 角色 | | Simple Pairing Hash C-256 | 简单配对哈希值 C-256 | | Simple Pairing Randomizer R-256 | 简单配对随机数 R-256 | | 3D Information Data | 3D 信息数据 | | Manufacturer Specific Data | 制造商特定数据 | 如果要通过代码修改低功耗蓝牙广播的内容,可以使用 Core Bluetooth 框架中的 CBPeripheralManager 类。具体步骤如下: 1. 创建 CBPeripheralManager 实例,并设置代理。 ```swift let peripheralManager = CBPeripheralManager(delegate: self, queue: nil) ``` 2. 实现 CBPeripheralManagerDelegate 协议中的 peripheralManagerDidUpdateState(_:) 方法,检查蓝牙状态是否可用。 ```swift func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) { if peripheral.state == .poweredOn { // 蓝牙可用,可以开始广播 } else { // 蓝牙不可用,无法广播 } } ``` 3. 构建广播数据包和扫描响应数据包,使用 CBPeripheralManager 的 startAdvertising(_:options:) 方法开始广播。 ```swift let advertisementData: [String: Any] = [ CBAdvertisementDataLocalNameKey: "MyDevice", CBAdvertisementDataServiceUUIDsKey: [CBUUID(string: "180D")] ] peripheralManager.startAdvertising(advertisementData) ``` 其中,CBAdvertisementDataLocalNameKey 表示设备的本地名称,CBAdvertisementDataServiceUUIDsKey 表示设备所支持的服务 UUID。 4. 如果需要修改广播内容,可以调用 CBPeripheralManager 的 stopAdvertising() 方法停止广播修改 advertisementData 中的值,然后再次调用 startAdvertising(_:options:) 方法重新开始广播。 ```swift peripheralManager.stopAdvertising() advertisementData[CBAdvertisementDataLocalNameKey] = "NewDeviceName" peripheralManager.startAdvertising(advertisementData) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值