Interactive devices on embedded Linux

Contrary to what I had originally believed, building an interactive, graphical device on embedded Linux (uCLinux, specifically) was probably easier than on Windows CE. While the standard gumstix distribution isn't geared for a system with a display, support for standard Linux system devices like the framebuffer means that it is relatively easy to put graphics on a screen.

LCD setup

LCD setup is much easier in Linux thanks to the PXA255 LCD driver taking in as command options all of the necessary parameters required to operate the LCD. The instructions in the display section of the Gumstix support wiki are complete and easy to follow.

Bluetooth PAN

The different faces in the device communicate over a Bluetooth PAN (essentially TCP/IP over the Bluetooth stack). While establishing a single point-to-point connection over PAN is relatively trivial, bridging the individual connections so that multiple bluetooth devices can communicate with each other as members of the same network is a bit more tricky. In short, it requires creating individual PAN connections, and then bridging them together using the 802.1d bridging capabilties in the linux 2.4.x (or newer) kernel. Full details are on this page: HowTo set up common PAN scenarios with BlueZ's integrated PAN support

Graphics and Interactivity

While it is possible to directly write data to the framebuffer device to display graphics, it is much easier to use some type of windowing toolkit. I believe it is possible to run some variant of X on the gumstix, but we elected to use the Qtopia libraries. Using Qtopia saved a great deal of time because it provides many objects for various data structures, painting, and file management. Also, since Qtopia implements and operates with an event loop, it makes programming extremely similar to that on other graphical platforms.