2012-05-06 10 views
11

Próbuję napisać kod Java, aby mój XOOM komunikował się z naszym urządzeniem osadzonym za pośrednictwem kabla USB na kabel szeregowy.wyjaśnienie dotyczące przesyłania danych w systemie Android w celu skonfigurowania komunikacji USB

użyłem tego chunck kodu:

connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0); 
connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80, 
           0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0); 

wiem, że to jest wysłanie żądania konfiguracji do urządzenia USB. Nie rozumiem, dlaczego requestType ma wartość 0x21, dlaczego requestID to 32, 34 itd.

Zgodnie ze specyfikacją tutaj: http://www.beyondlogic.org/usbnutshell/usb6.shtml#SetupPacket, w standardowym żądaniu urządzenia, standardowym żądaniu interfejsu i standardowym żądaniu punktu końcowego, żaden z requestType nie jest 0x21 i żaden z requestID nie jest 32 lub 34. Czy jest jakieś wyjaśnienie dla tych parametrów, w tym wysłany datownik?

Odpowiedz

20

Pierwszy bajt (bmRequestType) w pakiecie instalacyjnym składa się z 3 pól. Pierwszymi (najmniej znaczącymi) 5 bitami są odbiorcy, następne 2 bity są typem, a ostatnim bitem jest kierunek.

Jeśli masz wartość 0x21, ma ona binarną reprezentację 100001. Jeśli podzielisz ją na poszczególne pola, jest to 0 01 00001, co odpowiada klasie "host-to-device", klasie i interfejsowi, odpowiednio dla pól kierunku, typu i odbiorcy.

Jest to komunikat kontrolny wysyłany do określonego interfejsu zdefiniowanego przez standardową klasę usb.

Skoro wspomniałeś, że to było do komunikacji z adapterem USB do szeregowego, mam zamiar założyć, to prawdopodobnie jest wysyłany do interfejsu komunikacyjnego, zgodnie USB Class Definitions for Communication Devices

Per tego dokumentu, o wartości bRequest 34 (0x22) odpowiada komunikatowi SET_CONTROL_LINE_STATE, a 32 (0x20) odpowiada komunikatowi SET_LINE_CODING (strony 51 i 53), co wydaje się mieć sens jako część konfiguracji/inicjalizacji urządzenia szeregowego.

Szczegóły dotyczące każdej z tych wiadomości jest zdefiniowane niżej, na stronach 57 i 58.

+2

Dziękuję Jezusowi. Teraz działa. Będę głosować, gdy zdobędę cztery dodatkowe punkty w mojej reputacji. – dan

+0

Witam. Używam xamarin do opracowania aplikacji korzystającej z tego typu chipów. W języku xamarin metoda ControlTransfer() daje wyliczenie jako pierwszy parametr. Za każdym razem, gdy wywołuję tę funkcję tymi wartościami, zwraca -1. ControlTransfer (UsbAddressing.Out, 0x0000, 0x0001, 0, null, 0, 5000); Czy mógłbyś ewentualnie pomóc mi rozwiązać ten problem? –

+1

@ a.toraby - proszę zadać pytanie. Jeśli chcesz, wysłuchaj mnie w komentarzach, aby upewnić się, że to widzę. – JesusFreke

Powiązane problemy