Advantages of MiniGUI
Architecture of MiniGUI
MiniGUI aims to provide a fast, stable, full-featured, and cross-platform windowing and GUI support system, which is especially fit for embedded systems or smart IoT devices based-on Linux/uClinux, eCos, and other traditional RTOSes, such as RT-Thread, RTEMS, FreeRTOS, VxWorks, ThreadX, Nucleus, pSOS, uC/OS-II, and OSE.
The following figure illustrates the software architecture of MiniGUI. The relationship between MiniGUI and realtime operating systems is illustrated in the figure as well. An application on MiniGUI can implement its functions by calling APIs in ANSI C library and MiniGUI libraries. The abastract layers of MiniGUI hide the details of underlying hardware devices and operating systems, and the application need not to take care of the output and input devices.
As shown above, from bottom to top, MiniGUI includes the following modules:
- Graphics Abstraction Layer (GAL). GAL hides the differences among different operating systems or devices to provide an unified graphics interface for the upper layer of MiniGUI. In GAL, it contains the software components to support the devices like Linux frame buffer, eCos LCD, and so on. These software components call the device interface of bottom layer to achieve specific GAL operations such as opening device, setting resolution and video mode, closing device, and so no. We call these software components as the "GAL engines". Its concept is similar to the device driver in operating system.
- Input Abstraction Layer (IAL).Similar to GAL, IAL hides the differences among various input devices such as the keyboard, keypad, mouse, and touch screen to provide an universal interface for upper layer. To support different keyboard, touch screen or mouse interface, you can write your own IAL engine. MiniGUI provides support for Linux console (keyboard and mouse), touch screen, remote controller, keypad, and other input devices by IAL and IAL engines.
- Graphics Device Interfaces (GDI).This module is based on GAL and provides the interfaces related to graphics for upper layer applications, such as drawing curves, rendering text, filling rectangle, and so on. GDI contains other independent sub-modules, such as font and char set support, image support, and so on.
- Messaging Module. This module is based on IAL, it implements MiniGUI messaging mechanism and provided a comprehensive management interface for the upper layer. It is well known that almost all the GUI systems are event-driven, so its own operation and the operation of GUI application both rely on messaging module.
- Windowing Module and Control/Widget. Based on GDI and messaging module, MiniGUI implements the windowing module. This module provides basic interface to create the main window and controls (widgets) for upper applications, and is responsible for maintaining control classes. Control class is an important concept to get the reusability of program code. By using one control class, we can create many control instances that belong to a certain kind of control class, so that these instances can use the same code of the control class. In this way, we can achieve the class/instance concept similar to C++, which can reuse existed code as much as possible and improve the maintainability of software. The control module implements a lot of common controls, such as static box, button, edit box, list box, combo box, and so on.
- Look and Feel. This module is introduced in MiniGUI V3.0. It can be used to customize the appearance of main windows and controls. In the previous version, the ability to customize main windows and controls has not been an independent module, but we can still make the main windows and controls of MiniGUI have three kinds of appearance styles by configuration options: PC3D (a style similar to the PC), FLAT, and FASHION. In MiniGUI 3.0, the appearance of main windows and controls can be fully customized by the applications. When you create a main window or control, by specifying the different name of the Look and Feel Renderer (LFRDR), you will get different appearance of the main window or control.
MiniGUI Core provides the basic windowing and graphics interfaces as well as a lot of standard controls (toolkit). Besides MiniGUI Core, FMSoft also provides some components for the developers to develop app much easier:
- mGUtils: A MiniGUI component which contains miscellaneous utilities like
FileOpenDialogBox, and so on.
- mGPlus: A MiniGUI component which provides support for advanced graphics functions like path, gradient, anti-aliased stretch, and color combination.
- mGEff: mGEff provides an animation framework for MiniGUI app. It also provides some popular UI/UE special effects.
- mGNCS: This component provides a new control set for MiniGUI app.
- mGNCS4Touch: This component provides some new controls, which are compliant to the new control API spec of mGNCS, for devices with touch screens.
The following figure shows the controls/widgets provides by mGNCS.
The following figure shows the controls/widgets provides by mGNCS4Touch.
Advantages of MiniGUI
Compared with other GUI systems for embedded systems or smart IoT devices, MiniGUI has the advantages as follow:
The abundant functions and configurability of MiniGUI makes it applicable in low-end products based on the CPU main frequency 30MHz as well as high-end products. The developers can create dashy user interfaces by using the advanced control styles and the skin technology.
The feature of cross-operating-system makes it easy to run MiniGUI on the simplest embedded operating system, such as uC/OS-II, and the modern embedded operating system, such as Linux. Furthermore, MiniGUI provides complete and multi-window system for embedded Linux operating system.
These features make MiniGUI has a strong scalability, which is considered at the begin time of designing MiniGUI, so MiniGUI can not only be applied in simple devices, but also be applied on complicated electronic products.
Light-Weight and Low Resources Consumption
MiniGUI is a light embedded graphical library, and we have considered the hardware situation of embedded devices and the requirement of system resources completely. The size of MiniGUI library can be reduced to about 500 KB or less, and this is very good for the embedded devices.
Besides these, the latest R&D result indicates, MiniGUI is capable of running on a system with 30 MHz CPU and 4MB RAM successfully (on uClinux), which cannot be reached by other embedded graphics systems.
High Performance and High Reliability
The good architecture and optimized graphics interfaces of MiniGUI lead a very fast graphics output. In fact, MiniGUI was designed for real-time systems, taking into consideration the compactness, high performance, and high efficiency from the beginning. MiniGUI has been widely used in many areas, especially in industry production systems. MiniGUI plays an important role in these products or projects.
Since the release of its first version in 1999, MiniGUI has been employed by many products and projects, which, in turn, drive MiniGUI to improve its reliability and robustness constantly.
GUI systems are expected to be configurable in order to satisfy the different requirements from the embedded systems. Like Linux kernel, MiniGUI have many compilation configuration options, though which we can designate MiniGUI libraries to include and exclude some features. In general, MiniGUI can be customized against the following aspects:
- The target operating system MiniGUI runs on.
- The target hardware platform runs on.
- The runtime mode: MiniGUI-Threads, MiniGUI-Processes, or MiniGUI-Standalone.
- GAL and IAL engines to be used.
- Font types to be supported.
- Charsets to be supported.
- Image file formats to be supported.
- Widgets to be used.
- Window/Widget appearance styles: classic, flat, or fashion style.
These configuration options increase the flexibility of MiniGUI, and you can create the most suitable system based on your requirements.
In summary, MiniGUI is an embedded graphics support system for real time embedded products with high efficiency, reliability, scalability, and configurability. It brings the modern windowing and graphics technologies into the embedded devices. We can summarize the advantages of MiniGUI as follow:
- Support for multiple embedded OSes with great portability.
- Scalable architecture, easy to extend.
- Rich functions, flexible to customize.
- Optimal balance between low footprint and high performance.
Please refer to the following documents for the detailed description: