 
    
    
    
      
 Next:  Linux USB コアドライバ関数
Up:  Linux USB デバイスドライバのフレームワーク
 Previous:  Linux USB デバイスドライバのフレームワーク
 
 
USB コアドライバで導入されている Linux の USB Request Block(URB)
について説明する. これは Windows 環境のドライバにおける URB と同様の
ものである. URB とは SCSI の CDB のようなものでデバイスドライバは
URBを使用して USB データ転送要求を行なう. 以下 linux/usb.h にある
URB 構造体を示す. 

次に Linux USB コアドライバで提供されている URB 関連の関数を次に示す.
-  urb_t *usb_alloc_urb(int iso_packets)
 この関数で URB をメモリにアロケートする. 返ってくる値はアロケートされた
       URBへのポインタで, アロケーションに失敗したら0 が返る. isoframes 
       引数にはスケジュールしたいアイソクロナス転送のフレーム数を指定す
       る. 制御, バルク, 割り込み転送の場合は 0 である.
  
-  void usb_free_urb(urb_t* urb)
 この関数で指定した URB をメモリから解放する.
  
-  int usb_submit_urb(urb_t *urb)
 この関数で指定した URB の転送を行なう.
  
-  int usb_unlink_urb(urb_t *urb)
 この関数で内部リストの URB を削除し, 全てのアロケートされている
       ハードウエアデスクリプタを開放する. usb_unlink_urb()が終了後,
       usb_free_urb(urb) で URB と関連する可能性のある全てのデータを安全
       に開放できる.
トランザクションのタイプにより, 以下のような単に URB を作るマクロ
がある. 一般に全てのマクロは USB デバイスへのポインタ, パイプ
転送バッファ, 要求する転送長, 終了ハンドラ, 自分自身のコンテキストが
必要である.
-  FILL_CONTROL_URB()
 
-  FILL_BULK_URB()
 
-  FILL_INT_URB()
 
-  FILL_CONTROL_URB_TO()
 
-  FILL_BULK_URB_TO()
 
Kazuo Nakayoshi 
Wed Jun 27 22:15:09 JST 2001