Graphical Environments for Embedded Development
Just as with standard desktop development, there are various graphical environments available when developing an embedded system. Each of these has a range of advantages & disadvantages, covering aspects such as ease of use, cost, speed, memory/storage footprint etc...
QT (http://www.trolltech.com) is a modern commercial GUI toolkit, as well as a supporting library for cross platform development. It is written in C++, and provides a very large number of widgets. It is also fully cross platform to X11, Microsoft Windows, MacOS X.
The Open Palmtop Integrated Environment () is an open source graphical user environment designed for PDAs and other Linux based embedded devices. OPIE is based on the QTopia (used by QT) graphical environment. It is used by OpenZaurus (http://www.openzaurus.org/) and OpenSIMpad (http://opensimpad.org/). OPIE is either licensed as GPL or under a commercial license. If you develop applications using OPIE and do not want to publish the source code, it is necessary to purchase a license from Trolltech (http://trolltech.com/).
The GPE Palmtop Enviroment () is an open source graphical user environment similar to OPIE. It is based on the X-Windows system and the GTK+ widget toolkit. GPE is generally regarded as slightly slower, less mature and less polished looking than OPIE, however it does not have the licensing restrictions that OPIE does. Applications developed for GPE may be distributed as closed source without requiring an additional license.
Nano-X Windows (http://www.microwindows.org/), formerly called Microwindows, is a lightweight windowing system for embedded Linux devices. The entire Nano-X system, including all drivers, is typically less than 100kb in size. Nano-X supports a Win32 compatible API which can ease the transition of Windows applications.
The Simple Direct-Media Layer (http://www.libsdl.org/) is a cross platform library which provides low-level access to video, audio and input devices. SDL is compatible with several programming languages including: C, C++, Python, Perl and Java.
DirectFB (http://www.directfb.org/) is a low-level library for handling video and input devices. DirectFB provides software implementations for many graphics operations that may not be supported by embedded hardware. It is geared towards high speed advanced graphics, making the most of the available hardware.
Choosing a Graphical Environment
The choice of graphical environment is largely based on the intended use of an embedded device. For PDA type devices OPIE, GPE or Nano-X provide full featured graphical environments. OPIE is robust, highly polished and has a large amount of application software available. Developing new applications for OPIE may require the purchase of a license, whereas development of GPE and Nano-X applications is unrestricted. Nano-X is a good choice for devices with very limited memory, or for compatibility with Windows based devices.
For embedded devices with simple displays we recommend either SDL or DirectFB, or a combination of both. For development of desktop applications to control embedded devices we recommend QT due to its cross-platform nature and rapid development time.
Bluewater Systems Experience
Bluewater Systems have developed an internal library which utilises SDL to create simple interactive graphical applications. We have used SDL, QT and DirectFB for developing embedded applications. For desktop applications used to control or communicate with embedded devices we generally use QT.
- SDL for the DDS XM-100
- QT for DDS XM-100 desktop utilities & Huricane
- QT for various demonstration applications
- DirectFB for mplayer modifications for advertising display & Huricane.
Bluewater Embedded GUI Environment
Using SDL, Bluewater Systems have developed a reasonable advanced, fast, embedded graphical environment. As it uses SDL, it is cross platform to Windows, MacOS and the embedded platform. It provides support for the following widgets:
- Animation - a series of images animated a given frame rate
- Button - a widget which can be clicked, or selected with keys to trigger an event
- Clock - a standard time display widget, with customisable format
- Edit Text - a text edit/entry widget
- Image - Display of PNG, JPG, GIF, & TIFF images
- IPAddress - Customised edit text for editing IP addresses
- Keypad - Onscreen keypad, for when a full keypad is not available
- Menu - Simple menu system, with support for recursive depth & image icons
- Movie - display of MPEG movies
- Progress - Progress display to show % complete of an operation
- Rectangle - simple rectangle widget
- Text - For display of larger bodies of text, includes automatic line wrapping etc...
- Window - for nesting widgets, allows for finer grained display control
Our Embedded GUI takes care of the low-level aspects of screen updating, keeping the appropriate areas up-to-date, without excessive redraws. Using a minimised redrawing algorithm, it can work out which sections of the screen have changed, only redrawing those which have.
The Embedded GUI also takes care of some peripherals, such as the mouse, keyboard & audio device, providing a simple programmatic interface to dealing with them.
This GUI system has been used in applications from the LCD screen of our DDS XM100 tape emulator, to large 1024x768 LCD panels displaying advertisements.