Return to BSD News archive
Path: sserve!newshost.anu.edu.au!harbinger.cc.monash.edu.au!msunews!agate!agate!usenet
From: kstailey@leidecker.gsfc.nasa.gov (Kenneth Stailey)
Newsgroups: comp.os.386bsd.announce
Subject: scanner support for NetBSD
Followup-To: poster
Date: 3 Feb 1995 10:48:00 -0800
Organization: NASA Goddard Space Flight Center -- Greenbelt, Maryland USA
Lines: 152
Sender: cgd@agate.berkeley.edu
Approved: 386bsd-announce-request@agate.berkeley.edu
Message-ID: <KSTAILEY.95Feb1121200@leidecker.gsfc.nasa.gov>
NNTP-Posting-Host: agate.berkeley.edu
Beta testers are wanted for testing the PINT scanner system on NetBSD 1.0
System requirements are:
NetBSD 1.0/i386
(if you can hack it into 1.0A or non i386 then more power to you)
HP ScanJet IIc or IIcx
Please send mail to kstailey@leidecker.gsfc.nasa.gov for the NetBSD code
[standard PINT README follows]
PINT: PINT Is Not TWAIN
common scanner driver interface for UN*X
Copyright (C) 1994,1995 Kenneth Stailey kstailey@leidecker.gsfc.nasa.gov
currenly this disclaimer applies to AIX & SunOS only:
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
PINT (PINT Is Not TWAIN) is a first stab at a scanner interface with
enough flexibility to work with fairly divergent scanners (although
currently only SCSI scanners are supported, they are disappointingly
divergent especially compared to SCSI disks & tapes). In addition
PINT is portable across two pretty divergent versions of UNIX, AIX 3.2
and SunOS 4.1, neither of which comes with scanner support.
PINT uses the traditional UNIX character special file interface and
supports open/close/read/ioctl operations.
Basic workflow for scanning
1. open driver
2. ioctl to get parameters
3. modify parameters
4. ioctl to set parameters
5. ioctl to get "active area" size in pixels
6. read data based on size from scanner
7. close driver
Steps 2-4 will alleviate you from having to set every parameter by hand.
Steps 5-6 deal with scanners that do not support as much resolution
as was specified via the ioctl, and with scanners that
do funny things to the size of the image data like
pad or truncate it to a byte or word boundary.
The PINT ioctl interface as of version 0.3
ioctl(fd, cmd, &arg) where command is:
SCAN_GET
Get scanner parameters.
SCAN_SET
Set scanner parameters.
these ioctls use the following struct as their argument
struct scan_io {
ulong scan_window_width; /* width in 1/1200ths of an inch */
ulong scan_window_length; /* length in 1/1200ths of an inch */
ushort scan_x_resolution; /* horizontal resolution in dots-per-inch */
ushort scan_y_resolution; /* vertical resolution in dots-per-inch */
ulong scan_x_origin; /* horizontal coordinate of upper left corner */
ulong scan_y_origin; /* vertical coordinate of upper left corner */
uchar scan_image_mode; /* type of image data sent by scanner: */
SIM_BINARY_MONOCHROME - good old black-and-white
SIM_DITHERED_MONOCHROME - half-toned monochrome
SIM_GRAYSCALE - multibit monochrome
SIM_COLOR - "one pass color"
SIM_RED
SIM_GREEN - red, green or blue filter is applied
SIM_BLUE
uchar scan_brightness; /* brightness control for those to can do it */
uchar scan_contrast; /* contrast control for those to can do it */
uchar scan_scanner_type; /* type of scanner (read only variable) */
RICOH_IS410 - Ricoh IS410
IBM_2456 - IBM 2456
FUJITSU_M3096G - Fujitsu M3096G
HP_SCANJET_IIC - HP Scanjet IIc
RICOH_IS50 - Ricoh IS50
UMAX_UC630 - UMAX UC630
UMAX_UG630 - UMAX UG630
RICOH_FS1 - Ricoh FS1
SHARP_JX600 - Sharp JX600
uchar scan_use_adf; /* whether to use Automatic Document Feeder */
};
SCAN_GET_PIXEL_SIZE
Retrieve the scanner's opinion of the size of the activer area in
pixels into a structure like this:
struct scan_pixel_sizes {
uint pix_width;
uint pix_height;
};
SCAN_PAPER_PUSH
First make a blind effort at unloading the ADF with no error return
then load the ADF.
this ioctl has no arguments
I'm sure that many people will take offense to the fixed unit size of
1/1200" of an inch, but I haven't given the issue of multiple/variable
units. I don't want to bloat the kernal code for this feature.
Probably a library routine for converting from a fixed interal size
will be used. Suggestions are welcome.
****************** Using PINT **********************
With the driver and utilities installed and the scanner hooked up you
can view the scanner's parameters with "get_scanner". The
"set_scanner" utility changes the parameters. The grabscan utility
will tranfer image data from the scanner to standard output in PNM
format. Try "set_scanner -i m; grabscan > test.pbm"
If you have/get all of PBMPLUS installed you can generate images in
many graphics formats. A viewer like loadimage, or xv can be used to
view the images on screen.