2011-09-19 11 views
7

Chciałbym użyć libusb w mojej aplikacji na Androida (java GUI + rdzeń natywny (C++)). Już skompilowałem libusb i próbowałem wywoływać jego funkcje, ale libusb_open zwraca LIBUSB_ERROR_ACCESS. Przypuszczam, że jest problem z uprawnieniami dostępu USB, ale nie wiem, jak rozwiązać ten problem. Tak, 2 pytania tutaj: 1) Jak uzyskać libusb działa na zrootowanym urządzeniu Android 3.1? 2) Czy można używać libusb na nieuzdatnionym, fabrycznie domyślnym urządzeniu?Używanie libusb w aplikacji Android: jak zezwolić aplikacji na dostęp do USB

Z góry dziękuję.

P. S. Jeśli chodzi o pytanie 1, próbowałem chmod 666 dla/dev/bus/usb, ale jest napisane "Zgoda zabroniona" (proszę zauważyć, że moje urządzenie jest zrootowane).

P.P.S. mount usbfs none/proc/bus/usb -o devmode = 0666 nawet nie wykonuje, tak jakbym coś pomyłkowo (ale nie zrobiłem).


wiem na pewno, że to możliwe, aby uzyskać libusb pracuje na urządzeniu z Androidem zakorzenione hosta USB, ale ja nigdy nie udało, więc musiałem ograniczyć aplikację na Androida 3.1 i nowsze i używać API USB.

+0

Jak widocznie pracują z Androidem 3.1, czy za pomocą przycisków [API USB] (http://developer.android.com/ guide/topics/usb/index.html) w pakiecie Android SDK? – Frxstrem

+0

@Frxstrem: Tak, musiałem uciec się do tego rozwiązania. Nie jestem z tego zadowolony, ale działa i jest to standardowy sposób korzystania z USB na Androida, więc myślę, że powinienem zamknąć to pytanie. –

+2

nie zamykaj go, po prostu odpowiedz. –

Odpowiedz

0

W systemie Android nie można bezpośrednio otworzyć urządzenia USB za pomocą libusb (jest to wniosek, do którego doszedłeś :).

dlaczego nie można otworzyć?

Musisz uzyskać pozwolenie od systemu Android (! = Kernel), aby otworzyć urządzenie.

zrobić w Javie:

gdy wniosek, pop jest pokazany użytkownikowi zaakceptować lub odrzucić. , więc musisz otworzyć urządzenie w Javie i wyodrębnić fd za pomocą java i przekazać do libusb, aby mógł komunikować się z urządzeniem.

jak teraz libusb zbuduje uchwyt z fd?

Aktualizacja: utrzymuję wersję zmodyfikowaną dla Androida (z więcej poprawek - testowałem/pracowałem na systemie Android 5.1 lub niższym). zobacz https://gitlab.com/madresistor/libusb/blob/android/README

OLD LINK (DEAD LINK) Oto rozwiązanie: https://github.com/martinmarinov/rtl_tcp_andro-/blob/master/jni/libusb-andro/libusb/core.c#L993

+0

Link jest uszkodzony. – jayeffkay

+0

@jayeffkay Zaktualizowany link. Dzięki. –

Powiązane problemy