 |
Device Drivers
|
In order to use KwikPeg, you must provide a video controller
capable of rendering the graphical images required by your application.
Most applications will also require an input device such as a
keyboard (or equivalent) and/or a pointing device such as a mouse.
For each of these physical devices, you must have an associated device driver.
KwikPeg includes a number of device drivers for video and input controllers
commonly found in embedded systems.
KwikPeg is designed to work with and take full advantage of a broad range
of video output devices and display screens.
KwikPeg includes a variety of video device drivers,
also called screen drivers, ready for use with
video controllers which support any of the common video interfaces
including LCD, HGA, CGA, VGA and SVGA devices.
KwikPeg can be configured
for monochrome, 4 grays, 16 grays, 16 colors, 256 colors, 65535 colors
and true 24-bit RGB color output. Furthermore,
the video characteristics may
be fixed (producing the smallest footprint) or dynamically determined at
run time during initialization of the video controller.
A full range of VGA and LCD display devices are supported,
including LCD devices of unique x-y resolutions or orientations.
The KwikPeg display driver handles common resolutions
such as 640x480 VGA or 320x240 LCD screens just as easily as
unique or small x-y pixel resolutions.
All KwikPeg screen interface operations are performed by a library
class named PegScreen. This class defines the drawing primitives and
other operations that are available in every KwikPeg system, no matter
what display type or video controller is used. Specific derived versions
of PegScreen are then provided for each color depth, resolution,
and video controller.
All KwikPeg screen drivers can draw lines, write text and
transfer bitmap information into the video memory frame buffer.
In fact, the software algorithms required to draw any KwikPeg
object are provided with every KwikPeg screen driver.
It is unreasonable to
expect KwikPeg to provide optimized video driver software
for every high end video controller available.
In fact, it is highly probable that a custom video device driver
will be required to get best performance from a high end video
controller. The key words are optimized and high end.
KwikPeg strives to provide the best video performance possible
by providing fully tuned and optimized driver templates for each
video controller class.
There are a growing number of KwikPeg screen drivers
for specific video controllers. Each screen driver is ready
for use on the target hardware platform on which it was tested.
Note that all available screen drivers are NOT delivered with
KwikPeg. However, any of these fully functional screen drivers
is available upon request.
 |
Video Controller |
 |
PC compatible VGA Controller
(for use in real or protected mode) |
 |
PC compatible SVGA Controller
(for AMX 86 real mode use only; requires PC BIOS access) |
 |
Win32 for PC running Microsoft Windows
(also used by KwikPeg GUI Testing facility) |
 |
EPSON SED8106 8-bpp VGA LCD/CRT Controller |
 |
EPSON SED1330 and SED1353 4-bpp LCD Controllers |
 |
EPSON SED1354 8-bpp LCD/CRT Controller |
 |
EPSON SED1355 8-bpp LCD/CRT Controller |
 |
EPSON SED1356 8-bpp LCD/CRT/TV Controller |
 |
Cirrus Logic GD5430 8-bpp PCI Controller |
 |
Chips & Technology 65535 and 65545 Controllers |
 |
Sharp LH77790 LCD Controller |
 |
Motorola MPC823 PowerPC LCD Controller |
 |
Silicon Motion LynxEM+ LCD/CRT Controller |
KwikPeg provides other screen drivers, called
template drivers, which are ready for use with specific
types of video controllers. These template drivers
include generic support for each screen resolution
and color depth handled by the video controller.
The template drivers delivered with KwikPeg provide support
for the following types of video output:
 |
Video Controller |
 |
Linear monochrome |
 |
Linear 2 bit-per-pixel grayscale or CGA |
 |
Linear 4 bit-per-pixel |
 |
Linear 8 bit-per-pixel |
 |
Linear 16/32 bit-per-pixel |
The following template drivers operate in profile mode to
support the physical rotation of the display device.
The direction of rotation, clockwise or counter-clockwise,
is defined in the template driver header file.
Unless altered by you, the rotation is clockwise.
 |
Video Controller |
 |
Profile monochrome |
 |
Profile 2 bit-per-pixel grayscale or CGA |
 |
Profile 4 bit-per-pixel |
 |
Profile 8 bit-per-pixel |
 |
Profile 16/32 bit-per-pixel |
 |
Hardware Acceleration
|
KwikPeg takes full advantage of video controllers which support
hardware acceleration capabilities such as hardware cursor or
hardware bit-blit. These capabilities are always provided in the
display driver software or via software emulation if the video
controller does not provide a specific hardware feature.
When video hardware acceleration is available, some of the functions
in the display driver are minimized as they take advantage of the feature.
Many embedded controllers such as the Elan, ARM and PowerPC
processors provide integrated video control functionality with few
acceleration features. These controllers work best using one of
the screen driver templates provided with KwikPeg.
Several popular external video controllers are
used in embedded applications when higher performance
is required.
Most of the KwikPeg video device drivers for these external video controllers
include PegScreen driver classes tuned to take advantage
of the available hardware acceleration features.
 |
Double Buffering
|
Double buffered video output is optionally supported in every
KwikPeg configuration. Double buffering allows all intermediate
drawing operations to be performed to an off-screen or local
memory buffer. At the conclusion of a drawing operation, the
invalidated region of the local memory buffer is transferred
to the visible video memory, using hardware bit-blitting
if provided.
This mode of operation provides flicker free animation and scrolling.
Double buffered output, while always supported, is not required.
KwikPeg can be configured to unconditionally draw directly to visible
video memory.
 |
PC Prototyping Screen Drivers
|
It is often useful to use KwikPeg to prototype your GUI on a
conventional desktop PC before your final target hardware becomes
available, thereby allowing software and hardware development to
proceed in parallel, shortening the time to market for a new design.
All of the video device drivers provided with KwikPeg can be used with the
KwikPeg GUI Testing facility to test your GUI on the Windows desktop.
Custom screen drivers can be derived from the screen driver templates
provided with KwikPeg.
These template drivers are designed to work with any processor architecture
which supports direct, linear access to the video memory buffer.
Examples of such architectures include:
 |
80x86 systems operating in real mode with <= 64Kb of video memory |
 |
80x86 systems operating in protected mode using the
32-bit flat model |
 |
Motorola 68xxx and 683xx (CPU32) |
 |
Motorola ColdFire |
 |
Motorola MPC821, MPC823 PowerPC |
 |
ARM, StrongARM and XScale |
 |
MIPS32 |
 |
AMD Elan |
To adapt one of the KwikPeg screen driver templates, you must edit
the following three functions. You can usually follow the example
provided by the fully implemented screen drivers which are provided
with KwikPeg for most common controllers and display devices.
 |
GetVideoAddress() - This function must return the base address
of the video frame buffer. The implementation varies depending on
architecture and operating mode. |
 |
SetPalette() - This function must program the controller
palette registers when operating in a palletized mode.
For low end video output devices and for
16-bit and 24-bit color output
for which no palette programming is necessary, this function is not
required. |
 |
ConfigureController() - This function must configure the video
controller registers to generate controller output signals
which match the timing specifications of the display device. |
 |
Mouse
|
KwikPeg includes complete support for mouse or joystick input.
The driver can be configured to draw various pointer bitmaps or
to use hardware cursor capabilities if they exist.
Mouse input drivers are provided for several different platforms.
The KwikPeg Configuration Manager allows you to exclude mouse support
from the KwikPeg Library if it is not required, thereby minimizing
your memory footprint.
 |
Mouse connected to an Intel 8250 or NS16550 compatible serial interface |
 |
Mouse connected to a PC compatible PS/2 keyboard/mouse interface port |
 |
Mouse accessed using PC BIOS services (for AMX 86 only) |
 |
Touch Screen
|
Touch Screen input is fully supported. When operating
with a touch screen, KwikPeg can be configured to eliminate the drawing
of the mouse pointer and the highlighting of
the object that has input focus. These options minimize your memory
footprint and reduce the drawing overhead when a touch screen is used.
When used with a touch screen, KwikPeg eliminates all pointer movement
tracking and restricts pointer events to simple touch and release operations.
 |
Keyboard / Keypad
|
Full keyboard support is available for navigation through menus,
windows, and dialogs. Keyboard support may range from a full QWERTY
keyboard to a small set of user defined membrane keys.
Full navigation and operation can be accomplished with as few as
three unique input keys. The KwikPeg Configuration Manager allows
you to exclude keyboard support from the KwikPeg Library if it is
not required, thereby minimizing your memory footprint.
 |
Terminal connected to an Intel 8250 or NS16550 compatible
serial interface |
 |
Keyboard connected to a PC compatible 8042 keyboard controller |
 |
Keyboard accessed using PC BIOS services (for AMX 86 only) |
 |
Keyboard accessed using AMX 86 PC Supervisor services |
 |
Soft Keys
|
KwikPeg supports the use of soft keys such as membrane keys placed
at the perimeter of a display screen. When soft keys are used, touch and
release events are generated. The event is correlated to the screen position
adjacent to the membrane key which produced the event.
KwikPeg is thereby fooled into operating as though a touch screen is being
used. Other input devices can also be serviced using this technique.
|