Using a PDA as an External LCD Display

Controlling foobar2000 with PalmOS

TODO: Adjust URL for images. Host extra files.

Overview

One of my projects at the end of 2022.

Note that this project doesn't set your Palm up to be a true second display for your computer like Apple's Sidecar, but rather transforms it into a mini LCD much as you'd see on dedicated electronics, radios, or older portable computers (along with a series of touch inputs). Practically, this is less of a loss than you'd think. Legacy PalmOS devices often had a resolution of 160x160, so in a modern context with spacious UIs, you'd probably end up using it as a status panel similar to this anyway.

↳ Setting up LCDSmartie.

As this is essentially a long chain of discrete interconnects and emulations, I've split this guide up into several self-contained steps. Depending on what you're trying to achieve, you might want to complete them all or only some.

  1. Required Software
  2. Setting Up the Palm
  3. Host Machine Setup w/ LCDSmartie
  4. Connecting foobar2000 to LCDSmartie
  5. Putting It All Together
  6. Tidying Up

Let's jump right in!

1. Required Software

Note: This guide assumes a Windows 10ish environment (given the focus on foobar2000). It's on my agenda to give this a spin using equivalent tools on Linux, and I'm reasonably confident that a matching flow is entirely possible. This might take extra effort on Macs.

I've split the requirements by goal:

Using the Palm as an LCD:

  • PalmOrb - LCD Display Emulator
  • ComLink (Sometimes Optional) - PalmOS USB/Serial Router
  • LCDSmartie - Hub; Windows-only, but similar Linux tooling exists[1]

Interfacing an LCD with foobar2000 (or Winamp):

This also assumes you have a working PalmOS device (OS2+) and are generally familiar with its operation, including working Hotsync and USB drivers. If it's been a while and you're breaking an old handheld out of the closet, it's surprisingly easy to get it running again and PalmDB has a great guide.

2. Setting Up the Palm

↳ PalmOrb + ComLink

Context

We'll start by downloading a copy of PalmOrb. This emulates a 4x20 Matrix Orbital LK204-25 LCD on the Palm's display, including keyboard input that you can send back to the host machine. I would also recommend reviewing the instructions as there are certainly idiosyncracies!

You'll also potentially need a copy of ComLink.[3] This internally routes USB and serial calls within PalmOS, which can be helpful given the generally sketchy USB support of PalmOS. Whether you need it and in what form varies by device.[4] I've been using this setup across a few Handspring devices (~OS3.5.XH) and can confirm that the config posted by Itzo at the bottom of this page works. Non-Handspring devices of a certain age may need X-Master or Hackmaster to fully enable ComLink. Check the readme!

If you're on an older 68k device (<OS5.0), I'd Hotsync both. If you're on a newer device (T-Series, etc.), maybe you can get away with just PalmOrb alone, though I haven't had the opportunity to try that yet.

Setup

  1. Hotsync PalmOrb +/- ComLink
  2. In PalmOrb, verify under Menu / Serial that it's set to Cradle/Auto and 19200 baud. You may be able to directly set it to USB (or Serial) on other devices. Going directly to USB on my Handsprings resulted in an error, hence the next step.
  3. If, after setting up LCDSmartie (see Step 3), you can't communicate with the Palm, set up ComLink:
    • Hotsync 'ComLink.prc' and 'ComLink Library.prc'. Also sync the hack and integrate w/ Hackmaster if using a non-Handspring.
    • Enable when you want to use it. Don't forget to turn off Hotsync Manager on your PC.
    • Select USB as the communication port (assumning a USB dock)

That's all for now on the Palm side. For additional detail, PalmOrb's manual is very helpful.

3. Host Machine Setup w/ LCDSmartie

↳ Setting up LCDSmartie.

We'll be using LCDSmartie as our hub on the host machine for pushing data to the Palm/display. LCDSmartie supports a number of interesting (if aging) integrations like fetching sysinfo from the host machine (RAM, etc.) and support for email (POP3) and RSS, though you may need to host your own HTTPS relay for those nowadays.

LCDSmartie doesn't directly interface with foobar, but it does know how to talk to Winamp, so that's our way in.

Before that, however, we need to make some tweaks in LCDSmartie's setup panel:

  1. Display Settings
    • Plugin Tab / Display Plugin: matrix.dll
    • Plugin Tab / Startup Parameters: USB
    • Screen Tab / LCD Size: 4x20
  2. Screen Settings
    • Here you can customize. By default, several screens are enabled. You can flip through them with the "Screen" counter and get a sense of how things work.
    • In general, it's like any other templating system, and if you're a regular foobar user you've probably done plenty of this with your library UI.
    • If it's a bit much right now, feel free to just disable every screen but #1 and simply type 'Hello World' for testing.
  3. Suggestion: Add splittitle.dll
    • Optionally, add splittitle.dll to the plugins folder next to your LCDSmartie executable.
    • This lets you split a line on a specific character, which can be helpful for things like the upcoming Winamp/foobar integration where we'll only have one string to work with for things like Artist, Title, Date, etc.
  4. Optional: Actions
    • As desired, tweak the default inputs.
    • PalmOrb will give you quite a few configurable buttons on the device itself. This is where you can map these to media controls, toggle the backlight, and more.

At this point, if you're not looking to view or control your media player, you can configure the display to do whatever suits you and skip ahead to Step 5.

4. Connecting foobar2000 to LCDSmartie

Almost done!

In foobar, install shpeck. Technically this is a plugin that emulates Winamp visualizations, but it also exposes the current track in a way that LCDSmartie can read.

Once shpeck is installed, go to its settings panel (Libary/Configure/Visualisations/Shpeck). From here, configure the string however you'd like. Note that you only get this single string, so this is where adding splittitle to LCDSmartie becomes helpful—you can break up a string based on a key substring and put different parts on different LCD lines.

I've formatted mine as follows: %title%' || '%artist%', '%date%

As shown in the LCDSmartie screenshot for section 3, I'm splitting it on the "||" characters so that the artist and date render on the second line.

Also, thanks to Jonathan McCrohan for blogging about this step of the puzzle back in 2010. I'm defintely using his method almost verbatim here.

5. Putting It All Together

Let's fire it all up! Order of operations does matter a bit. Here's a path that works for me:

  1. Quit Hotsync Manager, PPP, etc.
  2. Disable IR receive in PalmOS
  3. Dock the device
  4. Enable ComLink as USB
  5. Start PalmOrb (you should hear the Windows chime as it mounts)
  6. Start LCDSmartie

If all goes well, enjoy!

6. Tidying Up

A few additional notes from my experimenting:

  • I have only tested this on 68k Palms via USB. In theory, a variation of this should work via IR, serial, and bluetooth.

  • Accordingly, I don't know how this works on ARM PalmOS5+ devices. It's probably easier.

  • There's a chance that your device will get its connections confused after a while. If you commonly switch between HotSync, PPP/Networking, and LCD, you may run into a snag where it believes the comm port is already in use and refuses connections. A soft reset is usually all it needs.

  • Remember to quit Hotsync Manager prior to switching to LCD mode. It'll be claiming that single connection for its own. Having beam/IR receive on also seems to cause serial port issues and may require a soft reset after you turn it off.

If you test out your own configuration or have any additional insights, feel free to reach out!

Additional Thanks

Many thanks to Damien Guard for painstakingly reproducing the originally single-size, raster PalmOS system font into modern formatting. The alt visual mode on this page would be much harder to read without it.

Footnotes:


  1. See also the PalmOrb FAQ. On Linux, lcdproc is probably a good start. ↩︎

  2. splittitle.dll for Shpeck is useful for multiline output to the LCD and I found it rather difficult to source, so I'm hosting it here. ↩︎

  3. I believe this project was originally created by Matthias Ringwald, but the PalmGear link has since decayed. I can't necessarily vouch for the copy I'm hosting here since finding old Palm files often involves scrounging early-00s freeware sites (and the security risks that entails). However, this seems like the right, non-dangerous file. ↩︎

  4. My general guess is that newer (ARM/OS5+?) devices might work with PalmOrb alone, but older devices need this to "un-emulate" the USB-to-Serial emulation [that I think] their dock is doing. ↩︎