2013-04-30 24 views
8

Próbuję komunikować się z urządzeniem USB ze smartfonu opartego na systemie Android przez OTG. Udało mi się komunikować z moim urządzeniem za pomocą interfejsu Android USB Host API. Problemem rozwiązania USB Host Host jest wydajność (pojedynczy transfer zbiorczy ograniczony 16384 bajtami).Używanie libusb na Androida bez zrootowania

Libusb może wykonywać większe żądania, a teraz próbuję zintegrować go za pomocą Android NDK. Udało mi się skompilować źródła libusb dla Androida, a nawet initUSB(), ale libusb_open(dev, &dev_handle) zwraca -3 (Odmowa dostępu).

Jak mogę przekazać deskryptor

int fd = connection.getFileDescriptor() 

do libusb po otrzymaniu USB_PERMISSION pod Android USB Host API i uzyskać dostęp do urządzenia USB pod libusb?

+0

spróbuj tego widelca libusb https://github.com/martinmarinov/rtl_tcp_andro-/tree/master/jni/libusb-andro. ma funkcję open2 (, int fd) dla tego głosowania – 4ntoine

+0

, aby uzyskać dobre wyjaśnienie od zespołu android: https://code.google.com/p/android/issues/detail?id=56450 – 4ntoine

Odpowiedz

5

Tego właśnie szukasz.
https://github.com/kuldeepdhaka/libusb/tree/android-open2 po prostu skompiluj i upuść. :)
zobacz sekcję "How To for Android", aby uzyskać pełne wykorzystanie.

Zrobiłem wszystkie wymagane modyfikacje libusb (i również go używam).
Ma poprawkę SELinux dla "Androida 5.0" +.

+1

Brzmi obiecująco, mam spojrzał na twój projekt github, ale nadal nie jestem pewien, jak go użyć. Czy używasz jni do wywoływania libusb z kodu java? – dweebo

+0

@dweebo Tak, Java -> JNI -> libusb –

+0

Dzięki! Czy masz szansę na udostępnienie tego kodu? – dweebo