Подтвердить что ты не робот

Почему это конкретное устройство не может быть перечислено с помощью UsbManager.getDevicesList()?

Как говорится в заголовке, у меня возникают проблемы с перечислением определенного USB-устройства на телефоне с поддержкой USB с помощью UsbManager.getDeviceList(). У меня не было проблем перечислять и общаться с другими USB-устройствами на этом и других телефонах, но это конкретное USB-устройство не может быть найдено. Он также не может быть перечислен с помощью сторонних приложений, таких как Информация об устройстве USB.

Ниже перечислены свойства USB, правильно перечисленные на ПК. Я общался с производителем устройства, который подтвердил, что внешняя фирма сертифицировала устройство, следуя спецификации USB 2.0. Первоначально я подозревал, что устройство было отклонено Android, потому что оно опустило следующие поля: iManufacturer, iProduct и iSerialNumber, которые были включены другими совместимыми устройствами. Однако кажется, что эти поля не нужны после просмотра этой выдержки из раздела 9.5 Спецификация USB 2.0:

В соответствующих случаях дескрипторы содержат ссылки на строковые дескрипторы, которые предоставляют отображаемую информацию, описывающую дескриптор в удобочитаемой форме. Включение дескрипторов строк необязательно. Однако ссылочные поля в дескрипторах являются обязательными. Если устройство не поддерживает строковые дескрипторы, то строковые ссылочные поля должны быть reset равными нулю, чтобы указать, что нет дескриптора строки.

Итак, возникает вопрос, почему UsbManager отклоняет перечисление этого USB-устройства? И что еще более важно, есть ли что-нибудь, что я могу сделать, чтобы заставить Android перечислить это устройство? В идеале меня больше всего интересует решение, которое не требует доступа root, но оно не обязательно является нарушителем транзакций.

Свойства USB


EDIT: некоторый пример кода.

UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
// When I plug in this USB device, deviceList is empty. 
// Other devices are discoverable, however.

EDIT 2: Я тестировал еще несколько телефонов. Я успешно перечислил USB-устройство со следующими телефонами:

  • Примечание 2
  • LG-V400

Следующие устройства не могли перечислить устройство:

  • Nexus 5
  • Galaxy S4, S5, S6
  • LG G2, 4G LTE

ИЗМЕНИТЬ 3: Ниже приведены журналы, вызывающие adb shell dmesg на Nexus 5 после подключения устройства USB. Вы можете четко видеть на строках 4-16, что телефон не может перечислить устройство.

4b9b3361

Ответ 1

После подключения USB-устройства к телефону Android отключите его и подключите телефон к компьютеру, чтобы вы могли использовать adb shell dmesg для просмотра журнала ядра. Если вы видите, что устройство отображается в журнале ядра, телефон распознает его, и я не уверен, почему он не возвращается UsbManager. Я подозреваю, что он не появится в журнале ядра или там будет ошибка. Это, вероятно, означает, что устройство несовместимо с контроллером OTG телефона или не получает достаточную мощность для правильной работы.

Ответ 2

У меня нет решения и, возможно, даже нет полезного намека, но ошибка кажется несколько объяснимой:

#define EOVERFLOW 75 /* Value too large for defined data type */

Надеюсь, это приведет к объяснению и, в конечном итоге, к решению.

Kaamel