2012-01-17 27 views
6
Şu anda benim Android 3.2 tablet üzerinde bir sabit zaman aralıklı uç noktası USB veri aktarımını işlemek için bir yol bulmaya çalışıyorum

(Sunucu Modu destekli). Bazı prototip kodlarını yazdıktan sonra, USB_ENDPOINT_XFER_ISOC sabitleri dosyasında "Eşzamanlı son nokta türü (şu anda desteklenmeyen)" olduğunu belirtir.Android USB sabit zaman aralıklı veri aktarım

Bu, cihazı köklendirmeksizin mümkün mü? Eğer öyleyse bunu yapmayı nasıl yaparım?

İdeal java API dahilinde kalmak umuyordum, ama bu sadece NDK yoluyla mümkün olup olmadığını bunun yerine sürdürmeye gerekir. Ben de şu sonrası dayalı bazı USB bant genişliği sorunları olabilir anlıyoruz: User mode USB isochronous transfer from device-to-host

cevap

5

Sen root olmadan bunu "olabilir", inanıyorum.

Sen USBFS kullanarak USB cihazı ile arabirim bazı doğal C kodu kullanarak her şeyi gerekir. Büyük sorun, linux'un usbflerinin belgelenmemesinden kaynaklanıyor. Temel olarak her şey ioctls ile yapılmalıdır. Bu, normalde Java'dan yapacağınız bir cihazı açtığınızı söyledi. Sonra USBDeviceConnection

dosya tanımlayıcıyı tüm USB tanımlayıcılar kendinizi ayrıştırmak ihtiyaç duyacağı ekle geçmektedir. Onlara yine USBDeviceConnection'dan ulaşabilirsiniz. Tanımlayıcıdan tanımlayıcıya atlamak, her bir tanımlayıcının araçlarının bir MASSIVE baş ağrısı olduğuna dair belgelerin bulunması basittir, ancak belgelerin çoğunu www.usb.org adresinde bulabilirsiniz.

Ben ses cihazları için ayrıştırma yapmak için gereken kod en yazdım ve bir sabit zaman aralıklı havalesi çalışırken kadar tüm yol var ve sonra elde hataları başladı.

Libusb'ye geçtikten sonra, benim durumumda, ses aygıtının da HID denetleyicileri olduğundan ve varsayılan sürücünün bunlara atatching olmasından ve tüm bant genişliğinin eşzamanlı aktarımdan uzaklaşmasından kaynaklandığını keşfettim. Bunu daha önce bilmiş olsaydım, root olmayan libusb yöntemi ile sebat etmiş olabilirdim. Olduğu gibi ben lib usb üzerinden çalışan isochronous transferleri aldın ama ben buna geri gidersiniz. Özetle

, ben onun mümkün eminim Bir noktada köklü bir cihaz :(

gerekli ama kolay olmayacak onun !! Ben Android (veya Linux) altında USB sabit zaman aralıklı veri aktarımı için bir Java sınıfı yazdım

+0

Wou Kodunuzu paylaşmaya özen gösterseniz de, eksik olabilir? – JellicleCat

6

. UsbIso

Bu IOCTL çağrıları yoluyla USBFS API erişmek için JNA kullanır

+0

"setInterface" işlevi için hangi değerin "altSetting" olarak sağlanacağını nasıl belirtebilir misiniz? – JellicleCat

+1

@JellicleCat USB aygıtınızın aygıt tanımlayıcısını listelemek için 'lsusb -v -d xxxx: xxxx' (Linux) veya' USBView' (Windows) kullanabilirsiniz. Orada cihaz tarafından desteklenen AlternateSetting değerlerini bulabilirsiniz. Android 5.0 veya daha yenisi varsa, UsbInterface.getAlternateSetting() kullanabilirsiniz. –

+0

Teşekkür ederim. "UsbIso" örneğini başlatmaya çalışırken aldığım "Aygıt veya kaynak meşgul" hata iletisiyle ilgili herhangi bir öneride bulunup bulunamayacağını merak ediyorum. Bu sorunun ayrıntılarını ayrı bir konu olarak yazdım: http://stackoverflow.com/questions/37356148/android-app-device-or-resource-busy-when-accessing-usb-device-via-jna – JellicleCat

İlgili konular