Объяснение о controltransfer в android для настройки связи USB

Я пытаюсь написать код Java, чтобы мой XOOM обменивался данными с нашим встроенным устройством через USB для последовательного кабеля.

Я использовал этот код кода:

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);

Я знаю, что это отправить запрос настройки на USB-устройство. Я не понимаю, почему requestType равен 0x21, поэтому requestID - 32, 34 и т.д.

В соответствии со спецификациями здесь: http://www.beyondlogic.org/usbnutshell/usb6.shtml#SetupPacket, в стандартном запросе устройства, стандартном запросе интерфейса и стандартном запросе конечной точки ни один из requestType равен 0x21, и ни один из идентификаторов requestID не равен 32 или 34. Есть ли объяснение для этих параметров, включая переданный буфер данных??

Ответ 1

Первый байт (bmRequestType) в установочном пакете состоит из 3 полей. Первый (наименее значащий) 5 бит является получателем, следующие 2 бита являются типом, а последний бит - направлением.

Если у вас есть значение 0x21, у этого есть двоичное представление 100001. Если вы разделите его на отдельные поля, это 0 01 00001, что соответствует классу-хозяину, устройству и интерфейсу, для поля направления, типа и получателя соответственно.

Итак, это управляющее сообщение, которое отправляется на определенный интерфейс, который определен некоторым стандартным классом usb.

Поскольку вы упомянули, что это было для связи с USB-адаптером для последовательного адаптера, я собираюсь предположить, что это, вероятно, отправляется на интерфейс связи, согласно Определения класса USB для устройств связи

В этом документе значение bRequest 34 (0x22) соответствует сообщению SET_CONTROL_LINE_STATE, а 32 (0x20) соответствует сообщению SET_LINE_CODING (страницы 51 и 53), что, по-видимому, имеет смысл как часть установки/инициализации серийного устройства.

Подробности для каждого из этих сообщений определены ниже, на страницах 57 и 58.