summaryrefslogtreecommitdiff
path: root/backend/u12.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/u12.h')
-rw-r--r--backend/u12.h336
1 files changed, 336 insertions, 0 deletions
diff --git a/backend/u12.h b/backend/u12.h
new file mode 100644
index 0000000..5d18c96
--- /dev/null
+++ b/backend/u12.h
@@ -0,0 +1,336 @@
+/** @file u12.h
+ * @brief Definitions for the backend.
+ *
+ * Copyright (c) 2003-2004 Gerhard Jaeger <gerhard@gjaeger.de>
+ *
+ * History:
+ * - 0.01 - initial version
+ * - 0.02 - added scaling variables to struct u12d
+ * .
+ * <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 __U12_H__
+#define __U12_H__
+
+#ifndef SANE_OPTION
+/* for compatibility with older versions */
+typedef union
+{
+ SANE_Word w;
+ SANE_Word *wa; /* word array */
+ SANE_String s;
+} Option_Value;
+#endif
+
+/************************ some definitions ***********************************/
+
+#define U12_CONFIG_FILE "u12.conf"
+
+#ifndef PATH_MAX
+# define PATH_MAX 1024
+#endif
+
+#define _MM_PER_INCH 25.4
+#define _MEASURE_BASE 300UL
+#define _DEF_DPI 50
+
+/** the default image
+ */
+#define _DEFAULT_TLX 0
+#define _DEFAULT_TLY 0
+#define _DEFAULT_BRX 126
+#define _DEFAULT_BRY 76
+
+#define _DEFAULT_TP_TLX 3.5
+#define _DEFAULT_TP_TLY 10.5
+#define _DEFAULT_TP_BRX 38.5
+#define _DEFAULT_TP_BRY 33.5
+
+#define _DEFAULT_NEG_TLX 1.5
+#define _DEFAULT_NEG_TLY 1.5
+#define _DEFAULT_NEG_BRX 37.5
+#define _DEFAULT_NEG_BRY 25.5
+
+/** image sizes for normal, transparent and negative modes
+ */
+#define _TPAPageWidth 500U
+#define _TPAPageHeight 510U
+#define _TPAMinDpi 150
+#define _TPAModeSupportMin COLOR_TRUE24
+
+#define _NegativePageWidth 460UL
+#define _NegativePageHeight 350UL
+
+#define _TP_X ((double)_TPAPageWidth/300.0 * _MM_PER_INCH)
+#define _TP_Y ((double)_TPAPageHeight/300.0 * _MM_PER_INCH)
+#define _NEG_X ((double)_NegativePageWidth/300.0 * _MM_PER_INCH)
+#define _NEG_Y ((double)_NegativePageHeight/300.0 * _MM_PER_INCH)
+
+/** scan modes
+ */
+#define COLOR_BW 0
+#define COLOR_256GRAY 1
+#define COLOR_TRUE24 2
+#define COLOR_TRUE42 3
+
+#define _VAR_NOT_USED(x) ((x)=(x))
+
+
+/** usb id buffer
+ */
+#define _MAX_ID_LEN 20
+
+/** Scanmodes
+ */
+#define _ScanMode_Color 0
+#define _ScanMode_AverageOut 1 /* CCD averaged 2 pixels value for output*/
+#define _ScanMode_Mono 2 /* not color mode */
+
+/** Scansource + additional flags
+ */
+#define _SCANDEF_PREVIEW 0x00000001
+#define _SCANDEF_Transparency 0x00000100
+#define _SCANDEF_Negative 0x00000200
+#define _SCANDEF_TPA (_SCANDEF_Transparency | _SCANDEF_Negative)
+#define _SCANDEF_SCANNING 0x8000000
+
+/** for Gamma tables
+ */
+#define _MAP_RED 0
+#define _MAP_GREEN 1
+#define _MAP_BLUE 2
+#define _MAP_MASTER 3
+
+/** the ASIC modes */
+#define _PP_MODE_SPP 0
+#define _PP_MODE_EPP 1
+
+/************************ some structures ************************************/
+
+enum {
+ OPT_NUM_OPTS = 0,
+ OPT_MODE_GROUP,
+#ifdef ALL_MODES
+ OPT_MODE,
+ OPT_EXT_MODE,
+#endif
+ 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,
+ NUM_OPTIONS
+};
+
+/** for adjusting the scanner settings
+ */
+typedef struct {
+ int lampOff;
+ int lampOffOnEnd;
+ int warmup;
+
+ /* for adjusting the default gamma settings */
+ double rgamma;
+ double ggamma;
+ double bgamma;
+ double graygamma;
+
+ /* for adjusting scan-area */
+ long upNormal;
+ long upPositive;
+ long upNegative;
+ long leftNormal;
+
+} AdjDef, *pAdjDef;
+
+/** for holding basic capabilities
+ */
+typedef struct {
+ unsigned short scanAreaX;
+ unsigned short scanAreaY;
+ unsigned long flag;
+#if 0
+ RANGE rDataType; /* available scan modes */
+ unsigned short wMaxExtentX; /* scanarea width */
+ unsigned short wMaxExtentY; /* scanarea height */
+#endif
+} ScannerCaps, *pScannerCaps;
+
+
+/** for defining the scanmodes
+ */
+typedef const struct mode_param
+{
+ int color;
+ int depth;
+ int scanmode;
+} ModeParam, *pModeParam;
+
+/** Here we hold all device specific data
+ */
+typedef struct u12d
+{
+ SANE_Bool initialized; /* device already initialized? */
+ struct u12d *next; /* pointer to next dev in list */
+ int fd; /* device handle */
+ int mode;
+ char *name; /* (to avoid compiler warnings!)*/
+ SANE_Device sane; /* info struct */
+
+ /* scan-area settings */
+ SANE_Int max_x; /* max XY-extension of the scan-*/
+ SANE_Int max_y; /* area */
+ SANE_Range x_range; /* x-range of the scan-area */
+ SANE_Range y_range; /* y-range of the scan-area */
+
+ /* resolution settings */
+ SANE_Int dpi_max_x; /* */
+ SANE_Int dpi_max_y; /* */
+ SANE_Range dpi_range; /* resolution range */
+
+ 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 */
+
+ char usbId[_MAX_ID_LEN];/* to keep Vendor and product */
+ /* ID string (from conf) file */
+ /* our gamma tables */
+ SANE_Word gamma_table[4][4096];
+ SANE_Range gamma_range;
+ int gamma_length;
+
+ /* the shading section */
+ pFnDACOffs fnDarkOffset; /**< ... */
+ ShadingDef shade; /**< shading parameters */
+
+ /* */
+ SANE_Byte PCBID; /**< which version of the PCB */
+
+ /* motor control section */
+ SANE_Byte MotorID; /**< the type of the motor drivers */
+ SANE_Byte MotorPower; /**< how to drive the motor */
+ SANE_Bool f2003;
+ SANE_Byte XStepMono;
+ SANE_Byte XStepColor;
+ SANE_Byte XStepBack;
+ SANE_Bool f0_8_16;
+ SANE_Byte scanStates[_SCANSTATE_BYTES];
+
+ /* CCD section */
+ SANE_Byte CCDID; /**< what CCD do we have */
+ RegDef *CCDRegs; /**< pointer to the register descr */
+ u_short numCCDRegs; /**< number of values to write */
+
+ /* DAC section */
+ SANE_Byte DACType; /**< what DAC do we have */
+ RegDef *DACRegs; /**< pointer to DAC reg descr. */
+ u_short numDACRegs; /**< number of values to write */
+ pFnDACDark fnDACDark; /**< */
+ RGBByteDef RegDACOffset;
+ RGBByteDef RegDACGain;
+
+ ShadowRegs regs; /**< for holding ASIC register values */
+ DataInfo DataInf; /**< all static info about the current scan */
+ ScanInfo scan; /**< buffer and motor management during scan */
+ BufferDef bufs;
+ void *scaleBuf; /**< buffer for line scaling */
+ int scaleStep; /**< step size for line scaling */
+ int scaleIzoom; /**< factor for line scaling */
+
+ u_long ModelOriginY;
+ SANE_Byte ModelCtrl;
+
+ SANE_Bool Tpa; /**< do we have a TPA */
+ SANE_Byte Buttons; /**< number of buttons */
+
+ /* lamp control section */
+ SANE_Bool warmupNeeded;
+ SANE_Byte lastLampStatus; /**< for keeping the lamp status */
+
+#ifdef HAVE_SETITIMER
+ struct itimerval saveSettings; /**< for lamp timer */
+#endif
+} U12_Device;
+
+typedef struct u12s
+{
+ struct u12s *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*/
+ U12_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_Parameters params; /* for keeping the parameter */
+
+ SANE_Option_Descriptor opt[NUM_OPTIONS];
+
+} U12_Scanner;
+
+/** for collecting configuration info...
+ */
+typedef struct {
+
+ char devName[PATH_MAX];
+ char usbId[_MAX_ID_LEN];
+
+ /* contains the stuff to adjust... */
+ AdjDef adj;
+
+} CnfDef, *pCnfDef;
+
+#endif /* guard __U12_H__ */
+
+/* END U12.H ................................................................*/