¿Qué subsistema / API de controlador de Linux se utiliza para un dispositivo de pantalla / monitor simple?

9

Estoy desarrollando un sistema integrado con una pantalla táctil. La pantalla táctil funciona como entrada y salida, con un teclado "virtual" superpuesto a la salida gráfica.

Tengo un controlador de dispositivo en funcionamiento que lee la entrada del sensor táctil y la traduce correctamente a las pulsaciones de teclas, creada con la ayuda de esta guía en kernel.org . Quiero expandir este controlador para manejar también la salida de imagen a la pantalla.

Quiero admitir getty y X, con la menor duplicación posible. Estoy ejecutando una variante mínima de Debian con paquetes seleccionados, como X mínimo. Tenga en cuenta que no tengo la intención de intentar llevar este controlador a la tubería del repositorio, aunque podría volcarlo en un repositorio público de GitHub.

La salida de imágenes de pantalla se realiza actualmente a través de una solución intermitente: una opción de arranque para forzar el renderizado al hardware de gráficos embebidos de la CPU, a pesar de que no está conectado a una pantalla, y un demonio que continuamente raspa la pantalla de ese búfer, modifica un puñado de pre píxeles definidos para crear el teclado visual, y lo empuja a la pantalla real.

Esto funciona como una prueba de concepto, lo que demuestra que entiendo correctamente el idioma que el dispositivo de pantalla espera, pero obviamente es subóptimo.

kernel.org también tiene una guía para los controladores de dispositivos "DRM", pero parece una exageración seria de lo que mi hardware es capaz de hacer:

La capa DRM de Linux contiene código destinado a satisfacer las necesidades de dispositivos gráficos complejos, que generalmente contienen tuberías programables que se adaptan bien a la aceleración de gráficos 3D.

Ninguno de mi hardware tiene algo parecido a la aceleración 3D, por lo que concluyo que esto probablemente no sea lo que quiero.

¿Qué subsistema / API debo usar? Me imagino que una parte de la terminología faltante es lo que está frenando mis búsquedas, pero agradecería cualquier información adicional sobre cómo lograr esto.

Detalles del hardware (probablemente irrelevantes): la CPU y la pantalla se comunican a través del protocolo paralelo 8080-esque, que la CPU no admite de forma nativa, por lo que lo estoy emulando con GPIO (manipulando registros a través de mmap).

Enviar una imagen de pantalla completa tarda unos 20 ms, pero obtener una copia completa del búfer de gráficos incrustado tarda ~ 180 ms, por lo que omitir ese paso es el objetivo más importante. El hardware de la pantalla incluye suficiente memoria SGRAM para mantener un cuadro completo de datos, y admite la escritura de una subregión rectangular, por lo que sería deseable un gancho para actualizar solo la parte de la pantalla que ha cambiado.

La pantalla no es particular sobre el momento de los datos entrantes. La entrada del sensor táctil es manejada por un IC especialmente diseñado que se comunica con la CPU a través de I²C , que la CPU admite. El controlador actual usa la linux/input-polldev.hinterfaz. La CPU es un Broadcom BCM2835 , la pantalla es un TFT con un controlador Himax HX8357 incorporado , el decodificador del sensor de pantalla táctil es un ST STMPE610 y hay un cambiador de nivel de voltaje (Nexperia 74LVCH245A ) en juego entre el HX8357 y el BCM2835. Más detalles están disponibles bajo petición.

memtha
fuente
Estoy bastante seguro de que tiene el síndrome NIH y básicamente reinventó una rueda, por lo general, la pantalla táctil usa el protocolo HID, que es más que menos compatible. Tenga en cuenta que la pantalla táctil es solo un dispositivo de entrada.
0andriy
@ 0andriy Reinventar la rueda es algo mío, pero no había controladores (reales) para este dispositivo específico cuando comencé. No conozco ningún protocolo estandarizado para dispositivos de interfaz humana, pero si hay uno, estoy bastante seguro de que la superposición táctil que estoy usando aquí no lo está usando. No estoy de acuerdo con que una "pantalla táctil es solo un dispositivo de entrada", ya que la mía definitivamente está generando imágenes.
memtha
Usted simplemente no reconoció dos bloques de hardware en un paquete. La pantalla táctil, sin tener en cuenta su nombre, es solo un dispositivo de entrada. La salida se llama, por ejemplo, panel o pantalla TFT.
0andriy
merriam-webster.com/dictionary/touchscreen Sí, hay dos piezas distintas de hardware: una superposición sensible al tacto y una pantalla TFT. Estos dos componentes se combinan para formar la pantalla táctil. No puede decirme que estoy definiendo mal la pantalla táctil diciéndome que "ignore el nombre".
memtha

Respuestas: