广播包有两种:广播包(advertising data)和响应包(scan response),其中广播包是每个设备必须广播的,而响应包是可选的。数据包的格式如下图所示:data format每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。
有效数据部分:
包含若干个广播数据单元,称为 ad structure。如图中所示,ad structure 的组成是:第一个字节是长度值 len,表示接下来的 len 个字节是数据部分。数据部分的第一个字节表示数据的类型 ad type,剩下的 len - 1 个字节是真正的数据 ad data。其中 ad type 非常关键,决定了 ad data 的数据代表的是什么和怎么解析
无效数据部分:
因为广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的,解释的时候,忽略即可。
ad type:
ad type定义
完整的blesdk 会头文件里定义好
// gap_adtype_defines gap advertisement data types
#define gap_adtype_flags 0x01 //!< discovery mode: @ref gap_adtype_flags_modes
#define gap_adtype_16bit_more 0x02 //!< service: more 16-bit uuids available
#define gap_adtype_16bit_complete 0x03 //!< service: complete list of 16-bit uuids
#define gap_adtype_32bit_more 0x04 //!< service: more 32-bit uuids available
#define gap_adtype_32bit_complete 0x05 //!< service: complete list of 32-bit uuids
#define gap_adtype_128bit_more 0x06 //!< service: more 128-bit uuids available
#define gap_adtype_128bit_complete 0x07 //!< service: complete list of 128-bit uuids
#define gap_adtype_local_name_short 0x08 //!< shortened local name
#define gap_adtype_local_name_complete 0x09 //!< complete local name
#define gap_adtype_power_level 0x0a //!< tx power level: 0xxx: -127 to +127 dbm
#define gap_adtype_oob_class_of_device 0x0d //!< simple pairing oob tag: class of device (3 octets)
#define gap_adtype_oob_simple_pairing_hashc 0x0e //!< simple pairing oob tag: simple pairing hash c (16 octets)
#define gap_adtype_oob_simple_pairing_randr 0x0f //!< simple pairing oob tag: simple pairing randomizer r (16 octets)
#define gap_adtype_sm_tk 0x10 //!< security manager tk value
#define gap_adtype_sm_oob_flag 0x11 //!< security manager oob flags
#define gap_adtype_slave_conn_interval_range 0x12 //!< min and max values of the connection interval (2 octets min, 2 octets max) (0xffff indicates no conn interval min or max)
#define gap_adtype_signed_data 0x13 //!< signed data field
#define gap_adtype_services_list_16bit 0x14 //!< service solicitation: list of 16-bit service uuids
#define gap_adtype_services_list_128bit 0x15 //!< service solicitation: list of 128-bit service uuids
#define gap_adtype_service_data 0x16 //!< service data - 16-bit uuid
#define gap_adtype_public_target_addr 0x17 //!< public target address
#define gap_adtype_random_target_addr 0x18 //!< random target address
#define gap_adtype_appearance 0x19 //!< appearance
#define gap_adtype_adv_interval 0x1a //!< advertising interval
#define gap_adtype_le_bd_addr 0x1b //!< le bluetooth device address
#define gap_adtype_le_role 0x1c //!< le role
#define gap_adtype_simple_pairing_hashc_256 0x1d //!< simple pairing hash c-256
#define gap_adtype_simple_pairing_randr_256 0x1e //!< simple pairing randomizer r-256
#define gap_adtype_service_data_32bit 0x20 //!< service data - 32-bit uuid
#define gap_adtype_service_data_128bit 0x21 //!< service data - 128-bit uuid
#define gap_adtype_3d_info_data 0x3d //!< 3d information data
#define gap_adtype_manufacturer_specific 0xff //!< manufacturer specific data: first 2 octets contain the company identifier code followed by the additional manufacturer specific data
// gap_adtype_flags_modes gap adtype flags discovery modes
#define gap_adtype_flags_limited 0x01 //!< discovery mode: le limited discoverable mode
#define gap_adtype_flags_general 0x02 //!< discovery mode: le general discoverable mode
#define gap_adtype_flags_bredr_not_supported 0x04 //!< discovery mode: br/edr not supported
flags: type = 0x01。这个数据用来标识设备 le 物理连接的功能。data 是 0 到多个字节的 flag 值,每个 bit 上用 0 或者 1 来表示是否为 true。如果有任何一个 bit 不为 0,并且广播包是可连接的,就必须包含此数据。各 bit 的定义如下:
bit 0: le 有限发现模式
bit 1: le 普通发现模式
bit 2: 不支持 br/edr
bit 3: 对 same device capable(controller) 同时支持 ble 和 br/edr
bit 4: 对 same device capable(host) 同时支持 ble 和 br/edr
bit 5…7: 预留
service uuid:
service uuid: 广播数据中一般都会把设备支持的 gatt service 广播出来,用来告诉外面本设备所支持的 service。有三种类型的 uuid:16 bit, 32bit, 128 bit。广播中,每种类型类型有有两个类别:完整和非完整的。这样就共有 6 种 ad type。
local name:
local name: 设备名字,data 是名字的字符串。local name 可以是设备的全名,也可以是设备名字的缩写,其中缩写必须是全名的前面的若干字符。
设备全名:type = 0x08
设备简称:type = 0x09
tx power level:
tx power level: type = 0x0a,表示设备发送广播包的信号强度。data 部分是一个字节,表示 -127 到 + 127 dbm。
security manager out of band
带外安全管理(security manager out of band):type = 0x11。data 也是 flag,每个 bit 表示一个功能:
bit 0: oob flag,0 表示没有 oob 数据,1 表示有
bit 1: 支持 le
bit 2: 对 same device capable(host) 同时支持 ble 和 br/edr
bit 3: 地址类型,0 表示公开地址,1 表示随机地址
外设(slave)连接间隔范围:
外设(slave)连接间隔范围:type = 0x12。数据中定义了 slave 最大和最小连接间隔,数据包含 4 个字节:
前 2 字节:定义最小连接间隔,取值范围:0x0006 ~ 0x0c80,而 0xffff 表示未定义;
后 2 字节:定义最大连接间隔,同上,不过需要保证最大连接间隔大于或者等于最小连接间隔。
服务搜寻:
服务搜寻:外围设备可以要请中心设备提供相应的 service。其数据定义和前面的 service uuid 类似:
16 bit uuid 列表:type = 0x14
32 bit uuid 列表:type = 0x
128 bit uuid 列表:type = 0x15
service data:
service data: service 对应的数据。
16 bit uuid service: type = 0x16, 前 2 字节是 uuid,后面是 service 的数据;
32 bit uuid service: type = 0x, 前 4 字节是 uuid,后面是 service 的数据;
128 bit uuid service: type = 0x, 前 16 字节是 uuid,后面是 service 的数据
公开目标地址:
公开目标地址:type = 0x17,表示希望这个广播包被指定的目标设备处理,此设备绑定了公开地址,data 是目标地址列表,每个地址 6 字节。
随机目标地址:
随机目标地址:type = 0x18,定义和前一个类似,表示希望这个广播包被指定的目标设备处理,此设备绑定了随机地址,data 是目标地址列表,每个地址 6 字节。
appearance:
appearance:type = 0x19,data 是表示了设备的外观
厂商自定义数据:
厂商自定义数据: type = 0xff,厂商自定义的数据中,前两个字节表示厂商 id,剩下的是厂商自己按照需求添加,里面的数据内容自己定义。
广播包代码配置
config/user_config.h
//设备名称
#define app_dflt_device_name (sun_uart)
//广播包uuid配置
#define app_fff0_adv_data_uuid x03x03xe0xff
#define app_fff0_adv_data_uuid_len (4)
//扫描响应包数据
#define app_scnrsp_data x07x08x42x4bx33x34x33x32 //bk3432
#define app_scnrsp_data_len (8)
复制代码
低功耗蓝牙 ble 广播数据解析:
flags:0x06
uuid:f0ff
devicename设备名:fragrance (ad type:09)
shortenedname简略设备名:fragrance (08: ad type shortened local name)
非制冷红外探测器陶瓷封装结构优化及可靠性分析
Qorvo QPA3069 S波段功率放大器在贸泽开售 助力国防和航空航天行业
最新爆料:YY直播大约有90%数据是伪造的
华为公司迟林春表示开放创新加速智能驾驶发展
STM32外部晶振电的主时钟方案
BLE广播包基础知识讲解
传感器技术未来的发展重点先知道
几个小步骤教你如何有效提高CAN总线抗干扰能力
三星3.1亿美元收购英国芯片厂商CSR技术专利
74ls32管脚图
荣耀畅玩7X和魅蓝note6哪个比较好?
乐视电视更名 延续Letv电视以往优秀的硬件
SF6 密度继电器氦质谱检漏法
柯洁对战神秘AI棋手,人工智能败北
简易的电子保温杯pcb设计原理图
西安炬光科技成功登陆科创板 美光与联电扩大合作关系加强客户供应链
基于物联网技术的视频安防监控系统的设计及应用
HDC.Cloud 2023 | 软通动力携手华为云打造端到端服务,为企业数字化保驾护航
Techradar公布 2019年最佳智能手机的排行榜,华为P30只能屈居第二
年轻潮人们喜爱的Hi nova9系列,究竟有什么魅力?