kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			
		
			
				
	
	
		
			197 wiersze
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			197 wiersze
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
| /*
 | |
|  * epsonds.c - Epson ESC/I-2 driver.
 | |
|  *
 | |
|  * Copyright (C) 2015 Tower Technologies
 | |
|  * Author: Alessandro Zummo <a.zummo@towertech.it>
 | |
|  *
 | |
|  * 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, version 2.
 | |
|  */
 | |
| 
 | |
| #ifndef epsonds_h
 | |
| #define epsonds_h
 | |
| 
 | |
| #undef BACKEND_NAME
 | |
| #define BACKEND_NAME epsonds
 | |
| #define DEBUG_NOT_STATIC
 | |
| 
 | |
| #ifdef HAVE_SYS_IOCTL_H
 | |
| #include <sys/ioctl.h>
 | |
| #endif
 | |
| 
 | |
| #ifdef HAVE_STDDEF_H
 | |
| #include <stddef.h>
 | |
| #endif
 | |
| 
 | |
| #ifdef HAVE_STDLIB_H
 | |
| #include <stdlib.h>
 | |
| #endif
 | |
| 
 | |
| #ifdef NEED_SYS_TYPES_H
 | |
| #include <sys/types.h>
 | |
| #endif
 | |
| 
 | |
| #include <string.h> /* for memset and memcpy */
 | |
| #include <stdio.h>
 | |
| 
 | |
| #include "sane/sane.h"
 | |
| #include "sane/sanei_backend.h"
 | |
| #include "sane/sanei_debug.h"
 | |
| #include "sane/sanei_usb.h"
 | |
| #include "sane/sanei_jpeg.h"
 | |
| 
 | |
| #define EPSONDS_CONFIG_FILE "epsonds.conf"
 | |
| 
 | |
| #ifndef PATH_MAX
 | |
| #define PATH_MAX (1024)
 | |
| #endif
 | |
| 
 | |
| #ifndef XtNumber
 | |
| #define XtNumber(x)  (sizeof(x) / sizeof(x[0]))
 | |
| #define XtOffset(p_type, field)  ((size_t)&(((p_type)NULL)->field))
 | |
| #define XtOffsetOf(s_type, field)  XtOffset(s_type*, field)
 | |
| #endif
 | |
| 
 | |
| #define ACK	0x06
 | |
| #define NAK	0x15
 | |
| #define	FS	0x1C
 | |
| 
 | |
| #define FBF_STR SANE_I18N("Flatbed")
 | |
| #define TPU_STR SANE_I18N("Transparency Unit")
 | |
| #define ADF_STR SANE_I18N("Automatic Document Feeder")
 | |
| 
 | |
| enum {
 | |
| 	OPT_NUM_OPTS = 0,
 | |
| 	OPT_MODE_GROUP,
 | |
| 	OPT_MODE,
 | |
| 	OPT_DEPTH,
 | |
| 	OPT_RESOLUTION,
 | |
| 	OPT_GEOMETRY_GROUP,
 | |
| 	OPT_TL_X,
 | |
| 	OPT_TL_Y,
 | |
| 	OPT_BR_X,
 | |
| 	OPT_BR_Y,
 | |
| 	OPT_EQU_GROUP,
 | |
| 	OPT_SOURCE,
 | |
| 	OPT_EJECT,
 | |
| 	OPT_LOAD,
 | |
| 	OPT_ADF_MODE,
 | |
| 	OPT_ADF_SKEW,
 | |
| 	NUM_OPTIONS
 | |
| };
 | |
| 
 | |
| typedef enum
 | |
| {	/* hardware connection to the scanner */
 | |
| 	SANE_EPSONDS_NODEV,	/* default, no HW specified yet */
 | |
| 	SANE_EPSONDS_USB,	/* USB interface */
 | |
| 	SANE_EPSONDS_NET	/* network interface */
 | |
| } epsonds_conn_type;
 | |
| 
 | |
| /* hardware description */
 | |
| 
 | |
| struct epsonds_device
 | |
| {
 | |
| 	struct epsonds_device *next;
 | |
| 
 | |
| 	epsonds_conn_type connection;
 | |
| 
 | |
| 	char *name;
 | |
| 	char *model;
 | |
| 
 | |
| 	unsigned int model_id;
 | |
| 
 | |
| 	SANE_Device sane;
 | |
| 	SANE_Range *x_range;
 | |
| 	SANE_Range *y_range;
 | |
| 	SANE_Range dpi_range;
 | |
| 	SANE_Byte alignment;
 | |
| 
 | |
| 
 | |
| 	SANE_Int *res_list;		/* list of resolutions */
 | |
| 	SANE_Int *depth_list;
 | |
| 	SANE_Int max_depth;		/* max. color depth */
 | |
| 
 | |
| 	SANE_Bool has_raw;		/* supports RAW format */
 | |
| 
 | |
| 	SANE_Bool has_fb;		/* flatbed */
 | |
| 	SANE_Range fbf_x_range;	        /* x range */
 | |
| 	SANE_Range fbf_y_range;	        /* y range */
 | |
| 	SANE_Byte fbf_alignment;	/* left, center, right */
 | |
| 	SANE_Bool fbf_has_skew;		/* supports skew correction */
 | |
| 
 | |
| 	SANE_Bool has_adf;		/* adf */
 | |
| 	SANE_Range adf_x_range;	        /* x range */
 | |
| 	SANE_Range adf_y_range;	        /* y range */
 | |
| 	SANE_Bool adf_is_duplex;	/* supports duplex mode */
 | |
| 	SANE_Bool adf_singlepass;	/* supports single pass duplex */
 | |
| 	SANE_Bool adf_has_skew;		/* supports skew correction */
 | |
| 	SANE_Bool adf_has_load;		/* supports load command */
 | |
| 	SANE_Bool adf_has_eject;	/* supports eject command */
 | |
| 	SANE_Byte adf_alignment;	/* left, center, right */
 | |
| 	SANE_Byte adf_has_dfd;		/* supports double feed detection */
 | |
| 
 | |
| 	SANE_Bool has_tpu;		/* tpu */
 | |
| 	SANE_Range tpu_x_range;	        /* transparency unit x range */
 | |
| 	SANE_Range tpu_y_range;	        /* transparency unit y range */
 | |
| };
 | |
| 
 | |
| typedef struct epsonds_device epsonds_device;
 | |
| 
 | |
| typedef struct ring_buffer
 | |
| {
 | |
| 	SANE_Byte *ring, *wp, *rp, *end;
 | |
| 	SANE_Int fill, size;
 | |
| 
 | |
| } ring_buffer;
 | |
| 
 | |
| /* an instance of a scanner */
 | |
| 
 | |
| struct epsonds_scanner
 | |
| {
 | |
| 	struct epsonds_scanner *next;
 | |
| 	struct epsonds_device *hw;
 | |
| 
 | |
| 	int fd;
 | |
| 
 | |
| 	SANE_Option_Descriptor opt[NUM_OPTIONS];
 | |
| 	Option_Value val[NUM_OPTIONS];
 | |
| 	SANE_Parameters params;
 | |
| 
 | |
| 	SANE_Byte *buf, *line_buffer;
 | |
| 	ring_buffer *current, front, back;
 | |
| 
 | |
| 	SANE_Bool eof, scanning, canceling, locked, backside, mode_jpeg;
 | |
| 
 | |
| 	SANE_Int left, top, pages, dummy;
 | |
| 
 | |
| 	/* jpeg stuff */
 | |
| 
 | |
| 	djpeg_dest_ptr jdst;
 | |
| 	struct jpeg_decompress_struct jpeg_cinfo;
 | |
| 	struct jpeg_error_mgr jpeg_err;
 | |
| 	SANE_Bool jpeg_header_seen;
 | |
| 
 | |
| 	/* network buffers */
 | |
| 	unsigned char *netbuf, *netptr;
 | |
| 	size_t netlen;
 | |
| };
 | |
| 
 | |
| typedef struct epsonds_scanner epsonds_scanner;
 | |
| 
 | |
| struct mode_param
 | |
| {
 | |
| 	int color;
 | |
| 	int flags;
 | |
| 	int dropout_mask;
 | |
| 	int depth;
 | |
| };
 | |
| 
 | |
| enum {
 | |
| 	MODE_BINARY, MODE_GRAY, MODE_COLOR
 | |
| };
 | |
| 
 | |
| #endif
 |