2011/02/08 からのアクセス回数 5489 はじめに †以前libusbを使ってオリジナルのUSB機器のアクセスする記事avr/javaからLibusbを使うを書きましたが、 arm/libhidでARMマイコンパーフェクト学習基板にアクセスで紹介したオリジナルUSB HID機器をJavaから 操作する方法をご紹介します。 LibusbJavaを使う †avr/javaからLibusbを使うのでもご紹介したように、libusbをjavaからアクセスするためのライブラリがLibusbJavaです。 これを使ってARMマイコンパーフェクト学習基板への1バイトの入出力クラス(Generic1ByteHID)を作ってみます。 Generic1ByteHIDの作成 †Generic1ByteHIDの機能はきわめて単純です。
です。 Generic1ByteHIDのコンストラクタは、USBデバイスをオープンしてdeviceハンドラにセットするだけです。*1 public Generic1ByteHID(short vid, short pid) throws USBException { device = usbOpenDevice(vid, pid); if (device == 0) throw new USBException("Device not found"); } 入出力きわめて単純です。 /** * USB HIDに1バイト出力する * @param out 出力値 * @return usb_control_msgの戻り値 */ public int putByte(byte out) { int ret; outpacket[0] = out; ret = LibusbJava.usb_control_msg(device, USB_ENDPOINT_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, HID_REPORT_SET, 0x00 + (HID_RT_OUTPUT << 8), 0x00, outpacket, 1, 5000); return (ret); } /** * USB HIDから1バイト入力する * @return usb_control_msgの戻り値 */ public int getByte() { int ret; inpackate[0] = 0; ret = LibusbJava.usb_control_msg(device, USB_ENDPOINT_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, HID_REPORT_GET, 0x00 + (HID_RT_INPUT << 8), 0x00, inpackate, 1, 5000); if (ret > 0) return (inpackate[0]); else return (ret); } どうしてこんなに簡単にできたのか †これまで、USBのHIDの紹介記事ではとても煩雑な処理をして、HID機器にアクセスしていました。 どうして、こんなに簡単にできたのでしょう。その解は
arm/libhidでARMマイコンパーフェクト学習基板にアクセスでご紹介した、libhidのtest_libhidプログラムは、指定したデバイスへのレポートパスをリストアップしてくれます。 この結果を使ってHIDの必要な情報にアクセスすることができるようになります。 ARMマイコンパーフェクト学習基板のUSBRomHidでは、
となっています。 Generic1ByteHIDでは、この結果を使ってARMマイコンパーフェクト学習基板にアクセスしています。 getByteを例にすると、 ret = LibusbJava.usb_control_msg(device, USB_ENDPOINT_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, HID_REPORT_GET, 0x00 + (HID_RT_INPUT << 8), 0x00, inpackate, 1, 5000); の
をセットする場所です。 ソース †Generic1ByteHIDのソースを以下に置きます。 実行には、libusbJavaが必要となります。詳しくは、avr/javaからLibusbを使うを見てください。 コメント †この記事は、 皆様のご意見、ご希望をお待ちしております。
Tweet |