Annotation of sys/scsi/README.ss, Revision 1.1
1.1 ! nbrk 1: $OpenBSD: README.ss,v 1.6 1997/03/11 15:46:01 kstailey Exp $
! 2:
! 3: If you think SCSI tape drives are quirky you haven't seen anything.
! 4:
! 5: There are many SCSI scanners that don't use the SCSI Scanner protocol with
! 6: CDB's like SET_WINDOW. Instead they send Esc-code sequences over the SCSI
! 7: bus using the READ and WRITE operations. True brain death at its finest.
! 8: The HP ScanJet, the Sharp JX-600S and the Epson ES-300C are among these.
! 9:
! 10: Ricoh, UMAX, Mustek, Fujitsu, Microtek on the other hand all try to use the
! 11: SCSI scanner protocol, but scanning, unlike reading a block from a disk, is
! 12: a multi-step operation. Certain steps must be performed in sequence and
! 13: the protocol does not define this. In addition vendors are permitted by
! 14: the SCSI spec. to have unique additional features that the spec. does not
! 15: fully define. Last but not least vendors make mistakes in implementing the
! 16: spec.
! 17:
! 18: My SCSI scanner driver architecture is designed to support scanners
! 19: two ways.
! 20:
! 21: The first way is used if a scanner uses CDB's like SET_WINDOW. The driver
! 22: code should be in ss.c and quirk tables and sequence strings etc. can
! 23: battle it out. This part is not fully implemented yet. Work is being done
! 24: on it from time to time.
! 25:
! 26: The other way is used when the driver is used with an Esc-code-over-SCSI
! 27: case like a ScanJet it installs an "operations switch" so that parts of the
! 28: code in ss.c can be bypassed. This feature is implemented for ScanJets.
! 29: Currently some Mustek scanners use this approach, as the Mustek scanners
! 30: use MODE_SELECT and not SET_WINDOW to send parameter data. However it is
! 31: possible that too much code was farmed out to ss_mustek.c; it may be that
! 32: common code for ssread() in ss.c could be used.
! 33:
! 34: Other Considerations
! 35:
! 36: SCSI disconnect is missing from many scanners. Sucks huh? A slow
! 37: peripheral that also monopolizes the bus. This means that if your
! 38: scanner does not support disconnect you need a second SCSI controller
! 39: for it since access of the controller by any other devices will be
! 40: locked out while you are scanning. Scanners that do this include
! 41: MUSTEK flatbed scanners MFS 06000CX and MFS 12000CX, UMAX UC-630 &
! 42: UG-630. Over time, as multi-tasking becomes more important to
! 43: commoners^H^H^H^H^H^H^H^H^HWindoze users, scanner vendors often supply
! 44: new ROMs that can do disconnect.
! 45:
! 46: The image data from the scanner driver is currently supposed to resemble
! 47: headerless PBM "rawbits". Depending on this is probably a bad idea
! 48: especially because it cannot always be attained. The Fujutisu M3096G
! 49: grayscale data is photo-negative with repect to PBM and this cannot be
! 50: changed. It would be better to extend the ioctl() interface to be able
! 51: to describe the kind of data that is available.
! 52:
! 53: Halftone control of scanners is missing, save for one pre-defined
! 54: selection. This also should be in the ioctl() interface.
! 55:
! 56: Basic workflow for scanning
! 57:
! 58: 1. Open driver.
! 59: 2. ioctl to get parameters (this fills in default values and generally makes
! 60: step 3 easier.)
! 61: 3. Modify parameters.
! 62: 4. ioctl to set parameters.
! 63: 5. ioctl to get data size (same as step 2, but values will be different if
! 64: the image size, resolution, or image data type was set.)
! 65: 6. Read data based on size from scanner retrieved in step 5 (the driver
! 66: delivers an EOF if you overread.)
! 67: 7. Close driver (or use ioctl to reset it so you can scan again.)
CVSweb