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

そろそろ再開

   
開発またちょっとずつ進めていきます。
今月中にHCIの解説をアップするのが目標です。
USBドライバも少しずつ開発していきます。

とりあえず、USBドライバの方は、
1. インタラプトIN転送の受信(つまりHCIイベント受信)が出来るようにする
2. コントロール転送でHCIコマンドを送信できるようにする
ことが当面の目標です。

>> 続く

一気に解説すると大変なので、今日はインタラプトIN転送に利用する関数を説明します。

インタラプトIN転送の受信には、usb_fill_int_urbという関数を利用します。

この関数の引数は8個もあって、順番に、
1. 初期化するURBへのポインタ
2. usb_device構造体へのポインタ
3. パイプ番号
4. バッファへのポインタ
5. バッファのサイズ
6. 完了時に呼び出すコールバック関数
7. URBコンテキストに設定するvoid*型の値(コールバック関数内で利用できる)
8. インターバル
となっています。

URBはUSB Request Blockの略で、USB通信に必要な情報を集めた構造体です。

パイプ番号は
int pipe = usb_rsvintpipe(dev->udev, dev->itr_in_endpointAddr);
というようにエンドポイントアドレスが分かれば取得できますので、あとはバッファサイズとインターバル値をデバイスディスクリプタから取得する必要があります。
前回TODOというコメントを入れていたインタラプトIN転送に必要な情報取得部分は、

/* エンドポイントアドレスと最大パケットサイズ、インターバルを取得*/
dev->itr_in_interval = ep_desc->bInterval;
dev->itr_in_size = le16_to_cpu(ep_desc->wMaxPacketSize);
dev->itr_in_endpointAddr = ep_desc->bEndpointAddress;

こんな感じになるでしょう。

あとはURBの用意とバッファの用意、コールバック関数を用意すればOKです。
URBコンテキストにはbt_usb(独自構造体)オブジェクトへのポインタを渡せば良いでしょう。
 

関連情報

記事のオプション

トラックバック

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

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