kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			
		
			
				
	
	
		
			432 wiersze
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			432 wiersze
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
| /*.............................................................................
 | |
|  * Project : SANE library for Plustek flatbed scanners.
 | |
|  *.............................................................................
 | |
|  */
 | |
| 
 | |
| /** @file plustek.h
 | |
|  *  @brief Definitions for the backend.
 | |
|  *
 | |
|  * Based on Kazuhiro Sasayama previous
 | |
|  * work on plustek.[ch] file from the SANE package.<br>
 | |
|  *
 | |
|  * original code taken from sane-0.71<br>
 | |
|  * Copyright (C) 1997 Hypercore Software Design, Ltd.<br>
 | |
|  * Copyright (C) 2001-2007 Gerhard Jaeger <gerhard@gjaeger.de>
 | |
|  *
 | |
|  * History:
 | |
|  * - 0.30 - initial version
 | |
|  * - 0.31 - no changes
 | |
|  * - 0.32 - no changes
 | |
|  * - 0.33 - no changes
 | |
|  * - 0.34 - moved some definitions and typedefs from plustek.c
 | |
|  * - 0.35 - removed OPT_MODEL from options list
 | |
|  *        - added max_y to struct Plustek_Scan
 | |
|  * - 0.36 - added reader_pid, pipe and bytes_read to struct Plustek_Scanner
 | |
|  *        - removed unused variables from struct Plustek_Scanner
 | |
|  *        - moved fd from struct Plustek_Scanner to Plustek_Device
 | |
|  *        - added next members to struct Plustek_Scanner and Plustek_Device
 | |
|  * - 0.37 - added max_x to struct Plustek_Device
 | |
|  * - 0.38 - added caps to struct Plustek_Device
 | |
|  *        - added exit code to struct Plustek_Scanner
 | |
|  *        - removed dropout stuff
 | |
|  * - 0.39 - PORTTYPE enum
 | |
|  *        - added function pointers to control a scanner device
 | |
|  *          (Parport and USB)
 | |
|  * - 0.40 - added USB stuff
 | |
|  * - 0.41 - added configuration stuff
 | |
|  * - 0.42 - added custom gamma tables
 | |
|  *        - changed usbId to static array
 | |
|  *        - added _MAX_ID_LEN
 | |
|  * - 0.43 - no changes
 | |
|  * - 0.44 - added flag initialized
 | |
|  * - 0.45 - added readLine function
 | |
|  * - 0.46 - flag initialized is now used as device index
 | |
|  *        - added calFile to Plustek_Device
 | |
|  *        - removed _OPT_HALFTONE
 | |
|  * - 0.47 - added mov to adjustment
 | |
|  *        - changed stopScan function definition
 | |
|  *        - removed open function
 | |
|  *        - added OPT_LAMPSWITCH and OPT_WARMUPTIME
 | |
|  * - 0.48 - added OPT_CACHECAL, OPT_OVR_*, OPT_LAMPOFF_TIMER and
 | |
|  *          OPT_LAMPOFF_ONEND, also did some cleanup
 | |
|  *        - moved SCANDEF definitions to plustek-usb.h
 | |
|  *        - removed function pointer
 | |
|  *        - added OPT_BIT_DEPTH
 | |
|  * - 0.49 - added typedef struct DevList
 | |
|  *        - added button stuff
 | |
|  *        - added transferRate to struct Plustek_Device
 | |
|  * - 0.50 - cleanup
 | |
|  *        - added OPT_SPEEDUP
 | |
|  * - 0.51 - added OPT_CALIBRATE
 | |
|  * - 0.52 - added skipDarkStrip and incDarkTgt to struct AdjDef
 | |
|  *        - added OPT_LOFF4DARK
 | |
|  * .
 | |
|  * <hr>
 | |
|  * 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.
 | |
|  * <hr>
 | |
|  */
 | |
| #ifndef __PLUSTEK_H__
 | |
| #define __PLUSTEK_H__
 | |
| 
 | |
| /************************ some definitions ***********************************/
 | |
| 
 | |
| 
 | |
| #define PLUSTEK_CONFIG_FILE	"plustek.conf"
 | |
| 
 | |
| #ifndef PATH_MAX
 | |
| # define PATH_MAX 1024
 | |
| #endif
 | |
| 
 | |
| #define _MEASURE_BASE       300UL
 | |
| #define _DEF_DPI            50
 | |
| #define DEFAULT_RATE        1000000
 | |
| 
 | |
| /** the default image size
 | |
|  */
 | |
| #define _DEFAULT_TLX          0     /* 0..216 mm */
 | |
| #define _DEFAULT_TLY          0     /* 0..297 mm */
 | |
| #define _DEFAULT_BRX        103     /* 0..216 mm */
 | |
| #define _DEFAULT_BRY         76.21  /* 0..297 mm */
 | |
| 
 | |
| #define _DEFAULT_TP_TLX      3.5    /* 0..42.3 mm */
 | |
| #define _DEFAULT_TP_TLY     10.5    /* 0..43.1 mm */
 | |
| #define _DEFAULT_TP_BRX     38.5    /* 0..42.3 mm */
 | |
| #define _DEFAULT_TP_BRY     33.5    /* 0..43.1 mm */
 | |
| 
 | |
| #define _DEFAULT_NEG_TLX     1.5    /* 0..38.9 mm */
 | |
| #define _DEFAULT_NEG_TLY     1.5    /* 0..29.6 mm */
 | |
| #define _DEFAULT_NEG_BRX    37.5    /* 0..38.9 mm */
 | |
| #define _DEFAULT_NEG_BRY    25.5    /* 0..29.6 mm */
 | |
| 
 | |
| /** image sizes for normal, transparent and negative modes
 | |
|  */
 | |
| #define _TPAPageWidth        500UL
 | |
| #define _TPAPageHeight       510UL
 | |
| #define _TPALargePageWidth  1270UL
 | |
| #define _TPALargePageHeight 1570UL
 | |
| #define _TPAMinDpi           150
 | |
| 
 | |
| #define _NegPageWidth        460UL
 | |
| #define _NegPageHeight       350UL
 | |
| #define _NegLargePageWidth  1270UL
 | |
| #define _NegLargePageHeight 1570UL
 | |
| 
 | |
| #define _SCALE(X) ((double)(X)/300.0 * MM_PER_INCH)
 | |
| 
 | |
| /** scan modes
 | |
|  */
 | |
| #define COLOR_BW        0
 | |
| #define COLOR_256GRAY   1
 | |
| #define COLOR_GRAY16    2
 | |
| #define COLOR_TRUE24    3
 | |
| #define COLOR_TRUE48    4
 | |
| 
 | |
| /** usb id buffer
 | |
|  */
 | |
| #define _MAX_ID_LEN 20
 | |
| 
 | |
| /**
 | |
|  */
 | |
| #define SFLAG_ADF   0x00000010  /* Automatic document feeder    */
 | |
| #define SFLAG_TPA   0x00000080  /* has transparency adapter     */
 | |
| 
 | |
| /**
 | |
|  */
 | |
| #define SOURCE_Reflection   0
 | |
| #define SOURCE_Transparency 1
 | |
| #define SOURCE_Negative     2
 | |
| #define SOURCE_ADF          3
 | |
| 
 | |
| /** for Gamma tables
 | |
|  */
 | |
| #define _MAP_RED    0
 | |
| #define _MAP_GREEN  1
 | |
| #define _MAP_BLUE   2
 | |
| #define _MAP_MASTER 3
 | |
| 
 | |
| /** generic error codes...
 | |
|  */
 | |
| #define _FIRST_ERR -9000
 | |
| 
 | |
| #define _E_ALLOC            (_FIRST_ERR-1)  /**< error allocating memory    */
 | |
| #define _E_INVALID          (_FIRST_ERR-2)  /**< invalid parameter detected */
 | |
| #define _E_INTERNAL         (_FIRST_ERR-3)  /**< internal error             */
 | |
| #define _E_ABORT            (_FIRST_ERR-4)  /**< operation aborted          */
 | |
| 
 | |
| #define _E_LAMP_NOT_IN_POS  (_FIRST_ERR-10)
 | |
| #define _E_LAMP_NOT_STABLE  (_FIRST_ERR-11)
 | |
| #define _E_NODATA           (_FIRST_ERR-12)
 | |
| #define _E_BUFFER_TOO_SMALL (_FIRST_ERR-13)
 | |
| #define _E_DATAREAD         (_FIRST_ERR-14)
 | |
| 
 | |
| /************************ some structures ************************************/
 | |
| 
 | |
| #define _ENABLE(option)  s->opt[option].cap &= ~SANE_CAP_INACTIVE
 | |
| #define _DISABLE(option) s->opt[option].cap |=  SANE_CAP_INACTIVE
 | |
| 
 | |
| enum {
 | |
| 	OPT_NUM_OPTS = 0,
 | |
| 	OPT_MODE_GROUP,
 | |
| 	OPT_MODE,
 | |
| 	OPT_BIT_DEPTH,
 | |
| 	OPT_EXT_MODE,
 | |
| 	OPT_RESOLUTION,
 | |
| 	OPT_PREVIEW,
 | |
| 	OPT_GEOMETRY_GROUP,
 | |
| 	OPT_TL_X,
 | |
| 	OPT_TL_Y,
 | |
| 	OPT_BR_X,
 | |
| 	OPT_BR_Y,
 | |
| 	OPT_ENHANCEMENT_GROUP,
 | |
| 	OPT_BRIGHTNESS,
 | |
| 	OPT_CONTRAST,
 | |
| 	OPT_CUSTOM_GAMMA,
 | |
| 	OPT_GAMMA_VECTOR,
 | |
| 	OPT_GAMMA_VECTOR_R,
 | |
| 	OPT_GAMMA_VECTOR_G,
 | |
| 	OPT_GAMMA_VECTOR_B,
 | |
| 	OPT_DEVICE_GROUP,
 | |
| 	OPT_LAMPSWITCH,
 | |
| 	OPT_LAMPOFF_TIMER,
 | |
| 	OPT_LAMPOFF_ONEND,
 | |
| 	OPT_WARMUPTIME,
 | |
| 	OPT_LOFF4DARK,
 | |
| 	OPT_CACHECAL,
 | |
| 	OPT_SPEEDUP,
 | |
| 	OPT_CALIBRATE,
 | |
| 	OPT_AFE_GROUP,
 | |
| 	OPT_OVR_REDGAIN,
 | |
| 	OPT_OVR_GREENGAIN,
 | |
| 	OPT_OVR_BLUEGAIN,
 | |
| 	OPT_OVR_REDOFS,
 | |
| 	OPT_OVR_GREENOFS,
 | |
| 	OPT_OVR_BLUEOFS,
 | |
| 	OPT_OVR_RED_LOFF,
 | |
| 	OPT_OVR_GREEN_LOFF,
 | |
| 	OPT_OVR_BLUE_LOFF,
 | |
| 	OPT_BUTTON_GROUP,
 | |
| 	OPT_BUTTON_0,
 | |
| 	OPT_BUTTON_1,
 | |
| 	OPT_BUTTON_2,
 | |
| 	OPT_BUTTON_3,
 | |
| 	OPT_BUTTON_4,
 | |
| 	OPT_BUTTON_LAST = OPT_BUTTON_4,
 | |
| 	NUM_OPTIONS
 | |
| };
 | |
| 
 | |
| /**
 | |
|  */
 | |
| typedef struct {
 | |
| 	int x;
 | |
| 	int y;
 | |
| } OffsDef, *pOffsDef;
 | |
| 
 | |
| /** for adjusting the scanner settings
 | |
|  */
 | |
| typedef struct {
 | |
| 	int     mov;                /**< model override */
 | |
| 	int     lampOff;
 | |
| 	int     lampOffOnEnd;
 | |
| 	int     warmup;
 | |
| 	int     enableTpa;
 | |
| 	int     skipCalibration;  /**< skip entire calibration */
 | |
| 	int     skipFine;
 | |
| 	int     skipFineWhite;
 | |
| 	int     skipDarkStrip;
 | |
| 	int     incDarkTgt;
 | |
| 	int     disableSpeedup;
 | |
| 	int     invertNegatives;
 | |
| 	int     cacheCalData;
 | |
| 	int     altCalibrate;  /* force use of the alternate canoscan autocal;
 | |
| 	                          perhaps other Canon scanners require the
 | |
| 	                          alternate autocalibration as well */
 | |
| 	/* AFE adjustemnts, gain and offset */
 | |
| 	int rgain;
 | |
| 	int ggain;
 | |
| 	int bgain;
 | |
| 	int rofs;
 | |
| 	int gofs;
 | |
| 	int bofs;
 | |
| 	
 | |
| 	int rlampoff;   /* for red lamp off setting (CIS-scanner)   */
 | |
| 	int glampoff;   /* for green lamp off setting (CIS-scanner) */
 | |
| 	int blampoff;   /* for blue lamp off setting (CIS-scanner)  */
 | |
| 
 | |
| 	OffsDef pos;    /* for adjusting normal scan area       */
 | |
| 	OffsDef tpa;    /* for adjusting transparency scan area */
 | |
| 	OffsDef neg;    /* for adjusting negative scan area     */
 | |
| 
 | |
| 	int     posShadingY;
 | |
| 	int     tpaShadingY;
 | |
| 	int     negShadingY;
 | |
| 
 | |
| 	/* for adjusting the default gamma settings */
 | |
| 	double  rgamma;
 | |
| 	double  ggamma;
 | |
| 	double  bgamma;
 | |
| 
 | |
| 	double  graygamma;
 | |
| 
 | |
| } AdjDef;
 | |
| 
 | |
| typedef struct {
 | |
| 	unsigned short x;
 | |
| 	unsigned short y;
 | |
| 	unsigned short cx;
 | |
| 	unsigned short cy;
 | |
| } CropRect;
 | |
| 
 | |
| typedef struct image {
 | |
| 	unsigned long  dwFlag;
 | |
| 	CropRect       crArea;
 | |
| 	XY             xyDpi;
 | |
| 	unsigned short wDataType;
 | |
| } ImgDef;
 | |
| 
 | |
| typedef struct {
 | |
| 	unsigned long dwPixelsPerLine;
 | |
| 	unsigned long dwBytesPerLine;
 | |
| 	unsigned long dwLinesPerArea;
 | |
| 	ImgDef        ImgDef;
 | |
| } CropInfo;
 | |
| 
 | |
| typedef struct {
 | |
| 	ImgDef ImgDef;
 | |
| 	short  siBrightness;
 | |
| 	short  siContrast;
 | |
| } ScanInfo;
 | |
| 
 | |
| typedef struct {
 | |
| 	unsigned long  dwFlag;
 | |
| 	unsigned short wMaxExtentX; /**< scanarea width  */
 | |
| 	unsigned short wMaxExtentY; /**< scanarea height */
 | |
| } ScannerCaps;
 | |
| 
 | |
| typedef struct Plustek_Device
 | |
| {
 | |
| 	SANE_Int               initialized;      /* device already initialized?  */
 | |
| 	struct Plustek_Device *next;             /* pointer to next dev in list  */
 | |
| 	int                    fd;               /* device handle                */
 | |
| 	char                  *name;             /* (to avoid compiler warnings!)*/
 | |
| 	char                  *calFile;          /* for saving calibration data  */
 | |
| 	unsigned long          transferRate;     /* detected USB-Speed in Bytes/s*/
 | |
| 	SANE_Device            sane;             /* info struct                  */
 | |
| 	SANE_Int               max_x;            /* max XY-extension of the scan-*/
 | |
| 	SANE_Int               max_y;            /* area                         */
 | |
| 	SANE_Range             dpi_range;        /* resolution range             */
 | |
| 	SANE_Range             x_range;          /* x-range of the scan-area     */
 | |
| 	SANE_Range             y_range;          /* y-range of the scan-area     */
 | |
| 	SANE_Int              *res_list;         /* to hold the available phys.  */
 | |
| 	SANE_Int               res_list_size;    /* resolution values            */
 | |
| 	ScannerCaps            caps;             /* caps reported by the driver  */
 | |
| 	AdjDef                 adj;              /* for driver adjustment        */
 | |
| 
 | |
| 	/**************************** USB-stuff **********************************/
 | |
| 	char                   usbId[_MAX_ID_LEN];/* to keep Vendor and product  */
 | |
| 	                                         /* ID string (from conf) file   */
 | |
| 	struct ScanDef         scanning;         /* here we hold all stuff for   */
 | |
| 	                                         /* the USB-scanner              */
 | |
| 	struct DeviceDef       usbDev;
 | |
| #ifdef HAVE_SETITIMER
 | |
| 	struct itimerval       saveSettings;     /* for lamp timer               */
 | |
| #endif
 | |
| 
 | |
| } Plustek_Device;
 | |
| 
 | |
| #ifndef SANE_OPTION
 | |
| /* for compatibility with older versions */
 | |
| typedef union
 | |
| {
 | |
| 	SANE_Word   w;
 | |
| 	SANE_Word  *wa;
 | |
| 	SANE_String s;
 | |
| } Option_Value;
 | |
| #endif
 | |
| 
 | |
| typedef struct Plustek_Scanner
 | |
| {
 | |
| 	struct Plustek_Scanner *next;
 | |
| 	SANE_Pid                reader_pid;     /* process id of reader          */
 | |
| 	SANE_Status             exit_code;      /* status of the reader process  */
 | |
| 	int                     r_pipe;         /* pipe to reader process        */
 | |
| 	int                     w_pipe;         /* pipe from reader process      */
 | |
| 	unsigned long           bytes_read;     /* number of bytes currently read*/
 | |
| 	Plustek_Device         *hw;             /* pointer to current device     */
 | |
| 	Option_Value            val[NUM_OPTIONS];
 | |
| 	SANE_Byte              *buf;            /* the image buffer              */
 | |
| 	SANE_Bool               scanning;       /* TRUE during scan-process      */
 | |
| 	SANE_Bool               calibrating;    /* TRUE during calibration       */
 | |
| 	SANE_Bool               ipc_read_done;  /* TRUE after ipc has been red   */
 | |
| 	SANE_Parameters         params;         /* for keeping the parameter     */
 | |
| 
 | |
| 	/************************** gamma tables *********************************/
 | |
| 
 | |
| 	SANE_Word   gamma_table[4][4096];
 | |
| 	SANE_Range  gamma_range;
 | |
| 	int         gamma_length;
 | |
| 
 | |
| 	SANE_Option_Descriptor opt[NUM_OPTIONS];
 | |
| 
 | |
| } Plustek_Scanner;
 | |
| 
 | |
| /** for collecting configuration info...
 | |
|  */
 | |
| typedef struct {
 | |
| 	
 | |
| 	char     devName[PATH_MAX];
 | |
| 	char     usbId[_MAX_ID_LEN];
 | |
| 
 | |
| 	/* contains the stuff to adjust... */
 | |
| 	AdjDef   adj;
 | |
| 
 | |
| } CnfDef;
 | |
| 
 | |
| /** for supported device list
 | |
|  */
 | |
| typedef struct DevList {
 | |
| 	SANE_Word       vendor_id;
 | |
| 	SANE_Word       device_id;
 | |
| 	SANE_Bool       attached;
 | |
| 	SANE_Char      *dev_name;
 | |
| 	struct DevList *next;
 | |
| } DevList;
 | |
| #endif	/* guard __PLUSTEK_H__ */
 | |
| 
 | |
| /* END PLUSTEK.H.............................................................*/
 |