libusb  1.0.24
USBデバイスにアクセスするためのクロス・プラットフォームのユーザー・ライブラリ
Typedefs | Enumerations | 関数群
デバイスの処理と列挙

以下の各機能は、各行に記述の操作を支援するように設計されています: さらに…

Typedef

typedef struct libusb_device libusb_device
 
typedef struct libusb_device_handle libusb_device_handle
 

Enum

enum  libusb_speed {
  LIBUSB_SPEED_UNKNOWN = 0, LIBUSB_SPEED_LOW = 1, LIBUSB_SPEED_FULL = 2, LIBUSB_SPEED_HIGH = 3,
  LIBUSB_SPEED_SUPER = 4, LIBUSB_SPEED_SUPER_PLUS = 5
}
 

関数群

ssize_t libusb_get_device_list (libusb_context *ctx, libusb_device ***list)
 
void libusb_free_device_list (libusb_device **list, int unref_devices)
 
uint8_t libusb_get_bus_number (libusb_device *dev)
 
uint8_t libusb_get_port_number (libusb_device *dev)
 
int libusb_get_port_numbers (libusb_device *dev, uint8_t *port_numbers, int port_numbers_len)
 
int libusb_get_port_path (libusb_context *ctx, libusb_device *dev, uint8_t *port_numbers, uint8_t port_numbers_len)
 
libusb_devicelibusb_get_parent (libusb_device *dev)
 
uint8_t libusb_get_device_address (libusb_device *dev)
 
int libusb_get_device_speed (libusb_device *dev)
 
int libusb_get_max_packet_size (libusb_device *dev, unsigned char endpoint)
 
int libusb_get_max_iso_packet_size (libusb_device *dev, unsigned char endpoint)
 
libusb_devicelibusb_ref_device (libusb_device *dev)
 
void libusb_unref_device (libusb_device *dev)
 
int libusb_wrap_sys_device (libusb_context *ctx, intptr_t sys_dev, libusb_device_handle **dev_handle)
 
int libusb_open (libusb_device *dev, libusb_device_handle **dev_handle)
 
libusb_device_handlelibusb_open_device_with_vid_pid (libusb_context *ctx, uint16_t vendor_id, uint16_t product_id)
 
void libusb_close (libusb_device_handle *dev_handle)
 
libusb_devicelibusb_get_device (libusb_device_handle *dev_handle)
 
int libusb_get_configuration (libusb_device_handle *dev_handle, int *config)
 
int libusb_set_configuration (libusb_device_handle *dev_handle, int configuration)
 
int libusb_claim_interface (libusb_device_handle *dev_handle, int interface_number)
 
int libusb_release_interface (libusb_device_handle *dev_handle, int interface_number)
 
int libusb_set_interface_alt_setting (libusb_device_handle *dev_handle, int interface_number, int alternate_setting)
 
int libusb_clear_halt (libusb_device_handle *dev_handle, unsigned char endpoint)
 
int libusb_reset_device (libusb_device_handle *dev_handle)
 
int libusb_kernel_driver_active (libusb_device_handle *dev_handle, int interface_number)
 
int libusb_detach_kernel_driver (libusb_device_handle *dev_handle, int interface_number)
 
int libusb_attach_kernel_driver (libusb_device_handle *dev_handle, int interface_number)
 
int libusb_set_auto_detach_kernel_driver (libusb_device_handle *dev_handle, int enable)
 

詳細説明

以下に記載されている各機能は、各業に記述の操作を支援するように設計されています:

一言で言えば…

以下の説明は、実際よりも複雑に聞こえます。 次の一連の関数呼び出しは、ほとんどすべてのシナリオに適しており、リソース管理の問題を深く理解している必要はありません:

// discover devices
libusb_device *found = NULL;
ssize_t cnt = libusb_get_device_list(NULL, &list);
ssize_t i = 0;
int err = 0;
if (cnt < 0)
error();
for (i = 0; i < cnt; i++) {
libusb_device *device = list[i];
if (is_interesting(device)) {
found = device;
break;
}
}
if (found) {
err = libusb_open(found, &handle);
if (err)
error();
// etc
}

2つの重要な点:

ハンドルを使い終わったら、デバイスでの入出力に進むことができます。

デバイスとデバイス・ハンドル

libusbには、libusb_device不透明(opaque)型で表されるUSBデバイスの概念があります。デバイスは、現在または以前にシステムに接続されていたUSBデバイスを表します。デバイスへの参照を使用して、デバイスに関する特定の情報を判別できます(たとえば、デスクリプター・データを読み取ることができます)。

libusb_get_device_list()関数を使用して、現在システムに接続されているデバイスのリストを取得できます。これは、デバイス検出として知られています。

デバイスへの参照があるからといって、それが必ずしも使用可能であるとは限りません。デバイスのプラグが抜かれているか、そのようなデバイスを操作する権限がないか、別のプログラムまたはドライバーがデバイスを使用している可能性があります。

操作したいデバイスを見つけたら、libusb_open()関数を使用してデバイスをオープンするようlibusbに依頼する必要があります。成功すると、libusbはデバイス・ハンドル(libusb_device_handleポインタ)を返します。すべての "実際の" 入出力操作は、元のデバイス・ポインタではなくそのハンドルで操作します。

デバイス検出とリファレンス・カウント

デバイスの検出(つまり、libusb_get_device_list()の呼び出し)は、新しく割り当てられたデバイスのリストを返します。リストを使い終わったらリスト自体を解放する必要があります。libusbはリストの内容(デバイス自体)を解放してもよいかを知る必要もあります。

これらの問題を処理するために、libusbは2つの別個のアイテムを提供します:

libusb_get_device_list()関数によって提示される新しいデバイスの参照カウンターはすべて1です。libusb_ref_device()libusb_unref_device() を使用して参照カウンターを増減できます。参照カウンターが0に達すると、デバイスは破棄されます。

上記の情報を念頭に置くと、デバイスをオープンする手順は以下のようになります:

  1. libusb_get_device_list() を使ってデバイスを検出します。
  2. あなたが操作したいデバイスを選び、libusb_open() を呼びます。
  3. 検出されたデバイス・リスト内のすべてのデバイスへの参照を解除(unref)します。
  4. 検出されたデバイス・リストを解放します。

この順番は重要です。参照解除(unreference)はデバイスを破壊する可能性があるため、オープンする前にデバイスへの参照を解除(unreference)しないでください。

便宜上、libusb_free_device_list() 関数には、リスト自体を解放する前に、オプションでリスト内のすべてのデバイスを参照解除(unreference)するパラメーターが含まれています。これは、上記のステップ3と4を組み合わせたものです。

実装の詳細として、libusb_open()は実際に問題のデバイスへの参照を追加します。 これは、デバイスがlibusb_get_device()を介してハンドルから引き続き利用できるためです。参照は、libusb_close()の処理中に削除されます。

Typedef解説

◆ libusb_device

typedef struct libusb_device libusb_device

システムで検出されたUSBデバイスを表す構造(structure)。 これは不透明(opaque)型であり、通常は libusb_get_device_list() からポインタが提供されます。

特定の操作はデバイスで実行できますが、入出力を実行するには、最初に libusb_open() を使用してデバイス・ハンドルを取得する必要があります。

デバイスは、libusb_ref_device()libusb_unref_device() により参照カウンターを増減し、参照カウンターが0に達すると解放されます。libusb_get_device_list() によって提示される新しいデバイスの参照カウンターは1で、 libusb_free_device_list() はオプションでリスト内のすべてのデバイスの参照カウンターを減らすことができます。 libusb_open() は、後で libusb_close() によって破棄される別の参照を追加します。

◆ libusb_device_handle

USBデバイスのハンドルを表す構造(structure)。これは不透明(opaque)型であり、通常は libusb_open() からポインタが提供されます。

デバイス・ハンドルは、入出力およびその他の操作を実行するために使用されます。デバイス・ハンドルを使い終わったら、 libusb_close() を呼び出す必要があります。

列挙型解説

◆ libusb_speed

速度コード。デバイスが動作している速度を示します。

列挙型
LIBUSB_SPEED_UNKNOWN 

OSは、デバイスの速度を報告・認識しません。

LIBUSB_SPEED_LOW 

デバイスは低速(low speed)(1.5MBit/s)で動作しています。

LIBUSB_SPEED_FULL 

デバイスは全速(full speed)(12MBit/s)で動作しています。

LIBUSB_SPEED_HIGH 

デバイスは高速(high speed)(480MBit/s)で動作しています。

LIBUSB_SPEED_SUPER 

デバイスは超速(super speed)(5000MBit/s)で動作しています。

LIBUSB_SPEED_SUPER_PLUS 

デバイスは超速プラス(super speed plus)(10000MBit/s)で動作しています。

関数解説

◆ libusb_get_device_list()

ssize_t libusb_get_device_list ( libusb_context ctx,
libusb_device ***  list 
)

現在システムに接続されているUSBデバイスのリストを返します。 これは、あなたが動作するUSBデバイスを見つけるための入り口です。

使い終わったら、すべてのデバイスの参照を解除し、 libusb_free_device_list() を使用してリストを解放する必要があります。注意: libusb_free_device_list() すべてのデバイスの参照を取り消すことができることに注意してください。 これから開こうとしているデバイスをオープンする前に参照を解除しないように注意して下さい。

この関数のこの戻り値は、結果のリスト内のデバイスの数を示します。リストはNULLで終了するため、実際には1要素大きくなります。

パラメーター
ctx操作するコンテキスト。デフォルトのコンテキストの場合はNULL
listデバイスのリストの出力場所。 後で libusb_free_device_list() を使用して解放する必要があります。
戻り値
出力リスト内のデバイスの数、またはバックエンドで発生したエラーに応じた libusb_error 列挙型の値のいずれか。

◆ libusb_free_device_list()

void libusb_free_device_list ( libusb_device **  list,
int  unref_devices 
)

libusb_get_device_list() を使用して以前に検出されたデバイスのリストを解放します。unref_devicesパラメーターが0以外にセットされている場合、リスト内の各デバイスの参照カウントは1ずつ減少します。

パラメーター
list開放したいリスト
unref_devicesリスト内のデバイスをunrefするかどうか(訳注:0以外ならunrefする)

◆ libusb_get_bus_number()

uint8_t libusb_get_bus_number ( libusb_device dev)

デバイスが接続されているバス番号を取得する。

パラメーター
devデバイス
戻り値
バス番号

◆ libusb_get_port_number()

uint8_t libusb_get_port_number ( libusb_device dev)

デバイスが接続されているポートの番号を取得します。OSが何かファンキーなことをしたり、USB拡張カードを活線挿抜(hot-plugging)したりしない限り、この呼び出しによって返されるポート番号は通常、物理ポートに一意に関連付けられていることが保証されます。つまり、同じ物理ポートに接続された異なるデバイスは同じポート番号を返す必要があります。

ただし、これ以外では、この呼び出しによって返されるポート番号が同じままである、またはHUB/HCDメーカーによってポートに番号が付けられた順序と一致するという保証はありません。

パラメーター
devデバイス
戻り値
ポート番号(使用できない場合は0)

◆ libusb_get_port_numbers()

int libusb_get_port_numbers ( libusb_device dev,
uint8_t *  port_numbers,
int  port_numbers_len 
)

指定されたデバイスのルート(root)からすべてのポート番号のリストを取得する

バージョン 1.0.16 以降。LIBUSB_API_VERSION >= 0x01000102

パラメーター
devデバイス
port_numbersポート番号達が入る配列
port_numbers_len配列の最大長。 USB 3.0の仕様によると、深さの現在の最大制限は7です。
戻り値
充填された要素の数
LIBUSB_ERROR_OVERFLOW 得られる個数より配列のサイズが小さい場合

◆ libusb_get_port_path()

int libusb_get_port_path ( libusb_context ctx,
libusb_device dev,
uint8_t *  port_numbers,
uint8_t  port_numbers_len 
)
非推奨:
代わりに libusb_get_port_numbers() を使って下さい。

◆ libusb_get_parent()

libusb_device* libusb_get_parent ( libusb_device dev)

指定されたデバイスからその親(parent)を取得します。

パラメーター
devデバイス
戻り値
デバイスの親。使用できない場合はNULL。この関数を呼び出す前に libusb_get_device_list() を発行し、かつ、 libusb_free_device_list() を発行する前に親にのみアクセスすることを確認する必要があります。その理由は、現在libusbはデバイス・インスタンスの永続的なリストを維持していないため、親が libusb_get_device_list()libusb_free_device_list() ブロック内で完全にインスタンス化されることを保証することしかできないためです。

◆ libusb_get_device_address()

uint8_t libusb_get_device_address ( libusb_device dev)

接続されているバス上のデバイスのアドレスを取得します。

パラメーター
devデバイス
戻り値
デバイス・アドレス

◆ libusb_get_device_speed()

int libusb_get_device_speed ( libusb_device dev)

デバイスのネゴされた接続速度を取得します。

パラメーター
devデバイス
戻り値
libusb_speed コード。ここで、LIBUSB_SPEED_UNKNOWNは、OSがネゴシエートされた速度を返すことを認識していないかサポートしていないことを意味します。

◆ libusb_get_max_packet_size()

int libusb_get_max_packet_size ( libusb_device dev,
unsigned char  endpoint 
)

アクティブなデバイス構成の特定のエンドポイントのwMaxPacketSize値を取得するための便利な関数。

この関数は、もともとアイソクロナス転送を設定する際に役立つことを目的としていましたが、設計ミスにより、代わりにこの関数が発生しました。内容を考慮せずに、単にwMaxPacketSize値を返します。アイソクロナス転送を処理している場合は、代わりに libusb_get_max_iso_packet_size() が必要になる可能性があります。

パラメーター
devデバイス
endpoint問い合わせのエンドポイントのアドレス
戻り値
wMaxPacketSizeの値
LIBUSB_ERROR_NOT_FOUND そのエンドポイントが存在しない場合
LIBUSB_ERROR_OTHER その他の失敗

◆ libusb_get_max_iso_packet_size()

int libusb_get_max_iso_packet_size ( libusb_device dev,
unsigned char  endpoint 
)

特定のエンドポイントが1マイクロ・フレームの期間に送受信できる最大パケット・サイズを計算します

アクティブな構成のみが検査されます。計算は、USB 2.0仕様のセクション9.6.6で説明されているように、エンドポイント・デスクリプターのwMaxPacketSizeフィールドに基づいています。

アイソクロナス・エンドポイントまたは割り込みエンドポイントで動作する場合、この関数はビット 0:10 で見つかった値に、マイクロ・フレームあたりの取引数(ビット 11:12 で決定)を掛けます。それ以外の場合、この関数はビット 0:10 にある数値を返すだけです。 USB 3.0デバイスの場合、エンドポイント・コンパニオン・デスクリプターを取得してwBytesPerIntervalを返そうとします。

この関数は、アイソクロナス転送を設定する場合に役立ちます。たとえば、転送内のすべてのアイソクロナス・パケットのlengthフィールドを設定するために、この関数からの戻り値を libusb_set_iso_packet_lengths() に渡すことができます。

v1.0.3 以降。

パラメーター
devデバイス
endpoint問い合わせのエンドポイントのアドレス
戻り値
このエンドポイントで送受信できる最大パケット・サイズ
LIBUSB_ERROR_NOT_FOUND そのエンドポイントが存在しない場合
LIBUSB_ERROR_OTHER その他の失敗

◆ libusb_ref_device()

libusb_device* libusb_ref_device ( libusb_device dev)

デバイスの参照カウンターをインクリメントする。

パラメーター
dev対象のデバイス
戻り値
パラメーターで指定したデバイスをそのまま返す。

◆ libusb_unref_device()

void libusb_unref_device ( libusb_device dev)

デバイスの参照カウンターをデクリメントします。 デクリメント操作によって参照カウンターがゼロに達した場合、デバイスは破棄されます。

パラメーター
dev参照カウンターをデクリメントしたいデバイス

◆ libusb_wrap_sys_device()

int libusb_wrap_sys_device ( libusb_context ctx,
intptr_t  sys_dev,
libusb_device_handle **  dev_handle 
)

プラットフォーム固有のシステム・デバイス・ハンドルをラップし、基盤となるデバイスのlibusbデバイス・ハンドルを取得します。 ハンドルを使用すると、libusbを使用して問い合わせのデバイスで入出力を実行できます。

USBデバイスに直接アクセスする権限がない場合は、libusb_initの前に libusb_set_option(NULL, LIBUSB_OPTION_WEAK_AUTHORITY) を呼び出す必要があります。

Linuxでは、システム・デバイス・ハンドルは、デバイス・ノードで開かれている有効なファイル・デスクリプターである必要があります。

システム・デバイス・ハンドルは、 libusb_close() が呼び出されるまで開いたままにする必要があります。 システム・デバイス・ハンドルは、 によって閉じられません。

内部的に、この関数は一時的なデバイスを作成し、 libusb_get_device() を介して利用できるようにします。 このデバイスは、 libusb_close() 中に破棄されます。 デバイスは、 libusb_open() を介して開かないでください。

これは非ブロッキング関数です。バスを介してリクエストは送信されません。

バージョン 1.0.23以降。LIBUSB_API_VERSION >= 0x01000107

パラメーター
ctx操作するコンテキスト。デフォルトのコンテキストの場合はNULL
sys_devプラットフォーム固有のシステム・デバイス・ハンドル
dev_handle返されたデバイス・ハンドル・ポインタの出力場所。戻りコードが0の場合にのみ入力されます。
戻り値
0ならば成功
LIBUSB_ERROR_NO_MEM メモリ割り当て失敗の場合。
LIBUSB_ERROR_ACCESS ユーザーの権限が不十分な場合
LIBUSB_ERROR_NOT_SUPPORTED このプラットフォームでサポートされていない操作の場合
LIBUSB_ERRORコード その他の失敗

◆ libusb_open()

int libusb_open ( libusb_device dev,
libusb_device_handle **  dev_handle 
)

デバイスを開き、デバイス・ハンドルを取得します。ハンドルを使用すると、問い合わせのデバイスで入出力Oを実行できます。

内部的に、この関数はデバイスへの参照を追加し、 libusb_get_device() を介して使用できるようにします。 その参照は、 libusb_close() 中に削除されます。

これは非ブロッキング関数です。バスを介してリクエストは送信されません。

パラメーター
devオープンしたいデバイス
dev_handle返されたデバイス・ハンドル・ポインタの出力場所。戻りコードが0の場合にのみ入力されます。
戻り値
0ならば成功
LIBUSB_ERROR_NO_MEM メモリ割り当て失敗の場合。
LIBUSB_ERROR_ACCESS ユーザーの権限が不十分な場合
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERRORコード その他の失敗

◆ libusb_open_device_with_vid_pid()

libusb_device_handle* libusb_open_device_with_vid_pid ( libusb_context ctx,
uint16_t  vendor_id,
uint16_t  product_id 
)

特定の idVendoridProduct の組み合わせを持つデバイスを見つけるための便利な機能。この関数は、libusbを使用してちょいと試しのアプリケーションをでっち上げる場合に使えます。これにより、 libusb_get_device_list() を呼び出したり、そのリストを辿ったり解放したりすることを心配する必要がなくなります。

この機能には制限があるため、本番アプリケーションでの使用は想定されていません。複数のデバイスが同じIDを持っている場合、最初のだけが提供されます。

パラメーター
ctx操作するコンテキスト。デフォルトのコンテキストの場合はNULL
vendor_id探したいidVendor値
product_id探したいidProduct値
戻り値
指定条件で最初に見つかったデバイスのデバイス・ハンドル。エラーの場合、またはデバイスが見つからなかった場合はNULL。

◆ libusb_close()

void libusb_close ( libusb_device_handle dev_handle)

デバイス・ハンドルをクローズします。アプリケーションが終了する前に、オープン中の全てのハンドルについて呼び出す必要があります。

内部的に、この関数は、指定のデバイスで libusb_open() によって追加された参照を破棄します。

これは非ブロッキング関数です。バスを介してリクエストは送信されません。

パラメーター
dev_handleクローズしたいデバイス・ハンドル

◆ libusb_get_device()

libusb_device* libusb_get_device ( libusb_device_handle dev_handle)

デバイス・ハンドルの基になるデバイスを取得します。 この関数は、返されたデバイスの参照カウンターを変更しないため、完了時に参照を解除する必要はありません。

パラメーター
dev_handleデバイス・ハンドル
戻り値
基になるデバイス

◆ libusb_get_configuration()

int libusb_get_configuration ( libusb_device_handle dev_handle,
int *  config 
)

現在アクティブな構成のbConfigurationValueを決定します。

あなたはこの情報を取得するために独自の制御要求を作成することもできますが、この関数には、オペレーティング・システムのキャッシュから情報を取得できる可能性があるという利点があります(入出力は含まれません)。

OSがこの情報をキャッシュしない場合、情報を取得するために制御転送が送信されている間、この関数はブロックされます。

この関数は、デバイスが未構成の状態の場合、 config 出力パラメーターに値0を返します。

パラメーター
dev_handleデバイス・ハンドル
configアクティブな構成のbConfigurationValueの出力場所(戻りコード0の場合のみ有効)
戻り値
0ならば成功
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERRORコード その他の失敗

◆ libusb_set_configuration()

int libusb_set_configuration ( libusb_device_handle dev_handle,
int  configuration 
)

デバイスのアクティブな構成を設定します。

オペレーティング・システムは、デバイスにアクティブな構成を設定している場合と設定していない場合があります。インターフェイスを要求して他の操作を実行する前に、正しい構成が選択されていることを確認するのはアプリケーションの責任です。

選択した構成ですでに構成されているデバイスでこの関数を呼び出すと、この関数は軽量なデバイスのリセットとして機能します。つまり、現在の構成を使用してSET_CONFIGURATION要求を発行し、ほとんどのUSB関連デバイスの状態をリセットします(altsettingをゼロにリセットすると、エンドポイントはクリアされて停止(halt)し、リセットを反転させます)。

すべてのバックエンドがユーザー空間からの構成の設定をサポートしているわけではありません。これは、戻りコードLIBUSB_ERROR_NOT_SUPPORTEDで示されます。この場合、プラットフォームがデバイス構成自体を処理していることを示唆しているため、このエラーは通常無視しても安全です。

アプリケーションがインターフェイスを要求している場合、構成を変更/リセットすることはできません。インターフェイスを要求する前に、必要な構成を設定することをお勧めします。

または、最初に libusb_release_interface() を呼び出すこともできます。 この方法で行う場合は、devのauto_detach_kernel_driverが0であることを確認する必要があります。そうしないと、インターフェイスを解放したときにカーネル・ドライバーが再接続されます。

他のアプリケーションまたはドライバーがインターフェイスを要求している場合、構成を変更/リセットすることはできません。

構成値が-1の場合、デバイスは未構成の状態になります。 USB仕様では、構成値0が未構成を表すと規定されていますが、実際にはバグって構成0があるデバイスが存在します。

独自のSET_CONFIGURATION制御要求を作成するのではなく、常にこの関数を使用する必要があります。これは、基盤となるオペレーティング・システム側ではそのような変更がいつ発生するかを知る必要があるためです。

これはブロッキング関数です。

パラメーター
dev_handleデバイス・ハンドル
configurationあなたがアクティブにたい構成のbConfigurationValue。デバイスを未構成の状態にする場合は-1を指定する。
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND 要求した構成が存在しない場合
LIBUSB_ERROR_BUSY インターフェイスが現在要求されている場合
LIBUSB_ERROR_NOT_SUPPORTED 構成の設定または変更がバックエンドでサポートされていない場合
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERRORコード その他の失敗
以下も参照して下さい
libusb_set_auto_detach_kernel_driver()

◆ libusb_claim_interface()

int libusb_claim_interface ( libusb_device_handle dev_handle,
int  interface_number 
)

指定のデバイス・ハンドルでインターフェイスを要求します。エンドポイントのいずれかで入出力を実行する前に、使用するインターフェイスを要求する必要があります。

すでに要求されているインターフェイスを要求しようとすることは合法です。その場合、libusbは何もせずに0を返します。

devのauto_detach_kernel_driverが1に設定されている場合、カーネル・ドライバーは必要に応じて取り外され、失敗すると取り外しエラー(detach error)が返されます。

インターフェイスの要求は、純粋に論理的な操作です。バスを介してリクエストが送信されることはありません。インターフェイス要求は、アプリケーションがインターフェイスの所有権を取得することを決まりとしている、オペレーティングシステムに指示を出すために使用されます。

これはブロッキング関数です。

パラメーター
dev_handleデバイス・ハンドル
interface_numberあなたが要求したいインターフェイスの bInterfaceNumber
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND 要求したインターフェイスが存在しない場合
LIBUSB_ERROR_BUSY 別のプログラムまたはドライバーがインターフェイスを要求してた場合
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERROR その他エラー
以下も参照して下さい
libusb_set_auto_detach_kernel_driver()

◆ libusb_release_interface()

int libusb_release_interface ( libusb_device_handle dev_handle,
int  interface_number 
)

以前に libusb_claim_interface() で要求されたインターフェイスを解放します。デバイス・ハンドルを閉じる前に、要求されたすべてのインターフェイスを解放する必要があります。

これはブロッキング関数です。 SET_INTERFACE制御要求がデバイスに送信され、インターフェイスの状態が最初の切替設定にリセットされます。

devのauto_detach_kernel_driverが1に設定されている場合、カーネル・ドライバーは、インターフェイスを解放した後に再接続されます。

パラメーター
dev_handleデバイス・ハンドル
interface_number以前要求したインターフェイスの bInterfaceNumber
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND そのインターフェイスは要求されていない
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERRORコード その他の失敗
以下も参照して下さい
libusb_set_auto_detach_kernel_driver()

◆ libusb_set_interface_alt_setting()

int libusb_set_interface_alt_setting ( libusb_device_handle dev_handle,
int  interface_number,
int  alternate_setting 
)

インターフェイスの切替設定をアクティブにします。 インターフェイスは、 libusb_claim_interface() で事前に要求されている必要があります。

独自のSET_INTERFACE制御要求を作成するのではなく、常にこの関数を使用する必要があります。 これは、基盤となるオペレーティング・システムがそのような変更がいつ発生したかを知る必要があるためです。

これはブロッキング関数です。

パラメーター
dev_handleデバイス・ハンドル
interface_number以前要求したインターフェイスの bInterfaceNumber
alternate_settingアクティブにしたいだいたい設定の bAlternateSetting
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND 指定のインターフェイスが要求されていなかった場合、または要求した切替設定が存在していなかった場合
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERRORコード その他の失敗

◆ libusb_clear_halt()

int libusb_clear_halt ( libusb_device_handle dev_handle,
unsigned char  endpoint 
)

エンドポイントの停止(halt)/ストール(stall)状態をクリアします。停止(halt)ステータスのエンドポイントは、停止(halt)状態が終わるまでデータを送受信できません。

停止状態をクリアする前に、保留中の転送をすべてキャンセルする必要があります。

これはブロッキング関数です。

パラメーター
dev_handleデバイス・ハンドル
endpoint停止状態をクリアしたいエンドポイント
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND そのエンドポイントが存在しない場合
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERRORコード その他の失敗

◆ libusb_reset_device()

int libusb_reset_device ( libusb_device_handle dev_handle)

USBポートのリセットを実行して、デバイスを再初期化します。リセットが完了した後、システムは以前の構成と切替設定の復元を試みます。

リセットが失敗した場合、デスクリプターが変更された場合、または前の状態を復元できない場合、デバイスは切断されて再接続されたように見えます。これは、デバイス・ハンドルが無効になり(クローズする必要があります)、デバイスを再検出することを意味します。 この場合、戻り値はLIBUSB_ERROR_NOT_FOUNDです。

これはブロッキング関数であり、通常は顕著な遅延が発生します。

パラメーター
dev_handleリセットしたいデバイスのハンドル
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND 再列挙が必要な場合、またはデバイスが切断されている場合
LIBUSB_ERRORコード その他の失敗

◆ libusb_kernel_driver_active()

int libusb_kernel_driver_active ( libusb_device_handle dev_handle,
int  interface_number 
)

カーネル・ドライバーがインターフェイスでアクティブかどうかを確認します。カーネル・ドライバーがアクティブな場合、インターフェイスを要求することはできず、libusbは入出力を実行できません。

この機能はWindowsでは使用できません。

パラメーター
dev_handleデバイス・ハンドル
interface_numberチェックしたいインターフェイス
戻り値
0ならばアクティブなカーネル・ドライバーは無い
1ならばカーネル・ドライバーがアクティブ。
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERROR_NOT_SUPPORTED この機能が利用できないプラットフォームの場合
LIBUSB_ERRORコード その他の失敗
以下も参照して下さい
libusb_detach_kernel_driver()

◆ libusb_detach_kernel_driver()

int libusb_detach_kernel_driver ( libusb_device_handle dev_handle,
int  interface_number 
)

インターフェイスからカーネル・ドライバを取り外します。成功すると、インターフェイスを要求して入出力を実行できるようになります。

この機能はWindowsでは使用できません。

libusb自体も特別なカーネル・ドライバーを介してデバイスと通信することに注意してください。このドライバーが既にデバイスに接続されている場合、この呼び出しはデバイスを取り外しせず、LIBUSB_ERROR_NOT_FOUNDを返します。

パラメーター
dev_handleデバイス・ハンドル
interface_numberドライバーを取り外したいインターフェイス
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND アクティブなカーネル・ドライバーが無い
LIBUSB_ERROR_INVALID_PARAM そのインターフェイスは存在しない
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERROR_NOT_SUPPORTED この機能が利用できないプラットフォームの場合
LIBUSB_ERRORコード その他の失敗
以下も参照して下さい
libusb_kernel_driver_active()

◆ libusb_attach_kernel_driver()

int libusb_attach_kernel_driver ( libusb_device_handle dev_handle,
int  interface_number 
)

以前に libusb_detach_kernel_driver() を使用して取り外したインターフェイスのカーネル・ドライバーを再取り付けします。

この機能はWindowsでは使用できません。

パラメーター
dev_handleデバイス・ハンドル
interface_numberドライバーを取り付けたいインターフェイス
戻り値
0ならば成功
LIBUSB_ERROR_NOT_FOUND アクティブなカーネル・ドライバーが無い
LIBUSB_ERROR_INVALID_PARAM そのインターフェイスは存在しない
LIBUSB_ERROR_NO_DEVICE デバイスが切断されている場合
LIBUSB_ERROR_NOT_SUPPORTED この機能が利用できないプラットフォームの場合
LIBUSB_ERROR_BUSY インターフェイスがプログラムまたはドライバーによって要求されているために、ドライバーを接続できない場合
LIBUSB_ERRORコード その他の失敗
以下も参照して下さい
libusb_kernel_driver_active()

◆ libusb_set_auto_detach_kernel_driver()

int libusb_set_auto_detach_kernel_driver ( libusb_device_handle dev_handle,
int  enable 
)

libusbの自動カーネル・ドライバー取り外しを有効/無効にします。これを有効にすると、libusbは、インターフェイスを要求するときにインターフェイスス上のカーネル・ドライバーを自動的に切り離し、インターフェイスを解放するときにそれを接続します。

新しくオープンしたデバイス・ハンドルでは、カーネル・ドライバーの自動取り外しはデフォルトで無効になっています。

LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVERがないプラットフォーム(訳注:libusb_has_capability(libusb_capability.LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER)が0を返す)では、この関数はLIBUSB_ERROR_NOT_SUPPORTEDを返し、libusbはこの関数が呼び出されなかったかのように続行します。

パラメーター
dev_handleデバイス・ハンドル
enable自動カーネル・ドライバー取り外しを有効にするか無効にするか
戻り値
LIBUSB_SUCCESS 成功の場合
LIBUSB_ERROR_NOT_SUPPORTED この機能が利用できないプラットフォームの場合
以下も参照して下さい
libusb_claim_interface()
libusb_release_interface()
libusb_set_configuration()
libusb_get_device_list
ssize_t libusb_get_device_list(libusb_context *ctx, libusb_device ***list)
定義: core.c:812
libusb_device
struct libusb_device libusb_device
定義: libusb.h:1004
libusb_open
int libusb_open(libusb_device *dev, libusb_device_handle **dev_handle)
定義: core.c:1291
libusb_free_device_list
void libusb_free_device_list(libusb_device **list, int unref_devices)
定義: core.c:882
libusb_device_handle
struct libusb_device_handle libusb_device_handle
定義: libusb.h:1015