kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			
		
			
				
	
	
		
			1037 wiersze
		
	
	
		
			28 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			1037 wiersze
		
	
	
		
			28 KiB
		
	
	
	
		
			C
		
	
	
/* sane - Scanner Access Now Easy.
 | 
						|
   Copyright (C) 1999,2000 Tom Martone
 | 
						|
   This file is part of a SANE backend for Bell and Howell Copiscan II
 | 
						|
   Scanners using the Remote SCSI Controller(RSC).
 | 
						|
 | 
						|
   This file is part of the SANE package.
 | 
						|
 | 
						|
   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., 59 Temple Place - Suite 330, Boston,
 | 
						|
   MA 02111-1307, USA.
 | 
						|
 | 
						|
   As a special exception, the authors of SANE give permission for
 | 
						|
   additional uses of the libraries contained in this release of SANE.
 | 
						|
 | 
						|
   The exception is that, if you link a SANE library with other files
 | 
						|
   to produce an executable, this does not by itself cause the
 | 
						|
   resulting executable to be covered by the GNU General Public
 | 
						|
   License.  Your use of that executable is in no way restricted on
 | 
						|
   account of linking the SANE library code into it.
 | 
						|
 | 
						|
   This exception does not, however, invalidate any other reasons why
 | 
						|
   the executable file might be covered by the GNU General Public
 | 
						|
   License.
 | 
						|
 | 
						|
   If you submit changes to SANE to the maintainers to be included in
 | 
						|
   a subsequent release, you agree by submitting the changes that
 | 
						|
   those changes may be distributed with this exception intact.
 | 
						|
 | 
						|
   If you write modifications of your own for SANE, it is your choice
 | 
						|
   whether to permit this exception to apply to your modifications.
 | 
						|
   If you do not wish that, delete this exception notice.  */
 | 
						|
 | 
						|
#ifndef BH_H
 | 
						|
#define BH_H 1
 | 
						|
 | 
						|
#ifndef PATH_MAX
 | 
						|
#define PATH_MAX (1024)
 | 
						|
#endif
 | 
						|
 | 
						|
#define BH_CONFIG_FILE "bh.conf"
 | 
						|
 | 
						|
/* number of barcode types that can be searched at one time */
 | 
						|
#define NUM_SEARCH_BARS 6
 | 
						|
/* number of additional scanning/decoding sections supported */
 | 
						|
#define NUM_SECTIONS 8
 | 
						|
/* number of possible reads per scan plus the extra one for
 | 
						|
 * the barcode file
 | 
						|
 */
 | 
						|
#define NUM_READS 56 + 1
 | 
						|
 | 
						|
/* specify sanity limits for autoborder detection and barcode decoding */
 | 
						|
#define BH_AUTOBORDER_TRIES 100
 | 
						|
#define BH_DECODE_TRIES 100
 | 
						|
/* specify a fudge factor in mm for border around decoded barcodes */
 | 
						|
#define BH_DECODE_FUDGE 1.0
 | 
						|
 | 
						|
/* section flags - what operation(s) to perform on section */
 | 
						|
#define BH_SECTION_FRONT_IMAGE (1 << 0)
 | 
						|
#define BH_SECTION_BACK_IMAGE (1 << 1)
 | 
						|
#define BH_SECTION_FRONT_BAR (1 << 2)
 | 
						|
#define BH_SECTION_BACK_BAR (1 << 3)
 | 
						|
#define BH_SECTION_FRONT_PATCH (1 << 4)
 | 
						|
#define BH_SECTION_BACK_PATCH (1 << 5)
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
  BH_UNIT_INCH,
 | 
						|
  BH_UNIT_MM,
 | 
						|
  BH_UNIT_POINT
 | 
						|
} bh_measureUnit;
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
  BH_COMP_NONE,
 | 
						|
  BH_COMP_G31D,
 | 
						|
  BH_COMP_G32D,
 | 
						|
  BH_COMP_G42D
 | 
						|
} bh_compress;
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
  BH_ROTATION_0,
 | 
						|
  BH_ROTATION_90,
 | 
						|
  BH_ROTATION_180,
 | 
						|
  BH_ROTATION_270
 | 
						|
} bh_rotation;
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
  OPT_NUM_OPTS = 0,
 | 
						|
 | 
						|
  OPT_MODE_GROUP,
 | 
						|
  /* inquiry string */
 | 
						|
  OPT_INQUIRY,
 | 
						|
  /* preview mode */
 | 
						|
  OPT_PREVIEW,
 | 
						|
  /* scan mode */
 | 
						|
  OPT_SCAN_MODE,
 | 
						|
  /* resolution */
 | 
						|
  OPT_RESOLUTION,
 | 
						|
  /* hardware compression */
 | 
						|
  OPT_COMPRESSION,
 | 
						|
 | 
						|
  OPT_GEOMETRY_GROUP,
 | 
						|
  /* automatic border detection */
 | 
						|
  OPT_AUTOBORDER,
 | 
						|
  /* hardware rotation */
 | 
						|
  OPT_ROTATION,
 | 
						|
  /* hardware deskew */
 | 
						|
  OPT_DESKEW,
 | 
						|
  /* paper size */
 | 
						|
  OPT_PAPER_SIZE,
 | 
						|
  /* top-left x */
 | 
						|
  OPT_TL_X,
 | 
						|
  /* top-left y */
 | 
						|
  OPT_TL_Y,
 | 
						|
  /* bottom-right x */
 | 
						|
  OPT_BR_X,
 | 
						|
  /* bottom-right y */
 | 
						|
  OPT_BR_Y,
 | 
						|
 | 
						|
  OPT_FEEDER_GROUP,
 | 
						|
  /* scan source (eg. ADF) */
 | 
						|
  OPT_SCAN_SOURCE,
 | 
						|
  /* scan in batch mode */
 | 
						|
  OPT_BATCH,
 | 
						|
  /* scan both sides of the page */
 | 
						|
  OPT_DUPLEX,
 | 
						|
  /* timeout in seconds with manual feed */
 | 
						|
  OPT_TIMEOUT_MANUAL,
 | 
						|
  /* timeout in seconds with ADF */
 | 
						|
  OPT_TIMEOUT_ADF,
 | 
						|
  /* check for page in ADF before scanning */
 | 
						|
  OPT_CHECK_ADF,
 | 
						|
 | 
						|
  OPT_ENHANCEMENT_GROUP,
 | 
						|
  /* Enables the scanner's control panel */
 | 
						|
  OPT_CONTROL_PANEL,
 | 
						|
  /* ACE Function */
 | 
						|
  OPT_ACE_FUNCTION,
 | 
						|
  /* ACE Sensitivity */
 | 
						|
  OPT_ACE_SENSITIVITY,
 | 
						|
  /* Brightness */
 | 
						|
  OPT_BRIGHTNESS,
 | 
						|
  /* Threshold */
 | 
						|
  OPT_THRESHOLD,
 | 
						|
  /* Contrast */
 | 
						|
  OPT_CONTRAST,
 | 
						|
  /* Negative (reverse image) */
 | 
						|
  OPT_NEGATIVE,
 | 
						|
 | 
						|
  OPT_ICON_GROUP,
 | 
						|
  /* Width of icon (thumbnail) image in pixels */
 | 
						|
  OPT_ICON_WIDTH,
 | 
						|
  /* Length of icon (thumbnail) image in pixels */
 | 
						|
  OPT_ICON_LENGTH,
 | 
						|
 | 
						|
  OPT_BARCODE_GROUP,
 | 
						|
  /* Add <name> to barcode search priority. */
 | 
						|
  OPT_BARCODE_SEARCH_BAR,
 | 
						|
  /* Barcode search count (1-7, default 3). */
 | 
						|
  OPT_BARCODE_SEARCH_COUNT,
 | 
						|
  /* Barcode search mode.
 | 
						|
   * (1 = horizontal,2 = vertical, 6 = v then h, 9 = h then v).
 | 
						|
   */
 | 
						|
  OPT_BARCODE_SEARCH_MODE,
 | 
						|
  /* Patch code min height (def=127 (5mm)) */
 | 
						|
  OPT_BARCODE_HMIN,
 | 
						|
  /* Barcode search timeout in ms
 | 
						|
   * (20-65535,default is disabled).
 | 
						|
   */
 | 
						|
  OPT_BARCODE_SEARCH_TIMEOUT,
 | 
						|
  /* Specify image sections and functions
 | 
						|
   */
 | 
						|
  OPT_SECTION,
 | 
						|
  /* Specifies the maximum relation from the widest to
 | 
						|
   * the smallest bar
 | 
						|
   */
 | 
						|
  OPT_BARCODE_RELMAX,
 | 
						|
  /* Specifies the minimum number of bars in Bar/Patch code */
 | 
						|
  OPT_BARCODE_BARMIN,
 | 
						|
  /* Specifies the maximum number of bars in a Bar/Patch code */
 | 
						|
  OPT_BARCODE_BARMAX,
 | 
						|
  /* Specifies the image contrast used in decoding.
 | 
						|
   * Use higher values when there are more white pixels
 | 
						|
   * in the code
 | 
						|
   */
 | 
						|
  OPT_BARCODE_CONTRAST,
 | 
						|
  /* Controls Patch Code detection. */
 | 
						|
  OPT_BARCODE_PATCHMODE,
 | 
						|
 | 
						|
  /* must come last: */
 | 
						|
  NUM_OPTIONS
 | 
						|
 | 
						|
} BH_Option;
 | 
						|
 | 
						|
/* macros for accessing the value for an option within a scanning context */
 | 
						|
#define _OPT_VAL_WORD(s, o) ((s)->val[(o)].w)
 | 
						|
#define _OPT_VAL_WORD_THOUSANDTHS(s, o) \
 | 
						|
    (SANE_UNFIX(_OPT_VAL_WORD((s), (o))) * 1000.0 / MM_PER_INCH)
 | 
						|
#define _OPT_VAL_STRING(s, o) ((s)->val[(o)].s)
 | 
						|
#define _OPT_VAL_WORD_ARRAY(s, o) ((s)->val[(o)].wa)
 | 
						|
 | 
						|
 | 
						|
typedef struct _BH_Paper
 | 
						|
{
 | 
						|
  SANE_String name;
 | 
						|
 | 
						|
  /* paper dimensions in mm */
 | 
						|
  double width, length;
 | 
						|
} BH_Paper;
 | 
						|
 | 
						|
typedef struct _BH_Section
 | 
						|
{
 | 
						|
  /* section dimensions - in millimeters */
 | 
						|
  u_long top, left, width, length;
 | 
						|
 | 
						|
  /* compression type/arg/frameformat */
 | 
						|
  SANE_Byte compressiontype;
 | 
						|
  SANE_Byte compressionarg;
 | 
						|
  SANE_Frame format;
 | 
						|
 | 
						|
  /* Flags (see BH_SECTION_...) indicating operation(s) to perform
 | 
						|
   * on the section.  If zero, the section is completely disabled
 | 
						|
   * and will not even be defined in set_window.
 | 
						|
   */
 | 
						|
  SANE_Word flags;
 | 
						|
 | 
						|
} BH_Section;
 | 
						|
 | 
						|
typedef struct _BH_Info
 | 
						|
{
 | 
						|
  SANE_Range x_range;
 | 
						|
  SANE_Range y_range;
 | 
						|
 | 
						|
  SANE_Int res_default;
 | 
						|
  SANE_Bool autoborder_default;
 | 
						|
  SANE_Bool batch_default;
 | 
						|
  SANE_Bool deskew_default;
 | 
						|
  SANE_Bool check_adf_default;
 | 
						|
  SANE_Bool duplex_default;
 | 
						|
  SANE_Int timeout_adf_default;
 | 
						|
  SANE_Int timeout_manual_default;
 | 
						|
  SANE_Bool control_panel_default;
 | 
						|
 | 
						|
  /* additional discovered/guessed capabilities */
 | 
						|
  SANE_Bool canACE;
 | 
						|
  SANE_Bool canDuplex;
 | 
						|
  SANE_Bool canCheckADF;
 | 
						|
 | 
						|
  /* standard information */
 | 
						|
  SANE_Byte devtype;
 | 
						|
  SANE_Char vendor[9];	/* model name */
 | 
						|
  SANE_Char product[17];	/* product name */
 | 
						|
  SANE_Char revision[5];	/* revision */
 | 
						|
 | 
						|
  /* VPD information */
 | 
						|
  SANE_Bool canADF;		/* is there an ADF available */
 | 
						|
  SANE_Bool colorBandW;	/* can scanner do black and white */
 | 
						|
  SANE_Bool colorHalftone;	/* can scanner do Halftone */
 | 
						|
  SANE_Bool canWhiteFrame;	/* data processing: White Framing */
 | 
						|
  SANE_Bool canBlackFrame;	/* data processing: Black Framing */
 | 
						|
  SANE_Bool canEdgeExtract;	/* data processing: ACE: Edge Extraction */
 | 
						|
  SANE_Bool canNoiseFilter;	/* data processing: ACE: Noise Filtering */
 | 
						|
  SANE_Bool canSmooth;	/* data processing: ACE: Smoothing */
 | 
						|
  SANE_Bool canLineBold;	/* data processing: ACE: LineBolding */
 | 
						|
  SANE_Bool comprG3_1D;	/* compression: Group 3, 1 dimensional */
 | 
						|
  SANE_Bool comprG3_2D;	/* compression: Group 3, 2 dimensional */
 | 
						|
  SANE_Bool comprG4;		/* compression: Group 4 */
 | 
						|
  SANE_Bool canBorderRecog;	/* can do border recognition */
 | 
						|
  SANE_Bool canBarCode;	/* bar code support available */
 | 
						|
  SANE_Bool canIcon;		/* icon support available */
 | 
						|
  SANE_Bool canSection;	/* section support available */
 | 
						|
  SANE_Int lineMaxBytes;	/* maximum bytes per scan-line */
 | 
						|
 | 
						|
  /* jis information */
 | 
						|
  SANE_Int resBasicX;		/* basic X resolution */
 | 
						|
  SANE_Int resBasicY;		/* basic Y resolution */
 | 
						|
  SANE_Int resMaxX;		/* maximum X resolution */
 | 
						|
  SANE_Int resMaxY;		/* maximum Y resolution */
 | 
						|
  SANE_Int resMinX;		/* minimum X resolution */
 | 
						|
  SANE_Int resMinY;		/* minimum Y resolution */
 | 
						|
  SANE_Int resStdList[16+1];    /* list of available standard resolutions
 | 
						|
				 * (first slot is the length)
 | 
						|
				 */
 | 
						|
  SANE_Int winWidth;		/* length of window (in BasicX res DPI) */
 | 
						|
  SANE_Int winHeight;		/* height of window (in BasicY res DPI) */
 | 
						|
} BH_Info;
 | 
						|
 | 
						|
typedef struct _BH_Device BH_Device;
 | 
						|
 | 
						|
struct _BH_Device
 | 
						|
{
 | 
						|
  BH_Device *next;
 | 
						|
  SANE_Device sane;
 | 
						|
  BH_Info info;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
typedef struct _BH_Scanner BH_Scanner;
 | 
						|
struct _BH_Scanner
 | 
						|
{
 | 
						|
  /* all the state needed to define a scan request: */
 | 
						|
 | 
						|
  /* linked list for housekeeping */
 | 
						|
  BH_Scanner *next;
 | 
						|
 | 
						|
  /* scanner dependent/low-level state: */
 | 
						|
  BH_Device *hw;
 | 
						|
 | 
						|
  /* SCSI filedescriptor */
 | 
						|
  int fd;
 | 
						|
 | 
						|
  /* tempfile which is used to send decoded barcode data */
 | 
						|
  FILE *barf;
 | 
						|
  char barfname[PATH_MAX+1];
 | 
						|
 | 
						|
  /* SANE option descriptors and values */
 | 
						|
  SANE_Option_Descriptor opt[NUM_OPTIONS];
 | 
						|
  Option_Value val[NUM_OPTIONS];
 | 
						|
 | 
						|
  /* additional values that don't fit into Option_Value representation */
 | 
						|
  SANE_Byte search_bars[NUM_SEARCH_BARS];
 | 
						|
  BH_Section sections[NUM_SECTIONS];
 | 
						|
  SANE_Int num_sections;
 | 
						|
 | 
						|
  /* SANE image parameters */
 | 
						|
  SANE_Parameters params;
 | 
						|
 | 
						|
  /* state information - not options */
 | 
						|
 | 
						|
  /* Basic Measurement Unit */
 | 
						|
  SANE_Int bmu;
 | 
						|
  /* Measurement Unit Divisor */
 | 
						|
  SANE_Int mud;
 | 
						|
 | 
						|
  /* track data to be read.  ReadList contains the codes of the read types
 | 
						|
   * (see BH_READ_TYPE...) to perform, readcnt is the total number of reads
 | 
						|
   * for this scan and readptr points to the current read operation.
 | 
						|
   */
 | 
						|
  SANE_Byte readlist[NUM_READS];
 | 
						|
  SANE_Int readcnt, readptr;
 | 
						|
 | 
						|
  u_long InvalidBytes;
 | 
						|
  SANE_Bool scanning;
 | 
						|
  SANE_Bool cancelled;
 | 
						|
  SANE_Bool backpage;
 | 
						|
  SANE_Bool barcodes;
 | 
						|
  SANE_Bool patchcodes;
 | 
						|
  SANE_Bool icons;
 | 
						|
  u_long iconwidth, iconlength;
 | 
						|
  SANE_Bool barcode_not_found;
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range u8_range =
 | 
						|
{
 | 
						|
    0,		/* minimum */
 | 
						|
    255,	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range u16_range =
 | 
						|
{
 | 
						|
    0,		/* minimum */
 | 
						|
    65535, 	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range icon_range =
 | 
						|
{
 | 
						|
    0,		/* minimum */
 | 
						|
    3600, 	/* maximum */
 | 
						|
    8		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range barcode_search_timeout_range =
 | 
						|
{
 | 
						|
    20,		/* minimum */
 | 
						|
    65535, 	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range barcode_hmin_range =
 | 
						|
{
 | 
						|
    1,		/* minimum */
 | 
						|
    1660, 	/* maximum (when converted from mm
 | 
						|
		 * to thousandths will still be less
 | 
						|
		 * than 65536)
 | 
						|
		 */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range barcode_search_count_range =
 | 
						|
{
 | 
						|
    1,		/* minimum */
 | 
						|
    7,  	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range barcode_relmax_range =
 | 
						|
{
 | 
						|
    0,		/* minimum */
 | 
						|
    6,  	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range barcode_contrast_range =
 | 
						|
{
 | 
						|
    0,		/* minimum */
 | 
						|
    6,  	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range barcode_patchmode_range =
 | 
						|
{
 | 
						|
    0,		/* minimum */
 | 
						|
    1,  	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range ace_function_range =
 | 
						|
{
 | 
						|
    -4,		/* minimum */
 | 
						|
    4,  	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static const SANE_Range ace_sensitivity_range =
 | 
						|
{
 | 
						|
    0,		/* minimum */
 | 
						|
    9,  	/* maximum */
 | 
						|
    0		/* quantization */
 | 
						|
};
 | 
						|
 | 
						|
static SANE_String_Const scan_mode_list[] =
 | 
						|
{
 | 
						|
  "lineart",
 | 
						|
  "halftone",
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
static SANE_String_Const scan_mode_min_list[] =
 | 
						|
{
 | 
						|
  "lineart",
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
static SANE_String_Const barcode_search_mode_list[] =
 | 
						|
{
 | 
						|
  "horiz-vert", /* 9 */
 | 
						|
  "horizontal", /* 1 */
 | 
						|
  "vertical",   /* 2 */
 | 
						|
  "vert-horiz", /* 6 */
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
static SANE_String_Const scan_source_list[] =
 | 
						|
{
 | 
						|
  "Automatic Document Feeder",
 | 
						|
  "Manual Feed Tray",
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
static SANE_String_Const compression_list[] =
 | 
						|
{
 | 
						|
  "none",
 | 
						|
  "g31d",
 | 
						|
  "g32d",
 | 
						|
  "g42d",
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
/* list of supported bar/patch codes */
 | 
						|
static SANE_String_Const barcode_search_bar_list[] =
 | 
						|
{
 | 
						|
  "none",
 | 
						|
  "ean-8",
 | 
						|
  "ean-13",
 | 
						|
  "reserved-ean-add",
 | 
						|
  "code39",
 | 
						|
  "code2-5-interleaved",
 | 
						|
  "code2-5-3lines-matrix",
 | 
						|
  "code2-5-3lines-datalogic",
 | 
						|
  "code2-5-5lines-industrial",
 | 
						|
  "patchcode",
 | 
						|
  "codabar",
 | 
						|
  "codabar-with-start-stop",
 | 
						|
  "code39ascii",
 | 
						|
  "code128",
 | 
						|
  "code2-5-5lines-iata",
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
/* list of supported rotation angles */
 | 
						|
static SANE_String_Const rotation_list[] =
 | 
						|
{
 | 
						|
  "0",
 | 
						|
  "90",
 | 
						|
  "180",
 | 
						|
  "270",
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
/* list of support paper sizes */
 | 
						|
/* 'custom' MUST be item 0; otherwise a width or length of 0 indicates
 | 
						|
 * the maximum value supported by the scanner
 | 
						|
 */
 | 
						|
static const BH_Paper paper_sizes[] =
 | 
						|
{
 | 
						|
  {"Custom", 0.0, 0.0},
 | 
						|
  {"Letter", 215.9, 279.4},
 | 
						|
  {"Legal", 215.9, 355.6},
 | 
						|
  {"A3", 297, 420},
 | 
						|
  {"A4", 210, 297},
 | 
						|
  {"A5", 148.5, 210},
 | 
						|
  {"A6", 105, 148.5},
 | 
						|
  {"B4", 250, 353},
 | 
						|
  {"B5", 182, 257},
 | 
						|
  {"Full", 0.0, 0.0},
 | 
						|
};
 | 
						|
 | 
						|
/* MUST be kept in sync with paper_sizes */
 | 
						|
static SANE_String_Const paper_list[] =
 | 
						|
{
 | 
						|
  "Custom",
 | 
						|
  "Letter",
 | 
						|
  "Legal",
 | 
						|
  "A3",
 | 
						|
  "A4",
 | 
						|
  "A5",
 | 
						|
  "A6",
 | 
						|
  "B4",
 | 
						|
  "B5",
 | 
						|
  "Full",
 | 
						|
  0
 | 
						|
};
 | 
						|
 | 
						|
static /* inline */ int _is_host_little_endian(void);
 | 
						|
static /* inline */ int
 | 
						|
_is_host_little_endian()
 | 
						|
{
 | 
						|
  SANE_Int val = 255;
 | 
						|
  unsigned char *firstbyte = (unsigned char *) &val;
 | 
						|
 | 
						|
  return (*firstbyte == 255) ? SANE_TRUE : SANE_FALSE;
 | 
						|
}
 | 
						|
 | 
						|
static /* inline */ void
 | 
						|
_lto2b(u_long val, SANE_Byte *bytes)
 | 
						|
{
 | 
						|
  bytes[0] = (val >> 8) & 0xff;
 | 
						|
  bytes[1] = val & 0xff;
 | 
						|
}
 | 
						|
 | 
						|
static /* inline */ void
 | 
						|
_lto3b(u_long val, SANE_Byte *bytes)
 | 
						|
{
 | 
						|
  bytes[0] = (val >> 16) & 0xff;
 | 
						|
  bytes[1] = (val >> 8) & 0xff;
 | 
						|
  bytes[2] = val & 0xff;
 | 
						|
}
 | 
						|
 | 
						|
static /* inline */ void
 | 
						|
_lto4b(u_long val, SANE_Byte *bytes)
 | 
						|
{
 | 
						|
  bytes[0] = (val >> 24) & 0xff;
 | 
						|
  bytes[1] = (val >> 16) & 0xff;
 | 
						|
  bytes[2] = (val >> 8) & 0xff;
 | 
						|
  bytes[3] = val & 0xff;
 | 
						|
}
 | 
						|
 | 
						|
static /* inline */ u_long
 | 
						|
_2btol(SANE_Byte *bytes)
 | 
						|
{
 | 
						|
  u_long rv;
 | 
						|
 | 
						|
  rv = (bytes[0] << 8) | bytes[1];
 | 
						|
 | 
						|
  return rv;
 | 
						|
}
 | 
						|
 | 
						|
static /* inline */ u_long
 | 
						|
_4btol(SANE_Byte *bytes)
 | 
						|
{
 | 
						|
  u_long rv;
 | 
						|
 | 
						|
  rv = (bytes[0] << 24) |
 | 
						|
    (bytes[1] << 16) |
 | 
						|
    (bytes[2] << 8) |
 | 
						|
    bytes[3];
 | 
						|
 | 
						|
  return rv;
 | 
						|
}
 | 
						|
 | 
						|
#define SANE_TITLE_SCAN_MODE_GROUP "Scan Mode"
 | 
						|
#define SANE_TITLE_GEOMETRY_GROUP "Geometry"
 | 
						|
#define SANE_TITLE_FEEDER_GROUP "Feeder"
 | 
						|
#define SANE_TITLE_ENHANCEMENT_GROUP "Enhancement"
 | 
						|
#define SANE_TITLE_ICON_GROUP "Icon"
 | 
						|
#define SANE_TITLE_BARCODE_GROUP "Barcode"
 | 
						|
 | 
						|
#define SANE_NAME_AUTOBORDER "autoborder"
 | 
						|
#define SANE_TITLE_AUTOBORDER "Autoborder"
 | 
						|
#define SANE_DESC_AUTOBORDER "Enable Automatic Border Detection"
 | 
						|
 | 
						|
#define SANE_NAME_COMPRESSION "compression"
 | 
						|
#define SANE_TITLE_COMPRESSION "Data Compression"
 | 
						|
#define SANE_DESC_COMPRESSION "Sets the compression mode of the scanner"
 | 
						|
 | 
						|
#define SANE_NAME_ROTATION "rotation"
 | 
						|
#define SANE_TITLE_ROTATION "Page Rotation"
 | 
						|
#define SANE_DESC_ROTATION "Sets the page rotation mode of the scanner"
 | 
						|
 | 
						|
#define SANE_NAME_DESKEW "deskew"
 | 
						|
#define SANE_TITLE_DESKEW "Page Deskew"
 | 
						|
#define SANE_DESC_DESKEW "Enable Deskew Mode"
 | 
						|
 | 
						|
#define SANE_NAME_TIMEOUT_ADF "timeout-adf"
 | 
						|
#define SANE_TITLE_TIMEOUT_ADF "ADF Timeout"
 | 
						|
#define SANE_DESC_TIMEOUT_ADF "Sets the timeout in seconds for the ADF"
 | 
						|
 | 
						|
#define SANE_NAME_TIMEOUT_MANUAL "timeout-manual"
 | 
						|
#define SANE_TITLE_TIMEOUT_MANUAL "Manual Timeout"
 | 
						|
#define SANE_DESC_TIMEOUT_MANUAL "Sets the timeout in seconds for manual feeder"
 | 
						|
 | 
						|
#define SANE_NAME_BATCH "batch"
 | 
						|
#define SANE_TITLE_BATCH "Batch"
 | 
						|
#define SANE_DESC_BATCH "Enable Batch Mode"
 | 
						|
 | 
						|
#define SANE_NAME_CHECK_ADF "check-adf"
 | 
						|
#define SANE_TITLE_CHECK_ADF "Check ADF"
 | 
						|
#define SANE_DESC_CHECK_ADF "Check ADF Status prior to starting scan"
 | 
						|
 | 
						|
#define SANE_NAME_DUPLEX "duplex"
 | 
						|
#define SANE_TITLE_DUPLEX "Duplex"
 | 
						|
#define SANE_DESC_DUPLEX "Enable Duplex (Dual-Sided) Scanning"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_SEARCH_COUNT "barcode-search-count"
 | 
						|
#define SANE_TITLE_BARCODE_SEARCH_COUNT "Barcode Search Count"
 | 
						|
#define SANE_DESC_BARCODE_SEARCH_COUNT "Number of barcodes to search for in the scanned image"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_HMIN "barcode-hmin"
 | 
						|
#define SANE_TITLE_BARCODE_HMIN "Barcode Minimum Height"
 | 
						|
#define SANE_DESC_BARCODE_HMIN "Sets the Barcode Minimum Height (larger values increase recognition speed)"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_SEARCH_MODE "barcode-search-mode"
 | 
						|
#define SANE_TITLE_BARCODE_SEARCH_MODE "Barcode Search Mode"
 | 
						|
#define SANE_DESC_BARCODE_SEARCH_MODE "Chooses the orientation of barcodes to be searched"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_SEARCH_TIMEOUT "barcode-search-timeout"
 | 
						|
#define SANE_TITLE_BARCODE_SEARCH_TIMEOUT "Barcode Search Timeout"
 | 
						|
#define SANE_DESC_BARCODE_SEARCH_TIMEOUT "Sets the timeout for barcode searching"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_SEARCH_BAR "barcode-search-bar"
 | 
						|
#define SANE_TITLE_BARCODE_SEARCH_BAR "Barcode Search Bar"
 | 
						|
#define SANE_DESC_BARCODE_SEARCH_BAR "Specifies the barcode type to search for"
 | 
						|
 | 
						|
#define SANE_NAME_SECTION "section"
 | 
						|
#define SANE_TITLE_SECTION "Image/Barcode Search Sections"
 | 
						|
#define SANE_DESC_SECTION "Specifies an image section and/or a barcode search region"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_RELMAX "barcode-relmax"
 | 
						|
#define SANE_TITLE_BARCODE_RELMAX "Barcode RelMax"
 | 
						|
#define SANE_DESC_BARCODE_RELMAX "Specifies the maximum relation from the widest to the smallest bar"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_BARMIN "barcode-barmin"
 | 
						|
#define SANE_TITLE_BARCODE_BARMIN "Barcode Bar Minimum"
 | 
						|
#define SANE_DESC_BARCODE_BARMIN "Specifies the minimum number of bars in Bar/Patch code"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_BARMAX "barcode-barmax"
 | 
						|
#define SANE_TITLE_BARCODE_BARMAX "Barcode Bar Maximum"
 | 
						|
#define SANE_DESC_BARCODE_BARMAX "Specifies the maximum number of bars in a Bar/Patch code"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_CONTRAST "barcode-contrast"
 | 
						|
#define SANE_TITLE_BARCODE_CONTRAST "Barcode Contrast"
 | 
						|
#define SANE_DESC_BARCODE_CONTRAST "Specifies the image contrast used in decoding.  Use higher values when " \
 | 
						|
"there are more white pixels in the code"
 | 
						|
 | 
						|
#define SANE_NAME_BARCODE_PATCHMODE "barcode-patchmode"
 | 
						|
#define SANE_TITLE_BARCODE_PATCHMODE "Barcode Patch Mode"
 | 
						|
#define SANE_DESC_BARCODE_PATCHMODE "Controls Patch Code detection."
 | 
						|
 | 
						|
#define SANE_NAME_CONTROL_PANEL "control-panel"
 | 
						|
#define SANE_TITLE_CONTROL_PANEL "Control Panel "
 | 
						|
#define SANE_DESC_CONTROL_PANEL "Enables the scanner's control panel"
 | 
						|
 | 
						|
#define SANE_NAME_ACE_FUNCTION "ace-function"
 | 
						|
#define SANE_TITLE_ACE_FUNCTION "ACE Function"
 | 
						|
#define SANE_DESC_ACE_FUNCTION "ACE Function"
 | 
						|
 | 
						|
#define SANE_NAME_ACE_SENSITIVITY "ace-sensitivity"
 | 
						|
#define SANE_TITLE_ACE_SENSITIVITY "ACE Sensitivity"
 | 
						|
#define SANE_DESC_ACE_SENSITIVITY "ACE Sensitivity"
 | 
						|
 | 
						|
#define SANE_NAME_ICON_WIDTH "icon-width"
 | 
						|
#define SANE_TITLE_ICON_WIDTH "Icon Width"
 | 
						|
#define SANE_DESC_ICON_WIDTH "Width of icon (thumbnail) image in pixels"
 | 
						|
 | 
						|
#define SANE_NAME_ICON_LENGTH "icon-length"
 | 
						|
#define SANE_TITLE_ICON_LENGTH "Icon Length"
 | 
						|
#define SANE_DESC_ICON_LENGTH "Length of icon (thumbnail) image in pixels"
 | 
						|
 | 
						|
#define SANE_NAME_PAPER_SIZE "paper-size"
 | 
						|
#define SANE_TITLE_PAPER_SIZE "Paper Size"
 | 
						|
#define SANE_DESC_PAPER_SIZE "Specify the scan window geometry by specifying the paper size " \
 | 
						|
"of the documents to be scanned"
 | 
						|
 | 
						|
#define SANE_NAME_INQUIRY "inquiry"
 | 
						|
#define SANE_TITLE_INQUIRY "Inquiry Data"
 | 
						|
#define SANE_DESC_INQUIRY "Displays scanner inquiry data"
 | 
						|
 | 
						|
/* low level SCSI commands and buffers */
 | 
						|
 | 
						|
/* SCSI commands */
 | 
						|
#define BH_SCSI_TEST_UNIT_READY 0x00
 | 
						|
#define BH_SCSI_SET_WINDOW 0x24
 | 
						|
#define BH_SCSI_GET_WINDOW 0x25
 | 
						|
#define BH_SCSI_READ_SCANNED_DATA 0x28
 | 
						|
#define BH_SCSI_INQUIRY	0x12
 | 
						|
#define BH_SCSI_MODE_SELECT 0x15
 | 
						|
#define BH_SCSI_START_SCAN 0x1b
 | 
						|
#define BH_SCSI_MODE_SENSE 0x1a
 | 
						|
#define BH_SCSI_GET_BUFFER_STATUS 0x34
 | 
						|
#define BH_SCSI_OBJECT_POSITION 0x31
 | 
						|
 | 
						|
/* page codes used with BH_SCSI_INQUIRY */
 | 
						|
#define BH_INQUIRY_STANDARD_PAGE_CODE 0x00
 | 
						|
#define BH_INQUIRY_VPD_PAGE_CODE 0xC0
 | 
						|
#define BH_INQUIRY_JIS_PAGE_CODE 0xF0
 | 
						|
 | 
						|
/* page codes used with BH_SCSI_MODE_SELECT and BH_SCSI_MODE_SENSE */
 | 
						|
#define BH_MODE_MEASUREMENT_PAGE_CODE 0x03
 | 
						|
#define BH_MODE_TIMEOUT_PAGE_CODE 0x20
 | 
						|
#define BH_MODE_ICON_PAGE_CODE 0x21
 | 
						|
#define BH_MODE_BARCODE_PRIORITY_PAGE_CODE 0x30
 | 
						|
#define BH_MODE_BARCODE_PARAM1_PAGE_CODE 0x31
 | 
						|
#define BH_MODE_BARCODE_PARAM2_PAGE_CODE 0x32
 | 
						|
#define BH_MODE_BARCODE_PARAM3_PAGE_CODE 0x32
 | 
						|
 | 
						|
/* data type codes used with BH_SCSI_READ_SCANNED_DATA */
 | 
						|
#define BH_SCSI_READ_TYPE_FRONT 0x80
 | 
						|
/* 0x81 thru 0x88 read front page sections 1 thru 8 respectively */
 | 
						|
#define BH_SCSI_READ_TYPE_BACK 0x90
 | 
						|
/* 0x91 thru 0x98 read back page sections 1 thru 8 respectively */
 | 
						|
#define BH_SCSI_READ_TYPE_FRONT_BARCODE 0xA0
 | 
						|
/* 0xA1 thru 0xA8 read front page barcodes in sections 1 thru 8 respectively */
 | 
						|
#define BH_SCSI_READ_TYPE_BACK_BARCODE 0xB0
 | 
						|
/* 0xB1 thru 0xB8 read back page barcodes in sections 1 thru 8 respectively */
 | 
						|
#define BH_SCSI_READ_TYPE_FRONT_PATCHCODE 0xC0
 | 
						|
/* 0xC1 thru 0xC8 read front page patchcodes in sections 1 thru 8 respectively */
 | 
						|
#define BH_SCSI_READ_TYPE_BACK_PATCHCODE 0xD0
 | 
						|
/* 0xD1 thru 0xD8 read back page patchcodes in sections 1 thru 8 respectively */
 | 
						|
#define BH_SCSI_READ_TYPE_FRONT_ICON 0x89
 | 
						|
#define BH_SCSI_READ_TYPE_BACK_ICON 0x99
 | 
						|
 | 
						|
/* this one is not a real readtype; it's used to help transfer the barcode file */
 | 
						|
#define BH_SCSI_READ_TYPE_SENDBARFILE 0xBB
 | 
						|
 | 
						|
#define BH_HAS_IMAGE_DATA(i) ((i) >= BH_SCSI_READ_TYPE_FRONT && \
 | 
						|
   (i) <= BH_SCSI_READ_TYPE_BACK_ICON)
 | 
						|
 | 
						|
/* batchmode codes used with BH_SCSI_SET_WINDOW */
 | 
						|
#define BH_BATCH_DISABLE 0x00
 | 
						|
#define BH_BATCH_ENABLE 0x01
 | 
						|
#define BH_BATCH_TERMINATE 0x02
 | 
						|
#define BH_BATCH_ABORT 0x03
 | 
						|
 | 
						|
/* deskew mode codes used with BH_SCSI_SET_WINDOW */
 | 
						|
#define BH_DESKEW_DISABLE 0x00       /* border detection is assumed, see page 3-37 of 8000 manual */
 | 
						|
#define BH_DESKEW_ENABLE 0x04        /* deskew and border detection */
 | 
						|
 | 
						|
/* used with BH_SCSI_SET_WINDOW, BH_SCSI_GET_WINDOW */
 | 
						|
typedef struct _BH_SectionBlock {
 | 
						|
  SANE_Byte ul_x[4];
 | 
						|
  SANE_Byte ul_y[4];
 | 
						|
  SANE_Byte width[4];
 | 
						|
  SANE_Byte length[4];
 | 
						|
  SANE_Byte compressiontype;
 | 
						|
  SANE_Byte compressionarg;
 | 
						|
  SANE_Byte reserved[6];
 | 
						|
} BH_SectionBlock;
 | 
						|
 | 
						|
/* used with BH_SCSI_SET_WINDOW, BH_SCSI_GET_WINDOW */
 | 
						|
struct window_data {           /* window descriptor block byte layout */
 | 
						|
  SANE_Byte windowid;          /* 0 */
 | 
						|
  SANE_Byte autoborder;        /* 1 */
 | 
						|
  SANE_Byte xres[2];           /* 2,3 */
 | 
						|
  SANE_Byte yres[2];           /* 4,5 */
 | 
						|
  SANE_Byte ulx[4];            /* 6-9 */
 | 
						|
  SANE_Byte uly[4];            /* 10-13 */
 | 
						|
  SANE_Byte windowwidth[4];    /* 14-17 */
 | 
						|
  SANE_Byte windowlength[4];   /* 18-21 */
 | 
						|
  SANE_Byte brightness;        /* 22 */
 | 
						|
  SANE_Byte threshold;         /* 23 */
 | 
						|
  SANE_Byte contrast;          /* 24 */
 | 
						|
  SANE_Byte imagecomposition;  /* 25 */
 | 
						|
  SANE_Byte bitsperpixel;      /* 26 */
 | 
						|
  SANE_Byte halftonecode;      /* 27 */
 | 
						|
  SANE_Byte halftoneid;        /* 28 */
 | 
						|
  SANE_Byte paddingtype;       /* 29 */
 | 
						|
  SANE_Byte bitordering[2];    /* 30,31 */
 | 
						|
  SANE_Byte compressiontype;   /* 32 */
 | 
						|
  SANE_Byte compressionarg;    /* 33 */
 | 
						|
  SANE_Byte reserved2[6];      /* 34-39 */
 | 
						|
  SANE_Byte remote;            /* 40 */
 | 
						|
  SANE_Byte acefunction;       /* 41 */
 | 
						|
  SANE_Byte acesensitivity;    /* 42 */
 | 
						|
  SANE_Byte batchmode;         /* 43 */
 | 
						|
  SANE_Byte reserved3[2];      /* 44,45 */
 | 
						|
  SANE_Byte border_rotation;   /* 46     added this for copiscan 8080 */
 | 
						|
  SANE_Byte reserved4[17];     /* 47-63  added this for copiscan 8080 */
 | 
						|
  BH_SectionBlock sectionblock[NUM_SECTIONS];
 | 
						|
};
 | 
						|
 | 
						|
/* used with BH_SCSI_READ_SCANNED_DATA */
 | 
						|
/* structure for returned decoded barcode data */
 | 
						|
struct barcode_data {
 | 
						|
  SANE_Byte reserved1[2];
 | 
						|
  SANE_Byte barcodetype[2];
 | 
						|
  SANE_Byte statusflag[2];
 | 
						|
  SANE_Byte barcodeorientation[2];
 | 
						|
  SANE_Byte posxa[2];
 | 
						|
  SANE_Byte posya[2];
 | 
						|
  SANE_Byte posxb[2];
 | 
						|
  SANE_Byte posyb[2];
 | 
						|
  SANE_Byte posxc[2];
 | 
						|
  SANE_Byte posyc[2];
 | 
						|
  SANE_Byte posxd[2];
 | 
						|
  SANE_Byte posyd[2];
 | 
						|
  SANE_Byte barcodesearchtime[2];
 | 
						|
  SANE_Byte reserved2[13];
 | 
						|
  SANE_Byte barcodelen;
 | 
						|
  SANE_Byte barcodedata[160];
 | 
						|
};
 | 
						|
 | 
						|
/* structure for returned icon data block */
 | 
						|
struct icon_data {
 | 
						|
  SANE_Byte windowwidth[4];
 | 
						|
  SANE_Byte windowlength[4];
 | 
						|
  SANE_Byte iconwidth[4];
 | 
						|
  SANE_Byte iconwidthbytes[4];
 | 
						|
  SANE_Byte iconlength[4];
 | 
						|
  SANE_Byte bitordering;
 | 
						|
  SANE_Byte reserved[7];
 | 
						|
  SANE_Byte icondatalen[4];
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/* used with BH_SCSI_INQUIRY */
 | 
						|
 | 
						|
/* Standard Data [EVPD=0] */
 | 
						|
struct inquiry_standard_data {
 | 
						|
  SANE_Byte devtype;
 | 
						|
  SANE_Byte reserved[7];
 | 
						|
  SANE_Byte vendor[8];
 | 
						|
  SANE_Byte product[16];
 | 
						|
  SANE_Byte revision[4];
 | 
						|
};
 | 
						|
 | 
						|
/* VPD Information [EVPD=1, PageCode=C0H] */
 | 
						|
struct inquiry_vpd_data {
 | 
						|
  SANE_Byte devtype;
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte reserved1;
 | 
						|
  SANE_Byte alloclen;
 | 
						|
  SANE_Byte adf;
 | 
						|
  SANE_Byte reserved2[2];
 | 
						|
  SANE_Byte imagecomposition;
 | 
						|
  SANE_Byte imagedataprocessing[2];
 | 
						|
  SANE_Byte compression;
 | 
						|
  SANE_Byte reserved3;
 | 
						|
  SANE_Byte sizerecognition;
 | 
						|
  SANE_Byte optionalfeatures;
 | 
						|
  SANE_Byte xmaxoutputbytes[2];
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/* JIS Information [EVPD=1, PageCode=F0H] */
 | 
						|
struct inquiry_jis_data {
 | 
						|
  SANE_Byte devtype;
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte jisversion;
 | 
						|
  SANE_Byte reserved1;
 | 
						|
  SANE_Byte alloclen;
 | 
						|
  SANE_Byte basicxres[2];
 | 
						|
  SANE_Byte basicyres[2];
 | 
						|
  SANE_Byte resolutionstep;
 | 
						|
  SANE_Byte maxxres[2];
 | 
						|
  SANE_Byte maxyres[2];
 | 
						|
  SANE_Byte minxres[2];
 | 
						|
  SANE_Byte minyres[2];
 | 
						|
  SANE_Byte standardres[2];
 | 
						|
  SANE_Byte windowwidth[4];
 | 
						|
  SANE_Byte windowlength[4];
 | 
						|
  SANE_Byte functions;
 | 
						|
  SANE_Byte reserved2;
 | 
						|
};
 | 
						|
 | 
						|
/* used with BH_SCSI_MODE_SELECT and BH_SCSI_MODE_SENSE */
 | 
						|
 | 
						|
/* Scanning Measurement Parameters PageCode=03H */
 | 
						|
struct mode_page_03 {
 | 
						|
  SANE_Byte modedatalen;
 | 
						|
  SANE_Byte mediumtype;
 | 
						|
  SANE_Byte devicespecificparam;
 | 
						|
  SANE_Byte blockdescriptorlen;
 | 
						|
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte paramlen;
 | 
						|
  SANE_Byte bmu;
 | 
						|
  SANE_Byte reserved1;
 | 
						|
  SANE_Byte mud[2];
 | 
						|
  SANE_Byte reserved2[2];
 | 
						|
};
 | 
						|
 | 
						|
/* Scan Command Timeout PageCode=20H */
 | 
						|
struct mode_page_20 {
 | 
						|
  SANE_Byte modedatalen;
 | 
						|
  SANE_Byte mediumtype;
 | 
						|
  SANE_Byte devicespecificparam;
 | 
						|
  SANE_Byte blockdescriptorlen;
 | 
						|
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte paramlen;
 | 
						|
  SANE_Byte timeoutmanual;
 | 
						|
  SANE_Byte timeoutadf;
 | 
						|
  SANE_Byte reserved[4];
 | 
						|
};
 | 
						|
 | 
						|
/* Icon Definition PageCode=21H */
 | 
						|
struct mode_page_21 {
 | 
						|
  SANE_Byte modedatalen;
 | 
						|
  SANE_Byte mediumtype;
 | 
						|
  SANE_Byte devicespecificparam;
 | 
						|
  SANE_Byte blockdescriptorlen;
 | 
						|
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte paramlen;
 | 
						|
  SANE_Byte iconwidth[2];
 | 
						|
  SANE_Byte iconlength[2];
 | 
						|
  SANE_Byte reserved[2];
 | 
						|
};
 | 
						|
 | 
						|
/* Bar/Patch Code search priority order PageCode=30H */
 | 
						|
struct mode_page_30 {
 | 
						|
  SANE_Byte modedatalen;
 | 
						|
  SANE_Byte mediumtype;
 | 
						|
  SANE_Byte devicespecificparam;
 | 
						|
  SANE_Byte blockdescriptorlen;
 | 
						|
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte paramlen;
 | 
						|
  SANE_Byte priority[6];
 | 
						|
};
 | 
						|
 | 
						|
/* Bar/Patch Code search parameters 1 of 3 PageCode=31H */
 | 
						|
struct mode_page_31 {
 | 
						|
  SANE_Byte modedatalen;
 | 
						|
  SANE_Byte mediumtype;
 | 
						|
  SANE_Byte devicespecificparam;
 | 
						|
  SANE_Byte blockdescriptorlen;
 | 
						|
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte paramlen;
 | 
						|
  SANE_Byte minbarheight[2];
 | 
						|
  SANE_Byte searchcount;
 | 
						|
  SANE_Byte searchmode;
 | 
						|
  SANE_Byte searchtimeout[2];
 | 
						|
};
 | 
						|
 | 
						|
/* Bar/Patch Code search parameters 2 of 3 PageCode=32H */
 | 
						|
struct mode_page_32 {
 | 
						|
  SANE_Byte modedatalen;
 | 
						|
  SANE_Byte mediumtype;
 | 
						|
  SANE_Byte devicespecificparam;
 | 
						|
  SANE_Byte blockdescriptorlen;
 | 
						|
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte paramlen;
 | 
						|
  SANE_Byte relmax[2];
 | 
						|
  SANE_Byte barmin[2];
 | 
						|
  SANE_Byte barmax[2];
 | 
						|
};
 | 
						|
 | 
						|
/* Bar/Patch Code search parameters 3 of 3 PageCode=33H */
 | 
						|
struct mode_page_33 {
 | 
						|
  SANE_Byte modedatalen;
 | 
						|
  SANE_Byte mediumtype;
 | 
						|
  SANE_Byte devicespecificparam;
 | 
						|
  SANE_Byte blockdescriptorlen;
 | 
						|
 | 
						|
  SANE_Byte pagecode;
 | 
						|
  SANE_Byte paramlen;
 | 
						|
  SANE_Byte barcodecontrast[2];
 | 
						|
  SANE_Byte patchmode[2];
 | 
						|
  SANE_Byte reserved[2];
 | 
						|
};
 | 
						|
 | 
						|
#ifndef sane_isbasicframe
 | 
						|
#define SANE_FRAME_TEXT 10
 | 
						|
#define SANE_FRAME_JPEG 11
 | 
						|
#define SANE_FRAME_G31D 12
 | 
						|
#define SANE_FRAME_G32D 13
 | 
						|
#define SANE_FRAME_G42D 14
 | 
						|
#define sane_strframe(f) ( (f) == SANE_FRAME_GRAY ? "gray" : \
 | 
						|
  (f) == SANE_FRAME_RGB ? "RGB" : \
 | 
						|
  (f) == SANE_FRAME_RED ? "red" : \
 | 
						|
  (f) == SANE_FRAME_GREEN ? "green" : \
 | 
						|
  (f) == SANE_FRAME_BLUE ? "blue" : \
 | 
						|
  (f) == SANE_FRAME_TEXT ? "text" : \
 | 
						|
  (f) == SANE_FRAME_JPEG ? "jpeg" : \
 | 
						|
  (f) == SANE_FRAME_G31D ? "g31d" : \
 | 
						|
  (f) == SANE_FRAME_G32D ? "g32d" : \
 | 
						|
  (f) == SANE_FRAME_G42D ? "g42d" : \
 | 
						|
  "unknown" )
 | 
						|
 | 
						|
#define sane_isbasicframe(f) ( (f) == SANE_FRAME_GRAY || \
 | 
						|
  (f) == SANE_FRAME_RGB || \
 | 
						|
  (f) == SANE_FRAME_RED || \
 | 
						|
  (f) == SANE_FRAME_GREEN || \
 | 
						|
  (f) == SANE_FRAME_BLUE )
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* BH_H */
 |