2011/02/08 からのアクセス回数 5580
以前libusbを使ってオリジナルのUSB機器のアクセスする記事avr/javaからLibusbを使うを書きましたが、 arm/libhidでARMマイコンパーフェクト学習基板にアクセスで紹介したオリジナルUSB HID機器をJavaから 操作する方法をご紹介します。
avr/javaからLibusbを使うのでもご紹介したように、libusbをjavaからアクセスするためのライブラリがLibusbJavaです。
これを使ってARMマイコンパーフェクト学習基板への1バイトの入出力クラス(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を使うを見てください。
この記事は、
皆様のご意見、ご希望をお待ちしております。