¿Por qué este dispositivo específico no puede enumerarse por UsbManager.getDevicesList ()?

Como dice el título, estoy teniendo problemas para enumerar un dispositivo USB específico en un teléfono con capacidad USB USB usando UsbManager.getDeviceList (). No he tenido problemas para enumerar y comunicarme con otros dispositivos USB en este y otros teléfonos, pero este dispositivo USB específico no se puede encontrar. Tampoco se puede enumerar con aplicaciones de terceros como USB Device Info .

A continuación se muestran las propiedades USB enumeradas correctamente en un PC. Me he comunicado con el fabricante del dispositivo que ha confirmado que una firma externa certificó el dispositivo siguió la especificación USB 2.0. Originalmente, mi sospecha era que el dispositivo fue rechazado por Android porque omitió los siguientes campos: iManufacturer, iProduct e iSerialNumber, que fueron incluidos por otros dispositivos compatibles. Sin embargo, parece que estos campos no son necesarios después de revisar este extracto de la Sección 9.5 de la Especificación USB 2.0 :

Cuando sea apropiado, los descriptores contienen referencias a descriptores de cadena que proporcionan información visualizable que describe un descriptor en forma legible por humanos. La inclusión de descriptores de cadena es opcional. Sin embargo, los campos de referencia dentro de los descriptores son obligatorios. Si un dispositivo no admite descriptores de cadena, los campos de referencia de cadena deben restablecerse a cero para indicar que no hay ningún descriptor de cadena disponible.

Mi pregunta, entonces, es lo que está haciendo que el UsbManager rechazar la enumeración de este dispositivo USB? Y, lo que es más importante, ¿hay algo que pueda hacer para forzar a Android a enumerar este dispositivo? Idealmente, estoy más interesado en una solución que no requiere acceso root, pero no es necesariamente un deal-breaker.

Propiedades USB


EDIT: Algún código de ejemplo.

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: he probado con algunos teléfonos más. He enumerado con éxito el dispositivo USB con los siguientes teléfonos:

  • Nota 2
  • LG-V400

Los siguientes dispositivos no pudieron enumerar el dispositivo:

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

EDIT 3: Aquí están los registros de la llamada adb shell dmesg en un Nexus 5 después de conectar el dispositivo USB. Puede ver claramente en las líneas 4-16 que el teléfono no puede enumerar el dispositivo.

Después de conectar el dispositivo USB a su teléfono Android, desconéctelo y conecte el teléfono a su computadora para que pueda usar el adb shell dmesg para ver el registro del kernel. Si ves que el dispositivo aparece en el registro del kernel, el teléfono lo reconoce y no estoy seguro de por qué no es devuelto por UsbManager. Lo que sospecho es que no aparecerá en el registro del kernel o habrá un error allí. Esto probablemente significa que el dispositivo no es compatible con el controlador OTG del teléfono o no está recibiendo suficiente energía para funcionar correctamente.

No tengo una solución y ni siquiera puede tener una sugerencia útil, pero el error parece ser algo explicable:

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

Espero que esto conduzca a una explicación y, finalmente, una solución.

Kaamel

  • No se pueden obtener los elementos en la herramienta uiautomator cuando la aplicación se ejecuta en el dispositivo
  • Nexus 5x no aparece en adb en Win7
  • Debugging con Android USB en VirtualBox
  • No puedo conectar Nexus S a mi Mac OS x Lion 10.7 para depuración USB
  • El permiso USB obtenido a través de android.hardware.usb no se aplica a NDK
  • ¿Cómo comunicarse con un dispositivo USB?
  • Android: Recibe UsbDevice de intención
  • ¿Cómo puedo iniciar una solicitud HTTP de Android a PC a través de USB?
  • Android - ¿Es posible leer el archivo de la computadora portátil usando la conexión USB en la aplicación mediante programación?
  • ¿Es posible transferir archivos al teléfono inteligente durante la conexión?
  • Android USB Vendor IDs de marca desconocida
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.