Пост для StackOverflow: поддержка Android 2.2 USB SW
У меня есть USB-глюкометр Bayer , который я восстановил с помощью инструмента usbsnoop в Windows .
Я также нашел Perl-скрипт для преобразования вывода usbsnoop в код C, который при выполнении запускает передачу данных с устройства USB.
Когда я подключаю глюкометр к своему ноутбуку (x86) и запускаю скомпилированный код C в Ubuntu, показания считываются со счетчика и печатаются в оболочку. (Эти показания нельзя просмотреть, просто подключив USB-измеритель к ноутбуку, т. Е. Я не могу получить необходимые данные, открыв файл.)
Я хочу сделать что-то подобное с Android. Связь с глюкометром будет частью приложения, работающего на телефоне под управлением Android 2.2.
У кого-нибудь есть предложения, как это сделать?
Мой полный код C находится в Google Docs , фрагменты размещены ниже. Я использую библиотеку ключей libusb.
Я считаю, что поддержка USB не будет официально доступна до Android 3.1, и хотя я видел упоминание о оболочке libusb Java , она датирована 2009 годом, и я не смог понять, как используй это.
Итак, я хотел узнать, есть ли какие-либо приложения, которые успешно использовали эту оболочку libusb Java и / или есть ли более современные решения для поддержки USB на Android 2.2.
Я использую Motorola Droid и смог получить телефон в режиме USB-хоста , используя этот хак .
Заранее спасибо за помощь.
Вот фрагменты моего кода на 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");