Linux 上的 bluetooth stack 有 affix 和 BlueZ
BlueZ 的說明有 (http://people.csail.mit.edu/albert/bluez-intro/index.html):An Introduction to Bluetooth Programming
- 同步 (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 李
沒有留言:
張貼留言