Перенос кода C, который взаимодействует с USB-глюкометром, с Linux на Android - PullRequest
3 голосов
/ 02 июля 2011

Пост для 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");

1 Ответ

0 голосов
/ 23 июля 2011

У меня диабет, и я использую программное обеспечение Glucometer Deluxe, программу Java на своем компьютере с Windows XP.В программном обеспечении отсутствуют многие функции, такие как возможность регулировки вертикальной шкалы на графике зависимости уровня глюкозы от времени, оно установлено на уровне 600, что слишком высоко.Он также окрашивает фон в график, что затрудняет чтение черно-белых лазерных распечаток.Кроме того, распечатка показаний настолько многословна, что требует много-много страниц, тратя бумагу, поэтому лучше использовать простой формат электронных таблиц.

Как правило, программирование для Android выполняется на Java.Мне кажется, что использование JAD Java Decompiler http://en.wikipedia.org/wiki/JAD_%28JAva_Decompiler%29 в прилагаемом программном обеспечении Glucometer Deluxe может быть способом взломать код.Это будет нелегко.

Если это сработает, вы также сможете улучшить Java-программу для ПК и т. Д., А также заставить ее работать на Android.

cdh@cdhconsult.com

...