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.h
interfaz. 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.
fuente
Respuestas:
La terminología que falta es un dispositivo framebuffer . Puede encontrar la documentación de kernel.org aquí .
fuente