diff -Nuarp foo2zjs.orig/58-foo2zjs.rules foo2zjs/58-foo2zjs.rules --- foo2zjs.orig/58-foo2zjs.rules 1970-01-01 01:00:00.000000000 +0100 +++ foo2zjs/58-foo2zjs.rules 2005-09-25 12:56:11.000000000 +0200 @@ -0,0 +1,3 @@ +BUS=="usb", KERNEL=="lp[0-9]*", SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="0517", RUN+="/sbin/foo2zjs-loadfw 1000" +BUS=="usb", KERNEL=="lp[0-9]*", SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="1317", RUN+="/sbin/foo2zjs-loadfw 1005" +BUS=="usb", KERNEL=="lp[0-9]*", SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="2b17", RUN+="/sbin/foo2zjs-loadfw 1020" diff -Nuarp foo2zjs.orig/INSTALL foo2zjs/INSTALL --- foo2zjs.orig/INSTALL 2005-09-25 12:16:59.000000000 +0200 +++ foo2zjs/INSTALL 2005-09-25 12:53:05.000000000 +0200 @@ -86,15 +86,23 @@ HP LASERJET 1000/1005 NOTES # make install-hotplug + On Linux with USB connected printer and udev: + If you are running Linux and the printer is connected via USB, you + can arrange for the firmware to be automatically downloaded to the + printer by performing one more installation step: + + # make install-udev + This udev-loading is more reliable than the hotplug-loading + On another OS or with a parallel port connected printer: You must send a firmware file to the printer each time you power it up. If you downloaded the extra files for the HP above, a typical command line to load the firmware would be: - cat /usr/share/foo2zjs/firmware/sihp1000.dl > /dev/usb/lp0 + cat /lib/firmware/sihp1000.dl > /dev/lp0 or: - cat /usr/share/foo2zjs/firmware/sihp1005.dl > /dev/usb/lp0 + cat /lib/firmware/sihp1005.dl > /dev/lp0 NOTE: The original HP files are named '*.img'. Sometimes HP supplies these files ready-to-download to the printer, sometimes they are raw diff -Nuarp foo2zjs.orig/INSTALL.in foo2zjs/INSTALL.in --- foo2zjs.orig/INSTALL.in 2005-09-25 12:16:59.000000000 +0200 +++ foo2zjs/INSTALL.in 2005-09-25 12:52:50.000000000 +0200 @@ -86,15 +86,23 @@ HP LASERJET 1000/1005 NOTES # make install-hotplug + On Linux with USB connected printer and udev: + If you are running Linux and the printer is connected via USB, you + can arrange for the firmware to be automatically downloaded to the + printer by performing one more installation step: + + # make install-udev + This udev-loading is more reliable than the hotplug-loading + On another OS or with a parallel port connected printer: You must send a firmware file to the printer each time you power it up. If you downloaded the extra files for the HP above, a typical command line to load the firmware would be: - cat /usr/share/foo2zjs/firmware/sihp1000.dl > /dev/usb/lp0 + cat /lib/firmware/sihp1000.dl > /dev/lp0 or: - cat /usr/share/foo2zjs/firmware/sihp1005.dl > /dev/usb/lp0 + cat /lib/firmware/sihp1005.dl > /dev/lp0 NOTE: The original HP files are named '*.img'. Sometimes HP supplies these files ready-to-download to the printer, sometimes they are raw diff -Nuarp foo2zjs.orig/Makefile foo2zjs/Makefile --- foo2zjs.orig/Makefile 2005-09-25 12:16:59.000000000 +0200 +++ foo2zjs/Makefile 2005-09-25 13:39:35.000000000 +0200 @@ -9,6 +9,10 @@ VERSION=0.0 PREFIX=$(DESTDIR)/usr/local PREFIX=$(DESTDIR)/usr +# USB_PRINTERID is also installed there because it is needed by the FWloader +FWLOADERDIR=$(DESTDIR)/sbin +FIRMWAREDIR=$(DESTDIR)/lib/firmware + # Pathnames for this package... BIN=$(PREFIX)/bin SHAREZJS=$(PREFIX)/share/foo2zjs @@ -214,6 +218,13 @@ install-prog: # Install driver, wrapper, and development tools # install -c $(PROGS) $(SHELLS) $(BIN)/ + + [ -d $(FWLOADERDIR) ] || install -d -m 755 $(FWLOADERDIR)/ + # + # We need usb_printerid before /usr is mounted. + # + [ -x $(BIN)/usb_printerid ] && mv $(BIN)/usb_printerid $(FWLOADERDIR)/usb_printerid + # # Install gamma correction files. These are just templates, # and don't actually do anything right now. If anybody wants @@ -293,15 +304,15 @@ install-extra: fi; \ done # foo2zjs Firmware files (if any) - install $(LPuid) $(LPgid) -m 775 -d $(SHAREZJS)/firmware/ + install $(LPuid) $(LPgid) -m 775 -d $(FIRMWAREDIR)/ for i in sihp*.img; do \ if [ -f $$i ]; then \ base=`basename $$i .img`; \ ./arm2hpdl $$i >$$base.dl; \ - install -c -m 644 $$base.dl $(SHAREZJS)/firmware/; \ + install -c -m 644 $$base.dl $(FIRMWAREDIR)/; \ fi; \ done - install -c -m 644 hp1020.img $(SHAREZJS)/firmware/sihp1020.dl + install -c -m 644 hp1020.img $(FIRMWAREDIR)/sihp1020.dl # foo2oak ICM files (if any) install $(LPuid) $(LPgid) -m 775 -d $(SHAREOAK)/icm/ @@ -313,6 +324,13 @@ install-hotplug: ln -sf $(USBDIR)/hplj1000 $(USBDIR)/hplj1020 install -c -m 755 hplj.usermap $(USBDIR)/ +UDEVDIR=$(DESTDIR)/etc/udev/rules.d +install-udev: + [ -d $(FWLOADERDIR) ] || install -d -m 755 $(FWLOADERDIR) + install -c -m 755 foo2zjs-loadfw $(FWLOADERDIR) + [ -d $(UDEVDIR) ] || install -d -m 755 $(UDEVDIR)/ + install -c -m 755 58-foo2zjs.rules $(UDEVDIR) + clean: -rm -f foo2zjs zjsdecode -rm -f *.zc *.zm diff -Nuarp foo2zjs.orig/foo2zjs-loadfw foo2zjs/foo2zjs-loadfw --- foo2zjs.orig/foo2zjs-loadfw 1970-01-01 01:00:00.000000000 +0100 +++ foo2zjs/foo2zjs-loadfw 2005-09-25 12:57:45.000000000 +0200 @@ -0,0 +1,117 @@ +#!/bin/sh + +# foo2zjs-loadfw: +# +# Hotplug script for HP1000/1005/1020 USB laser printers. The model number +# that this script deals with is determined from the udev env. +# +# Used to download firmware automatically into the printer when it +# is powered up or plugged into the USB port. +# +# The inspiration fo this script is from: +# Oscar Santacreu. Alicante-Spain (2002) +# Mike Morgan (2004) +# Modified by Stefan Schweizer (2005) to work as a udev-RUN-script + +# +# Directory to find downloadable HP firmware files sihpMMMM.dl +# +FWDIR=/lib/firmware + +# +# Program used to determine USB id information +# +USBID=/sbin/usb_printerid + +# +# Figure out how to log our messages +# +if [ -t 1 ]; then + # Running from a tty... + log() { + echo "$0: $@" + } +elif [ -x /usr/bin/logger ]; then + # Have logger... + log() { + logger -t "$0" -- "$@" + } +else + # No logger... + log() { + echo "$0: $@" >> /var/log/messages + } +fi + +# +# Figure out the model number from the name of this script +# +case "$1" in +1000) + MODEL=1000 + MODELNAME="hp LaserJet $MODEL" + ;; +1005) + MODEL=1005 + MODELNAME="hp LaserJet $MODEL" + ;; +1020) + MODEL=1020 + MODELNAME="HP LaserJet $MODEL" + ;; +*) + log "Only HP LaserJet 1000, 1005 and 1020 are supported" + log "You need to supply one of these on the cmdline: $0 10**" + exit + ;; +esac + +if [ -z "$DEVNAME" ]; then + if [ -n "$2" ]; then + DEVNAME=$2 + else + log "You need to either have $DEVNAME set in the environment or supply it on the cmdline, like:" + log "$0 10** /dev/usb/lp0" + exit 1 + fi +fi + +# +# Procedure to load a single device with firmware +# +load1() { + fw="$FWDIR/sihp$MODEL.dl" + if [ ! -f "$fw" ]; then + log "Missing HP LaserJet $MODEL firmware file $fw" + log "...read foo2zjs installation instructions and run ./getweb $MODEL" + return 1 + fi + + log "loading HP LaserJet $MODEL firmware $fw to $DEVNAME ..." + if cat $fw > $DEVNAME; then + log "... download successful." + else + log "... download failed." + fi + return 0 +} + +# +# OK, now download firmware to any printers that need it +# +if [ -x $USBID ]; then + if $USBID $DEVNAME | grep "$MODELNAME" 2> /dev/null; then + # This is a LaserJet 100x + if $USBID $DEVNAME | grep 'FWVER' 2> /dev/null; then + log "HP LaserJet $MODEL firmware already loaded into $DEVNAME" + else + # Firmware is not yet loaded + load1 "$DEVNAME" + fi + else + log "No supported printer found." + fi +else + log "HP LaserJet $MODEL firmware was not downloaded..." + log "...couldn't find $USBID" +fi diff -Nuarp foo2zjs.orig/hplj1000 foo2zjs/hplj1000 --- foo2zjs.orig/hplj1000 2005-09-25 12:16:59.000000000 +0200 +++ foo2zjs/hplj1000 2005-09-25 12:47:29.000000000 +0200 @@ -30,12 +30,12 @@ DEV="" # # Directory to find downloadable HP firmware files sihpMMMM.dl # -FWDIR=/usr/share/foo2zjs/firmware +FWDIR=/lib/firmware # # Program used to determine USB id information # -USBID=/usr/bin/usb_printerid +USBID=/sbin/usb_printerid # # Figure out how to log our messages