Building a networked digital photo frame from an old laptop

Wednesday, June 18, 2008

Building a networked digital photo frame with DOS


Background

Back in 2003 I was given an old laptop. I have a hard time turning down any offer of a free electronic device and this was one of those times. I didn't really know what to do with it then, but I took it thinking there must be something interesting I could use it for. For about 6 months, it just sat in my closet with all the other old junk I haven't been willing to part with yet.

A few years later (2006) I finally decided that the best use for this machine would be to build a digital photo frame out of it. I had seen a few articles where other people described doing this, and it seemed like a worthwhile project. The only commercially available versions at the time had much smaller screens and were not cheap. I searched the internet for all the articles I could find about this sort of project, and found many great descriptions and some beautiful craftsmanship.

I decided to document my work as when I found that none of the other articles were quite what I wanted. Many people were using hardware that was newer than anything I would ever dream of tearing apart to build something like this. Others were using the Windows OS which I wanted to avoid if possible.

The Goal

I wanted a photo frame that would look attractive and be very simple to use.
It needed a network connection so that I could easily change the photos by just
updating them on my web server. I also wanted to use only free software to keep this inexpensive and so that other people could easily adapt this for their own use.

The Hardware

The laptop was an old Compaq Armada 1120 from around 1996 with:
  • 24 MB of RAM
  • 810 MB hard drive
  • 10.4 inch color STN display
  • 1.44 MB floppy disk drive
  • two PCMCIA slots
  • a trackball
  • Pentium 100 Mhz processor
Clearly this isn't state of the art anymore, which is why I got it for free!

Since I still needed a network adapter, I purchased a Hawking 10/100 PC card from Newegg that was compatible with the pcnet_cs Linux PCMCIA driver.

The Software

The software is the most important part of this project. Without something that is easy to use, unobtrusive, and attractive, the whole project would not have resulted in a useful device. This is also the part that took the longest to find an acceptable solution.

I decided that I would use wget to retrieve photos from my website, and a full screen console slide show program to display the photos. I really wanted to use Linux for the OS. I wanted to find a small distribution that could run from a floppy, and would have PCMCIA networking support, a simple slide show program, and I would only need to make a few custom shell scripts to get exactly what I wanted.

I tried a number of Linux floppy distributions but I could not find any that supported the network card well. Those that did, lacked a packaged slide show program so I would need to compile my own from the source. Since I didn't have many good experiences compiling packages from source code I wanted to avoid that if possible.

I gave up on the floppy Linux distribution idea and moved on to looking for a slightly larger (but still small) distribution that could fit on one of my spare 16 or 32 MB compact flash cards. I even purchased a compact flash to IDE adapter on ebay to try to make this work. As with the floppy search there were few options and none were very simple.

I finally gave up on the quest to use Linux for this project after I installed Debian on the original 810 MB hard drive, and discovered that the Cirrus Logic GD 7543 display chipset was not supported by the VESA framebuffer drivers in the Linux kernel. This meant that I would need to step up to a X-windows environment in order to have any hope of using Linux. Since this laptop has some serious memory limitations, I decided to just try to find something else.

What I found was FreeDOS. I choose this instead of the old MS-DOS because I wanted the option to redistribute this software, to make it easier for other people to build their own digital photo frames. FreeDOS is pretty cool, at least for DOS. For the slideshow program I found LxPic. It's a great little program that can do a full screen slide show of JPEG files easily.

With these two software pieces, I could boot from a floppy and play a slide show of all the photos on the floppy or hard drive. That was close, but I wanted network support too. To get the photos from the website I needed to get my network card working and a have program to retrieve the files. As it turns out there's a DOS version of the wget program that I had planned to use with Linux, so it was just what I needed.

The only other piece I needed to make the network connection work was the DOS network drivers that were provided with my PCMCIA Ethernet card. I ran the installer for the network driver and ended up getting two files and two lines added to my autoexec.bat script.

LANEN
LE100PD 0x62 5 0x300

Putting all these pieces together didn't take long and after a bit I had a working floppy disk that would boot the computer, download the photos, and play a slide show continuously. Pretty cool!

One thing still needed some work. The laptop kept turning off the screen after about 10 minutes, because there was no mouse or keyboard activity. I tried adjusting this in the BIOS, but that had no effect. I found a bunch of DOS programs to simulate keystrokes, and picked one called keypress.com (keyprs30.zip) which solved the problem nicely.

The Construction





The final product



Concluding thoughts

The general concept looked and worked great. There was a heat problem that caused the screen to fade to black after about 20 minutes of running. I think this was a result of the close proximity to the motherboard, but I haven't had time to get back to this project and fix it. If you have any suggestions on how to solve that issue please comment on this post. Some options would be to add a fan and cut some vent holes, or just put a foam core board divider to insulate between the screen and the main board. I'll update this post when I solve this last issue.