Problemas de implementação para drivers de controlador GPIO
A extensão de estrutura GPIO (GpioClx) fornece uma DDI (interface de driver de dispositivo) flexível. Essa DDI permite que os desenvolvedores escolham entre interfaces alternativas de retorno de chamada. Um desenvolvedor de driver deve implementar o conjunto de funções de retorno de chamada de evento mais adequadas para a arquitetura de hardware do dispositivo controlador GPIO de destino.
Por exemplo, se o driver do controlador GPIO der suporte à leitura e gravação em pinos de E/S gpio, o desenvolvedor poderá optar por implementar um dos seguintes pares de funções de retorno de chamada:
CLIENT_ReadGpioPins e CLIENT_WriteGpioPinsCLIENT_ReadGpioPinsUsingMask e CLIENT_WriteGpioPinsUsingMask As funções CLIENT_ReadGpioPins e CLIENT_WriteGpioPins recebem um número bancário, uma matriz de números de pino gpio e um buffer de dados para os valores de bit a serem lidos ou gravados nesses pinos. Se apenas um pequeno número de pinos GPIO normalmente for acessado em uma operação de leitura ou gravação, esse par de retornos de chamada poderá produzir a melhor implementação. Essa implementação normalmente é usada para controladores GPIO cujos registros de hardware não são mapeados em memória. No entanto, se vários pinos GPIO provavelmente forem acessados durante uma operação de leitura ou gravação ou se o hardware do controlador GPIO puder acessar com eficiência vários pinos GPIO em paralelo, o outro par de funções de retorno de chamada poderá produzir uma implementação melhor.
As funções de retorno de chamada CLIENT_ReadGpioPinsUsingMask e CLIENT_WriteGpioPinsUsingMask podem ler ou gravar um banco de até 64 pinos em uma chamada. A função CLIENT_ReadGpioPinsUsingMask lê os valores de pino gpio em uma máscara de 64 bits. A função CLIENT_WriteGpioPinsUsingMask usa duas máscaras de 64 bits. Uma máscara indica quais pinos GPIO definir e a outra máscara indica quais pinos GPIO devem ser limpos. Essa implementação normalmente é usada para controladores GPIO mapeados em memória.