有關Android Bluetooth--Bluetooth基礎

藍牙協議

針對Bluetooth, Java Community Process(JCP)定義了JSR 82Java APIs for Bluetooth Wireless Technology (JABWT)規範bluetooth API。

下面是Bluetooth棧結構,作爲開發,主要關注的是紅框中的幾個協議及JSR-082定義的相關API。


L2CAP協議

該協議用於數據傳輸前後的處理,比如數據分段和組裝。這是個底層的協議,作用類似於TCP或者UDP,但它用UUID,而不是Port用於server和client的結對

RFCOMM

該協議是串口模擬,把藍牙接口模擬成串口

OBEX協議

這是一個應用層的協議,建立在RFCOMM之上,但它也可以建立在紅外協議IrDA和TCP/IP等其他傳輸協議之上

SDP協議

SDP協議用於客戶端在遠端設備中尋找所需的服務。它與SDDB(Service Discovery Database)有密切聯繫。SDDB保存該藍牙設備提供的所有服務(Service Record),SDP會在SDDB中尋找客戶所需的服務並連接之

UUID

UUID在藍牙接口中的作用類似於TCP/IP的端口號。UUID列表 列出了一些常用的UUID值

藍牙服務例子

使用安卓開發工具adp shell可以查找遠端設備可用的藍牙service.

步驟如下:連接安卓手機和PC,進入安卓SDK的platform-tools 目錄,運行 adb -s TA01404HLN shell

然後在shell中運行

   sdptool browse 60:D8:19:F1:FD:42:

60:D8:19:F1:FD:42:是我的PC的MAC地址

下面是在我的安卓手機上search到的我的Win7 laptop上的部分藍牙服務例子:

SDP服務

Service Provider: Microsoft
Service RecHandle: 0x0
Service Class ID List:
  "SDP Server" (0x1000)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 1
  "SDP" (0x0001)
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100

這是由微軟提供的SDP服務,這個服務是最基本的服務,通常客戶端首先需要使用該服務才能尋找該設備提供的其他服務。可以看到SDP協議建立在L2CAP協議之上,UUID是0x0001

文件傳輸服務

Service Name: File Transfer
Service RecHandle: 0x100a2
Service Class ID List:
  "OBEX File Transfer" (0x1106)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 2
  "OBEX" (0x0008)
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "OBEX File Transfer" (0x1106)
    Version: 0x0102

這是Win7提供的文件傳輸服務,它使用OBEX協議,UUID是0x1106

藍牙立體聲服務

Service Name: Stereo Audio
Service RecHandle: 0x100a4
Service Class ID List:
  "Audio Sink" (0x110b)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x100
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102
這是個提供藍牙立體聲輸出的服務,它直接建立在數據協議L2CAP之上,採用的是AVDTP協議,UUID 0x110b

我的串口服務

Service Name: MyCommServer
Service RecHandle: 0x100af
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 10

這是我自己寫的一個運行在PC上的簡單的藍牙服務,直接建立在串口模擬之上。


發佈了67 篇原創文章 · 獲贊 9 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章