沁恒蓝牙从机(peripheral)例程讲解二(广播内容修改)

在peripheral例程中,一直是以50ms的周期进行广播,使用手机软件扫描可以获取蓝牙mac地址和蓝牙名字。

1.如何开启和关闭广播:

uint8_t initial_advertising_enable = TRUE;

GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);   //开启广播

uint8_t initial_advertising_enable = FALSE;

GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);   //关闭广播

2.广播的内容如何设置:

GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);                              //广播包

GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);                 //扫描应答包 

下图为广播包内容:

下图为扫描应答包内容:

广播包和扫描应答包的最大长度都是31字节,

包的格式是长度+类型+数据,类型所占长度也计算在长度中,在修改蓝牙名字的时候需要注意,将名字改长或者改短需要将长度也一起修改,且需要和此函数名字一致:GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName);

类型有很多种,一般常用的有0x01,对应着广播的发现模式,0x09,对应着蓝牙名字,还有0xff,对应着自定义信息,用户可以在里面放一些辨识度信息。

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
低功耗蓝牙广播的数据格式是由广播数据包(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) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值