The Foleo's Hardware

A project log for Restoring the Palm Foleo

From 2005-2007, I worked on a Linux-powered netbook that never got an official release. Now I'm making it work again.

Ben CombeeBen Combee 10/22/2020 at 22:400 Comments

Keyboard and Pointer

The keyboard for the Foleo was a custom design, featuring a trackpoint-style mouse pointer in the middle, and "Menu" and "Apps" buttons at the bottom where the "Ctrl" and "Alt" keys were on a standard keyboard.  IIRC, the Menu key could actually be used as Ctrl in the Terminal app and we mapped Menu+C/X/V to the expected shortcuts for copy/cut/paste.  Just above the keyboard were separate power and email buttons, either of which would turn on the Foleo.  Below the keyboard was the right and left mouse buttons, the scroll wheel, and the app switch buttons (which worked to switch quickly among open applications).  The wheel supported a "zing" gesture, where a quick flick up or down on the wheel was supposed to act like page up and page down.  I personally worked on the zing detection code in the UI framework but it never worked very well, mostly because the wheel didn't send very many events as it moved, so it was hard to distinguish between a zing and a normal movement.


One of the inspirations for the project at Palm was the availability of inexpensive 10" screens from portable DVD players.  We originally targeted a 800x480 screen using the Intel PXA270 as the CPU and display processor.  However, we found the resolution to be limiting, and midway through the project, we switched to 1024x600 (a size that ended up being used on many netbooks in the following years).  At that resolution, the PXA270's LCD output was getting strained, so an Intel 2700g graphics coprocessor was added, and we had one of the creators of DirectFB come on as a contractor to add support for the blit and draw hardware primitives.

In the last few months, after we'd announced it but before it shipped, I was working on trying to get some sort of image and video acceleration going.  The 2700g supported hardware decoding primitives for MPEG-1, MPEG-2, and MPEG-4, and I spent a while going through the DCT code to attempt to get it to also handle JPEG acceleration. We tried to get a licensed version of Flash implemented to support YouTube (which had just become big in 2007), but we were never able to get the frame rate to be watchable.

Compact Flash Slot

Tucked away behind the battery was a CF slot.  This was our solution to expanding the internal flash beyond 64MB. I worked on this project for a while, and we ended up going with a version of UnionFS, a filesystem for Linux that allowed creating an overlay of an existing filesystem using another filesystem.  This proved to be more complicated than expected due to the driver bugs as well as gracefully handling the situation where a user removed a CF card after it had been joined with the machine.

Side Panel

On the right side of the machine was a SD card slot, a display connector, a USB 2.0 A port, and the power jack. These all mostly worked without any significant software support.  We had to handle SD card and USB drive removal, so had a way of showing what was mounted in the main UI, along with a way to un-mount it safely, but we also tried to keep those mounted as read-only most of the time, letting apps switch to read/write briefly.

The display connector was tiny and connected to a VGA dongle that was supplied with the unit. AFAIK, the VGA analog signals are all on the connector, we just couldn't fit a 15-pin D-SUB connector due to the device's thinness.