diff options
Diffstat (limited to 'backend/plustek-pp_hwdefs.h')
-rw-r--r-- | backend/plustek-pp_hwdefs.h | 1034 |
1 files changed, 1034 insertions, 0 deletions
diff --git a/backend/plustek-pp_hwdefs.h b/backend/plustek-pp_hwdefs.h new file mode 100644 index 0000000..2672380 --- /dev/null +++ b/backend/plustek-pp_hwdefs.h @@ -0,0 +1,1034 @@ +/* @file plustek-pp_hwdefs.h + * @brief different definitions for describing the scanner hardware + * + * based on sources acquired from Plustek Inc. + * Copyright (C) 1998 Plustek Inc. + * Copyright (C) 2000-2004 Gerhard Jaeger <gerhard@gjaeger.de> + * also based on the work done by Rick Bronson <rick@efn.org> + * + * History: + * 0.30 - initial version + * 0.31 - corrected the values of _GAIN_P98_HIGH, _GAIN_P96_HIGH and _GAIN_LOW + * 0.32 - removed _LampDelay defines + * removed _MODE_xxx defines + * 0.33 - cosmetic changes + * removed _PORT_BPP from modelist + * 0.34 - no changes + * 0.35 - no changes + * 0.36 - moved struct ScanState to this header + * moved some definitions from scandata.h to this file + * 0.37 - some cleanup work + * added model override defines here + * added _A3 + * changed some _ defines to _ defines + * 0.38 - added ASIC98003 stuff + * removed the _ASIC_xxxxx definitions + * 0.39 - major changes: moved a lot of stuff to this file + * 0.40 - no changes + * 0.41 - added _OVR_PLUSTEK_4800P definition + * 0.42 - added _OVR_PRIMAX_4800D30 definition + * 0.43 - no changes + * . + * <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 __HWDEFS_H__ +#define __HWDEFS_H__ + +/* + * port modes + * (WARNING: never change these defines, as they are used as entries + * to jump tables !!!) + */ +#define _PORT_EPP 0 +#define _PORT_SPP 1 +#define _PORT_BIDI 2 +#define _PORT_ECP 3 +#define _PORT_ESP 4 +#define _PORT_NONE 5 + +/* + * ScannerSize + */ +#define _SCANSIZE_A4 0 +#define _SCANSIZE_LETTER 1 +#define _SCANSIZE_LEGAL 2 +#define _SCANSIZE_A3 3 + +/* + * Magic IDs switch printer port to scanner mode + */ +#define _ID1ST 0x69 +#define _ID2ND 0x96 +#define _ID3RD 0xa5 +#define _ID4TH 0x5a + +/* + * Special IDs used to reset scanner (ASIC98003) + */ +#define _RESET1ST 0x69 +#define _RESET2ND 0x96 +#define _RESET3RD 0xaa +#define _RESET4TH 0x55 + +/* + * ID switch to printer mode + */ +#define _ID_TO_PRINTER 0 + +/* + * Flags for internal use + */ +#define _VF_BUILDMAP 0x0000001 +#define _VF_DATATOUSERBUFFER 0x0000002 +#define _VF_ENVIRONMENT_READY 0x0000004 +#define _VF_FIRSTSCANLINE 0x0000008 +#define _VF_PREVIEW 0x0000020 + +/* + * Printer Control Port: Definitions + */ +#define _CTRL_STROBE 0x01 +#define _CTRL_AUTOLF 0x02 +#define _CTRL_NOT_INIT 0x04 +#define _CTRL_SELECT_IN 0x08 +#define _CTRL_ENABLE_IRQ 0x10 +#define _CTRL_DIRECTION 0x20 +#define _CTRL_RESERVED 0xc0 + +/* + * here are the definitions for the different registers + * first the ASIC 96001/3 section + */ + +/* Status Register 0x10 */ +#define _FLAG_P96_PAPER 0x01 +#define _FLAG_P96_ADF 0x02 +#define _FLAG_P96_KEY 0x04 +#define _FLAG_P96_EPP 0x08 +#define _FLAG_P96_FIFOFULL 0x10 +#define _FLAG_P96_FIFOEMPTY 0x20 +#define _FLAG_P96_CCDTYPE 0x40 +#define _FLAG_P96_MOTORTYPE 0x80 + +/* + * the 98001 section + */ +#define _DEFAULT_LINESCANTIME 96 + +/* Status Register (Addr: 0x30) */ +#define _FLAG_P98_PAPER 0x01 +#define _FLAG_P98_KEY 0x80 + +/* + * some buffer sizes (for ASIC 98001 based devices) + */ +#define _LINE_BUFSIZE (5500 * 6) +#define _LINE_BUFSIZE1 (5500 * 8) +#define _PROCESS_BUFSIZE (5120 * 3) + +/* + * generic equates + */ +#define _DEF_BW_THRESHOLD 111 /* default B/W mode threshold value */ +#define _NUMBER_OF_SCANSTEPS 64 /* Asic spec.: up to 64 scan steps */ +#define _SCANSTATE_BYTES (_NUMBER_OF_SCANSTEPS/2) + +/* CHECK: Play around with the P98003/1 + * gain values - maybe we get a brighter picture... + */ +#define _GAIN_P98_HIGH 225 /* Volt. max. value, Asic 98001 */ +#define _GAIN_P98003_HIGH 240 /* Volt. max. value, Asic 98003 */ +#define _GAIN_P96_HIGH 240 /* Volt. max. value, Asic 96001/3 */ +#define _GAIN_LOW 210 /* Volt. min. value */ +#define _GAIN_P98003_LOW 220 /* Volt. min. value, Asic 98003 */ +#define _MOTOR_ONE_LINE_TIME 4 + +/* for ASIC 98001/3 shading */ +#define _DEF_BRIGHTEST_SKIP 3 +#define _DEF_DARKEST_SKIP 5 + +#define _BUF_SIZE_BASE_CONST 1280 +#define _SCANSTATE_TABLE_SIZE 250 /* was 200 for 4830 */ +#define _P98_OFFSET70 60 + +/* for Data channel (BYTE) */ +#define _RED_DATA_READY 0x01 +#define _GREEN_DATA_READY 0x02 +#define _BLUE_DATA_READY 0x04 + +#define _ASIC_REDCOLOR 0x01 +#define _ASIC_GREENCOLOR 0x03 +#define _ASIC_BLUECOLOR 0x02 + +/* + * for Asic I/O signal control + */ +#define _CTRL_GENSIGNAL (_CTRL_RESERVED + _CTRL_NOT_INIT) /* 0xc4 */ + +#define _CTRL_START_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN) /* 0xcc */ +#define _CTRL_END_REGWRITE (_CTRL_GENSIGNAL) /* 0xc4 */ + +#define _CTRL_START_DATAWRITE (_CTRL_GENSIGNAL + _CTRL_AUTOLF) /* 0xc6 */ +#define _CTRL_END_DATAWRITE (_CTRL_GENSIGNAL) /* 0xc4 */ + +#define _CTRL_EPPSIGNAL_WRITE (_CTRL_GENSIGNAL + _CTRL_STROBE) /* 0xc5 */ +#define _CTRL_EPPTRIG_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN + _CTRL_STROBE) + +#define _CTRL_START_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION + _CTRL_AUTOLF) +#define _CTRL_END_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION) /* 0xe4 */ + + +typedef struct +{ + ULong dwFullSpeed; + Byte bCurrentSpeed; + Byte bStepSpeed; +} DiffModeVar, *pDiffModeVar; + +typedef struct +{ + UShort wHomePos; /* scanner's scanning home position */ + UShort wMaxSteps; /* maximum steps for this scan */ + Byte bExposureTime; /* exposure time for one line */ + Byte bMotorStep; + Byte bFlagScanMode; /* see below */ + Byte bTimesShading; /* see below */ +} ModeTypeVar, *pModeTypeVar; + +typedef struct { + Byte bStep; + Byte bStatus; +} ScanState, *pScanState; + +typedef struct { + Byte bReg; + Byte bParam; +} RegDef, *pRegDef; + +typedef union { + RGBByteDef Colors; + UChar bColors[3]; +} ColorByte, *pColorByte; + +typedef union { + RGBUShortDef Colors; + UShort wColors[3]; +} ColorWord, *pColorWord; + +typedef struct { + UShort exposureTime; + UShort xStepTime; +} ExpXStepDef, *pExtXStepDef; + +typedef struct { + UShort thresholdBW; + UShort thresholdGray; + UShort thresholdColor; +} ThreshDef, *pThreshDef; + +/* for decription of the DAC specific stuff*/ +typedef struct { + ColorWord GainResize; + ColorWord DarkCmpHi; + ColorWord DarkCmpLo; + ColorWord DarkOffSub; + ColorByte DarkDAC; + UChar Reserved; +} DACTblDef, *pDACTblDef; + +/* + * some function types + */ +typedef struct scandata *pScanData; +typedef void (*pFnDataProcess)(pScanData, pVoid, pVoid, ULong); +typedef Bool (*pFnReadData)(pScanData, pUChar, ULong); +typedef void (*pFnVoid)(pScanData); +typedef Bool (*pFnBool)(pScanData); +typedef void (*pFnDACOffs)(pScanData, pDACTblDef, ULong); +typedef void (*pFnDACDark)(pScanData, pDACTblDef, ULong, UShort); +typedef void (*pFnOut)(Byte,UShort); +typedef Byte (*pFnIn)(UShort); + +/* + * For Motor step control + */ +#define _FullStepStrong 0x10 +#define _HalfStep 0x04 +#define _QuarterStep 0x08 +#define _EightStep 0x0c + +/* bTimesShading */ +#define _Shading_32Times 0 +#define _Shading_4Times 1 +#define _Shading_16Times 2 + +/* Scan.bModuleState */ +#define _MotorInNormalState 0 +#define _MotorGoBackward 1 +#define _MotorInStopState 2 +#define _MotorAdvancing 3 +#define _MotorAdvanced 4 + +/* bMoveDataOutFlag */ +#define _DataInNormalState 0 +#define _DataAfterRefreshState 1 +#define _DataFromStopState 2 + +/* bFastMoveFlag */ +#define _FastMove_Fast_C50_G100 0 +#define _FastMove_Middle_C75_G150 1 +#define _FastMove_Low_C75_G150 2 +#define _FastMove_Low_C75_G150_Back 4 +#define _FastMove_Pos_300 5 +#define _FastMove_Film_150 6 + +/* + * ASIC 98003 base models... + */ +#define _TPA_P98003_SHADINGORG 2172U +#define _RFT_SCANNING_ORG 380U + +#define _POS_SCANNING_ORG 2840U +#define _POS_PAGEWIDTH 450U +#define _POS_ORG_OFFSETX 0x41C + +#define _NEG_SCANNING_ORG 3000U +#define _NEG_PAGEWIDTH 464U +#define _NEG_PAGEWIDTH600 992U +#define _NEG_ORG_OFFSETX 0x430 +#define _NEG_SHADING_OFFS 1500U + +#define _NEG_EDGE_VALUE 0x800 + +#define _SHADING_BEGINX 4U + + +/* home positions */ +#define _Home_CE50 0x1f /* 0x1d 1b */ +#define _Home_CE100 0x27 /* 0x34 23 */ +#define _Home_CE150 0x29 /* 0x23 25 */ +#define _Home_CE300 0x34 /* 0x2e 30 */ +#define _Home_CE600 0x3a /* 0x35 36 */ +#define _Home_CB50 0x20 /* 0x22 1c */ +#define _Home_CB100 0x41 /* 0x42 3d */ +#define _Home_CB150 0x41 /* 0x3f 3d */ +#define _Home_CB300 0x4c /* 0x4a 48 */ +#define _Home_CB600 0x53 /* 0x54 4f */ +#define _Home_CS50 0x20 /* 0x1b 1c */ +#define _Home_CS100 0x41 /* 0x40 3d */ +#define _Home_CS150 0x41 /* 0x3e 3d */ +#define _Home_CS300 0x4c /* 0x4b 48 */ +#define _Home_CS600 0x53 /* 0x4f 4f */ +#define _Home_GE75 0x08 /* 7-14-98 00 */ +#define _Home_GE150 0x04 /* 0x22 00 */ +#define _Home_GE300 0x12 /* 0x2d 0e */ +#define _Home_GE600 0x19 /* 0x33 15 */ +#define _Home_GB75 0x40 /* 7-14-98 3e */ +#define _Home_GB150 0x40 /* 0x3f 3e */ +#define _Home_GB300 0x4e /* 0x4c 4a */ +#define _Home_GB600 0x53 /* 0x51 4f */ +#define _Home_GS75 0x40 /* 7-14-98 3c */ +#define _Home_GS150 0x40 /* 0x3f 3c */ +#define _Home_GS300 0x4e /* 0x4d 4a */ +#define _Home_GS600 0x53 /* 0x51 4f */ +#define _Home_BE75 0x30 /* 7-14-98 20 */ +#define _Home_BE150 0x30 /* 0x3c 20 */ +#define _Home_BE300 0x32 /* 0x48 2e */ +#define _Home_BE600 0x37 /* 0x35 33 */ +#define _Home_BB75 0x42 /* 7-14-98 3e */ +#define _Home_BB150 0x42 /* 0x47 3e */ +#define _Home_BB300 0x50 /* 0x51 4c */ +#define _Home_BB600 0x53 /* 0x51 4f */ +#define _Home_BS75 0x42 /* 7-14-98 3e */ +#define _Home_BS150 0x42 /* 0x46 3e */ +#define _Home_BS300 0x50 /* 0x4f 4c */ +#define _Home_BS600 0x53 /* 0x55 4f */ + +/* + * for ModeTypeVar indexes + */ +#define _FixParamEppBw 0 +#define _FixParamBppBw _FixParamEppBw + 4 +#define _FixParamSppBw _FixParamBppBw + 4 +#define _FixParamEppGray 0 +#define _FixParamBppGray _FixParamEppGray + 4 +#define _FixParamSppGray _FixParamBppGray + 4 +#define _FixParamEppColor 0 +#define _FixParamBppColor _FixParamEppColor + 5 +#define _FixParamSppColor _FixParamBppColor + 5 +#define _FixParamSppNegative 0 +#define _FixParamBppNegative _FixParamSppNegative + 3 +#define _FixParamEppNegative _FixParamBppNegative + 3 +#define _FixParamSppPositive _FixParamEppNegative + 3 +#define _FixParamBppPositive _FixParamSppPositive + 3 +#define _FixParamEppPositive _FixParamBppPositive + 3 + +/* + * for DiffModeVar indexes + */ +#define _BwEpp150 0 +#define _BwEpp300 1 +#define _BwEpp600 2 +#define _BwBpp150 _BwEpp150 +#define _BwBpp300 _BwEpp300 +#define _BwBpp600 _BwEpp600 +#define _BwSpp150 3 +#define _BwSpp300 4 +#define _BwSpp600 5 +#define _GrayEpp150 6 +#define _GrayEpp300 7 +#define _GrayEpp600 8 +#define _GrayEpp600_3000 9 /* > 3000 pixels per channel */ +#define _GrayBpp150 10 +#define _GrayBpp300 11 +#define _GrayBpp300_1600 12 +#define _GrayBpp600 13 +#define _GrayBpp600_1600 14 +#define _GrayBpp600_3200 15 +#define _GraySpp150 16 +#define _GraySpp150_800 17 +#define _GraySpp300 18 +#define _GraySpp300_800 19 +#define _GraySpp300_1600 20 +#define _GraySpp600 21 +#define _GraySpp600_800 22 +#define _GraySpp600_1600 23 +#define _GraySpp600_3200 24 +#define _ColorEpp60 25 +#define _ColorEpp100 _ColorEpp60 +#define _ColorEpp150 26 +#define _ColorEpp300 27 +#define _ColorEpp300_1200 28 +#define _ColorEpp600 29 +#define _ColorEpp600_1400 30 +#define _ColorEpp600_2800 31 +#define _ColorEpp600_4000 32 +#define _ColorBpp60 33 +#define _ColorBpp100 34 +#define _ColorBpp150 35 +#define _ColorBpp150_800 36 +#define _ColorBpp300 37 +#define _ColorBpp300_800 38 +#define _ColorBpp300_1600 39 +#define _ColorBpp600 40 +#define _ColorBpp600_800 41 +#define _ColorBpp600_1600 42 +#define _ColorBpp600_3200 43 +#define _ColorSpp60 _ColorBpp60 +#define _ColorSpp100 _ColorBpp100 +#define _ColorSpp150 _ColorBpp150 +#define _ColorSpp150_800 _ColorBpp150_800 +#define _ColorSpp300 44 +#define _ColorSpp300_500 45 +#define _ColorSpp300_1000 46 +#define _ColorSpp300_2000 47 +#define _ColorSpp600 48 +#define _ColorSpp600_500 49 +#define _ColorSpp600_1000 50 +#define _ColorSpp600_2000 51 +#define _ColorSpp600_4000 52 + +#define _NegativeSpp150 53 +#define _NegativeSpp300 54 +#define _NegativeSpp600 55 +#define _NegativeBpp150 _NegativeSpp150 +#define _NegativeBpp300 _NegativeSpp300 +#define _NegativeBpp600 _NegativeSpp600 +#define _NegativeEpp150 _NegativeSpp150 +#define _NegativeEpp300 _NegativeSpp300 +#define _NegativeEpp600 _NegativeSpp600 + +#define _BwEpp75 56 +#define _BwBpp75 56 +#define _BwSpp75 56 +#define _GrayEpp75 56 +#define _GrayBpp75 56 +#define _GraySpp75 56 + +#define _TransparencySpp150 _NegativeSpp150 +#define _TransparencySpp300 _NegativeSpp300 +#define _TransparencySpp600 _NegativeSpp600 +#define _TransparencyBpp150 _NegativeSpp150 +#define _TransparencyBpp300 _NegativeSpp300 +#define _TransparencyBpp600 _NegativeSpp600 +#define _TransparencyEpp150 _NegativeSpp150 +#define _TransparencyEpp300 _NegativeSpp300 +#define _TransparencyEpp600 _NegativeSpp600 + +/* for 48 bits color */ +#define _ColorEpp100_1400 63 +#define _ColorEpp150_1900 64 +#define _ColorEpp300_4000 65 +#define _ColorEpp600_9600 66 +#define _ColorSpp300_3000 67 + +/* + * for mirroring parts of the 98001/3 asic register set + */ +typedef struct { + Byte RD_Motor1Control; /* 0x0b */ + Byte RD_StepControl; /* 0x14 */ + Byte RD_Motor0Control; /* 0x15 */ + Byte RD_XStepTime; /* 0x16 */ + Byte RD_ModeControl; /* 0x1b */ + Byte RD_LineControl; /* 0x1c */ + Byte RD_ScanControl; /* 0x1d, init = 5 */ + Byte RD_ModelControl; /* 0x1f */ + Byte RD_Model1Control; /* 0x20 */ + UShort RD_Dpi; /* 0x21 */ + UShort RD_Origin; /* 0x23 */ + UShort RD_Pixels; /* 0x25 */ + UShort RD_ThresholdControl; /* 0x27 */ + Byte RD_ThresholdGapCtrl; /* 0x29 */ + UShort RD_RedDarkOff; /* 0x33 */ + UShort RD_GreenDarkOff; /* 0x35 */ + UShort RD_BlueDarkOff; /* 0x37 */ + + ULong RD_BufFullSize; /* 0x54, ASIC 98003 */ + UShort RD_MotorTotalSteps; /* 0x57, ASIC 98003 */ + + Byte RD_ScanControl1; /* 0x5b, ASIC 98003 */ + Byte RD_MotorDriverType; /* 0x64, ASIC 98003 */ + Byte RD_ExtLineControl; /* 0x6d, ASIC 98003 */ + Byte RD_ExtXStepTime; /* 0x6e, ASIC 98003 */ + +} RegData, *pRegData; + +/* + * for registers, that only exist on the 96001/3 + */ +typedef struct +{ + Byte RD_MotorControl; /* 0x1b, init = 3 */ + Byte RD_MemAccessControl; /* 0x1d */ + Byte RD_WatchDogControl; /* 0x25, init = 0x8f */ + + union { + Byte RD_ModelControl2; /* 0x26, P96003 */ + } u26; + + union { + Byte RD_RedChShadingOff; /* 0x28, P96003 */ + } u28; + union { + Byte RD_GreenChShadingOff; /* 0x29, P96003 */ + } u29; + Byte RD_BlueChShadingOff; /* 0x2a, P96003 */ + Byte RD_RedChDarkOff; /* 0x2b, P96003 */ + Byte RD_GreenChDarkOff; /* 0x2c, P96003 */ + Byte RD_BlueChDarkOff; /* 0x2d, P96003 */ + + Byte RD_RedChEvenOff; /* 0x31, P96003 */ + Byte RD_GreenChEvenOff; /* 0x32, P96003 */ + Byte RD_BlueChEvenOff; /* 0x33, P96003 */ + Byte RD_RedChOddOff; /* 0x34, P96003 */ + Byte RD_GreenChOddOff; /* 0x35, P96003 */ + Byte RD_BlueChOddOff; /* 0x36, P96003 */ + Byte RD_RedGainOut; /* 0x37, P96003 */ + Byte RD_GreenGainOut; /* 0x38, P96003 */ + Byte RD_BlueGainOut; /* 0x39, P96003 */ + Byte RD_LedControl; /* 0x3a, P96003 */ + Byte RD_ShadingCorrectCtrl; /* 0x3b, P96003 */ + +} Reg96, *pReg96; + +/* + * model override defines + */ +#define _OVR_NONE 0 +#define _OVR_PLUSTEK_9630PL 1 /* for legal version of the OP9630 */ +#define _OVR_PRIMAX_4800D 2 /* for the Primax 4800 Direct */ +#define _OVR_PLUSTEK_9636 3 /* for 9636T/P+/Turbo */ +#define _OVR_PLUSTEK_9636P 4 /* for 9636P */ +#define _OVR_PLUSTEK_A3I 5 /* for A3I */ +#define _OVR_PLUSTEK_4800P 6 /* for OpticPro4800 */ +#define _OVR_PRIMAX_4800D30 7 /* for the Primax 4800 Direct 30bit */ + +/* CHECK: THIS has to be changed and merged with the old code */ + +/* + * structure to hold IO port specific stuff + */ +typedef struct { + +#ifdef __KERNEL__ + pFnOut fnOut; + pFnIn fnIn; + + UShort pbSppDataPort; + UShort pbEppDataPort; + + UShort pbStatusPort; + UShort pbControlPort; + UShort pbAddrOffsetPort; +#endif + + UShort portBase; + UShort portMode; + UShort lastPortMode; + + Byte bOldControlValue; + Byte bOldDataValue; + Byte bOpenCount; + Byte delay; /* to allow various delay on port operations */ + + Bool slowIO; + UShort forceMode; + Bool useEPPCmdMode; + +} IODef, *pIODef; + + +/* + * structure to hold device specific stuff + */ +typedef struct +{ +#if 0 + PFNVOID pfnIOWrite; + PFNVOID pfnCCDInit; + DWORD dwLampOnTicks; + DWORD dwLampOnBegin; + LONG lLeftPositive; + LONG lLeftNegative; + UCHAR bLampOnMinutes; + DRVBOOL fButton; + DRVBOOL fSoftReset; + UCHAR bStatusLamp; +#endif + + pFnReadData ReadData; /* read function, portmode specific */ + + ULong dwModelOriginY; + Bool f0_8_16; + Bool fTpa; /* transparency adapter ? */ + Bool f2003; /* has 2003 motor driver ? */ + + UChar bMotorID; /* the type of the motor drivers */ + UChar bPCBID; /* which version of the PCB */ + + UChar bCCDID; /* what CCD do we have */ + pRegDef pCCDRegisters; /* pointer to the register descr */ + UShort wNumCCDRegs; /* number of values to write */ + UShort DataOriginX; + + UChar bDACType; /* what DAC do we have */ + pRegDef pDACRegisters; /* pointer to DAC reg descr. */ + UShort wNumDACRegs; /* number of values to write */ + pFnDACOffs fnDarkOffset; /* func-ptr to func for DAC */ + pFnDACDark fnDACDark; /* adjustments */ + + RGBByteDef RegDACOffset; + RGBByteDef RegDACGain; + + UChar buttons; /* Number of buttons */ + + UChar ModelCtrl; /* contents of the model control reg*/ + UChar Model1Mono; /* for model control 1 in mono mode */ + UChar Model1Color; /* for model control 1 in color mode*/ + + UChar XStepMono; + UChar XStepColor; + UChar XStepBack; + + long lUpNormal; /* device specific offsets */ + long lUpPositive; + long lUpNegative; + long lLeftNormal; + +} DeviceDef, *pDeviceDef; + +/* + * to hold all the shading stuff for calibrating a scanner + */ +typedef struct +{ + pRGBUShortDef pHilight; + ColorByte Hilight; + ULong dwDiv; + UShort wExposure; + UShort wXStep; + + UChar skipHilight; + UChar skipShadow; + ULong shadingBytes; + + pDACTblDef pCcdDac; + ColorByte DarkDAC; + ColorWord DarkOffset; + UShort wDarkLevels; + UChar bIntermediate; + + ColorByte Gain; + UChar bGainDouble; + UChar bUniGain; + Byte bMinGain; + Byte bMaxGain; + Byte bGainHigh; + Byte bGainLow; + + Bool fStop; + +} ShadingDef, *pShadingDef; + + +/* + * structure to hold scan-specific data + */ +typedef struct _SCANDEF +{ +#if 0 + DWORD dwLinesRead; + LONG lBufAdjust; + DRVBOOL fBackmove; + DRVBOOL fEsc; + UCHAR Reserved; +#endif + + pFnBool DoSample; + pFnDataProcess DataProcess; /* to convert RGB buffers to RGB pixels */ + pFnBool DataRead; /* function to get data from scanner */ + + ULong dwLinesToRead; /* number of images lines to read */ + Long lBufferAdjust; + + ULong dwScanOrigin; /* where to start the scan */ + Bool fRefreshState; /* refresh ? */ + Bool fMotorBackward; + UChar motorPower; /* how to drive the motor */ + + ULong dwMinReadFifo; + ULong dwMaxReadFifo; + Byte bFifoSelect; /* defines which FIFO to use */ + + UChar bDiscardAll; + ULong dwInterval; + ULong dwInterlace; /* CHECK: here always 0 - remove ? */ + + union { + UShort wGreenDiscard; + UShort wGreenKeep; + } gd_gk; + union { + UShort wBlueDiscard; + UShort wRedKeep; + } bd_rk; + + UChar bRefresh; /* for controlling the movement */ + UChar bOldScanState; + UChar bNowScanState; + UChar bModuleState; + + DataPointer p48BitBuf; /* for handling 48-bit data */ + union { + pUChar pMonoBuf; + DataPointer ColorBuf; + } bp; + + RBGPtrDef BufBegin; /* for reading/writing the scan-data */ + RBGPtrDef BufEnd; + RBGPtrDef BufGet; + RBGPtrDef BufData; + RBGPtrDef BufPut; + + ULong negBegin; /* used while scanning in TPA modes */ + ULong posBegin; + + ULong dpiIdx; /* index to get/set values in the table */ + pExtXStepDef negScan; /* reference to exposure/xtep table */ + +} ScanDef, *pScanDef; + +/* + * structure to hold buffer pointers + */ +typedef struct { + + union { + pUChar pReadBuf; + pUChar pShadingMap; + pUChar pRWTestBuffer; + pUShort pShadingRam; + DataPointer Buf; + } b1; + + union { + pUChar pSumBuf; + pRGBUShortDef pSumRGB; + pUChar pRWTestBuffer1; + } b2; + DataPointer TpaBuf; + +} BufferDef, *pBufferDef; + + +/* Register RegBitDepth (Addr: 0x13) - ASIC 9800x */ +#define _BIT0_7 0x00 +#define _BIT8_15 0x01 +#define _BIT16_20 0x02 + +/* Register RegStepControl (Addr: 0x14) - ASIC 9800x */ +#define _MOTOR0_ONESTEP 0x01 +#define _MOTOR0_SCANSTATE 0x02 +#define _MOTOR_FREERUN 0x40 +#define _MOTOR_NOFREERUN 0x00 + +/* Register RegGetScanState (Addr: 0x17, 0x12 on 9600x) - ASIC 9800x */ +#define _SCANSTATE_MASK 0x3f /* bit 0-5 */ +#define _SCANSTATE_STOP 0x80 + +/* Register RegReadIOBufBus (Addr: 0x17) - ASIC 9600x only */ +#define _IOBUF_BUSMASK 0x0f /* bit 0-3 */ + +/* Register RegMemoryLow/High (Addr: 0x19/0x1a) - ASIC 9800x */ +#define _MAP_ADDR_RED 0x00 +#define _MAP_ADDR_GREEN 0x40 +#define _MAP_ADDR_BLUE 0x80 +#define _MAP_ADDR_SIZE 0x40 /* 0x4000 */ + +/* Register RegModeControl (Addr: 0x1b, 0x18 on 9600x) - all ASICs*/ +#define _ModeScan 0x00 /* all ASICs */ +#define _ModeProgram 0x01 /* 9600x def */ +#define _ModeIdle 0x01 /* 9800x defs */ +#define _ModeShadingMem 0x02 +#define _ModeMappingMem 0x03 +#define _ModeReadMappingMem 0x07 +#define _ModeFifoRSel 0x00 +#define _ModeFifoGSel 0x08 +#define _ModeFifoBSel 0x10 +#define _ModeFifoClose 0x18 + +/* Register RegLineControl (Addr: 0x1c, 0x19 on 9600x) - all ASICs*/ +#define _LINE_SCANTIME_MASK 0x3f /* bit 0-6 */ +#define _LINE_CDSINVERSE 0x80 /* Color Drive Signal */ + +/* Register RegScanControl (Addr: 0x1d) - all ASICs*/ +#define _SCAN_BITMODE 0x00 +#define _SCAN_BYTEMODE 0x01 /* Gray/Color mode */ +#define _SCAN_1ST_AVERAGE 0x04 /* first pixel is averaged pixel */ +#define _SCAN_BITDIRR2L 0x08 /* bit shift from right to left */ + +/* ASIC 9600x section */ +#define _P96_SCANDATA_INVERT 0x02 +#define _SCAN_LAMP_ON 0x10 + +/* ASIC 9800x section */ +#define _SCAN_12BITMODE 0x02 +#define _SCAN_NORMALLAMP_ON 0x10 /* normal Lamp */ +#define _SCAN_TPALAMP_ON 0x20 +#define _P98_SCANDATA_INVERT 0x40 +#define _BITALIGN_LEFT 0x80 + +#define _SCAN_LAMPS_ON (_SCAN_NORMALLAMP_ON | _SCAN_TPALAMP_ON) + +/* Register RegMotor0Control (Addr: 0x15) */ +#define _MotorDirForward 0x01 +#define _MotorDirBackward 0x00 +#define _MotorOn 0x02 +#define _MotorHFullStepH 0x00 +#define _MotorHHalfStep 0x04 +#define _MotorHQuarterStep 0x08 +#define _MotorHEightStep 0x08 /* for 2916 driver */ +#define _MotorPowerEnable 0x40 /* ASIC 98003 specific */ +#define _MotorHHomeStop 0x80 + +#define _FORWARD_MOTOR (_MotorDirForward + _MotorOn + \ + _MotorHQuarterStep + _MotorPowerEnable) + +/* Register RegConfiguration (Addr: 0x1e), ASIC 9800x */ +#define _P98_CCD_TYPE_ID 0x07 +#define _P98_NEC_MACHINE 0x08 +#define _P98_PCBID 0xF0 + +#define _CCD_3797 0 +#define _CCD_3717 1 +#define _CCD_3799 1 /* new for 98003 */ +#define _CCD_535 2 +#define _CCD_2556 3 +#define _CCD_518 4 +#define _CCD_539 5 /* default for 98001 */ +#define _CCD_3777 6 /* new for 98003 */ +#define _CCD_548 7 /* new for 98003 */ + +/* ASIC 98003 section */ +#define _OPTICWORKS2000 0x00 +#define _PLUSTEK_SCANNER 0x10 +#define _SCANNER_WITH_TPA 0x20 +#define _SCANNER4Button 0x30 +#define _SCANNER4ButtonTPA 0x40 +#define _SCANNER5Button 0x50 +#define _SCANNER5ButtonTPA 0x60 +#define _SCANNER1Button 0x70 +#define _SCANNER1ButtonTPA 0x80 +#define _SCANNER2Button 0x90 +#define _AGFA_SCANNER 0xf0 +#define _AGFA_PCB 0x1f + +/* Register RegModelControl (Addr: 0x1f), all ASICs */ +#define _ModelSampleAndHold 0x01 /* sample and hold */ +#define _ModelWhiteIs0 0x02 /* white is 0 */ +#define _ModelInvertPF 0x04 /* invert paper flag */ +#define _ModelDpi200 0 /* (400 / 2) */ +#define _ModelDpi300 0x08 /* (600 / 2) */ +#define _ModelDpi400 0x10 /* (800 / 2) */ +#define _ModelDpi600 0x18 /* (1200 / 2) */ +#define _ModelMemSize32k3 0 /* 32k for 300 dpi color */ +#define _ModelMemSize64k3 0x20 /* 64k for 300 dpi color */ +#define _ModelMemSize128k3 0x40 /* 128k for 300 dpi color */ +#define _ModelMemSize64k4 0x60 /* 64k for 400/600 dpi color */ +#define _ModelMemSize128k4 0x80 /* 128k for 400/600 dpi color */ + +#define _ModelMemSize8k 0 /* for 96001 */ +#define _ModelMemSize8k3 0x20 +#define _ModelMemSize32k96001 0x40 +#define _ModelMemSize128k396001 0x60 +#define _ModelMemSize128k696001 0x80 + +#define _HOME_SENSOR_POLARITY 0x01 /* 9800x */ +#define _LED_CONTROL 0x02 +#define _LED_ACTIVITY 0x04 +#define _MODEL_DPI800 0x20 +#define _MODEL_DPI1200 0x28 +#define _DUMMY_12BIT 0x40 + +/* Register RegModel1Control (Addr: 0x20), 9800x */ +#define _SCAN_GRAYTYPE 0x01 +#define _CCD_SHIFT_GATE 0x02 +#define _CCD_SHIFT_PULSE 0x04 +#define _BUTTON_MODE 0x08 +#define _MOTOR_2003 0x00 +#define _MOTOR_2916 0x10 +#define _MOTOR_7042 0x20 + +/* Register RegThresholdGapControl (Addr: 0x29, 0x27 on 9600x ) - all ASICs */ +#define _THRESHOLDGAP_MASK 0x0f + +/* Register RegResetConfig (Addr: 0x2e) */ +#define _ADC_MASK 0x07 +#define _DA_WOLFSON8143 0x00 +#define _DA_ESIC 0x04 +#define _DA_SAMSUNG8531 0x05 +#define _DA_WOLFSON8141 0x06 +#define _DA_SAMSUNG1224 0x07 +#define _MOTOR0_MASK 0x18 +#define _MOTOR0_2003 0x00 +#define _MOTOR0_2916 0x08 +#define _MOTOR0_7042 0x10 +#define _MOTOR1_MASK 0x60 +#define _MOTOR1_2003 0x00 +#define _MOTOR1_2916 0x20 +#define _MOTOR1_7042 0x40 + +/* Register RegFifoFullLength (Addr: 0x54) */ +#define _RED_FULLSIZE 0x00 +#define _GREEN_FULLSIZE 0x08 +#define _BLUE_FULLSIZE 0x10 + +/* Register RegScanControl1 (Addr: 0x5b) */ +#define _MTSC_ENABLE 0x01 +#define _SCANSTOPONBUFFULL 0x02 +#define _MFRC_RUNSCANSTATE 0x04 +#define _MFRC_BY_XSTEP 0x08 + +/* Register RegMotorDriverType (Addr: 0x64) */ +#define _MOTORS_MASK 0x33 +#define _MOTORR_MASK 0xf3 +#define _MOTORR_WEAK 0x04 +#define _MOTORR_MEDIUM 0x08 +#define _MOTORR_STRONG 0x0c +#define _MOTORT_WEAK 0x40 +#define _MOTORT_MEDIUM 0x80 +#define _MOTORT_STRONG 0xc0 +#define _BUTTON_SELECT1 0x40 +#define _BUTTON_SELECT2 0x80 +#define _BUTTON_DISABLE 0xc0 + +/* Register RegStatus2 (Addr: 0x66) */ +#define _REFLECTIONLAMP_ON 0x01 +#define _TPALAMP_ON 0x02 +#define _STILL_FREE_RUNNING 0x04 +#define _BUFFER_IS_FULL 0x08 + +/* Register RegTestMode (Addr: 0xf0) */ +#define _SW_TESTMODE 0x20 + +/* other stuff... */ + +/* CHECK: changes this stuff... */ +#define _BytesPerChannel 5500UL +#define _SizeDataBuf (ULong)(_BytesPerChannel * 3 * 2) +#define _SizeTpaDataBuf (ULong)(_BytesPerChannel * 3 * 2) +#define _SizeShadingSumBuf (ULong)(_BytesPerChannel * 3 * 4) +#define _SizeTotalBuf (ULong)(_SizeDataBuf + _SizeShadingSumBuf) +#define _SizeTotalBufTpa (ULong)(_SizeTotalBuf + _SizeTpaDataBuf) + +/* for DAC programming (ASIC 98003)*/ +#define _VALUE_CONFIG 0x51 +#define _DAC_RED (Byte)(_VALUE_CONFIG | 0x00) +#define _DAC_GREENCOLOR (Byte)(_VALUE_CONFIG | 0x04) +#define _DAC_GREENMONO (Byte)(_VALUE_CONFIG | 0x06) +#define _DAC_BLUE (Byte)(_VALUE_CONFIG | 0x08) + +/* internal FIFO buffers (ASIC 9800x) */ +#define _SIZE_REDFIFO 196608UL /* 192k */ +#define _SIZE_GREENFIFO 147456UL /* 144k */ +#define _SIZE_BLUEFIFO 114688UL /* 112k */ + +#define _SIZE_COLORFIFO _SIZE_BLUEFIFO +#define _SIZE_GRAYFIFO (_SIZE_REDFIFO + _SIZE_GREENFIFO + _SIZE_BLUEFIFO) + +/* Scan State Definitions */ +#define _SS_STEP 0x08 +#define _SS_RED 0x04 +#define _SS_GREEN 0x02 +#define _SS_BLUE 0x01 + +#define _SS_MONO _SS_GREEN +#define _SS_COLOR (_SS_RED | _SS_GREEN | _SS_BLUE) + +/* for shading */ +#define _CHANNEL_RED 0 +#define _CHANNEL_GREEN 1 +#define _CHANNEL_BLUE 2 + +#endif /* guard __HWDEFS_H__ */ + +/* END PLUSTEK-PP_HWDEFS.H ..................................................*/ |