An easyGUI display driver consists of only two simple c functions, initialization and data transfer. It can easily be adapted to the hardware in question, meaning that the display hardware can use any connection method (bus, ports, I²C, SPI, etc.) supported by the display controller.
The initialization part of the display driver is not really easyGUI relevant, but merely sets up the display hardware for the required display mode, transfer method, etc., and make an initial clearing of the display. Display contrast control (if required), back lighting and other secondary tasks can also conveniently be placed here. Only drivers for palette based color modes contain easyGUI specific code in the initialization part, as the preferred palette must be transferred to the display controller.
The data transfer part of the display driver moves display data from the internal display buffer to the display controller RAM memory. Data transfer is intelligent, i.e. only necessary data is transferred, that is data changed since last data transfer. This ensures minimal data traffic to the (potentially slower) display controller.
Both the initialization and data transfer parts of the display driver are plain C functions of limited size, which can freely be modified to suit specific demands of the target system hardware. The driver system is thus very flexible and easy to maintain.
We will assist you in the initial task of getting the display driver up and running, if you should encounter problems with our driver.
Many display controllers support multiple setups regarding color depth, color mode, display orientation, etc. As the easyGUI display driver is so simple it is a trivial task to adapt it to the preferred display mode. Furthermore easyGUI can be set up to almost any color depth / mode currently found in display controllers.
Some easyGUI display drivers support more than one type of display controller. This is because a particular display controller architecture is often found in many incarnations, with different manufacturer names and product codes.
Microprocessors with build in display controllers, like e.g. some ARM controllers, are handled just like stand-alone display controllers.
As standard easyGUI uses an intermediate display buffer in ordinary RAM. The display image is created in the buffer by the easyGUI library, and then transferred to the display controller memory, using the method programmed in the display driver. It is however possible to bypass this internal display buffer if the display controller buffer is directly mapped into the microcontroller memory space. As the easyGUI internal display buffer is organized exactly as the display controller RAM it is possible to let the easyGUI library write directly into display controller RAM. The display driver update task is then left empty, as there is no longer any data to transfer from internal buffer to display controller buffer.
The reason for the intermediate buffer in easyGUI is two-fold. Both reasons are rooted in the fact that an easyGUI structure (collection of items to display) can consist of many parts, which more or less overlap, e.g. a box containing texts and other components. In fact, this is often the case. The reasons are:
- Many display controllers are very slow to write to, either because of the display controller itself, or because of the way it is hooked to the micro controller (like e.g. port access). So, to speed up the system, the minimum amount of actual display writing is sought.
- Writing overlapping parts directly to the display controller RAM will result in flickering, because partial display images will be visible (albeit for very short times).
The first reason is not that relevant with the newer color based, relatively high resolution, display controllers, which are far more efficient in moving around display data than older designs. The second reason is less important, if the speed of the embedded system is high.
easyGUI driver libary
To quickly find a suitable easyGUI driver for your preferred LCD controller, please insert a controller number below: