Home > Archives > 2006年07月

2006年07月

libusb-win32 を使ってみる

USBデバイスのハード部分が出来上がったので次はソフト部分.どうやら libusb-win32 というフリーのライブラリがあるようなので利用してみる.とりあえず inf ファイル作っとかないとデバイスが使えないので libusb-win32-device-bin-0.1.10.1.tar.gz とかの中にある inf-wizard.exe で生成.プログラム自体は AVR USB のサンプルコードを参考に作成.無事エコーテスト成功.あとはしつこくポーリングするか受信待ちが出来るなら待ちをしてやればおわる.

libusb を使ったプログラムの流れ(簡易版)は以下のとおり.何より先に usb_init(); して libusb を初期化.んで,usb_find_busses(); usb_find_devices(); でデバイスを探して,

for(bus=usb_get_busses(); bus; bus=bus->next){
    for(dev=bus->devices; dev; dev=dev->next){

のネストループで全デバイスを走査する.走査時に,dev->descriptor.idVendor, dev->descriptor.idProduct をチェックして,ベンダIDとプロダクトIDがマッチしたら handle = usb_open(dev); で開けてみて,

usb_control_msg(handle, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) +  dev->descriptor.iVendor, 0x0409, buffer, sizeof(buffer), 1000);
usb_control_msg(handle, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) +  dev->descriptor.iProduct, 0x0409, buffer, sizeof(buffer), 1000);

でベンダやプロダクト名を確認する(同一IDに複数のデバイスがあってプロダクト名で識別しないとならないので面倒.usb_get_string でいい気もする).

外れたら usb_close(dev); しとく.

デバイスが見つかったら usb_control_msg でデータのやり取りを.

他の endpoint 開いたほうがいいけど… そんな余裕は無い.

Axis2 がこけてた部分を直す

何が悪いのか分からんが Mac のサーバ(Darwin + JDK1.4.2_09 + Tamcat5.5) で Axis2 の REST アクセスがこけていたのを Axis2 の一部に修正を加えてどうにかなおした.修正したのは modules/core/src/org/apache/axis2/description/AxisMessage.java で,109 行目あたりに xmlSchemaElement.getQName()!=null && を追加した.

  if (xmlSchemaElement.getQName()!=null && xmlSchemaElement.getQName().equals(getElementQName())) {

なぜか知らんが xmlSchemaElement.getQName() が null になることがあって NullPointerException で落ちたのがこれまでの状況.null チェック入れたらうまく動くようになった.たぶん,余計な空白とか改行とかをパースした時にテキストエレメントが余計に挿入されるとかが原因でしょう.

ちなみに,JDK1.5 でコンパイルしてたらライブラリのバージョンがおかしいといわれてこけたので,etc/project.properties に下記2行を追加して 1.4 コンパチのバイナリをはくように maven に指定した.

maven.compile.target=1.4
maven.compile.source=1.4

んで,途中で maven-itest-plugin がないといわれてこけるので

maven plugin:download -DgroupId=maven -DartifactId=maven-itest-plugin -Dversion=1.0 -Dmaven.repo.remote=http://people.apache.org/repository 

をやって個別にダウンロードして,さらに ~/.maven/repository/maven/plugins/maven-itest-plugin-1.0.jar を ~/.maven/repository/maven-itest-plugin/plugins/maven-itest-plugin-1.0.jar にコピーしてやる.

オマケに stax-utils-20060501.jar もミスるので http://ws.zones.apache.org/~dims/maven/stax-utils/jars/stax-utils-20060501.jar から ~/.maven/repository/stax-utils/jars/stax-utils-20060501.jar にダウンロード.

さらにオマケに bcprov-jdk13-132.jar もミスるので http://ws.zones.apache.org/~dims/maven/bouncycastle/jars/bcprov-jdk13-132.jar から ~/.maven/repository/bouncycastle/jars/bcprov-jdk13-132.jar にダウンロード.

最後に opensaml-1.0.1.jar もミスるので http://ws.zones.apache.org/~dims/maven/opensaml/jars/opensaml-1.0.1.jar から ~/.maven/repository/opensaml/jars/opensaml-1.0.1.jar にダウンロードする.

結局のところ http://ws.zones.apache.org/~dims/maven/ から全部落とせばいいのかも…

Mavenの使い方が…

よく分からない.Axis2 のコンパイルで maven-itest-plugin がダウンロードできないとか言ってこけるのだが対処の仕方が分からない.やはりちゃんと覚えなければならないようだ.

Axis2 のソースを眺める

サービスがサーバ上で NullPointerException を吐いて止まってしまうためその原因を突き止めようと Axis2 のソースに手を出す始末.log4j でデバッグ情報を吐き出したほうが建設的なのだろうかと思わなくは無いのだが… REST関係のドキュメントが見つからないのがそもそもの原因だ.どこかに無いだろうか?

JavaSrciptでHTTPリクエストを飛ばすには?

どうしたらよいのだろう? ページ切り替えたくないので document の href は変えられない.同一サーバ上に無いリソースにアクセスしたいので Ajax のようなことは出来ない.ダミーの img 要素に対して src を書き換えれば問題ないのだがスマートじゃない.さてどうしたもんか.

C# でグローバルにフック

通常のキーボードやマウスのフックは DLL にエクスポートしたフックプロシージャを使うのだが,C# (.NET) だとこれがうまく出来ないので通常はグローバルフックが出来ないらしい.しかしながら,Low Level Input であればフックがグローバルになるらしく,これを使えば C# でもグローバルフックが出来るとのこと.実際に Web で見つけたソースを元に SetWindowsHookEx に MH_MOUSE_LL を指定してフックしたらうまくいった.ついでにキーボードも問題なく成功.

あとは Low Level Input のレベルでドラッグ中のオブジェクトを取得できるといろいろありがたい.最悪のばあいマウス座標直下にごく小さなウィンドウを作ってドロップのためのイベントを SetInput で投げてしまえば出来るのだが… ドロップ時に何かエフェクトを表示する振りすれば使えそうな手ではある.

java で -jar と -classpath

java -classpath "hoge.jar" -jar huga.jar

とかやったら hoge.jar がクラスパスに入ってくれなくて暫くわけがわからなかった.調べたところによると -jar を指定すると -classpath などが無効化されるらしい.ということで,外部の jar をクラスパスに入れるには META-INF/MANIFEST.MF で

Class-path: hoge1.jar hoge2.jar

とか書いておくことになるらしい.これらのパスはこのマニフェストが入っているアーカイブからの相対パスになるとのこと.とりあえずパスのセパレータとして何が使えるのかわからんのだが空白で動いてたのでよしとしよう.

Home > Archives > 2006年07月

Search
Feeds

Page Top