FrontPage

2008/10/14 からのアクセス回数 11167

avr/USB接続でlibusbを使って自作のUSBデバイスにアクセスすることができるようになりました。 次は、javaからこのUSBデバイスを操作してみます。

LibusbJava

まず、libusbのjavaラッパーが必要です。 世の中には、自分がやりたいと思うことをすでにやっている人がいますから、自分で最初から作る前に

libusb java

でグーグル検索すると

を見つけることができました。

Windowsの人は、

ソースからのコンパイル

私はMacOSXなので、SVNからソースをダウンロードしてコンパイルすることにしました。

チェックアウト

Eclipseを使って、

SVNから

をチェックアウトします。

MacOSX用のダイナミックライブラリの作成

次に、LibusbJavaを使ってMacOSX用のダイナミックライブラリを作成します。

LibusbJavaプロジェクトの build.xmlの22行に以下の1行を追加してください。

	<property name="version.mac" value="${version.major}.${version.minor}.${version.micro}" />

次にbuild.xmlを選択し、右クリックでRun As->Ant build...を選択します。 ターゲットして、Macを選択するとLibusbJava.jnilibが作成されます。

ch.ntb.usb-0.5.7.jarの作成

同様に、ch.ntb.usbプロジェクトでbuild.xmlを使ってjarファイルを作成します。

テストプロジェクトの作成

Eclipseで新規プロジェクトで、

テストプログラム

テストプログラムUSBTiny45.javaを作成します。

動作確認

これでよしとmain関数を実行したのですが、うまく動きません。

ことが分かりました。

USBデバイスが認識されているかは、ch.ntb.usb-0.5.7.jarのUsbViewのmainメソッドを実行すると分かります。

めでたく、実行結果がCと同じく

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の変更

Device.java#initDeviceの114行目の

					updateMaxPacketSize(device);

をdevDesc.getAltinterface()が-1の時には、コールしないように修正すれば、

テストプログラムは、以下のように簡単になります。

	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();
		
	}

ファイル

作成したUSBTiny45.javaは以下からダウンロードできます。

fileUSBTiny45.java

コメント

この記事は、

選択肢 投票
おもしろかった 1  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。


(Input image string)

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc