2013年3月22日金曜日

mbed official USBHostでBTstackを動かす

以前、mbedに移植したBTstackをmbed official USBHostに対応してみました。

http://mbed.org/users/va009039/code/BTstack/

以前のUSBライブラリを削除して、
追加、変更したのは次のファイルだけです。
USBHostBTstack.h
USBHostBTstack.cpp
hci_transport_usb.cpp

Bluetoothマウスの動作確認はしました。しかし、パソコンとのSPPシリアルポート通信はパソコンに
よっては接続に失敗する時がある。L2CAP、SDPは動いていてSPPのサービス情報を読み取れる。
BTstackとパソコンのBluetoothドライバとの相性のようにも思えるがよくわからない。

BluetoothのUSBはコントロール転送とインタラプト転送とバルク転送を使っています。
インタラプト転送はマウスのクラスドライバ、バルク転送はMSDフラッシュディスクのクラスドライバを
参考にしました。パケット送信はブロックモードで動かしました。

パケット受信はブロックされずに、USBHostのスレッドusb_process()からコールバックされています。
スタックは4Kバイトくらい。BTstackと非同期で動くのが安全なのかわからないので、
BTstackと同じスレッド、つまりmain()のスレッドからコールバックされるように変更する予定です。

(2013/3/22)

予めPINコードで認証した時は接続に失敗するが、接続時に認証する時は接続できる。
HCI_EVENT_LINK_KEY_REQUESTが送られてきた時に間違った link keyを送っているので接続出来ないようです。
L2CAP_EVENT_CHANNEL_OPENED for PSM_RFCOMM
rfcomm_max_frame_size_for_l2cap_mtu:  48 -> 43
Received SABM #0
Sending UA #0
Multiplexer up and running
HCI_EVENT_LINK_KEY_REQUEST
responding to link key request
Received DISC #0, (ougoing = 0)
Sending UA #0
Closing down multiplexer
TODO: no connections established - delete link key prophylactically

(2013/3/22追加)
---

0 件のコメント: