Articulo de referencia

Microventanas

En informática , Nano-X es un sistema de ventanas lo suficientemente completo como para usarse en una PC , un sistema embebido [ 1 ] [ 2 ] o una PDA . [ 3 ] [ 4 ] Es un proyecto...

En informática , Nano-X es un sistema de ventanas lo suficientemente completo como para usarse en una PC , un sistema embebido [ 1 ] [ 2 ] o una PDA . [ 3 ] [ 4 ] Es un proyecto de código abierto cuyo objetivo es llevar las características de los entornos gráficos de ventanas modernos a dispositivos y plataformas más pequeños. El proyecto fue renombrado de Microwindows debido a amenazas legales de Microsoft con respecto a la marca registrada Windows .

Descripción general

El sistema Nano-X Window es extremadamente portátil y está completamente escrito en C. Se ha adaptado a las CPU Intel de 16, 32 y 64 bits, al Broadcom BCM2837 ARM Cortex-A53 , así como a los chips MIPS R4000 (NEC Vr41xx) StrongARM y PowerPC que se encuentran en ordenadores portátiles y de bolsillo.

El sistema Nano-X Window se ejecuta actualmente en sistemas Linux con soporte para framebuffer del kernel , o mediante un controlador X11 que permite ejecutar aplicaciones Microwindows sobre el escritorio X Window . Este controlador emula todos los modos de color verdadero y paleta de Microwindows, de modo que una aplicación puede previsualizarse utilizando las características de visualización del sistema de destino directamente en la pantalla del escritorio, independientemente de las características de la pantalla del escritorio. Además, se ha adaptado a Windows , Emscripten , Android (basado en la biblioteca Allegro ) y MS-DOS . Los controladores de pantalla de Microwindows se han escrito a partir de las bibliotecas SDL1 y SDL2, además de las bibliotecas Allegro y SVGAlib . También existen controladores VESA y VGA de 16 colores y 4 planos.

Arquitectura

Diseño por capas

Microwindows es esencialmente un diseño por capas que permite usar o reescribir diferentes capas para adaptarlas a las necesidades de la implementación. [ 5 ] En el nivel más bajo, los controladores de pantalla , ratón / panel táctil y teclado proporcionan acceso a la pantalla real y a otro hardware de entrada de usuario. En el nivel intermedio, se implementa un motor gráfico portátil que proporciona soporte para dibujo de líneas, relleno de áreas, polígonos, recorte y modelos de color. En el nivel superior, se implementan tres API que proporcionan acceso al programador de aplicaciones gráficas. Actualmente, Microwindows admite las API Xlib, Nano-X y Windows Win32 / WinCE GDI . Estas API proporcionan una estrecha compatibilidad con los sistemas Win32 y X Window , aunque con funcionalidad reducida. Estas API permiten portar programas fácilmente desde otros sistemas.

Controladores de dispositivos

Las interfaces de los controladores de dispositivos se definen en device.h. Una implementación de Microwindows integra al menos un controlador de pantalla, ratón y teclado en el sistema. Las rutinas de nivel intermedio del núcleo del motor gráfico independiente del dispositivo llaman directamente al controlador para realizar las operaciones específicas del hardware. Esta configuración permite añadir diversos dispositivos de hardware al sistema Microwindows sin afectar al funcionamiento general del sistema.

interfaces de programación de aplicaciones

Actualmente, Windows admite tres interfaces de programación de aplicaciones (API) diferentes. Este conjunto de rutinas gestiona la comunicación entre cliente y servidor , las actividades del administrador de ventanas (como dibujar barras de título, cerrar ventanas, etc.) y las solicitudes del programador para la salida gráfica. Estas API se ejecutan sobre las rutinas principales del motor gráfico y los controladores de dispositivos.

API NX11

La API NX11 cumple con la API de X Window . Se basa en la API Nano-X y proporciona funciones Xlib utilizando las funciones disponibles en la API Nano-X. Puede compilarse como una biblioteca independiente o junto con la biblioteca Nano-X como una única biblioteca llamada libPX11. En total, proporciona 180 funciones Xlib y funciones auxiliares para otras funciones no implementadas.

Basándose en la API NX11, la biblioteca de interfaz gráfica de usuario FLTK permite crear una interfaz gráfica para programas de aplicación. La distribución Nanolinux utiliza la API NX11 y FLTK para implementar un sistema operativo Linux que requiere 19 MB de espacio en disco.

API Nano-X

La API Nano-X se basa en el servidor mini-x, escrito inicialmente por David Bell, que era una reimplementación de X en el sistema operativo MINIX . Sigue de forma general la API Xlib del sistema X Window, pero con nombres que comienzan con GrXXX() en lugar de X...(). El modelo básico de cualquier API sobre Microwindows consiste en inicializar los controladores de pantalla, teclado y ratón, y luego esperar un evento en un bucle select(). Cuando se produce un evento, si es un evento del sistema, como la actividad del teclado o el ratón, esta información se pasa al programa de usuario convertida en un evento de exposición, un mensaje de dibujo, etc. Si se trata de una solicitud de operación gráfica por parte del usuario, los parámetros se decodifican y se pasan a la rutina del motor GdXXX correspondiente. Cabe destacar que el concepto de ventana frente a operaciones gráficas puras se gestiona a este nivel de API. Es decir, la API define los conceptos de qué es una ventana, cuáles son los sistemas de coordenadas, etc., y luego las coordenadas se convierten a "coordenadas de pantalla" y se pasan a las rutinas principales del motor GdXXX para que realicen el trabajo real. Este nivel también define los contextos gráficos o de visualización y transmite esa información, incluida la información de recorte, a las rutinas principales del motor.

API de Microwindows

La API que intenta cumplir con el estándar GDI de Microsoft Win32 y WinCE es la API de Microwindows. [ 6 ] Actualmente, admite la mayoría de las rutinas de dibujo y recorte de gráficos, así como el dibujo automático de la barra de título de la ventana y el arrastre de ventanas para su movimiento. La API de Microwindows se basa en mensajes y permite escribir programas sin tener en cuenta las políticas de administración de ventanas que implemente el sistema. Actualmente, la API de Microwindows no es cliente/servidor.

El mecanismo de comunicación fundamental en la API de Microwindows es el mensaje. Un mensaje consta de un número de mensaje conocido y dos parámetros, denominados wParam y lParam. Los mensajes se almacenan en la cola de mensajes de la aplicación y se recuperan mediante la función GetMessage. La aplicación se bloquea mientras espera un mensaje. Existen mensajes que corresponden a eventos de hardware, como WM_CHAR para la entrada de teclado o WM_LBUTTONDOWN para la pulsación del botón del ratón. Además, se envían eventos que señalan la creación y destrucción de ventanas: WM_CREATE y WM_DESTROY. En la mayoría de los casos, un mensaje se asocia a una ventana, identificada como HWND. Tras recuperar el mensaje, la aplicación lo envía al procedimiento de gestión de la ventana asociada mediante DispatchMessage. Al crear una clase de ventana, se especifica su procedimiento de gestión de mensajes asociado, de modo que el sistema sabe dónde enviar el mensaje.

La arquitectura de paso de mensajes permite que la API principal gestione numerosas funciones del sistema mediante el envío de mensajes ante diversos eventos, como la creación de ventanas, la necesidad de pintar, el movimiento, etc. Por defecto, la función de gestión de ventanas asociada recibe un primer análisis del mensaje y, a continuación, llama a la función DefWindowProc, que gestiona las acciones predeterminadas para todos los mensajes. De este modo, todas las ventanas pueden comportarse de la misma manera al arrastrarlas, etc., a menos que el usuario especifique lo contrario. Las principales políticas de gestión de ventanas pueden redefinirse simplemente reimplementando DefWindowProc, en lugar de realizar cambios en todo el sistema.

La unidad básica de organización de pantalla en la API de Microwindows es la ventana. Las ventanas describen un área de la pantalla donde se dibuja, así como un procedimiento asociado para gestionar los mensajes destinados a dicha ventana. Los programadores de aplicaciones pueden crear ventanas a partir de clases predefinidas, como botones, cuadros de edición, etc., o definir sus propias clases de ventana. En ambos casos, el método para crear y comunicarse con las ventanas sigue siendo el mismo.

Historia

Nano-X tiene su origen en NanoGUI. NanoGUI fue creado por Alex Holden a partir del servidor mini-X de David Bell y las modificaciones de Alan Cox, a las que añadió conectividad cliente/servidor. Posteriormente, Gregory Haerr se interesó por el proyecto NanoGUI y comenzó a realizar importantes mejoras y modificaciones. Alrededor de la versión 0.5, Gregory Haerr añadió compatibilidad con múltiples API y comenzó a distribuir Microwindows. En Microwindows 0.84, se incorporaron todos los cambios previos de NanoGUI, y desde entonces se ha mantenido la distribución combinada NanoGUI/Microwindows. En enero de 2005, el sistema cambió su nombre a Nano-X Window System. Dado que Nano-X sigue de forma aproximada la API Xlib del X Window System, se desarrolló una interfaz adicional llamada NXlib, que proporciona una API compatible con Xlib basada en Nano-X.

Referencias

  1. S. Wellhöfer, Embedded Linux mit Nano-X
  2. Microwindows 0.9 en ARM Linux
  3. "Instalación de Microwindows en el iPAQ" . Archivado del original el 16 de abril de 2007. Consultado el 16 de abril de 2007 .
  4. "Royal Lin@x PDA" . Archivado del original el 22 de mayo de 2007. Consultado el 22 de mayo de 2007 .
  5. P. Raghavan, Diseño y desarrollo de sistemas Linux embebidos
  6. Linux + Microwindows: un rival para WinCE
  • Microwindows en GitHub para la última versión
  • Sitio web Microwindows.org
  • Introducción a la programación en Microwindows
  • Introducción a la programación en Microwindows, Parte 2
  • Introducción a la programación en Microwindows, Parte 3
Obtenido de " https://en.wikipedia.org/w/index.php?title=Microwindows&oldid=1292277586 "