ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2010年7月29日 星期四

bluetooth, bluez.. linux

Linux 上的 bluetooth stack 有 affix 和 BlueZ
BlueZ 的說明有 (http://people.csail.mit.edu/albert/bluez-intro/index.html):An Introduction to Bluetooth Programming
要把 Linux 當作是 Headset。和 手機連線。有一篇 bluetooth-alsa (http://bluetooth-alsa.sourceforge.net/)說要去看 Gammu (http://wammu.eu/) 原文章還說明一下 Audio 的部份: audio 傳輸分成 同步和非同步 兩種 (其實說是 即時 與 非即時 比較適當)
  • 同步 (SCO ) : 像手機和 headset 之間,一旦傳送就要馬上送到,以免有延遲。就是同步。
  • 非同步 (A2DP) : 像播放音樂,開始播到真正放出可以有一段 delay.(?)
SCO 是由 HCI 提供。
A2DP 是上層的 profile。
--- 這一段好像寫錯,A2DP 也是用 SCO 才對。
關於把Linux當作 headset 和 phone 連接,可能可以參考 TomTom 的作法。 (http://www.tomtom.com/page.php?Page=gpl#tomtom)

每個 bluetooth device 都有一個 unique 的 48 bit address. 每個 bluetooth device 可以為自己取一個名字 (my phone, nb...),名字可能會跟其他人一樣。 把L2CAP 比作 UDP,把 RFCOMM 比作 TCP。 大概是因為 layer 也一樣吧。 RFCOMM 的底層是 L2CAP。但是實際上 L2CAP 本身就可以做到 connection 和 connection-less 兩種方式。 跟 TCP/IP 一樣,決定 protocol 後,還要只定 port number。但是 Bluetooth 的名字不叫 port。叫 multiplexer。數字也有限制。 和 TCP/IP 不一樣,port 不是寫死的,是在通訊時決定。利用 SDP (Service Discovering Protocol) 決定。 SDP 也是建在 L2CAP 之上。 用 PyBluez 寫 bluetooth code 很方便,像:import bluetooth nearby_device = bluetooth_discover_devices()就可以把所有scan 到的 bluetooth device address 放到 nearby_device 李

沒有留言:

標籤

網誌存檔