StackOverflow发布:Android 2.2 USB软件支持
我有一个拜耳USB血糖仪,我在Windows中使用usbsnoop工具进行了反向工程。
我还找到了一个Perl脚本,用于将usbsnoop输出转换为C代码,该代码在执行时启动USB设备的数据传输。
当我把血糖仪插入我的(x86(笔记本电脑,并在Ubuntu上运行编译后的C代码时,读数会从血糖仪中获取并打印到外壳中。(仅通过将USB电表插入笔记本电脑无法查看这些读数,即,我无法通过打开文件获得所需的数据。(
我想用安卓做一些类似的事情。与血糖仪的通信将是在运行Android 2.2的手机上运行的应用程序的一部分。
有人对如何做到这一点有建议吗?
我完整的C代码在谷歌文档上,下面发布了一些片段。我使用的密钥库是libusb。
我相信USB支持要到Android 3.1才能正式提供,尽管我看到了一些关于Java libusb包装器的文章,但它的日期是2009年,我还不知道如何使用它
因此,我想知道是否有任何应用程序成功地使用了Java libusb包装器,和/或是否有更多当前的Android 2.2 USB支持解决方案。
我正在使用摩托罗拉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, "x00x00x00x02x52x7cx00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00", 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, "x00x00x00x02x53x7cx00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00", 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");
我患有糖尿病,正在使用Glucometer Deluxe软件,这是我的Windows XP机器上的一个java程序。该软件缺乏许多功能,例如能够调整葡萄糖与时间关系图上的垂直刻度,它被固定在600,这太高了。它还为图表添加了背景色,这使得黑白激光打印输出难以阅读。此外,它的读数打印输出非常冗长,浪费了很多页面的纸张,简单的电子表格格式会更好。
一般来说,Android的编程是用Java完成的。在我看来,它使用的是JAD Java解压缩程序,http://en.wikipedia.org/wiki/JAD_%28JAva_Decompiler%29,在提供的Glucometer Deluxe软件上可能是破解代码的一种方法。这并不容易。
如果这样做有效,你还可以改进PC等的Java程序,并使其在Android上运行。
cdh@cdhconsult.com