/*............................................................................. * Project : SANE library for Plustek flatbed scanners. *............................................................................. */ /** @file plustek-usb.h * @brief Main defines for the USB devices. * * Based on sources acquired from Plustek Inc.
* Copyright (C) 2001-2013 Gerhard Jaeger * * History: * - 0.40 - starting version of the USB support * - 0.41 - added workaround flag to struct DevCaps * - 0.42 - added MODEL_NOPLUSTEK * - replaced fLM9831 by chip (valid entries: _LM9831, _LM9832, _LM9833) * - added _WAF_MISC_IO3_LAMP for UMAX 3400 * - 0.43 - added _WAF_MISC_IOx_LAMP (x=1,2,4,5) * - added CLKDef * - 0.44 - added vendor and product ID to struct DeviceDef * - added _WAF_BYPASS_CALIBRATION * - added _WAF_INV_NEGATIVE_MAP * - 0.45 - added _WAF_SKIP_FINE for skipping fine calibration * - added _WAF_SKIP_WHITEFINE for skipping fine white calibration * - added MCLK setting for 16 bit modes * - added _WAF_FIX_GAIN and _WAF_FIX_OFS * - 0.46 - added UMAX1200 for 5400 model * - removed _WAF_FIX_GAIN and _WAF_FIX_OFS * - added skipCoarseCalib to ScanDef * - added additional defines for cis and epson-ccd sensor * - 0.47 - cleanup work * - added gamma to struct HWDefault * - 0.48 - added DEVCAPSFLAG_LargeTPA * - added _WAF_BIN_FROM_COLOR and _WAF_GRAY_FROM_COLOR * - added dHighSpeed to struct HwDefault * - 0.49 - added a_bRegs, fModFirstHome and fLastScanIsAdf * to struct DeviceDef * - added CRYSTAL_FREQ * - added IPCDef * - 0.50 - cleanup * - removed obsolete _WAF_BLACKFINE * - added MODEL_CANON_LIDE25 * - 0.51 - added _WAF_MISC_IO_BUTTONS plus _BUTTON stuff * - added _WAF_USE_ALT_DESC * - added DEVCAPSFLAG_SheetFed * - added dpi_thresh and lineend to motor structure * - 0.52 - added MODEL_QSCAN * - added MODEL_QSCAN_A6 (thanks to Hiroshi Miura) * - changed DCapsDef, lamp -> misc_io * - bPCB is now ushort to be "missused" by non Plustek * devices (as threshhold for resetting sensor order) * - added _WAF_LOFF_ON_START and _WAF_ONLY_8BIT * - added MODEL_TSCAN_A4 * - added attribute packed for data access structs * - added _WAF_INC_DARKTGT * . *
* 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. *
*/ #ifndef __PLUSTEK_USB_H__ #define __PLUSTEK_USB_H__ /** CCD ID (PCB ID): total 3 bits (on Plustek devices) */ #define kNEC3799 0 #define kSONY518 1 #define kSONY548 2 #define kNEC8861 3 #define kNEC3778 4 #define kNECSLIM 5 #define kCIS650 6 #define kCIS670 7 #define kCIS1220 8 #define kCIS1240 9 #define kEPSON 10 /** 48MHz Quartz */ #define CRYSTAL_FREQ 48000000UL /*********************************** plustek_types.h!!! ************************/ /* makes trouble with gcc3 #define _SWAP(x,y) (x)^=(y)^=(x)^=(y) */ #define _SWAP(x,y) { (x)^=(y); (x)^=((y)^=(x));} #define _LOWORD(x) ((u_short)(x & 0xffff)) #define _HIWORD(x) ((u_short)(x >> 16)) #define _LOBYTE(x) ((u_char)((x) & 0xFF)) #define _HIBYTE(x) ((u_char)((x) >> 8)) #define _HILO2WORD(x) ((u_short)x.bHi * 256U + x.bLo) #define _LOHI2WORD(x) ((u_short)x.bLo * 256U + x.bHi) #define _PHILO2WORD(x) ((u_short)x->bHi * 256U + x->bLo) #define _PLOHI2WORD(x) ((u_short)x->bLo * 256U + x->bHi) #define PACKED8 __attribute__ ((packed,aligned(1))) #define PACKED16 __attribute__ ((packed,aligned(2))) /* useful for RGB-values */ typedef struct { u_char Red; u_char Green; u_char Blue; } PACKED8 RGBByteDef; typedef struct { u_short Red; u_short Green; u_short Blue; } PACKED16 RGBUShortDef; typedef struct { u_long Red; u_long Green; u_long Blue; } RGBULongDef; typedef struct { u_char a_bColor[3]; } PACKED8 ColorByteDef; typedef struct { u_char bHi; u_char bLo; } PACKED8 HiLoDef; typedef union { HiLoDef HiLo[3]; u_short Colors[3]; } PACKED16 ColorWordDef; typedef union { HiLoDef HiLo; u_short Mono; } PACKED16 MonoWordDef; typedef union { u_char *pb; u_short *pw; MonoWordDef *pmw; ColorByteDef *pcb; ColorWordDef *pcw; RGBByteDef *pb_rgb; RGBUShortDef *pw_rgb; HiLoDef *philo; } __attribute__ ((aligned(4))) AnyPtr; typedef struct { unsigned short x; unsigned short y; } XY; #define _VAR_NOT_USED(x) ((x)=(x)) /*****************************************************************************/ #define IDEAL_GainNormal 0xf000UL /* 240 */ #define IDEAL_GainPositive 0xfe00UL /* 254 */ #define IDEAL_Offset 0x1000UL /* 20 */ #define GAIN_Target 65535UL /** Chip-types */ typedef enum _CHIPSET { _LM9831, _LM9832, _LM9833 } eChipDef; /** ScanParam.bCalibration */ enum _SHADINGID { PARAM_Scan, PARAM_Gain, PARAM_DarkShading, PARAM_WhiteShading, PARAM_Offset }; /** ScanParam.bDataType */ enum _SCANDATATYPE { SCANDATATYPE_BW, SCANDATATYPE_Gray, SCANDATATYPE_Color }; /** DCapsDef.bSensorColor */ enum _SENSORCOLOR { SENSORORDER_rgb, SENSORORDER_rbg, SENSORORDER_gbr, SENSORORDER_grb, SENSORORDER_brg, SENSORORDER_bgr }; /** DCapsDef.wFlags */ enum _DEVCAPSFLAG { DEVCAPSFLAG_Normal = 0x0001, DEVCAPSFLAG_Positive = 0x0002, DEVCAPSFLAG_Negative = 0x0004, DEVCAPSFLAG_TPA = 0x0006, DEVCAPSFLAG_Adf = 0x0008, DEVCAPSFLAG_LargeTPA = 0x0010, DEVCAPSFLAG_SheetFed = 0x0020 }; /** to allow some workarounds */ enum _WORKAROUNDS { _WAF_NONE = 0x00000000, /* no fix anywhere needed */ _WAF_BSHIFT7_BUG = 0x00000001, /* to fix U12 bug in 14bit mode */ _WAF_MISC_IO_LAMPS = 0x00000002, /* special lamp switching */ _WAF_BLACKFINE = 0x00000004, /* use black calibration strip */ _WAF_BYPASS_CALIBRATION = 0x00000008, /* no calibration,use linear gamma */ _WAF_INV_NEGATIVE_MAP = 0x00000010, /* the backend does the neg. stuff */ _WAF_SKIP_FINE = 0x00000020, /* skip the fine calbration */ _WAF_SKIP_WHITEFINE = 0x00000040, /* skip the fine white calbration */ _WAF_BIN_FROM_COLOR = 0x00000080, /* generate binary & gray images */ _WAF_GRAY_FROM_COLOR = 0x00000100, /* from color scans */ _WAF_MISC_IO_BUTTONS = 0x00000200, /* special handling for buttons */ _WAF_USE_ALT_DESC = 0x00000400, /* use alternate manufacturer */ _WAF_RESET_SO_TO_RGB = 0x00000800, /* set sensororder to RGB(CIS only)*/ _WAF_LOFF_ON_START = 0x00001000, /* switch lamp off before scanning */ _WAF_ONLY_8BIT = 0x00002000, /* scanner allows only 8 bit modes */ _WAF_INC_DARKTGT = 0x00004000 /* allow tgt darklevel adjustment */ }; /** for lamps connected to the misc I/O pins*/ enum _LAMPS { _NO_MIO = 0, _MIO1 = 0x0001, _MIO2 = 0x0002, _MIO3 = 0x0004, _MIO4 = 0x0008, _MIO5 = 0x0010, _MIO6 = 0x0020 }; #define _PSENSE_SHIFT 24 #define _PSENSE_MASK 0xFF000000 #define _BUTTON_SHIFT 16 #define _BUTTON_MASK 0xFF0000 #define _TPA_SHIFT 8 #define _TPA_MASK 0xFF00 enum _BUTTONS { _NO_BUTTON = 0, _PORT0 = ((_MIO1 | _MIO2) << _BUTTON_SHIFT), _PORT1 = ((_MIO3 | _MIO4) << _BUTTON_SHIFT), _PORT2 = ((_MIO5 | _MIO6) << _BUTTON_SHIFT) }; #define _PS_INP1 (0x01 << _PSENSE_SHIFT) #define _PS_INP2 (0x02 << _PSENSE_SHIFT) #define _PS_INP_MIO1 (_MIO1 << (_PSENSE_SHIFT+2)) #define _PS_INP_MIO2 (_MIO2 << (_PSENSE_SHIFT+2)) #define _PS_INP_MIO3 (_MIO3 << (_PSENSE_SHIFT+2)) #define _PS_INP_MIO4 (_MIO4 << (_PSENSE_SHIFT+2)) #define _PS_INP_MIO5 (_MIO5 << (_PSENSE_SHIFT+2)) #define _PS_INP_MIO6 (_MIO6 << (_PSENSE_SHIFT+2)) /** for encoding a misc I/O register as TPA */ #define _TPA(register) ((u_long)(register << _TPA_SHIFT)) /** Mask to check for available TPA */ #define _HAS_TPA(flag) (flag & _TPA_MASK) /** Get the TPA misc I/O register */ #define _GET_TPALAMP(flag) ((flag >> _TPA_SHIFT) & 0xFF) /** Get the Papersense port*/ #define _GET_PAPERSENSE_PORT(flag) ((flag >> _PSENSE_SHIFT) & 0xFF) /** motor types */ typedef enum { MODEL_KaoHsiung = 0, MODEL_HuaLien, MODEL_Tokyo600, MODEL_EPSON, /**< for EPSON1250/1260 */ MODEL_MUSTEK600, /**< for BearPaw 1200 */ MODEL_MUSTEK1200, /**< for BearPaw 2400 */ MODEL_HP, /**< for HP2x00 */ MODEL_CANON600 , /**< for CanoScan 600dpi models */ MODEL_CANON1200, /**< for Canon 1200dpi models */ MODEL_CANONCCD1200, /**< for Canon CCD 1200dpi models */ MODEL_CANON_LIDE25, /**< for CanoScan LiDE25 */ MODEL_UMAX, /**< for UMAX 3400/3450 */ MODEL_UMAX1200, /**< for UMAX 5400 */ MODEL_TSCAN, /**< for Syscan TravelScan A6 */ MODEL_TSCAN_A4, /**< for Syscan TravelScan A4 */ MODEL_QSCAN, /**< for PandP Q-Scan A4 */ MODEL_QSCAN_A6, /**< for PandP Q-Scan A6 */ MODEL_LAST } eModelDef; /** to distinguish between Plustek and other devices */ #define _IS_PLUSTEKMOTOR(x) (x<=MODEL_Tokyo600) /** Generic usage */ enum _CHANNEL { CHANNEL_red, CHANNEL_green, CHANNEL_blue, CHANNEL_rgb }; /** motor movement */ enum MODULEMOVE { MOVE_Forward, MOVE_Backward, MOVE_Both, MOVE_ToPaperSensor, MOVE_EjectAllPapers, MOVE_SkipPaperSensor, MOVE_ToShading }; /** SCANDEF.dwFlags */ enum SCANFLAG { SCANDEF_Transparency = 0x00000100, /* Scanning from transparency*/ SCANDEF_Negative = 0x00000200, /* Scanning from negative */ SCANDEF_QualityScan = 0x00000400, /* Scanning in quality mode */ SCANDEF_ContinuousScan = 0x00001000, SCANDEF_Adf = 0x00002000, /* Scan from ADF tray */ SCANFLAG_bgr = 0x00004000, SCANFLAG_BottomUp = 0x00008000, SCANFLAG_DWORDBoundary = 0x00020000, SCANFLAG_RightAlign = 0x00040000, SCANFLAG_StillModule = 0x00080000, SCANFLAG_Pseudo48 = 0x08000000, SCANFLAG_SampleY = 0x04000000, SCANFLAG_Calibration = 0x10000000, SCANFLAG_Scanning = 0x20020000, SCANFLAG_StartScan = 0x40000000 }; typedef struct Origins { long lLeft; /* How many pix to move the scanning org left, in optic res */ long lUp; /* How many pix to move the scanning or up, in optic res */ } OrgDef; typedef struct SrcAttr { XY DataOrigin; /**< The origin x is from visible pixel not CCD */ /* pixel 0, in 300 DPI base. */ /* The origin y is from visible top */ /* (glass area), in 300 DPI */ short ShadingOriginY; /**< The origin y is from top of scanner body */ short DarkShadOrgY; /**< if the device has a dark calibration strip */ XY Size; /**< Scanning width/height, in 300 DPI base. */ XY MinDpi; /**< Minimum dpi supported for scanning */ } SrcAttrDef; typedef struct DevCaps { SrcAttrDef Normal; /**< Reflection */ SrcAttrDef Positive; /**< Positive film */ SrcAttrDef Negative; /**< Negative film */ SrcAttrDef Adf; /**< Adf device */ XY OpticDpi; /**< Maximum DPI */ u_short wFlags; /**< Flag to indicate what kinds of elements */ /* are available */ u_char bSensorOrder; /**< CCD color sequences, see _SENSORORDER */ u_char bSensorDistance; /**< CCD Color distance */ u_char bButtons; /**< Number of buttons */ u_char bCCD; /**< CCD ID */ u_short bPCB; /**< PCB ID/or threshold (only CIS) */ u_long workaroundFlag; /**< Flag to allow special work arounds, see */ /* _WORKAROUNDS */ u_long misc_io; /**< for lamp, papersense and buttons */ } DCapsDef; /** * for keeping intial illumination settings */ typedef struct { u_char mode; u_short red_lamp_on; u_short red_lamp_off; u_short green_lamp_on; u_short green_lamp_off; u_short blue_lamp_on; u_short blue_lamp_off; } IllumiDef; /** basic register settings */ typedef struct HWDefault { double dMaxMotorSpeed; /* Inches/second, max. scan speed */ double dMaxMoveSpeed; /* Inches/second, max. move speed */ double dHighSpeed; /* for speeding up the sensor */ double dIntegrationTimeLowLamp; double dIntegrationTimeHighLamp; u_short wMotorDpi; /* Full step DPI */ u_short wDRAMSize; /* in KB */ double dMinIntegrationTimeLowres; /*in ms. */ double dMinIntegrationTimeHighres; /* in ms. */ u_short wGreenPWMDutyCycleLow; u_short wGreenPWMDutyCycleHigh; /* Registers */ u_char bSensorConfiguration; /* 0x0b */ /* Sensor control settings */ u_char bReg_0x0c; u_char bReg_0x0d; u_char bReg_0x0e; u_char bReg_0x0f_Mono [10]; /* 0x0f to 0x18 */ u_char bReg_0x0f_Color [10]; /* 0x0f to 0x18 */ /* color mode settings */ u_char bReg_0x26; u_char bReg_0x27; /* illumination mode reg 0x29 (runtime) */ u_char bReg_0x29; /* initial illumination settings */ IllumiDef illu_mono; IllumiDef illu_color; /* 0x1a & 0x1b, remember the u_char order is not Intel * format, you have to pay your attention when you * write this value to register. */ u_short StepperPhaseCorrection; /* Sensor Pixel Configuration * Actually, the wActivePixelsStart will be set to 0 for shading purpose. * We have to keep these values to adjust the origins when user does the * scan. These settings are based on optic resolution. */ u_char bOpticBlackStart; /* 0x1c */ u_char bOpticBlackEnd; /* 0x1d */ u_short wActivePixelsStart; /* 0x1e & 0x1f */ u_short wLineEnd; /* 0x20 & 0x21 */ /* illumination settings (runtime) */ u_short red_lamp_on; /* 0x2c & 0x2d */ u_short red_lamp_off; /* 0x2e & 0x2f */ u_short green_lamp_on; /* 0x30 & 0x31 */ u_short green_lamp_off; /* 0x32 & 0x33 */ u_short blue_lamp_on; /* 0x34 & 0x35 */ u_short blue_lamp_off; /* 0x36 & 0x37 */ /* Misc */ u_char bReg_0x45; u_short wStepsAfterPaperSensor2;/* 0x4c & 0x4d */ u_char bStepsToReverse; /* 0x50 */ u_char bReg_0x51; u_char bReg_0x54; u_char bReg_0x55; u_char bReg_0x56; u_char bReg_0x57; u_char bReg_0x58; u_char bReg_0x59; u_char bReg_0x5a; u_char bReg_0x5b; u_char bReg_0x5c; u_char bReg_0x5d; u_char bReg_0x5e; eChipDef chip; /* chiptype */ eModelDef motorModel; /* to identify used motor */ double gamma; /* default gamma setting */ } HWDef; /** device description during runtime */ typedef struct DeviceDef { char* ModelStr; /**< pointer to our model string */ int vendor; /**< vendor ID */ int product; /**< product ID */ DCapsDef Caps; /**< pointer to the attribute of current dev */ HWDef HwSetting; /**< Pointer to the characteristics of device */ SrcAttrDef *pSource; /**< Scanning src, it's equal to Caps.Normal */ /**< on the source that the user specified. */ OrgDef Normal; /**< Reflection - Pix to adjust scanning orgs */ OrgDef Positive; /**< Pos film - Pix to adjust scanning orgs */ OrgDef Negative; /**< Neg film - Pix to adjust scanning orgs */ OrgDef Adf; /**< Adf - Pixels to adjust scanning origins */ u_long dwTicksLampOn; /**< The ticks when lamp turns on */ u_long dwLampOnPeriod;/**< How many seconds to keep lamp on */ SANE_Bool bLampOffOnEnd; /**< switch lamp off on end or keep cur. state*/ int currentLamp; /**< The lamp ID of the currently used lamp */ SANE_Bool fModFirstHome; /**< */ SANE_Bool fLastScanIsAdf;/**< */ u_char a_bRegs[0x80]; /**< our global register file */ } DeviceDef; typedef struct Settings { char *pIDString; DCapsDef *pDevCaps; HWDef *pHwDef; char *pModelString; } SetDef; /** */ typedef struct { /** User Information */ u_long dwBytes; /**< bytes per line */ u_long dwPixels; /**< pixels per line */ u_long dwLines; /**< lines */ /** Driver Info */ u_long dwValidPixels; /**< only valid pixels, not incl. pad pix(B/W,Gray)*/ u_long dwPhyPixels; /**< inlcude pad pixels for ASIC (B/W, Gray) */ u_long dwPhyBytes; /**< bytes to read from ASIC */ u_long dwPhyLines; /**< should include the extra lines accord to the */ /* request dpi (CCD lines distance) */ u_long dwTotalBytes; /**< Total bytes per scan */ } WinInfo; /** */ typedef struct { /* OUTPUT - Driver returned area. All are based on physical * scanning conditions. */ WinInfo Size; /* i/p: * dwPixels, dwBytes(without u_long boundary factor) * dwLines in user specified dpi * o/p: * dwPhyPixels, dwPhyBytes, dwPhyLines * so after called, caller have to change it */ XY PhyDpi; /* Driver DPI */ /* INPUT - User info. All sizes and coordinates are specified in the * unit based on 300 DPI */ XY UserDpi; /**< User specified DPI */ XY Origin; /**< Scanning origin in optic dpi */ double dMCLK; /**< for positive & negative & Adf */ short brightness; short contrast; u_char bSource; /**< Reflection/Positive/Negative/Adf(SOURCE_xxx)*/ u_char bDataType; /**< Bw, Gray or Color (see _SCANDATATYPE) */ u_char bBitDepth; /**< 1/8/14 */ u_char bChannels; /**< Color or Gray */ u_char bCalibration; /**< 1 or 2: the origin.x is from CCD pixel 0 and * the origin.y is from Top of scanner. * In this case, the WININFO.dwPhyLines * will not included the extra lines for * color distance factor. * 0: normal scan, the both directions have to * add the distance */ int swOffset[3]; /**< for calibration adjustment */ int swGain[3]; /**< for calibration adjustment */ } ScanParam; struct Plustek_Device; /** structure to hold all necessary buffer informations for current scan */ typedef struct ScanDef { SANE_Bool fCalibrated; /**< calibrated or not */ SANE_Bool skipCoarseCalib;/**< skip coarse calibration or not */ u_long dwFlag; /**< scan attributes */ ScanParam sParam; /**< all we need to scan */ AnyPtr UserBuf; /**< pointer to the user buffer */ u_long dwLinesUser; /**< Number of lines of user buffer */ u_long dwBytesLine; /**< Bytes per line of user buffer. */ u_long dwLinesToProcess; /** Image processing routine according to the scan mode */ void (*pfnProcess)(struct Plustek_Device*); u_long* pScanBuffer; /**< our scan buffer */ u_long dwLinesPerScanBufs; u_long dwNumberOfScanBufs; u_long dwLinesScanBuf; u_char* pbScanBufBegin; u_char* pbScanBufEnd; u_char* pbGetDataBuf; u_long dwBytesScanBuf; u_long dwLinesDiscard; u_long dwRedShift; u_long dwGreenShift; u_long dwBlueShift; AnyPtr Green; AnyPtr Red; AnyPtr Blue; long lBufAdjust; /**< bytes to adjust buffer pointer */ /* after a image line processed */ u_short wSumY; /**< for line sampling */ u_char bLineDistance; /**< Color offset in specific dpi y */ int fGrayFromColor; /**< channel to use for gray mode */ u_char bLinesToSkip; /**< how many lines to skip at start */ } ScanDef; /** max number of different colck settings */ #define _MAX_CLK 10 /** structure to hold PWN settings */ typedef struct { u_char pwm; /**< PWM */ u_char pwm_duty; /**< PWM duty cycles */ u_char scan_lines_per_line; /**< lines to scan to obtain 1 real line will be used in 16bit color modes only */ } MDef; /** according to the CCD and motor, we provide various settings */ typedef struct { eModelDef motorModel; /**< the motor ID */ u_char pwm_fast; /**< PWM during fast movement */ u_char pwm_duty_fast; /**< PWM duty during fast movement */ u_char mclk_fast; /**< MCLK during fast movement */ u_short dpi_thresh; u_short lineend; /** * here we define some ranges for better supporting * non-Plustek devices with it's different hardware * we can set the MCLK and the motor PWM stuff for color * and gray modes (8bit and 14/16bit modes) * 0 1 2 3 4 5 6 7 8 9 * <= 75 <=100 <=150 <=200 <=300 <=400 <=600 <= 800 <=1200 <=2400DPI */ MDef motor_sets[_MAX_CLK]; /**< motor PWM settings during scan */ double color_mclk_8[_MAX_CLK]; /**< MCLK settings for color scan */ double color_mclk_16[_MAX_CLK]; /**< MCLK settings for color (16bit) scan*/ double gray_mclk_8[_MAX_CLK]; /**< MCLK settings for gray scan */ double gray_mclk_16[_MAX_CLK]; /**< MCLK settings for gray (16bit) scan */ } ClkMotorDef; /** for transferring some info between child and parent after calibration */ #define _MAX_SHAD 0x4000 #define _SHADING_BUF (_MAX_SHAD*3) /**< max size of the shading buffer */ typedef struct { u_long transferRate; } IPCDef; #endif /* guard __PLUSTEK_USB_H__ */ /* END PLUSTEK-USB.H ........................................................*/