• Software

    Ben Combee10/23/2020 at 05:17 0 comments

    The Foleo was the first embedded Linux device I worked on in my career.  When I first joined the team, we were still evaluating software stacks.  I'd been recruited out of developer relations at PalmSource by one of my old contacts who had been at Handspring which had then merged with the old Palm hardware group to form palmOne.  I'd been supporting devs on Palm OS for several years, but was looking forward to defining a new generation of hardware.

    Originally, we'd been looking at using Gtk+ as the UI widget framework with it drawing to the device framebuffer, but it was proving to be heavier.  We ended up keeping the glib part of GTK as a system library for data structures, but going with DirectFB as the graphics engine.  On top of DirectFB, we took the LiTE widget system, then built our own libraries called Hx and HxUI.  The "Hx" name comes from an early code name of the device, "Hollywood".  As names got leaked, we'd take on other code names, including McGuffin and Falcon.  For a few weeks, the device's boot screen was based on this graphic:

    We didn't hide the fact that we were using Linux.  We had a terminal emulator based on DFBTerm that was a standard system app.  When you started it, you'd be right at the Linux prompt, although I think you didn't have root until you did a sudo command.  It was pretty easy to recompile common command line tools to run on it, and I had both Frotz and Nethack working on it in the first year.

    Our big applications included a version of Palm's VersaMail software that would use Bluetooth to sync a mail database with your Treo phone.  When this worked, it was really great; you literally could be looking at a mail on your phone, stick the phone in your pocket and open up the Foleo, and be replying to the message in a matter of seconds.  Unfortunately, sync is a notoriously hard software problem.  It also couldn't run in standalone mode, so even if you had a WiFi connection, it couldn't talk over POP or IMAP to your mail server; it relied on the phone to be the connection to ensure everything stayed in sync.

    We also had a suite of office applications ported from one of the Palm OS suite, a PDF viewer, an image viewer, a calculator, a file manager, the settings app, an application installer, and a web browser.  If I remember correctly, our original web browser was a port of WebKit, but it was proving to be slow, so we swapped it out for a version of Opera that we licensed.

    In the months before the Foleo was to be released, we worked with many 3rd party developers that had supported Palm OS with great applications, and we had several games, movie and audio players, personal information managers, and image editors nearly ready to go when the project was cancelled.

  • The Foleo's Hardware

    Ben Combee10/22/2020 at 22:40 0 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.

    Screen

    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.

  • Restoring the surface

    Ben Combee10/22/2020 at 17:58 2 comments

    The Foleo used the soft-touch paint on its surface that Palm also used on their Treo 755p phone.  Unfortunately, this paint has the tendency to get very tacky and unpleasant to handle after years in storage, and all of my devices are suffering from that to different degrees.

    Fortunately, this was only the exterior, so the inside with the keyboard and screen is still fine.

    The best treatment I've found so far is to rub the surface with a mixture of water and baking soda.  That seems to remove much of the sticky paint, leaving it much more usable. (Thanks to Dimity Grinberg for the formula)

    Here a picture of one of my device's exterior that I've not treated. The They Might Be Giants sticker was one I had on my personal development DVT device to tell it apart from other models.  It's been in a styrofoam box, so you see where the residue has pulled off some of the pellets.

  • Exploring the battery connector

    Ben Combee10/22/2020 at 17:49 1 comment

    The Foleo's battery is identified as Palm part# 157-10039-00, a li-ion battery with rating of 7.2 V and 3500 mAh.  It's a 2P2S configuration - the type is LP103450SP-2P2S.  All of my battery packs have self-discharged into a unrecoverable state, and no off-the-shelf alternatives are available.  Physically, it looks like the Palm engineering team took the cells from four Treo battery packs (3.6 V, 1750 mAH) and wired them up in a 2P2S config.

    The connector to the main board is a set of five contacts arranged as

    1 - Vin

    2 - plastic pin
    3 - ???
    4 - ???
    5 - ???
    6 - GND

    From testing with a bench power supply, I'm able to power a unit with 7.2V applied to Vin and ground connected to GND.  The unit would act as if it was low battery from 6V to 7V, with no LED blinking at 5V.  I don't know much about the charging circuit; there's an adapter input on the side of the Foleo which provides 12V 1.5A with a center-positive barrel jack.  With no battery installed, this power circuit is sufficient to bring up a Palm logo on the screen, but some early system check fails and the device resets.