UsbHLib USBホストCライブラリ

GitHubリポジトリ
usbhost

概要

USBホストIPなどのハードウェアを制御してUSBホスト機能を実現するためのCライブラリです。現在はUSBホストIPとしてOpenCoresで公開されているUSBHostSlave IPCoreをサポートしています。

サポートしているUSBデバイス

ディレクトリ構成

docドキュメント
coreUSBホストCライブラリのソースファイル
hw_depプラットフォーム依存部のソースファイル
- nios2Nios2システム依存部
- microblazeMicroBlazeシステム依存部
config_sampleCライブラリ設定例
- allすべてのサポートデバイスを利用する場合の設定ファイル例
- simple_mouseマウスとHUBを利用する場合の設定ファイル例
- dev_attach_detachHUBにマウスが取り付け/取り外しされた場合に発生するコールバック関数を利用する場合の設定例
- simple_keyboardキーボードとHUBを利用する場合の設定ファイル例
- simple_gamepadゲームパッドとHUBを利用する場合の設定ファイル例
- simple_msd_botUSBメモリ、カードリーダー等のストレージとHUBを利用する場合の設定ファイル例
microblazeMicroBlazeを使用する場合の設定例
- allすべてのサポートデバイスを利用する場合の設定ファイル例
- simple_mouseマウスとHUBを利用する場合の設定ファイル例

ファイル構成

Cライブラリは、coreディレクトリのファイル、プラットフォームに応じたhw_depディレクトリのファイル、Cライブラリの設定を定義したconfig_sampleディレクトリのファイルで構成されます。
例) NiosIIプラットフォームでマウスとHUBを利用する場合のファイル構成

  coreのファイル+
  hw_dep/nios2のファイル+
  config_sample/simple_mouseのファイル
例)MicroBlazeプラットフォームで全サポートデバイスを利用する場合のファイル構成

  coreのファイル+
  hw_dep/microblazeのファイル+
  config_sample/microblaze/allのファイル

ライブラリのdefine設定

usbh_config.hのdefine設定によってCライブラリの構成が変わります。define定義に従って決まったメモリ量をあらかじめ静的に確保します。(Cライブラリでは実行時にメモリの動的確保を行いません。)

環境に関する設定

define名説明
USBH_DEV_INITIAL_ADDRESSエニュメレーション時にデバイスに割り当てるアドレスの初期値。デバイスが見つかると、USBH_DEV_INITIAL_ADDRESSに指定した値から順番にデバイスにアドレスが割り当てられる。
USBH_START_CONNUSBコネクタの開始番号。通常は0に設定。
USBH_NUM_OF_CONNS使用するUSBコネクタの数。通常は1に設定。
USBH_NUM_OF_DEVICESライブラリで管理するデバイスの最大数。
USBH_MAX_INTERFACE1つのデバイスが持つインターフェースの最大数。
USBH_MAX_ENDP1つのインターフェースが持つエンドポイントの最大数
USBH_MAX_HUB_PORHUBを使用する場合、そのHUBの最大ポート数
USBH_LOOKUP_MAX_CNTホストが管理するデバイス検索ルックアップテーブルの設定。マウス、キーボード等の種類別の最大登録数を指定。

使用するデバイスクラスの有効/無効設定

define名説明
USBH_USE_HUBHUBを使用する場合にdefineを行う。
USBH_USE_HIDマウス、キーボード、ゲームパッドを使用する場合にdefineを行う。
USBH_USE_MSDUSBフラッシュメモリ、SDカードリーダー等のストレージを使用する場合にdefineを行う。

HUBに関する設定

define名説明
USBH_HUB_REPORT_MAX_BUF“Hub and Port Status Change Bitmap”を格納するバッファのバイトサイズ。
USBH_HUB_CALLBACKHUBにデバイスが脱着された時にコールバック関数による処理が必要な場合にdefineを行う。

HIDに関する設定

define名説明
USBH_USE_MOUSEマウスを使用する場合にdefineを行う。
USBH_USE_KEYBOARDキーボードを使用する場合にdefineを行う。
USBH_USE_GAMEPADゲームパッドを使用する場合にdefineを行う。
USBH_HID_REPORT_MAX_BUFデバイスから取得したHIDのデータを格納するワークバッファのサイズ

マウスに関する設定

define名説明
USBH_USE_MOUSE_BOOT_PROTOCOLBoot Protocolを使用してマウスのデータを識別。
USBH_USE_MOUSE_BTN_IDXマウスのボタンデータのインデックス値。(USBH_USE_MOUSE_BOOT_PROTOCOLがdefineされていない場合のみ有効)
USBH_USE_MOUSE_X_IDXマウスのX軸移動量データのインデックス値。(USBH_USE_MOUSE_BOOT_PROTOCOLがdefineされていない場合のみ有効)
USBH_USE_MOUSE_Y_IDXマウスのY軸移動量データのインデックス値。(USBH_USE_MOUSE_BOOT_PROTOCOLがdefineされていない場合のみ有効)
USBH_USE_MOUSE_Z_IDXマウスのZ軸移動量データのインデックス値。(USBH_USE_MOUSE_BOOT_PROTOCOLがdefineされていない場合のみ有効)

キーボードに関する設定

define名説明
USBH_HID_LANG_JAPANESE日本語キーボードを使用する場合にdefineを行う。
USBH_USE_KEYBOARD_BOOT_PROTOCOLBoot Protocolを使用してキーボードのデータを識別。
USBH_USE_KEYBOARD_M_IDXキーボードのモデファイアデータのインデックス値。(USBH_USE_KEYBOARD_BOOT_PROTOCOLがdefineされていない場合のみ有効)
USBH_USE_KEYBOARD_K_IDXキーボードのキーデータのインデックス値。(USBH_USE_KEYBOARD_BOOT_PROTOCOLがdefineされていない場合のみ有効)

ゲームパッドに関する設定

define名説明
USBH_USE_REPORT_DESCRIPTORゲームパッドの情報をReportディスクリプタから判別する場合にdefineを行う。
USBH_HID_REPORT_DESC_MAX_BUFReportディスクリプタ解析用ワークバッファのバイトサイズ。
USBH_USE_GAMEPAD_BTN_IDXゲームパッドのボタンデータのインデックス値。(USBH_USE_REPORT_DESCRIPTORがdefineされていない場合のみ有効)
USBH_USE_GAMEPAD_X_IDXゲームパッドのX方向データのインデックス値。(USBH_USE_REPORT_DESCRIPTORがdefineされていない場合のみ有効)
USBH_USE_GAMEPAD_Y_IDXゲームパッドのY方向データのインデックス値。(USBH_USE_REPORT_DESCRIPTORがdefineされていない場合のみ有効)
USBH_HID_SUPPORT_PS3_GCPS3 Game Controllerを利用する場合にdefineを行う。

その他

define名説明
INFO_PRINTエニュメレーション中の情報などをコンソールに表示する場合にdefineを行う。

サンプルプログラム

プログラム名説明
simple_mouse.cマウスのみを利用する場合のサンプルプログラム。マウスの値が変化すると、コールバック関数が呼ばれてマウスの状態値がコンソールに表示される。
simple_mouse_hub.cHUBにマウスが取り付けられた時と取り外された時にコールバック関数が呼ばれる。
simple_keyboard.cキーボードのみを利用する場合のサンプルプログラム。キーが押されると、コールバック関数が呼ばれてキーに対応した文字がコンソールに表示される。
simple_gamepad.cゲームパッドのみを利用する場合のサンプルプログラム。ゲームパッドのボタンが押されると、コールバック関数が呼ばれてボタンの状態値がコンソールに表示される。
simple_msd_bot.cUSBメモリ等のストレージのみを利用する場合のサンプルプログラム。(ファイルシステムとしてFatFsを利用)
simple_msd_bot_pff.cUSBメモリ等のストレージのみを利用する場合のサンプルプログラム。(ファイルシステムとしてPetit FatFsを利用)
all_ff.cすべてのサポートデバイスを利用する場合のサンプルプログラム。

プラットフォーム(ハードウェア)依存部分の初期化関数について

1.ul_hw_init関数の追加

uh_init関数(初期化関数)の先頭に、プラットフォーム依存部の初期化用としてul_hw_init関数の呼び出しを追加しました。
サンプルではhw_dep/nios2/usbh_hw.cとhw_dep/microblae/usbh_hw.cで実装を行っています。

2.ul_hw_device_setup関数の追加

デバイスの設定を行うum_device_setup関数内にul_hw_device_setup関数の呼び出しを追加しました。
ul_hw_device_setup関数の呼び出しタイミングは、デバイスのディスクリプタ取得後、そのデバイスのコンフィギュレーションやアドレスの設定を行う前です。サンプルではhw_dep/nios2/usbh_hw.cとhw_dep/microblae/usbh_hw.cで実装を行っています。(サンプルでは関数が呼ばれた確認用として、文字列表示のみを行っています。)

更新履歴


2013/10/01  公開
2013/10/31  USBH_HID_SUPPORT_PS3_GCを追加
2014/09/18  hw_dep以下の構成を変更
            simple_mouse_hub.cサンプルを追加
            サンプルのprintfをマクロ(MPRINT)に変更
            USBH_USE_HUB_CALLBACKのdefineを追加
            ul_hw_init関数の追加
            ul_hw_device_setup関数の追加