Bluetooth詳説
Bluetoothプロトコルの解説とライブラリ開発
ホーム  :  検索  :  記事一覧  :  RSSフィード  :  リンク  :  ダウンロード  
 2010年09月10日(金曜日) 17:38 JST

ドライバのユーザーI/F

   
開発

ここ1週間体調を崩していたので、全く進んでいません。 体調回復してきたので再開します。

前回作成したドライバはハードウェアの装着・削除を検出するだけの物でした。
ハードウェア側との通信だけしかしていなかったわけです。
ドライバはハードウェアとユーザーソフトウェアとの橋渡しの役目を果たしますから、ユーザー側とのI/Fを考えないといけません。

>> 続く



Bluetooth USBデバイスとの通信では、4種類の通信を扱います。
HCIコマンド、HCIイベント、ACLデータ、SCOデータです。

一方、USBにも4種類の通信方法があります。
Control, Interrupt, Bulk, Isochronousです。

これらのUSB通信方法の特性と、Bluetooth HCIで扱う通信の特性を考えて、HCI-USB仕様では以下の組合せで使うことが規定されています。
(HCI-USB仕様に関しては、後ほど解説記事をアップします)

HCIコマンド - Control
確実に届ける必要があります。
大きなデータは扱いませんが、帯域は優先的に確保したい。
HCIイベント - Interrupt
確実に届ける必要があります。
大きなデータは扱いませんが、応答は早い方が望ましい。
ACLデータ - Bulk
確実に届ける必要があります。
大きなデータを扱うのでスループットが要求されますが、レイテンシは重要視されません。
SCOデータ - Isochronous
確実に届ける必要はありません。
一定時間あたりの転送量を保証する必要があります。

HeadsetやHandsFreeなどの音声系プロファイルを開発するまでは、SCOデータは扱いません。
なので、まずはACLデータだけを扱うことを考えます。

単純にキャラクタデバイス型のドライバとして開発しようかと思います。
キャラクタデバイス型のドライバというのは、ファイルのようにopenして、writeやreadで読み書きして、closeで閉じるといった操作を行うタイプのドライバのことです。
ACLデータはwrite/readで操作し、HCIコマンドはioctrlで送るようにします。
HCIイベントは・・・シグナルを使おうかと思っています。

話は変わりますが、デバイスを装着したときに2回probeやdisconnectが呼ばれた件について、1つの仮説を考えました。
Bluetooth USBデバイスにはUSBインターフェースが2つ定義されています。
片方がACLデータのみ扱う用、もう一方がSCOデータ用です。
USBインターフェースは、例えば「スピーカー内蔵USBメモリ」みたいな、複数の機能を内蔵するデバイスで、それぞれの機能を分割するために用意されているものです。
つまり、それぞれのインターフェースごとに別々のドライバで制御できるようになっているわけです。
それで各インターフェースごとに呼び出されたのではないかと推測しています。

 

関連情報

記事のオプション

トラックバック

このエントリのトラックバックURL: http://bluetooth.k5-n.com/trackback.php?id=20070126175554286

ドライバのユーザーI/F | 0 件のコメント | アカウントの作成
コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。
 Copyright © 2010 Bluetooth詳説
 本ページのすべての商標と著作権はそれぞれの所有者に帰属します。
Powered By Geeklog & Geeklog Japanese
ページ作成時間: 0.21 秒