![]() |
libusb 1.0.24
USBデバイスにアクセスするためのクロス・プラットフォームのユーザー・ライブラリ
|
バージョン1.0.16(LIBUSB_API_VERSION >= 0x01000102)は、一部のプラットフォームで活線挿抜イベントのサポートを追加しました(パラメーター LIBUSB_CAP_HAS_HOTPLUG を指定して libusb_has_capability() を呼び出し、あなたのプラットフォームが活線挿抜通知をサポートするかどうかをテストする必要があります)。
このインターフェイスを使用すると、一致するUSBデバイスの到着と出発の通知を要求できます。
活線挿抜通知を受信するには、 libusb_hotplug_register_callback() を呼び出してコールバックを登録します。 この関数は、オプションで、 libusb_hotplug_deregister_callback() に渡すことができるコールバック・ハンドルを返します。
コールバック関数は、コールバックが追加のイベントを予期しているかどうかを示す整数(0または1)を返す必要があります。0を返すとコールバックが再度イベント待ちに入り、1を返すとコールバックの登録が解除されます。 LIBUSB_HOTPLUG_ENUMERATE フラグが原因で libusb_hotplug_register_callback() からコールバックが呼び出された場合、コールバックの戻り値は無視されることに注意してください。つまり、 libusb_hotplug_register_callback() から呼び出されたときに1を返すことによって、コールバックの登録を解除することはできません。
特定のコンテキストのコールバックは、 libusb_exit() によって自動的に登録解除されます。
1.0.16の時点で、サポートされている活線挿抜イベントは以下の2つです:
活線挿抜イベントは、これらのイベントのいずれかまたは両方をリッスンできます。
注意: デバイスが取り去られたという通知を受け取った時、デバイスのlibusb_device_handlesがある場合は、各デバイス・ハンドルで libusb_close() を呼び出して、デバイスに関連付けられている残りのリソースを解放する必要があります。デバイスが取り去られると、そのデバイスに関連付けられているlibusb_device_handleは無効になり、後でそのデバイスが戻ってきても無効のままになります。
LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVEDイベントを処理する場合、libusb_deviceを受け取るlibusb関数を呼び出すのが安全であると見なされます。 デバイスを開いて非同期転送を送信することも安全です。ただし、libusb_device_handleを使用する他のほとんどの関数は、安全に呼び出すことができません。 このような関数の例としては、さまざまな USBデスクリプター を取得する 同期API 関数またはブロッキング関数があります。これらの関数は、活線挿抜コールバックのコンテキスト外で使用する必要があります。
LIBUSB_HOTPLUG_EVENT_DEVICE_LEFTイベントを処理する場合、安全な関数は libusb_get_device_descriptor() のみです。
以下のコードは、活線挿抜インターフェイスの使用例を示しています: