Я пытаюсь написать приложение для Android, используя режим хоста USB на Motorola Xoom с Android версии 3.1 (сборка HMJ37), используя новые API-интерфейсы USB хоста Android для связи через USB с устройством, которое использует интерфейс виртуального COM-порта Silicon Labs CP2102 ( USB-последовательный мост). В качестве руководства я использовал пример приложения AdbTest с сайта разработчика Android.
У меня возникли проблемы с чтением символов, отправленных на стороне UART CP2102. Однобайтовые массовые передачи работают нормально, но не в том случае, если я запрашиваю более 1 байта данных. Я знаю, что данные там, потому что я могу отправить команду GET_COMM_STATUS с помощью USBDeviceConnection.controlTransfer() и увидеть, что в буфере InQueue на CP2102 есть символы. Однако, когда я запрашиваю более одного байта из конечной точки входа с помощью функций USBRequest.queue() (асинхронная) или SBDeviceConnection.bulkTransfer() (синхронная), возвращаемый буфер содержит недопустимые символы.
Вот что работает:
- намерение срабатывает при вставке и удалении USB-устройства
- приложение запускается, находит USB-устройство, соединения, интерфейсы, конечные точки и утверждает интерфейс
- можно настроить CP2102, отправив команды USBDeviceConnection.controlTransfer()
- Символы успешно передаются со стороны UART CP2102 путем отправки данных в конечную точку вывода с помощью USBRequest.queue().
- Отдельные символы (разделенные временными задержками), поступающие на сторону UART CP2102, успешно считываются из массовой передачи в конечной точке с использованием синхронных или асинхронных команд.
Проблемы возникают, когда я пытаюсь отправить символы подряд. Однако я отправляю данные только со скоростью 9600 бод на стороне UART и не отправляю так много символов, чтобы заполнить буфер на CP2102.
Я использую Xoom в качестве источника питания для устройства. Я получаю одинаковое поведение на двух разных XOOM. Я использую комплект подключения камеры Motorola для MOTOROLA XOOM в качестве хост-кабеля USB.
Может ли кто-нибудь дать мне рекомендации о том, как сделать эту работу? Или API-интерфейс USB-хоста Honeycomb 3.1 на XOOM еще не очень стабилен?