sane-canon_pp - SANE backend for Canon CanoScan Parallel Port flatbed scanners
The sane-canon_pp library implements a SANE (Scanner Access Now Easy) backend that pro-
vides access to the following Canon flatbed scanners:
CanoScan N640P ex
No USB scanners are supported and there are no plans to support them in the future. Other
projects are working on support for USB scanners. See the PROJECTS file for more detail.
The FB310P and FB610P are re-badged Avision scanners which use a different command set, so
are unlikely to be supported by this backend in the future.
IMPORTANT: this is alpha code. While we have made every effort to make it as reliable as
possible, it will not always work as expected. Feedback is still appreciated. Please
send any bug reports to the maintainers as listed on the web page (listed in SEE ALSO
This backend expects device names of the form presented by libieee1284. These names are
highly dependent on operating system and version.
On Linux 2.4 kernels this will be of the form parport0 or older (2.2 and before) kernels
may produce names like 0x378 (the base address of your port) or simply 0 depending on your
module configuration. Check the contents of /proc/parport if it exists. If you don't
want to specify a default port (or don't know its name), the backend should be able to
detect which port your scanner is on.
The contents of the canon_pp.conf file is a list of options for the driver to use. Empty
lines and lines starting with a hash mark (#) are ignored.
The supported options are currently ieee1284, calibrate, init_mode, and force_nibble
Option ieee1284 port-name defines which port to use. The format of port-name is OS depen-
dent, based on the names presented by libieee1284. Please only have one of these lines,
or all but one will be ignored.
Option calibrate cal-file [port-name] defines which calibration file to use on a per-port
basis. If you only have one parport, the port-name argument may be omitted - but be care-
ful as this will cause problems on multi-scanner systems. You may have as many of these
lines as you like, as long as each has a unique port name. The tilde (`~') character is
acceptable and will be expanded to the value of the HOME environment.
Option init_mode <AUTO|FB620P|FB630P> [portname] defines which initialisation (wake-up)
mode to use on a per-port basis. If you only have one parport, the portname argument may
be omitted - but be careful as this may cause problems on multi-scanner systems. You may
have as many of these lines as you like, as long as each has a unique port name. The
valid initialisation modes are FB620P (which strobes 10101010 and 01010101 on the data
pins), FB630P (which strobes 11001100 and 00110011 on the data pins) and AUTO, which will
try FB630P mode first then FB620P mode second. The FB620P mode is also used by the
FB320P. The FB630P mode is used by the FB330P, N340P, and N640P.
Option force_nibble forces the driver to use nibble mode even if ECP mode is reported to
work by libieee1284. This works-around the rare issue of ECP mode being reported to work
by the library, then not working.
Hit the "Calibrate" button before scanning. It vastly improves the quality of scans.
To enable automatic detection of your scanner, uncomment the "canon_pp" line from
The backend configuration file (see also description of SANE_CONFIG_DIR below).
The static library implementing this backend.
The shared library implementing this backend (present on systems that support
This environment variable specifies the list of directories that may contain the
configuration file. Under UNIX, the directories are separated by a colon (`:'),
under OS/2, they are separated by a semi-colon (`;'). If this variable is not set,
the configuration file is searched in two default directories: first, the current
working directory (".") and then in /etc/sane.d. If the value of the environment
variable ends with the directory separator character, then the default directories
are searched after the explicitly specified directories. For example, setting
SANE_CONFIG_DIR to "/tmp/config:" would result in directories "tmp/config", ".",
and "/etc/sane.d" being searched (in this order).
If the library was compiled with debug support enabled, this environment variable
controls the debug level for this backend. Higher debug levels increase the ver-
bosity of the output.
Example: export SANE_DEBUG_CANON_PP=4
Features available in the Windows interface
Brightness and Contrast
These are not implemented, and probably never will be. These appear to be imple-
mented entirely in software. Use GIMP or a similar program if you need these fea-
This appears on our first analysis to be just oversampling with an anti-aliasing
filter. Again, it seems to be implemented entirely in software, so GIMP is your
best bet for now.
This is under investigation, but for now only a simple gamma profile (ie: the one
returned during calibration) will be loaded.
ECP mode in libieee1284 doesn't always work properly, even with new hardware. We believe
that this is a ppdev problem. If you change the configuration file to include force_nib-
ble , the problem will go away, but you will only be able to scan in nibble mode.
Sometimes the scanner can be left in a state where our code cannot revive it. If the
backend reports no scanner present, try unplugging the power and plugging it back in.
Also try unplugging printers from the pass-through port.
The scanner will not respond correctly to our commands when you first plug in the power.
You may find if you try a scan very soon after plugging in the power that the backend will
incorrectly report that you have no scanner present. To avoid this, give it about 10 sec-
onds to reset itself before attempting any scans.
Sometimes at high resolutions (ie. 600dpi) you will notice lines which appear twice.
These lines correspond to points where the scanner head has stopped during the scan (it
stops every time the internal 64kb buffer is full). Basically it's a mechanical problem
inside the scanner, that the tolerance of movement for a start/stop event is greater than
1/600 inches. I've never tried the windows driver so I'm not sure how (or if) it works
around this problem, but as we don't know how to rewind the scanner head to do these bits
again, there's currently no nice way to deal with the problem.
Be aware that the scanner uses the green LEDs to read grey-scale scans, meaning green
coloured things will appear lighter than normal, and red and blue coloured items will
appear darker than normal. For high-accuracy grey-scale scans of colour items, it's best
just to scan in colour and convert to grey-scale in graphics software such as the GIMP.
These models can not be reset in the same way as the others. The windows driver doesn't
know how to reset them either - when left with an inconsistent scanner, it will start
scanning half way down the page!
Aborting is known to work correctly on the FB*30P models, and is known to be broken on the
FB*20P models. The FB620P which I tested on simply returns garbage after a scan has been
aborted using the method we know. Aborting is able to leave the scanner in a state where
it can be shut down, but not where another scan can be made.
sane(7), sane-dll(5) http://canon-fb330p.sourceforge.net/
This backend is primarily the work of Simon Krix (Reverse Engineering), and Matthew Duggan
Many thanks to Kevin Easton for his comments and help, and Kent A. Signorini for his help
with the N340P.
1 October 2002 sane-canon_pp(5)