本文作者的博客地址:http://blog.sina.com.cn/samzhen1977
作者:Sam (甄峰) sam_code@hotmail.com
在设备被发现阶段,设备的Class of device被提供出来。指出此设备是何种类型,以及支持哪些服务。
回想前面HCI章节所说,Inquiry时,会返回找到的设备信息,其中包括BDADDR等。其中dev_class字段就是Class of Device.
typedef struct {
bdaddr_t bdaddr;
uint8_t pscan_rep_mode;
uint8_t pscan_period_mode;
uint8_t pscan_mode;
uint8_t dev_class[3];
uint16_t clock_offset;
} __attribute__ ((packed)) inquiry_info;
Class of Device parameter包括:
Bluetooth Device Class:主class和次class
Bluetooth Service Type.
至于Class of Device 哪些位表达什么意思,可以从以下网页找到详细说明:
https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
以下用4个典型例子来说明:
dev_class[0] : Octer1. (此项存疑)
dev_class[1]: Octer2
dev_class[2]: Octer3.
例1:
class[0] = 4
class[1] = 1
class[2] = 3E
Class[1] = 1 指明第8位为1。查网页,表明是(计算机(台式机、笔记本、PDA、organizer ....))
Class[0] = 4 指明第2位为1。表明:台式机工作站
Class[2] = 3E. 表明17-21位均为1。
17 | 网络(LAN、Ad hoc ...) |
18 | 渲染(打印、扬声器 ...) |
19 | 捕捉(扫描仪、麦克风 ...) |
20 | 对象传输(v-Inbox、v-Folder ...) |
21 | 音频(扬声器、麦克风、耳机服务 ...) |
表明这是一台台式机,支持以上各种服务。
例2:
class[0] = 4
class[1] = 1
class[2] = 0
Class[1] = 1 指明第8位为1。查网页,表明是(计算机(台式机、笔记本、PDA、organizer ....))
Class[0] = 4 指明第2位为1。表明:台式机工作站
表明这是一台台式机。 但什么都不支持。
例3:
class[0] = 80
class[1] = 25
class[2] = 0
先看主设备:class[1] = 25, 表明8,10,13 位为1。
8,10位为1 表明是 配件(鼠标、游戏杆、键盘 .....)
13位为1:有限可发现模式 (Sam: 并不是一直可见,而是按键后才可见)
再看次设备:class[0] = 80, 表明第7位为1。表明指向设备。呵呵,就是鼠标了。
例4:
class[0] =4
class[1] = 25
class[2] = 0
先看主设备:class[1] = 25, 表明8,10,13 位为1。
8,10位为1 表明是 配件(鼠标、游戏杆、键盘 .....)
13位为1:有限可发现模式 (Sam: 并不是一直可见,而是按键后才可见)
再看次设备:class[0] = 4, 表明第3位为1。表明游戏杆