diff options
Diffstat (limited to 'backend/u12-scanner.h')
-rw-r--r-- | backend/u12-scanner.h | 306 |
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 ........................................................*/ |