Estou desenvolvendo um sistema incorporado com uma tela sensível ao toque. A tela sensível ao toque funciona como entrada e saída, com um teclado "virtual" sobrepondo a saída gráfica.
Eu tenho um driver de dispositivo que lê as entradas do sensor de toque e as converte corretamente em pressionamentos de teclas, criados com a ajuda deste guia no kernel.org . Eu quero expandir esse driver para também lidar com a saída de imagem na tela.
Quero apoiar o getty e o X, com o mínimo de duplicação possível. Estou executando uma variante mínima do Debian com pacotes escolhidos pela cereja, como o mínimo X. Observe que não pretendo colocar esse driver no pipeline de repositório, embora eu possa despejá-lo em um repositório público do GitHub.
Atualmente, a saída de imagens de tela é feita por meio de uma solução alternativa: uma opção de inicialização para forçar a renderização no hardware gráfico incorporado da CPU, apesar de não estar conectada a um monitor, e um daemon que raspa continuamente a tela nesse buffer, modifica um punhado de pré- pixels definidos para criar o visual do teclado e o envia para a tela real.
Isso funciona como uma prova de conceito, provando que eu entendo corretamente o idioma que o dispositivo de tela espera, mas é obviamente sub-ideal.
kernel.org
também possui um guia para drivers de dispositivo "DRM", mas isso parece ser um exagero para o que meu hardware é capaz:
A camada Linux DRM contém código destinado a suportar as necessidades de dispositivos gráficos complexos, geralmente contendo pipelines programáveis adequados à aceleração de gráficos 3D.
Nenhum dos meus hardwares tem algo parecido com a aceleração 3D, então concluo que isso provavelmente não é o que eu quero.
Qual subsistema / API devo usar? Eu acho que um pedaço da terminologia que está faltando é o que está atrasando minhas pesquisas, mas qualquer informação adicional sobre como fazer isso seria apreciada.
Detalhes do hardware (provavelmente irrelevantes): A CPU e a tela se comunicam através do protocolo paralelo do estilo 8080, que a CPU não suporta nativamente, por isso estou emulando-o com GPIOs (manipulando registros via mmap).
O envio de uma imagem de tela completa leva cerca de 20 ms, mas a obtenção de uma cópia completa do buffer gráfico incorporado leva ~ 180 ms; portanto, pular essa etapa é o objetivo mais importante. O hardware da tela inclui memória SGRAM suficiente para manter um quadro inteiro de dados e suporta a gravação de uma sub-região retangular, portanto, seria desejável um gancho para atualizar apenas a parte da tela que foi alterada.
A tela não é específica sobre o tempo dos dados recebidos. A entrada do sensor de toque é manipulada por um IC criado especificamente para se comunicar com a CPU via I²C , que a CPU suporta. O driver atual usa a linux/input-polldev.h
interface. A CPU é um Broadcom BCM2835 , a tela é um TFT com um controlador Himax HX8357 incorporado , o decodificador de sensor de tela sensível ao toque é um ST STMPE610 e existe um alternador de níveis de tensão (Nexperia 74LVCH245A ) em jogo entre o HX8357 e o BCM2835. Mais detalhes estão disponíveis mediante solicitação.