3

StackOverflow への投稿: Android 2.2 USB SW サポート

Windows で usbsnoop ツールを使用してリバース エンジニアリングしたBayer USB グルコメーターがあります。

また、usbsnoop の出力を実行時に USB デバイスからのデータ転送を開始する C コードに変換する Perl スクリプトも見つけました。

グルコメーターを (x86) ラップトップに接続し、コンパイルされた C コードを Ubuntu で実行すると、測定値がメーターから取得され、シェルに出力されます。(これらの測定値は、単に USB メーターをラップトップに接続しただけでは表示できません。つまり、ファイルを開いて必要なデータを取得することはできません。)

私はAndroidで似たようなことをしたいと思っています。グルコメーターとの通信は、Android 2.2 を実行している電話で実行されるアプリの一部になります。

これを行う方法について誰か提案がありますか?

私の完全な C コードは Google docsにあり、スニペットは以下に掲載されています。私が使用する主要なライブラリは libusb です。

USB サポートは Android 3.1 まで公式には利用できないと思います。Java libusb wrapperについての言及を見たことはありますが、日付は 2009 年であり、その使用方法を理解できませんでした。

そのため、その Java libusb ラッパーを正常に使用したアプリケーションがあるかどうか、および/または Android 2.2 で USB をサポートする最新のソリューションがあるかどうかを知りたいと思いました。

Motorola Droid を使用していますが、このハックを使用して電話を USB ホスト モードにすることができました。

よろしくお願いします。

これは、Ubuntu で動作する私の C コードのスニペットです。を使用してコンパイルします sh> gcc driver.c -o driver -lusb

usb_init();
usb_set_debug(255);
usb_find_busses();
usb_find_devices();

...

vendor = strtol(argv[1], &endptr, 16);
product = strtol(argv[2], &endptr, 16);
dev = find_device(vendor, product);
assert(dev);
devh = usb_open(dev);

...
// the following code is autogenerated using usbsnoop2libusb
memcpy(buf, "\x00\x00\x00\x02\x52\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0x0000040);
ret = usb_interrupt_write(devh, 0x00000001, buf, 0x0000040, 1000);
printf("137 interrupt write returned %d, bytes: ", ret);
print_bytes(buf, ret);
printf("\n");
usleep(3*1000);
ret = usb_interrupt_read(devh, 0x00000081, buf, 0x0000040, 1000);
printf("138 interrupt read returned %d, bytes: ", ret);
print_bytes(buf, ret);
printf("\n");
usleep(19*1000);
memcpy(buf, "\x00\x00\x00\x02\x53\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0x0000040);
ret = usb_interrupt_write(devh, 0x00000001, buf, 0x0000040, 1000);
printf("139 interrupt write returned %d, bytes: ", ret);
print_bytes(buf, ret);
printf("\n");
usleep(2*1000);
ret = usb_interrupt_read(devh, 0x00000081, buf, 0x0000040, 1000);
printf("140 interrupt read returned %d, bytes: ", ret);
print_bytes(buf, ret);
printf("\n");
4

1 に答える 1

0

私は糖尿病で、Windows XP マシンで Java プログラムの Glucometer Deluxe ソフトウェアを使用しています。このソフトウェアには、グルコース対時間のグラフの垂直スケールを調整できるなどの多くの機能が欠けており、高すぎる600に固定されています. また、グラフの背景に色を付けて、白黒のレーザー プリントアウトを読みにくくします。さらに、読み取り値の印刷は非常に冗長で、紙を無駄にする多くのページが必要です。単純なスプレッドシート形式の方が適しています。

一般的に、Android のプログラミングは Java で行われます。提供された Glucometer Deluxe ソフトウェアでJAD Java Decompiler 、http://en.wikipedia.org/wiki/JAD_%28JAva_Decompiler%29を使用すると、コードをハッキングする方法になる可能性があります。簡単ではありません。

これが機能する場合、PC などの Java プログラムを改善したり、Android で動作させることもできます。

cdh@cdhconsult.com

于 2011-07-23T19:10:10.107 に答える