对于iOS来说,蓝牙设备不能像 Android 那样,直接通过扫描adv就能拿到设备的mac地址,所以蓝牙设备就需要将自己的mac地址等信息放在adv广播中,以便让iOS去区分不同的设备;
有些开发者不知道怎么将这些信息存于adv广播包中,现在就将常用的贴出来,以便大家学习,有啥不对的,也请斧正
下面的枚举类型定义了常用的AD flags
/*eir packet_type*/
typedef enum {
HCI_EIR_DATATYPE_FLAGS = 0x01,
HCI_EIR_DATATYPE_MORE_16BIT_SERVICE_UUIDS = 0x02,
HCI_EIR_DATATYPE_COMPLETE_16BIT_SERVICE_UUIDS = 0x03,
HCI_EIR_DATATYPE_MORE_32BIT_SERVICE_UUIDS = 0x04,
HCI_EIR_DATATYPE_COMPLETE_32BIT_SERVICE_UUIDS = 0x05,
HCI_EIR_DATATYPE_MORE_128BIT_SERVICE_UUIDS = 0x06,
HCI_EIR_DATATYPE_COMPLETE_128BIT_SERVICE_UUIDS = 0x07,
HCI_EIR_DATATYPE_SHORTENED_LOCAL_NAME = 0x08,
HCI_EIR_DATATYPE_COMPLETE_LOCAL_NAME = 0x09,
HCI_EIR_DATATYPE_TX_POWER_LEVEL = 0x0A,
HCI_EIR_DATATYPE_CLASS_OF_DEVICE = 0x0D,
HCI_EIR_DATATYPE_SIMPLE_PAIRING_HASH_C = 0x0E,
HCI_EIR_DATATYPE_SIMPLE_PAIRING_RANDOMIZER_R = 0x0F,
HCI_EIR_DATATYPE_SECURITY_MANAGER_TK_VALUE = 0x10,
HCI_EIR_DATATYPE_SECURITY_MANAGER_OOB_FLAGS = 0x11,
HCI_EIR_DATATYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 0x12,
HCI_EIR_DATATYPE_16BIT_SERVICE_SOLICITATION_UUIDS = 0x14,
HCI_EIR_DATATYPE_128BIT_SERVICE_SOLICITATION_UUIDS = 0x15,
HCI_EIR_DATATYPE_SERVICE_DATA = 0x16,
HCI_EIR_DATATYPE_APPEARANCE_DATA = 0x19,
HCI_EIR_DATATYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF
} HCI_EIR_datatype_t;
1、如果在广播中需要给设备添加一个过滤设备的UUID可以使用
HCI_EIR_DATATYPE_COMPLETE_128BIT_SERVICE_UUIDS = 0x07
2、给设备添加设备名
HCI_EIR_DATATYPE_COMPLETE_LOCAL_NAME = 0x09,
3、添加设备mac地址
HCI_EIR_DATATYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF,
一般广播中添加这3个特征值就可以了,不要添加太多,因为广播有字节数限制,BLE的广播包由2个包组成,adv包(自定义广播包)和rsp包(广播扫描响应包),每个包31Byte,所以广播数据最多62Byte,都可以回复数据。
网友评论