Driver de filtro USB para dar suporte a carregadores USB
Escreva um driver de filtro que dê suporte à detecção de carregadores, se o controlador de função usar os drivers Synopsys e ChipIdea in-box. Se você estiver escrevendo um driver de cliente para um controlador de função proprietário, a detecção de carregador/anexação será integrada ao driver do cliente implementando EVT_UFX_DEVICE_PROPRIETARY_CHARGER_SET_PROPERTY, EVT_UFX_DEVICE_PROPRIETARY_CHARGER_RESET e EVT_UFX_DEVICE_DETECT_PROPRIETARY_CHARGER.
A pilha de funções USB permite que o dispositivo, como um telefone ou tablet, carregue quando conectado a um host e carregador USB, conforme definido pela especificação de Carregamento de Bateria USB (BC) 1.2.
Há dois tipos de portas que o dispositivo pode usar para carregamento. O dispositivo pode carregar de uma DCP (porta de carregamento dedicada) em um carregador enviado com o dispositivo. Como alternativa, o dispositivo pode a partir de portas downstream padrão ou carregando portas downstream quando o dispositivo está conectado a um computador. Ambos os casos estão em conformidade com a especificação USB BC 1.2.
Determinados carregadores não seguem a especificação. A pilha de funções USB permite que o dispositivo carregue desses carregadores USB proprietários.
Para dar suporte a carregadores proprietários e compatíveis com especificações, essas operações são necessárias.
- O dispositivo é capaz de detectar quando um host USB ou carregador está anexado ou desanexado.
- O dispositivo é capaz de detectar as diferentes portas de carregamento USB, conforme definido pela especificação BC 1.2.
- Para carregadores USB definidos pela especificação BC 1.2, o dispositivo cobra com a quantidade máxima de atual permitida pela especificação BC 1.2.
- O dispositivo é capaz de detectar carregadores USB proprietários.
- Para carregadores USB proprietários, determine a quantidade máxima de atual que o dispositivo pode desenhar.
- Notifique o sistema operacional sobre o tipo de porta USB que está conectado.
- Impedir que o dispositivo efetue pull atual sobre USB no sistema operacional, mesmo que um host USB esteja conectado e o dispositivo tenha se configurado com o Host.
Essas operações são tratadas pelo par UFX (extensão de classe de função USB)/driver de cliente e um driver de filtro carregado como um filtro inferior na pilha do dispositivo de função USB. O driver gerencia o carregamento USB a partir da detecção de porta USB para notificar a pilha de bateria quando ela pode começar a carregar e a quantidade máxima de atual que o dispositivo pode desenhar.
Aqui está uma representação arquitetônica das pilhas de dispositivos.
Quando uma porta USB é anexada ao dispositivo, o driver cliente recebe uma notificação pelo driver de filtro inferior ou uma interrupção. No momento, o driver cliente executa a detecção de porta comunicando-se com o hardware USB e relatando o tipo de porta para UFX. Como alternativa, ele pode solicitar o driver de filtro. Nesse caso, o driver de filtro coordena com o hardware USB para executar a detecção de porta USB e retorna o tipo de porta detectado para o driver cliente e o driver cliente o passa para a UFX.
Com base no tipo de porta, o UFX determina a quantidade máxima de atual que o dispositivo pode desenhar e envia essas informações para o CAD (Driver de Agregação de Carregamento). O CAD valida as informações. Se o atual for válido, o CAD enviará uma solicitação ao driver da classe de bateria para começar a carregar até a corrente máxima especificada. O driver da classe de bateria encaminha a solicitação de carregamento para o driver de miniclasse de bateria para processamento. Se a solicitação de carregamento especificar que um carregador proprietário foi anexado e a miniclasse de bateria manipular carregadores proprietários, o driver de miniclasse poderá tentar carregar com uma corrente máxima que determina ser apropriada. Caso contrário, a miniclasse de bateria só poderá carregar até a corrente máxima especificada pelo CAD.