本文作者的部落格地址: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。表明遊戲杆