EN JA
UGEN(4)
UGEN(4) FreeBSD Kernel Interfaces Manual UGEN(4)

名称

ugenUSB 一般的なデバイスサポート

書式

ugen は、 usb(4) カーネルモジュールに組み込まれます。

解説

ugen ドライバは、特定のドライバを持っていないすべての USB デバイスのサポートを行ないます。それは、デバイスのすべての部分へのアクセスをサポートしますが、専用ドライバと同じくらい便利な方法をサポートするというわけではありません。

最大 127 台の USB デバイスが USB バスに接続できます。それぞれの USB デバイスは、最大 16 の終点を持つことができます。それぞれのこれらの終点は、4 つの異なったモードの 1 つで通信します: 制御、アイソクロナス (等速)、バルク (大量)、または割り込みです。それぞれの終点には、異なったデバイスノードがあります。マイナデバイス番号の 4 つの最下位ビットは、デバイスがどの終点にアクセスするかを決定し、残りのビットは、どの USB デバイスかを決定します。

終点アドレスが入力と出力の両方で使用されるなら、デバイスは、読み込みと書き込みの両方でオープンすることができます。

存在する終点を見つけるために、デバイスの USB 記述子、設定、インタフェース、と終点を返す、制御終点に関して一連の ioctl(2) 操作があります。

コントロール転送モードは、常に終点 0 である制御終点でのみ発生させることができます。制御終点は、要求を受け付け、そのような要求の答えで応答することができます。制御要求は、 ioctl(2) 呼び出しによって発行されます。

バルク転送モードは、終点に依存するか、または依存しないようにすることができます。バルク終点で入出力を実行するためには、 read(2)write(2) が使用されるべきです。バルクの終点におけるすべての入出力操作は、バッファリングされません。

割り込み転送モードは、終点に依存するか、または依存しないようにすることができます。割り込み終点で入出力を実行するためには、 read(2)write(2) が使用されるべきです。バッファリングの量は、ドライバによって適度に保たれます。

すべての終点は、次の ioctl(2) 呼び出しを取り扱います:

USB_SET_SHORT_XFER ( int)
短い読み込み転送を許可します。通常、指定した要求より短いデバイスからの転送は、エラーとして報告されます。
USB_SET_TIMEOUT ( int)
デバイス操作のタイムアウトを設定します。時間は、ミリ秒単位で指定されます。値 0 は、タイムアウトがないことを示すために使用されます。

制御終点 (終点 0) は、次の ioctl(2) 呼び出しを取り扱います:

USB_GET_CONFIG ( int)
デバイス設定番号を取得します。
USB_SET_CONFIG ( int)
与えられた設定番号にデバイスを設定します。

この操作は、制御終点が唯一のオープンしている終点であるときにだけ実行することができます。

USB_GET_ALTINTERFACE ( struct usb_alt_interface)
与えられたインデックスとのインタフェースのための代替の設定番号を取得します。 uai_config_index は、この呼び出しでは無視されます。

struct usb_alt_interface { 
 int uai_config_index; 
 int uai_interface_index; 
 int uai_alt_no; 
};
USB_SET_ALTINTERFACE ( struct usb_alt_interface)
与えられたインデックスとのインタフェースで代替の設定を与えられた番号に設定します。 uai_config_index は、この呼び出しでは無視されます。

この操作は、インタフェースへの終点がオープンされていないときだけ実行することができます。

USB_GET_NO_ALT ( struct usb_alt_interface)
uai_alt_no フィールドの異なった代替の設定の番号を返します。
USB_GET_DEVICE_DESC ( usb_device_descriptor_t)
デバイス記述子を返します。
USB_GET_CONFIG_DESC ( struct usb_config_desc)
与えられたインデックスで設定のための記述子を返します。べんぎ上、 USB_CURRENT_CONFIG_INDEX によって現在の設定を指定することができます。

struct usb_config_desc { 
 int ucd_config_index; 
 usb_config_descriptor_t ucd_desc; 
};
USB_GET_INTERFACE_DESC ( struct usb_interface_desc)
設定インデックス、インタフェースインデックス、および代替のインデックスによって指定されたインタフェースのためのインタフェース記述子を返します。べんぎ上、 USB_CURRENT_ALT_INDEX によって現在の代替を指定することができます。

struct usb_interface_desc { 
 int uid_config_index; 
 int uid_interface_index; 
 int uid_alt_index; 
 usb_interface_descriptor_t uid_desc; 
};
USB_GET_ENDPOINT_DESC ( struct usb_endpoint_desc)
設定インデックス、インタフェースインデックス、代替インデックス、および終点インデックスによって指定された終点のための終点記述子を返します。

struct usb_endpoint_desc { 
 int ued_config_index; 
 int ued_interface_index; 
 int ued_alt_index; 
 int ued_endpoint_index; 
 usb_endpoint_descriptor_t ued_desc; 
};
USB_GET_FULL_DESC ( struct usb_full_desc)
与えられた設定のためのすべての記述子を返します。

struct usb_full_desc { 
 int ufd_config_index; 
 u_int ufd_size; 
 u_char *ufd_data; 
};

ufd_data フィールドは、 ufd_size フィールドで与えられたサイズのメモリ領域を指すべきです。適切なサイズは、 USB_GET_CONFIG_DESC の最初の発行と wTotalLength フィールドの検査によって決定することができます。

USB_GET_STRING_DESC ( struct usb_string_desc)
与えられた言語 ID と文字列インデックスのための文字列記述子を取得します。

struct usb_string_desc { 
 int usd_string_index; 
 int usd_language_id; 
 usb_string_descriptor_t usd_desc; 
};
USB_DO_REQUEST ( struct usb_ctl_request)
USB 要求を制御終点のデバイスに送ります。デバイス、から/へ、送られたどんなデータも ucr_data に置かれます。転送データのサイズは、 ucr_request によって決定されます。 ucr_addr フィールドは、この呼び出しでは無視されます。 ucr_flags フィールドは、要求が要求されたサイズより短くできるフラグのために使用することができ、 ucr_actlen は、完了時に実サイズを含みます。

struct usb_ctl_request { 
 int ucr_addr; 
 usb_device_request_t ucr_request; 
 void *ucr_data; 
 int ucr_flags; 
#define USBD_SHORT_XFER_OK 0x04 /* 短い読み込みを許す */ 
 int ucr_actlen;  /* 転送された実際の長さ */ 
};

デバイスで任意の操作を実行することができるので、これは、危険な操作です。いくつかの最も危険な (例えば、デバイスアドレスの変更) 操作は、許可されていません。

USB_GET_DEVICEINFO ( struct usb_device_info)
デバイスのための情報概要を取得します。この呼び出しは、少しの USB トランザクションも発行しません。

アドレス設定、インタフェース、代替、および終点の 2 つの異なった方法があることに注意してください: インデックスか番号によって。インデックスは、デバイスによって提示されるような記述子の (0 から始める) 順序数です。番号は、記述子で見つけられるような実体のそれぞれの番号です。記述子の列挙型は、インデックスを使用し、取得と設定は、通常番号を使用します。

使用例: 現在の設定のためのすべての終点 (制御終点を除いて) は、 interface_index を 0 から config_desc->bNumInterface-1 まで繰り返し、それらの繰り返しごとに endpoint_index を 0 から interface_desc->bNumEndpoints まで繰り返すことによって見つけることができます。 config_index は、 USB_CURRENT_CONFIG_INDEX に設定されるべきで、 alt_index は、 USB_CURRENT_ALT_INDEX に設定されるべきです。

関連ファイル

/dev/ugen N . EE
デバイス N の終点 EE

関連項目

usb(4)

歴史

ugen ドライバは、 NetBSD 1.4 で登場しました。
July 22, 2012 FreeBSD