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

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

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

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

Поэтому возникает вопрос, почему 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

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

  • Нексус 5
  • Galaxy S4, S5, S6
  • LG G2, 4G LTE

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

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

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

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

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

Kaamel