发布StackOverflow:Android 2.2 USB SW支持
我有Bayer USB glucometer我使用usbsnoop tool in Windows进行逆向工程。
我还找到了Perl script来将usbsnoop输出转换为C代码,该代码在执行时启动USB设备的数据传输。
当我将血糖仪插入我的(x86)笔记本电脑,并在Ubuntu上运行已编译的C代码时,读数将从仪表中捕获并打印到外壳上。 (只需将USB仪表插入笔记本电脑即可查看这些读数,即我无法通过打开文件获取所需数据。)
我想用Android做类似的事情。与血糖仪的通信将是运行Android 2.2的手机上运行的应用程序的一部分。
有人有关于如何做到这一点的建议吗?
My complete C code is on Google docs,网址摘要如下。我使用的密钥库是libusb。
我相信在Android 3.1之前,USB支持才会正式提供,虽然我已经看到一些提及Java libusb wrapper,但它是在2009年,我无法理解如何使用它。
所以我想知道是否有任何应用程序成功使用了这个Java libusb包装器和/或是否有更多当前的Android 2.2 USB支持解决方案。
我正在使用摩托罗拉Droid,并且能够以USB主机模式using this hack获取手机。
提前感谢您的帮助。
以下是我的C代码片段,适用于Ubuntu;我用它编译它
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");
答案 0 :(得分:0)
我患有糖尿病并使用Glucometer Deluxe软件,这是我的Windows XP机器上的java程序。该软件缺乏许多功能,例如能够调整葡萄糖图表上的垂直刻度与时间的关系,它固定在600这太高了。它还有背景颜色图表,使黑白激光打印输出难以阅读。此外,它的打印输出是如此冗长,需要许多页面浪费纸张,简单的电子表格格式会更好。
Android的一般编程是用Java完成的。在我看来,在提供的Glucometer Deluxe软件上使用JAD Java Decompiler http://en.wikipedia.org/wiki/JAD_%28JAva_Decompiler%29可能是一种破解代码的方法。这并不容易。
如果这样可行,您还可以改进PC等的Java程序,并使其在Android上运行。
cdh@cdhconsult.com