Qual subsistema / API de driver Linux é usado para um simples dispositivo de tela / monitor?

9

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.hinterface. 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.

memtha
fonte
Tenho certeza de que você tem a síndrome do NIH e basicamente reinventou uma roda - geralmente a tela sensível ao toque usa o protocolo HID, que é mais do que menos suportado. Observe que a tela sensível ao toque é apenas um dispositivo de entrada.
0andriy
@ 0andriy Reinventar a roda é uma coisa minha, mas não havia drivers (reais) para esse dispositivo específico quando eu comecei. Não conheço nenhum protocolo padronizado para dispositivos de interface humana, mas se houver um, tenho certeza de que a sobreposição de toque que estou usando aqui não está usando. Não concordo que uma "tela sensível ao toque seja apenas um dispositivo de entrada", pois a minha está definitivamente produzindo imagens.
memtha
Você simplesmente não reconheceu dois blocos de hardware em um pacote. A tela sensível ao toque, independentemente do nome, é apenas um dispositivo de entrada. A saída é chamada, por exemplo, painel ou tela TFT.
0andriy
merriam-webster.com/dictionary/touchscreen Sim, existem duas peças de hardware distintas: uma sobreposição sensível ao toque e uma tela TFT. Esses dois componentes se combinam para formar a tela sensível ao toque. Você não pode me dizer que estou definindo errado a tela sensível ao toque dizendo para "desconsiderar o nome".
memtha 4/01

Respostas: