summaryrefslogtreecommitdiff
path: root/backend/u12-scanner.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/u12-scanner.h')
-rw-r--r--backend/u12-scanner.h306
1 files changed, 306 insertions, 0 deletions
diff --git a/backend/u12-scanner.h b/backend/u12-scanner.h
new file mode 100644
index 0000000..be0c200
--- /dev/null
+++ b/backend/u12-scanner.h
@@ -0,0 +1,306 @@
+/** @file u12-scanner.h
+ * @brief Definitions for the devices.
+ *
+ * Copyright (c) 2003-2004 Gerhard Jaeger <gerhard@gjaeger.de>
+ *
+ * History:
+ * - 0.01 - initial version
+ * - 0.02 - removed useless stuff
+ * .
+ * <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_SCANNER_H__
+#define __U12_SCANNER_H__
+
+/* definitions for the timer functions
+ */
+typedef double TimerDef;
+#define _MSECOND 1000 /* based on 1 us */
+#define _SECOND (1000*_MSECOND)
+
+#if 1
+#define _DO_UDELAY(usecs) u12io_udelay(usecs)
+#define _DODELAY(msecs) u12io_udelay(1000*msecs)
+/*{ int i; for( i = msecs; i--; ) _DO_UDELAY(1000); }*/
+#else
+#define _DODELAY(msecs)
+#endif
+
+/* ModuleStates */
+#define _MotorInNormalState 0
+#define _MotorGoBackward 1
+#define _MotorInStopState 2
+#define _MotorAdvancing 3
+#define _MotorAdvanced 4
+
+
+/** some function types
+ */
+typedef struct u12d *pU12_Device;
+typedef struct svd *pShadingVarDef;
+typedef void (*pFnVoid)(pU12_Device);
+typedef void (*pFnDACOffs)(pU12_Device, pShadingVarDef, u_long);
+typedef void (*pFnDACDark)(pU12_Device, pShadingVarDef, u_long, u_short);
+typedef void (*pFnDataProcess)(pU12_Device, void*, void*, u_long);
+typedef SANE_Bool (*pFnBool)(pU12_Device);
+
+
+/* useful for RGB-values */
+typedef struct {
+ SANE_Byte Red;
+ SANE_Byte Green;
+ SANE_Byte Blue;
+} RGBByteDef;
+
+typedef struct {
+ u_short Red;
+ u_short Green;
+ u_short Blue;
+} RGBUShortDef;
+
+typedef struct {
+ u_long Red;
+ u_long Green;
+ u_long Blue;
+} RGBULongDef;
+
+typedef union {
+ RGBByteDef Colors;
+ SANE_Byte bColors[3];
+} ColorByte;
+
+typedef union {
+ RGBUShortDef Colors;
+ u_short wColors[3];
+} ColorWord;
+
+typedef union {
+ SANE_Byte *pb;
+ u_short *pw;
+ u_long *pdw;
+ RGBUShortDef *pusrgb;
+ RGBULongDef *pulrgb;
+ RGBByteDef *pbrgb;
+} DataPointer;
+
+typedef struct
+{
+ union {
+ SANE_Byte *bp;
+ u_short *usp;
+ u_long *ulp;
+ } red;
+ union {
+ SANE_Byte *bp;
+ u_short *usp;
+ u_long *ulp;
+ } green;
+ union {
+ SANE_Byte *bp;
+ u_short *usp;
+ u_long *ulp;
+ } blue;
+
+} RBGPtrDef;
+
+typedef struct {
+ SANE_Byte b1st;
+ SANE_Byte b2nd;
+} WordVal;
+
+typedef struct {
+ WordVal w1st;
+ WordVal w2nd;
+} DWordVal;
+
+
+typedef union {
+ WordVal wOverlap;
+ DWordVal dwOverlap;
+ u_long dwValue;
+ u_short wValue;
+ SANE_Byte bValue;
+} DataType;
+
+typedef struct {
+ u_short exposureTime;
+ u_short xStepTime;
+} ExpXStepDef;
+
+typedef struct {
+ SANE_Byte reg;
+ SANE_Byte val;
+} RegDef;
+
+/** for defining a point
+ */
+typedef struct {
+ u_short x;
+ u_short y;
+} XY;
+
+/** for defining a crop area, all is 300DPI based
+ */
+typedef struct {
+ u_short x; /**< x-pos of top-left corner */
+ u_short y; /**< y-pos of top-left corner */
+ u_short cx; /**< width */
+ u_short cy; /**< height */
+} CropRect;
+
+/** for defining an image
+ */
+typedef struct {
+ u_long dwFlag; /**< i.e. image source */
+ CropRect crArea; /**< the image size and position */
+ XY xyDpi; /**< the resolution */
+ u_short wDataType; /**< and the data type */
+} ImgDef;
+
+/**
+ */
+typedef struct {
+ u_long dwPixelsPerLine;
+ u_long dwBytesPerLine;
+ u_long dwLinesPerArea;
+ ImgDef image;
+} CropInfo;
+
+/** all we need for a scan
+ */
+typedef struct
+{
+ u_long dwScanFlag;
+ double xyRatio; /**< for scaling */
+ u_short wYSum;
+
+ XY xyPhyDpi; /**< physical resolution of a scan */
+ u_long dwPhysBytesPerLine;
+ u_long wPhyDataType; /**< how the scanner should scan */
+
+ u_long dwAsicPixelsPerPlane;
+ u_long dwAsicBytesPerPlane;
+ u_long dwAsicBytesPerLine;
+
+ XY xyAppDpi;
+ u_long dwAppLinesPerArea;
+ u_long dwAppPixelsPerLine;
+ u_long dwAppPhyBytesPerLine;
+ u_long dwAppBytesPerLine;
+ u_short wAppDataType;
+
+ short siBrightness;
+ short siContrast;
+
+ CropRect crImage;
+} DataInfo;
+
+/** this will be our global "overkill" structure
+ */
+typedef struct
+{
+ pFnDataProcess DataProcess; /* to convert RGB buffers to RGB pixels */
+ pFnBool DoSample;
+ pFnBool DataRead; /* function to get data from scanner */
+
+ long lBufferAdjust;
+ u_long dwScanOrigin; /* where to start the scan */
+ u_long negBegin; /* used while scanning in TPA modes */
+ u_long posBegin;
+ SANE_Byte bDiscardAll;
+
+ union {
+ u_short wGreenDiscard;
+ u_short wGreenKeep;
+ } gd_gk;
+ union {
+ u_short wBlueDiscard;
+ u_short wRedKeep;
+ } bd_rk;
+
+ u_long dpiIdx; /* index to get/set values in the table */
+ ExpXStepDef *negScan; /* reference to exposure/xtep table */
+
+ DataPointer p48BitBuf; /* for handling 48-bit data */
+ RBGPtrDef BufBegin; /* for reading/writing the scan-data */
+ RBGPtrDef BufEnd;
+ RBGPtrDef BufGet;
+ RBGPtrDef BufData;
+ RBGPtrDef BufPut;
+
+ /* motor movement stuff */
+ u_long dwInterval;
+ SANE_Bool refreshState;
+ SANE_Bool motorBackward;
+ SANE_Byte oldScanState;
+ SANE_Byte bRefresh;
+ SANE_Byte bModuleState;
+ SANE_Byte bNowScanState;
+
+ /* internal FIFO management */
+ u_long dwMinReadFifo;
+ u_long dwMaxReadFifo;
+ SANE_Byte bFifoSelect; /* defines which FIFO to use */
+
+} ScanInfo;
+
+/** structure for accessing one buffer in various ways...
+ */
+typedef struct
+{
+ union {
+ SANE_Byte *pReadBuf;
+ SANE_Byte *pShadingMap;
+ u_short *pShadingRam;
+ DataPointer Buf;
+ } b1;
+
+ union {
+ SANE_Byte *pSumBuf;
+ RGBUShortDef *pSumRGB;
+ } b2;
+
+ DataPointer TpaBuf;
+} BufferDef;
+
+#endif /* guard __U12_SCANNER_H__ */
+
+/* END U12-SCANNER.H ........................................................*/