avr/javaからLibusbを使う
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
2008/10/14 からのアクセス回数 &counter;
#contents
[[avr/USB接続]]でlibusbを使って自作のUSBデバイスにアクセ...
次は、javaからこのUSBデバイスを操作してみます。
** LibusbJava [#c29ea8e8]
まず、libusbのjavaラッパーが必要です。
世の中には、自分がやりたいと思うことをすでにやっている人...
#pre{{
libusb java
}}
でグーグル検索すると
- [[Java libusb / libusb-win32 wrapper>http://libusbjava....
を見つけることができました。
Windowsの人は、
- [[installation>http://libusbjava.sourceforge.net/wp/?pa...
を参考してください。
** ソースからのコンパイル [#we572fde]
私はMacOSXなので、SVNからソースをダウンロードしてコンパイ...
*** チェックアウト [#y9a2aebc]
Eclipseを使って、
[[SVN>https://libusbjava.svn.sourceforge.net/svnroot/libu...
- trunk/java
- trunk/libusbJava
をチェックアウトします。
*** MacOSX用のダイナミックライブラリの作成 [#ddb204b7]
次に、LibusbJavaを使ってMacOSX用のダイナミックライブラリ...
LibusbJavaプロジェクトの
build.xmlの22行に以下の1行を追加してください。
#pre{{
<property name="version.mac" value="${version.major}.${v...
}}
次にbuild.xmlを選択し、右クリックでRun As->Ant build...を...
ターゲットして、Macを選択するとLibusbJava.jnilibが作成さ...
*** ch.ntb.usb-0.5.7.jarの作成 [#tb312e58]
同様に、ch.ntb.usbプロジェクトでbuild.xmlを使ってjarファ...
** テストプロジェクトの作成 [#m3b6848b]
Eclipseで新規プロジェクトで、
- UsbTiny45プロジェクトを作成します。
-ここにLibusbJava.jnilib、ch.ntb.usb-0.5.7.jarをコピーし...
- ch.ntb.usb-0.5.7.jarをビルドパスに追加します。
*** テストプログラム [#t12c5b66]
テストプログラムUSBTiny45.javaを作成します。
- C版同じように、usbOpenDeviceは以下のようになります。
#pre{{
static long usbOpenDevice(short idvendor, short idproduc...
Usb_Device dev = null;
Usb_Bus bus = USB.getBus();
long usbHandle = 0L;
while (bus != null) {
dev = bus.getDevices();
while (dev != null) {
usbHandle = LibusbJava.usb_open(dev);
if (usbHandle != 0) {
Usb_Device_Descriptor devDesc = dev.getDescriptor();
String retp = LibusbJava.usb_get_string_simple(usbHa...
...
String retm = LibusbJava.usb_get_string_simple(usbHa...
...
if (retp != null && retm != null) {
if (devDesc.getIdVendor() == idvendor
&& devDesc.getIdProduct() == idproduct) {
return usbHandle;
}
}
}
dev = dev.getNext();
}
bus = bus.getNext();
}
LibusbJava.usb_close(usbHandle);
return 0L;
}
}}
- 実行部分も
#pre{{
static private void testUsbOpenDevice() throws Exception {
byte[] buffer = new byte[2312];
int i=3, j=4, k=5, l=6, m=7, n=8, o=9;
int ret;
long devHandle = usbOpenDevice(vendorId, productId);
if (devHandle == 0) {
System.err.println("usbOpenDevice failed\n");
return;
}
ret = LibusbJava.usb_control_msg(devHandle,
USB.REQ_TYPE_TYPE_VENDOR|USB.REQ_TYPE_RECIP_DEVICE
|USB_ENDPOINT_IN,
i, j+256*k, l+256*m, buffer, n+256*o, 5000);
System.out.format("ret=%d \n", ret);
for (int p=0; p < ret; p++) {
System.out.format("buffer[%d]=%d \n", p, buffer[p]);
}
LibusbJava.usb_close(devHandle);
}
}}
とします。
** 動作確認 [#zc3d669d]
これでよしとmain関数を実行したのですが、うまく動きません。
- libusbJava版は、ハブに接続したUSBデバイスをうまく認識し...
ことが分かりました。
USBデバイスが認識されているかは、ch.ntb.usb-0.5.7.jarのUs...
めでたく、実行結果がCと同じく
#pre{{
ret=7
buffer[0]=9
buffer[1]=3
buffer[2]=4
buffer[3]=5
buffer[4]=6
buffer[5]=7
buffer[6]=8
}}
になりました。
** ch.ntb.usbの変更 [#a5d7fdf2]
Device.java#initDeviceの114行目の
#pre{{
updateMaxPacketSize(device);
}}
をdevDesc.getAltinterface()が-1の時には、コールしないよう...
テストプログラムは、以下のように簡単になります。
#pre{{
static private void testDeviceAndUSB() throws Exception {
byte[] buffer = new byte[2312];
int i=3, j=4, k=5, l=6, m=7, n=8, o=9;
int ret;
Device device = USB.getDevice(vendorId, productId);
if (device == null) {
System.err.println("usbOpenDevice failed\n");
return;
}
device.open(1, 0, -1);
ret = device.controlMsg(
USB.REQ_TYPE_TYPE_VENDOR|USB.REQ_TYPE_RECIP_DEVICE
|USB_ENDPOINT_IN,
i, j+256*k, l+256*m, buffer, n+256*o, 5000, false);
System.out.format("ret=%d \n", ret);
for (int p=0; p < ret; p++) {
System.out.format("buffer[%d]=%d \n", p, buffer[p]);
}
device.close();
}
}}
** ファイル [#fb2ac0cb]
作成したUSBTiny45.javaは以下からダウンロードできます。
#ref(USBTiny45.java);
** Snow LeopardでLibusbJava.jnilibを作る方法 [#v380fe77]
2代目のMacMiniのOSをSonw Leopardにアップグレードしたら、T...
仕方なく、もう一度antを実行したのですが、ダメです。ここで...
*** 最新のソースをチェックアウト [#l752c2fd]
どうせなら、最新のソースにアップすることにしました。
チェックアウトは、以下のように行います。
#pre{{
$ svn co https://libusbjava.svn.sourceforge.net/svnroot/l...
}}
*** libusbもアップグレード [#m962f33d]
OSの変更でMacPortのlibusbを作り直しました。
LibusbJavaのページには、0.1の古いバージョンを使うとあるの...
また、libusb-compatには、libusbppが含まれないのでlibusb-l...
#pre{{
$ sudo port install libusb
$ sudo port install libusb-compat
$ sudo port install libusb-legacy
}}
次に、libusbJavaが/usr/local/lib/libusb.dylib、/usr/local...
シンボリックリンクを作ります。
#pre{{
$ cd /usr/local/lib
$ sudo ln -s /opt/local/lib/libusb-0.1.4.dylib ./libusb.d...
$ sudo ln -s /opt/local/lib/libusb-legacy/libusbpp-legacy...
}}
*** コンパイル [#n541013a]
ソースファイルをチェックアウトした場所に戻って、コンパイ...
#pre{{
$ ant mac
途中省略
[exec] /usr/libexec/gcc/i686-apple-darwin10/4.2.1/c...
-dylib -dylib_current_version 0.2.4.0 -arch x86_64 -maco...
-weak_reference_mismatches non-weak -o libusbJava.jnilib
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64
-L/usr/lib/i686-apple-darwin10/4.2.1
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-a...
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../..
/var/folders/Xo/XoxQsiGT2RWIck+BYuxhKU+++TI/-Tmp-//cc725...
-lstdc++ /usr/local/lib/libusb.dylib /usr/local/lib/libu...
[exec] ld: malformed version number: 0.2.4.0
[exec] collect2: ld returned 1 exit status
[exec] Result: 1
}}
とcollect2の実行でldがmalformed versionエラーを出力します。
原因は、collect2の引数の
#pre{{
-dylib_current_version 0.2.4.0
}}
オプションのバージョンにあるようで、これを除くとエラーは...
そこで、build.xmlの90行目の
#pre{{
<arg line="-current_version ${ver...
}}
を削除して、
#pre{{
$ ant mac
}}
を実行すると、無事Snow Leopardで動くLibusbJava.jnilibがで...
*** Snow Leopard版のLibusbJava.jnilib [#raa4c85b]
念のため、作成したLibusbJava.jnilibを以下に置いておきます。
- &ref(libusbJava.jnilib);
** コメント [#oac99957]
この記事は、
#vote(おもしろかった[11],そうでもない[0],わかりずらい[1])
皆様のご意見、ご希望をお待ちしております。
- Snow LeopardでLibusbJava?.jnilibを作る方法を追加しまし...
- usb4javaの記事を書いてください。宜しくね -- [[重松]] &n...
#comment_kcaptcha
終了行:
[[FrontPage]]
2008/10/14 からのアクセス回数 &counter;
#contents
[[avr/USB接続]]でlibusbを使って自作のUSBデバイスにアクセ...
次は、javaからこのUSBデバイスを操作してみます。
** LibusbJava [#c29ea8e8]
まず、libusbのjavaラッパーが必要です。
世の中には、自分がやりたいと思うことをすでにやっている人...
#pre{{
libusb java
}}
でグーグル検索すると
- [[Java libusb / libusb-win32 wrapper>http://libusbjava....
を見つけることができました。
Windowsの人は、
- [[installation>http://libusbjava.sourceforge.net/wp/?pa...
を参考してください。
** ソースからのコンパイル [#we572fde]
私はMacOSXなので、SVNからソースをダウンロードしてコンパイ...
*** チェックアウト [#y9a2aebc]
Eclipseを使って、
[[SVN>https://libusbjava.svn.sourceforge.net/svnroot/libu...
- trunk/java
- trunk/libusbJava
をチェックアウトします。
*** MacOSX用のダイナミックライブラリの作成 [#ddb204b7]
次に、LibusbJavaを使ってMacOSX用のダイナミックライブラリ...
LibusbJavaプロジェクトの
build.xmlの22行に以下の1行を追加してください。
#pre{{
<property name="version.mac" value="${version.major}.${v...
}}
次にbuild.xmlを選択し、右クリックでRun As->Ant build...を...
ターゲットして、Macを選択するとLibusbJava.jnilibが作成さ...
*** ch.ntb.usb-0.5.7.jarの作成 [#tb312e58]
同様に、ch.ntb.usbプロジェクトでbuild.xmlを使ってjarファ...
** テストプロジェクトの作成 [#m3b6848b]
Eclipseで新規プロジェクトで、
- UsbTiny45プロジェクトを作成します。
-ここにLibusbJava.jnilib、ch.ntb.usb-0.5.7.jarをコピーし...
- ch.ntb.usb-0.5.7.jarをビルドパスに追加します。
*** テストプログラム [#t12c5b66]
テストプログラムUSBTiny45.javaを作成します。
- C版同じように、usbOpenDeviceは以下のようになります。
#pre{{
static long usbOpenDevice(short idvendor, short idproduc...
Usb_Device dev = null;
Usb_Bus bus = USB.getBus();
long usbHandle = 0L;
while (bus != null) {
dev = bus.getDevices();
while (dev != null) {
usbHandle = LibusbJava.usb_open(dev);
if (usbHandle != 0) {
Usb_Device_Descriptor devDesc = dev.getDescriptor();
String retp = LibusbJava.usb_get_string_simple(usbHa...
...
String retm = LibusbJava.usb_get_string_simple(usbHa...
...
if (retp != null && retm != null) {
if (devDesc.getIdVendor() == idvendor
&& devDesc.getIdProduct() == idproduct) {
return usbHandle;
}
}
}
dev = dev.getNext();
}
bus = bus.getNext();
}
LibusbJava.usb_close(usbHandle);
return 0L;
}
}}
- 実行部分も
#pre{{
static private void testUsbOpenDevice() throws Exception {
byte[] buffer = new byte[2312];
int i=3, j=4, k=5, l=6, m=7, n=8, o=9;
int ret;
long devHandle = usbOpenDevice(vendorId, productId);
if (devHandle == 0) {
System.err.println("usbOpenDevice failed\n");
return;
}
ret = LibusbJava.usb_control_msg(devHandle,
USB.REQ_TYPE_TYPE_VENDOR|USB.REQ_TYPE_RECIP_DEVICE
|USB_ENDPOINT_IN,
i, j+256*k, l+256*m, buffer, n+256*o, 5000);
System.out.format("ret=%d \n", ret);
for (int p=0; p < ret; p++) {
System.out.format("buffer[%d]=%d \n", p, buffer[p]);
}
LibusbJava.usb_close(devHandle);
}
}}
とします。
** 動作確認 [#zc3d669d]
これでよしとmain関数を実行したのですが、うまく動きません。
- libusbJava版は、ハブに接続したUSBデバイスをうまく認識し...
ことが分かりました。
USBデバイスが認識されているかは、ch.ntb.usb-0.5.7.jarのUs...
めでたく、実行結果がCと同じく
#pre{{
ret=7
buffer[0]=9
buffer[1]=3
buffer[2]=4
buffer[3]=5
buffer[4]=6
buffer[5]=7
buffer[6]=8
}}
になりました。
** ch.ntb.usbの変更 [#a5d7fdf2]
Device.java#initDeviceの114行目の
#pre{{
updateMaxPacketSize(device);
}}
をdevDesc.getAltinterface()が-1の時には、コールしないよう...
テストプログラムは、以下のように簡単になります。
#pre{{
static private void testDeviceAndUSB() throws Exception {
byte[] buffer = new byte[2312];
int i=3, j=4, k=5, l=6, m=7, n=8, o=9;
int ret;
Device device = USB.getDevice(vendorId, productId);
if (device == null) {
System.err.println("usbOpenDevice failed\n");
return;
}
device.open(1, 0, -1);
ret = device.controlMsg(
USB.REQ_TYPE_TYPE_VENDOR|USB.REQ_TYPE_RECIP_DEVICE
|USB_ENDPOINT_IN,
i, j+256*k, l+256*m, buffer, n+256*o, 5000, false);
System.out.format("ret=%d \n", ret);
for (int p=0; p < ret; p++) {
System.out.format("buffer[%d]=%d \n", p, buffer[p]);
}
device.close();
}
}}
** ファイル [#fb2ac0cb]
作成したUSBTiny45.javaは以下からダウンロードできます。
#ref(USBTiny45.java);
** Snow LeopardでLibusbJava.jnilibを作る方法 [#v380fe77]
2代目のMacMiniのOSをSonw Leopardにアップグレードしたら、T...
仕方なく、もう一度antを実行したのですが、ダメです。ここで...
*** 最新のソースをチェックアウト [#l752c2fd]
どうせなら、最新のソースにアップすることにしました。
チェックアウトは、以下のように行います。
#pre{{
$ svn co https://libusbjava.svn.sourceforge.net/svnroot/l...
}}
*** libusbもアップグレード [#m962f33d]
OSの変更でMacPortのlibusbを作り直しました。
LibusbJavaのページには、0.1の古いバージョンを使うとあるの...
また、libusb-compatには、libusbppが含まれないのでlibusb-l...
#pre{{
$ sudo port install libusb
$ sudo port install libusb-compat
$ sudo port install libusb-legacy
}}
次に、libusbJavaが/usr/local/lib/libusb.dylib、/usr/local...
シンボリックリンクを作ります。
#pre{{
$ cd /usr/local/lib
$ sudo ln -s /opt/local/lib/libusb-0.1.4.dylib ./libusb.d...
$ sudo ln -s /opt/local/lib/libusb-legacy/libusbpp-legacy...
}}
*** コンパイル [#n541013a]
ソースファイルをチェックアウトした場所に戻って、コンパイ...
#pre{{
$ ant mac
途中省略
[exec] /usr/libexec/gcc/i686-apple-darwin10/4.2.1/c...
-dylib -dylib_current_version 0.2.4.0 -arch x86_64 -maco...
-weak_reference_mismatches non-weak -o libusbJava.jnilib
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64
-L/usr/lib/i686-apple-darwin10/4.2.1
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-a...
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../..
/var/folders/Xo/XoxQsiGT2RWIck+BYuxhKU+++TI/-Tmp-//cc725...
-lstdc++ /usr/local/lib/libusb.dylib /usr/local/lib/libu...
[exec] ld: malformed version number: 0.2.4.0
[exec] collect2: ld returned 1 exit status
[exec] Result: 1
}}
とcollect2の実行でldがmalformed versionエラーを出力します。
原因は、collect2の引数の
#pre{{
-dylib_current_version 0.2.4.0
}}
オプションのバージョンにあるようで、これを除くとエラーは...
そこで、build.xmlの90行目の
#pre{{
<arg line="-current_version ${ver...
}}
を削除して、
#pre{{
$ ant mac
}}
を実行すると、無事Snow Leopardで動くLibusbJava.jnilibがで...
*** Snow Leopard版のLibusbJava.jnilib [#raa4c85b]
念のため、作成したLibusbJava.jnilibを以下に置いておきます。
- &ref(libusbJava.jnilib);
** コメント [#oac99957]
この記事は、
#vote(おもしろかった[11],そうでもない[0],わかりずらい[1])
皆様のご意見、ご希望をお待ちしております。
- Snow LeopardでLibusbJava?.jnilibを作る方法を追加しまし...
- usb4javaの記事を書いてください。宜しくね -- [[重松]] &n...
#comment_kcaptcha
ページ名:
SmartDoc