kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			
		
			
				
	
	
		
			199 wiersze
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			199 wiersze
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
| /* sane - Scanner Access Now Easy.
 | |
|    Copyright (C) 1997 David Mosberger-Tang
 | |
|    This file is part of the SANE package.
 | |
| 
 | |
|    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.
 | |
| 
 | |
|    Portions of this code are derived from Scott Laird's qcam driver.
 | |
|    It's copyright notice is reproduced here:
 | |
| 
 | |
|    Copyright (C) 1996 by Scott Laird
 | |
| 
 | |
|    Permission is hereby granted, free of charge, to any person
 | |
|    obtaining a copy of this software and associated documentation
 | |
|    files (the "Software"), to deal in the Software without
 | |
|    restriction, including without limitation the rights to use, copy,
 | |
|    modify, merge, publish, distribute, sublicense, and/or sell copies
 | |
|    of the Software, and to permit persons to whom the Software is
 | |
|    furnished to do so, subject to the following conditions:
 | |
| 
 | |
|    The above copyright notice and this permission notice shall be
 | |
|    included in all copies or substantial portions of the Software.
 | |
| 
 | |
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | |
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | |
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | |
|    NONINFRINGEMENT.  IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY
 | |
|    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
 | |
|    CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 | |
|    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
 | |
| 
 | |
| #ifndef qcam_h
 | |
| #define qcam_h
 | |
| 
 | |
| #include <sane/sane.h>
 | |
| 
 | |
| typedef enum
 | |
|   {
 | |
|     QC_MONO	= 0x01,
 | |
|     QC_COLOR	= 0x10
 | |
|   }
 | |
| QC_Model;
 | |
| 
 | |
| typedef enum
 | |
|   {
 | |
|     QC_RES_LOW = 0,
 | |
|     QC_RES_HIGH
 | |
|   }
 | |
| QC_Resolution;
 | |
| 
 | |
| /* commands common to all quick-cameras: */
 | |
| typedef enum
 | |
|   {
 | |
|     QC_SEND_VIDEO_FRAME		=  7,
 | |
|     QC_SET_BRIGHTNESS		= 11,
 | |
|     QC_SET_TOP			= 13,
 | |
|     QC_SET_LEFT			= 15,
 | |
|     QC_SET_NUM_V		= 17,
 | |
|     QC_SET_NUM_H		= 19,
 | |
|     QC_SEND_VERSION		= 23,
 | |
|     QC_SET_BLACK		= 29,
 | |
|     QC_SET_WHITE		= 31,
 | |
|     QC_SET_SATURATION		= 35,
 | |
|     QC_SEND_STATUS		= 41,
 | |
|     QC_SET_SPEED		= 45
 | |
|   }
 | |
| QC_Command;
 | |
| 
 | |
| /* commands for grayscale camera: */
 | |
| typedef enum
 | |
|   {
 | |
|     QC_MONO_SET_CONTRAST	= 25,
 | |
|     QC_MONO_AUTO_ADJUST_OFFSET	= 27,
 | |
|     QC_MONO_GET_OFFSET		= 33
 | |
|   }
 | |
| QC_Mono_Command;
 | |
| 
 | |
| /* commands for color camera: */
 | |
| typedef enum
 | |
|   {
 | |
|     QC_COL_LOAD_RAM		= 27,
 | |
|     QC_COL_SET_HUE		= 33,
 | |
|     QC_COL_SET_CONTRAST		= 37
 | |
|   }
 | |
| QC_Col_Command;
 | |
| 
 | |
| typedef enum
 | |
|   {
 | |
|     OPT_NUM_OPTS = 0,
 | |
| 
 | |
|     OPT_MODE_GROUP,
 | |
|     OPT_DEPTH,			/* 4 or 6 (b&w) or 24 (color) */
 | |
|     OPT_RESOLUTION,		/* resolution in pixels */
 | |
|     OPT_XFER_SCALE,		/* transfer-scale */
 | |
|     OPT_DESPECKLE,		/* turn on despeckling? */
 | |
|     OPT_TEST,			/* test image */
 | |
| 
 | |
|     OPT_GEOMETRY_GROUP,
 | |
|     OPT_TL_X,			/* top-left x */
 | |
|     OPT_TL_Y,			/* top-left y */
 | |
|     OPT_BR_X,			/* bottom-right x */
 | |
|     OPT_BR_Y,			/* bottom-right y */
 | |
| 
 | |
|     OPT_ENHANCEMENT_GROUP,
 | |
|     OPT_BRIGHTNESS,
 | |
|     OPT_CONTRAST,
 | |
|     OPT_BLACK_LEVEL,
 | |
|     OPT_WHITE_LEVEL,
 | |
|     OPT_HUE,
 | |
|     OPT_SATURATION,
 | |
| 
 | |
|     /* must come last: */
 | |
|     NUM_OPTIONS
 | |
|   }
 | |
| QC_Option;
 | |
| 
 | |
| typedef union
 | |
|   {
 | |
|     SANE_Word w;
 | |
|     SANE_Word *wa;		/* word array */
 | |
|     SANE_String s;
 | |
|   }
 | |
| Option_Value;
 | |
| 
 | |
| typedef enum
 | |
|   {
 | |
|     QC_UNIDIR,
 | |
|     QC_BIDIR
 | |
|   } QC_Port_Mode;
 | |
| 
 | |
| typedef struct
 | |
|   {
 | |
|     size_t num_bytes;		/* # of bytes to read */
 | |
|     QC_Resolution resolution;	/* high-resolution? */
 | |
|     SANE_Parameters params;	/* other parameters */
 | |
|     u_int mode;			/* qcam scan code (get video data command) */
 | |
|     int despeckle;		/* apply despeckling filter? */
 | |
|   }
 | |
| QC_Scan_Request;
 | |
| 
 | |
| typedef struct QC_Device
 | |
|   {
 | |
|     struct QC_Device * next;
 | |
|     SANE_Device sane;
 | |
|     QC_Port_Mode port_mode;
 | |
|     int port;			/* i/o port address */
 | |
|     int version;		/* camera version */
 | |
|     int lock_fd;		/* used for locking protocol */
 | |
|   }
 | |
| QC_Device;
 | |
| 
 | |
| typedef struct QC_Scanner
 | |
|   {
 | |
|     struct QC_Scanner *next;
 | |
| 
 | |
|     SANE_Option_Descriptor opt[NUM_OPTIONS];
 | |
|     Option_Value val[NUM_OPTIONS];
 | |
|     QC_Resolution resolution;
 | |
|     SANE_Parameters params;
 | |
|     QC_Device *hw;
 | |
|     SANE_Int user_corner;	/* bitmask of user-selected coordinates */
 | |
|     SANE_Int value_changed;	/* bitmask of options that were set */
 | |
|     SANE_Bool scanning;
 | |
|     SANE_Bool deliver_eof;
 | |
|     SANE_Bool holding_lock;	/* are we holding the lock? */
 | |
|     /* state for reading a frame: */
 | |
|     size_t num_bytes;		/* # of bytes read so far */
 | |
|     size_t bytes_per_frame;	/* total number of bytes in frame */
 | |
|     /* state relating to the reader-process */
 | |
|     int reader_pid;		/* -1 if there is no reader process (yet) */
 | |
|     int from_child;		/* fd to read from child process*/
 | |
|     int to_child;		/* fd to write to child */
 | |
|     int read_fd;		/* used to read data */
 | |
|     /* internal state for qc_readbytes(): */
 | |
|     int readbytes_state;
 | |
|     unsigned int saved_bits;
 | |
|   }
 | |
| QC_Scanner;
 | |
| 
 | |
| #endif /* qcam_h */
 |