- Our Digital Picture Frame Plus -
- Technical Notes -





Specs for the laptop which has been cannibalized :
Fujitsu Lifebook C6556
Pentium III 650 MHz
Bus Speed 100 MHz
Max Supported and Installed RAM 192 MB
TFT Active Matrix 14.1 in. 1024x768 24 bit

1. The program is about 7000 lines of C code with no external code except linking the X11/math/jpg/png/tiff libraries.
2. The program supports dynamic scaling of the pictures from JPG, PNG and TIF formats.
3. I wrote an on-the-fly font scaler with full alpha support to 100% control blending.
4. I wrote my own httpget routine to have a lot more responsive system and better error reporting.
5. The system is customizable to behave differently in different times of the day, driven from an action table.
6. The bitmaps are embedded to reduce disk access and are stored with alpha information for proper blending.
7. Most information is aquired from public websites ( checked for policy ), the moon and sun computations are local.
8. The directory where the pictures are loaded from are mappable in Windows through SAMBA, thus drag & drop from Windows is available.
9. VNC server is running thus connecting and remote controlling to the DPF is very easy.


Distros tried :
- Hannah Montana Linux ( ubuntu 9.04 ) -> No Graphics -> Out of memory for installer.
- Linux Mint 7 : 2.6.28-11-generic, 5MB free RAM, Removing mono, /usr/bin/python*
  -> 46MB free RAM, networking supported by default.
- Linux Mint 5 : 2.6.24-16-generic, 13MB free RAM -> Removing gnome-do/Do.exe, mono,
  /usr/bin/python*, tracker*, bluetooth, screensaver -> 54MB free RAM, networking supported by default.
- Easy Peasy : fails to install due to low memory
- Android LiveCD runs perfectly, however, I prefer C coding...
- SliTaz packages : 2.6.25-5-slitaz -> 126MB free RAM
	To have my Belkin Wireless ME1001-USB recognized ( ZyDas zd1211b chipset ) :
		mkdir /cdrom
		mount /dev/hdb /cdrom -t iso9660
		cd /cdrom/packages/2.0
		tazpkg install ./usbutils-0.73.tazpkg
		tazpkg install ./libusb-0.1.12.tazpkg
		download firmware from http://sourceforge.net/projects/zd1211/develop   ( USB WLAN Linux Driver )
		mount /dev/sda /mnt
		bunzip2
		untar into /lib/firmware
		mv zd1211-firmware zd1211
		Netbox from Menu / Wireless Manager / Drivers : set zd1211rw as module.
		iwconfig ...
		vi /etc/network.conf   -> eth0 -> wlan0  wifi "yes"
		/etc/init.d/network.sh restart

	Removed packages :     asunder, cdparanoia, cdrkit, conspy, get-OpenOffice3, isomaster, libcddb
	                       locale-de, locale-es, locale-pt_BR, mhwaveedit, mtpaint, nano, notecase
	                       osmo, sudoku-savant, transmission, web-applications, xpad
	Added standard pckgs : x11vnc, samba, swat, mplayer, libtiff
	Added devel packgs :   binutils, electric-fence, gcc, glibc-dev, htop, jpeg-dev, libpng-dev
	                       linux-headers, linux-video, make, memtest, tar, tiff-dev, xorg-libX11-dev
	                       xorg-xproto, xorg-xset, zlib-dev
	Edited :
		~/.config/openbox/autostart.sh	// added x11vnc, removed pcmanfm and lxpanel
		/etc/network.conf				// Checked and updated with AP( TYPE_WEP )
		/etc/rcS.conf
			// Took out kernel logging with KERNEL_LOG_DAEMONS="no"
			// removed the 1394, lighthttpd and added samba to RUN_DAEMONS="
		tazx						// to set X
		tune2fs -i 99999999			// to make sure that the CF is not bothered
		tune2fs -c 99999999
		/etc/hosts.deny to ALL and /etc/host.allow for local only



Samba Client on Linux :
To test if your Linux machine sees the shares on the Windows box: smbclient -L  -U 
1. Make a directoy for the mountpoint: mkdir /mnt/
2. Mount the share: mount -t smbfs -o username=,password= /// /mnt/ Note: The syntax -username=,password= saves the password.
3. Create a symbolic link to the mounted drive: ln -s /mnt/ /

On coding :
- Wrote my own controlled HTTP_get routines, using socket in O_NONBLOCK mode, and using select() on connect() to handle controlled timeouts. Extremely detailed error reporting is also supplied.
- X11 only, no Xt or any other windowing related helper libraries are used.
- Main XEvent loop is non-blocking, using ConnectionNumber() to aquire descriptor than using select() with timeout on it to periodically check if information update is needed.
- No alarm() is used, XPending() is called if select() triggers on the display descriptor.
- Using 24bit RGB buffer for image manipulations and pixmaps for screen transfer. Finding best match with XListPixmapFormats() and doing proper bitcopy from the RGB buffer to the buffer associated with the pixmap...



Go back to the Digital Picture Frame Project page.