El dispositivo tiene una batería, pero sería bueno tener alimentación desde el bus cuando esté disponible. Por lo general, una computadora suministrará 500 mA, por ejemplo, mientras que un teléfono inteligente en modo OTG solo necesita para suministrar 8 mA .
¿Es posible hacer algo como esto?
- solicite 500 mA
- si se acepta: apague la computadora y cargue la batería desde la computadora
- else: solicita 200 mA
- si se acepta: poder de la computadora
- else: reclamación autoalimentada, energía de la batería
Esto parece ser para lo que están las configuraciones :
Por lo tanto, es posible tener dos configuraciones, una para cuando el dispositivo está alimentado por bus y otra cuando está alimentado por la red. ... Una vez que todas las configuraciones han sido examinadas por el host, el host enviará un comando SetConfiguration con un valor distinto de cero que coincida con el valor de configuración de bConfiguration de una de las configuraciones. Esto se utiliza para seleccionar la configuración deseada.
¿Es suficiente especificar configuraciones múltiples en los descriptores, una para cada requisito actual? ¿El SO los prueba automáticamente en orden y pasa al siguiente si uno falla?
Dispositivos USB de configuración múltiple y Windows parece decir que así es como funciona:
Durante la enumeración, USBCCGP primero intentará seleccionar la configuración cuyo descriptor se encuentra en el índice "original" especificado. Si el intento falla, normalmente debido a que la configuración requiere más de 100 mA, mientras que el concentrador ascendente del dispositivo solo tiene alimentación de bus, entonces USBCCGP intenta seleccionar la configuración encontrada en el índice "alternativo" especificado.
Sin embargo, esto no funciona en la práctica? :
“Los controladores de Microsoft funcionan invariablemente con la primera configuración de un dispositivo. El soporte de Microsoft para dispositivos compuestos no se activará si el dispositivo tiene varias configuraciones. En consecuencia, los dispositivos de configuración múltiple parecen ser poco frecuentes en la práctica, y Microsoft desalienta a las personas a diseñar nuevos ".
y :
Los controladores de Microsoft solo pedirán la primera configuración, y si eso pide demasiada información, que así sea.
y :
no es común tener más de una configuración. Los controladores estándar de Windows siempre seleccionarán la primera configuración para que no haya mucho punto.
Si las configuraciones múltiples no funcionan en la práctica, ¿puede el dispositivo detectar que ha sido rechazado, simular una desconexión y volver a conectarse con un conjunto diferente de descriptores?
(Esta es una pregunta sobre la parte de enumeración / comunicación de USB, no sobre la implementación del hardware de cómo conectar la batería, etc.)