В Android возможно ли получить разрешение для класса в интерфейсе 2 на составном устройстве - PullRequest
0 голосов
/ 11 сентября 2018

Я разработал два USB-устройства разных классов, которые можно подключить к телефону Android через концентратор. Они оба распознаются, и как только разрешения предоставлены, я могу получить доступ к ним обоим. Один использует только массовые конечные точки, а другой использует только контрольные передачи. Мои программы Android могут без проблем общаться на обоих этих устройствах.

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

Когда я подключаю это композитное устройство к Android, я могу получить разрешение для этого устройства. Затем я могу использовать основные конечные точки, связанные с интерфейсом 1. Я могу читать дескрипторы на интерфейсе управления. Тем не менее, я не могу читать или писать успешно в класс на интерфейсе 2 через интерфейс управления.

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

После прочтения документации Android я не смог понять, как запросить разрешение для второго (и дополнительного) класса интерфейса.

Кто-нибудь знает, как получить такое разрешение? Или, может быть, я ошибаюсь по поводу причины, и причина такого поведения другая?

Большое спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

Я нашел ответ на свой вопрос. Это не имеет ничего общего с разрешениями Android. Похоже, что для составного устройства вам нужно только один раз получить разрешение Android для «устройства» и получить доступ к внутренним классам.

Моя проблема была с фактической передачей управления. Я установил контрольную запись с буфером, но ответ от прошивки был ZLP. Судя по всему, Android ждет буфера и время ожидания. При этом, похоже, что последующие передачи управления не удаются. После того как я изменил буфер на ноль, а длина буфера на 0x0 в вызове передачи управления, проблема была решена.

...