kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			
		
			
				
	
	
		
			1420 wiersze
		
	
	
		
			46 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			1420 wiersze
		
	
	
		
			46 KiB
		
	
	
	
		
			C
		
	
	
/* sane - Scanner Access Now Easy.
 | 
						|
 | 
						|
   Copyright (C) 2005 Mustek.
 | 
						|
   Originally maintained by Mustek
 | 
						|
   Author:Roy 2005.5.24
 | 
						|
 | 
						|
   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, see <https://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
   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.
 | 
						|
 | 
						|
   This file implements a SANE backend for the Mustek BearPaw 2448 TA Pro
 | 
						|
   and similar USB2 scanners. */
 | 
						|
 | 
						|
#ifndef MUSTEK_USB2_ASIC_H
 | 
						|
#define MUSTEK_USB2_ASIC_H
 | 
						|
 | 
						|
#include "../include/sane/sanei_usb.h"
 | 
						|
 | 
						|
/* ---------------------- low level asic defines -------------------------- */
 | 
						|
 | 
						|
#define TRUE 1
 | 
						|
#define FALSE 0
 | 
						|
 | 
						|
#define _MAX(a,b) ((a)>(b)?(a):(b))
 | 
						|
#define _MIN(a,b) ((a)<(b)?(a):(b))
 | 
						|
 | 
						|
#ifndef LOBYTE
 | 
						|
#define LOBYTE(w) (SANE_Byte)((unsigned short)(w) & 0x00ff)
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef HIBYTE
 | 
						|
#define HIBYTE(w) (SANE_Byte)((unsigned short)(w)>>8 & 0x00ff)
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
typedef enum tagFIRMWARESTATE
 | 
						|
{
 | 
						|
  FS_NULL = 0,
 | 
						|
  FS_ATTACHED = 1,
 | 
						|
  FS_OPENED = 2,
 | 
						|
  FS_SCANNING = 3
 | 
						|
} FIRMWARESTATE, *LPFIRMWARESTATE;
 | 
						|
 | 
						|
typedef enum tagMOTORSTATE
 | 
						|
{
 | 
						|
  MS_STILL = 0,
 | 
						|
  MS_MOVED = 1
 | 
						|
} MOTORSTATE, *LPMOTORSTATE;
 | 
						|
 | 
						|
typedef enum tagUSBHOST
 | 
						|
{
 | 
						|
  HT_USB10 = 0,
 | 
						|
  HT_USB20 = 1
 | 
						|
} USBHOST;
 | 
						|
 | 
						|
typedef enum tagLIGHTSOURCE
 | 
						|
{
 | 
						|
  LS_REFLECTIVE = 1,
 | 
						|
  LS_POSITIVE = 2,
 | 
						|
  LS_NEGATIVE = 4
 | 
						|
} LIGHTSOURCE;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  unsigned int LongX;
 | 
						|
  unsigned int PicWidth;
 | 
						|
  unsigned int PicHeight;
 | 
						|
 | 
						|
  unsigned int Top;
 | 
						|
  unsigned int Bottom;
 | 
						|
  unsigned int Left;
 | 
						|
  unsigned int Right;
 | 
						|
  unsigned int ScanMode;
 | 
						|
  unsigned int Dpi;
 | 
						|
  unsigned int TotalMotorSteps;
 | 
						|
 | 
						|
  unsigned int CCD_Pixel_Length;
 | 
						|
  SANE_Byte LineGap;
 | 
						|
  SANE_Byte TG_Pulse_Width_Pixel;
 | 
						|
  SANE_Byte TG_Wait_Width_Pixel;
 | 
						|
  unsigned short Multi_TG_Dummy_Pixel;
 | 
						|
  unsigned short CCD_Dummy_Pixel;
 | 
						|
  SANE_Byte Dummy_Cycle;
 | 
						|
  SANE_Byte TG_Times;
 | 
						|
 | 
						|
  double LineTime;
 | 
						|
 | 
						|
  unsigned short StartPixel;
 | 
						|
  unsigned short StartLine;
 | 
						|
}
 | 
						|
ScanParam;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  unsigned int Shading_Table_Size;
 | 
						|
  unsigned int Image_Buffer_Size;
 | 
						|
  unsigned int Full_Bank;
 | 
						|
  unsigned int Line_Pixel;
 | 
						|
  double Line_Time;
 | 
						|
  SANE_Byte LineGap;
 | 
						|
}
 | 
						|
Temps;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  /* AFE */
 | 
						|
  unsigned int AFE_ADCCLK_Timing;
 | 
						|
  unsigned int AFE_ADCVS_Timing;
 | 
						|
  unsigned int AFE_ADCRS_Timing;
 | 
						|
  unsigned short AFE_ChannelA_LatchPos;
 | 
						|
  unsigned short AFE_ChannelB_LatchPos;
 | 
						|
  unsigned short AFE_ChannelC_LatchPos;
 | 
						|
  unsigned short AFE_ChannelD_LatchPos;
 | 
						|
  SANE_Byte AFE_Secondary_FF_LatchPos;
 | 
						|
  /* Sensor */
 | 
						|
  unsigned int CCD_DummyCycleTiming;
 | 
						|
  SANE_Byte PHTG_PluseWidth;
 | 
						|
  SANE_Byte PHTG_WaitWidth;
 | 
						|
  unsigned short ChannelR_StartPixel;
 | 
						|
  unsigned short ChannelR_EndPixel;
 | 
						|
  unsigned short ChannelG_StartPixel;
 | 
						|
  unsigned short ChannelG_EndPixel;
 | 
						|
  unsigned short ChannelB_StartPixel;
 | 
						|
  unsigned short ChannelB_EndPixel;
 | 
						|
  SANE_Byte PHTG_TimingAdj;
 | 
						|
  SANE_Byte PHTG_TimingSetup;
 | 
						|
 | 
						|
  /*1200dpi */
 | 
						|
  unsigned int CCD_PHRS_Timing_1200;
 | 
						|
  unsigned int CCD_PHCP_Timing_1200;
 | 
						|
  unsigned int CCD_PH1_Timing_1200;
 | 
						|
  unsigned int CCD_PH2_Timing_1200;
 | 
						|
  SANE_Byte DE_CCD_SETUP_REGISTER_1200;
 | 
						|
  unsigned short wCCDPixelNumber_1200;
 | 
						|
 | 
						|
  /*600dpi */
 | 
						|
  unsigned int CCD_PHRS_Timing_600;
 | 
						|
  unsigned int CCD_PHCP_Timing_600;
 | 
						|
  unsigned int CCD_PH1_Timing_600;
 | 
						|
  unsigned int CCD_PH2_Timing_600;
 | 
						|
  SANE_Byte DE_CCD_SETUP_REGISTER_600;
 | 
						|
  unsigned short wCCDPixelNumber_600;
 | 
						|
} Timings;
 | 
						|
 | 
						|
 | 
						|
typedef struct tagADConverter
 | 
						|
{
 | 
						|
  SANE_Byte GainR;
 | 
						|
  SANE_Byte GainG;
 | 
						|
  SANE_Byte GainB;
 | 
						|
  SANE_Byte OffsetR;
 | 
						|
  SANE_Byte OffsetG;
 | 
						|
  SANE_Byte OffsetB;
 | 
						|
  SANE_Bool DirectionR;
 | 
						|
  SANE_Bool DirectionG;
 | 
						|
  SANE_Bool DirectionB;
 | 
						|
} ADConverter, LPADConverter;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  unsigned int Shading;
 | 
						|
  SANE_Byte Shading_0;
 | 
						|
  SANE_Byte Shading_1;
 | 
						|
  SANE_Byte Shading_2;
 | 
						|
 | 
						|
  unsigned int Motor;
 | 
						|
  SANE_Byte Motor_0;
 | 
						|
  SANE_Byte Motor_1;
 | 
						|
  SANE_Byte Motor_2;
 | 
						|
 | 
						|
  SANE_Byte ImageEndAddr_0;
 | 
						|
  SANE_Byte ImageEndAddr_1;
 | 
						|
  SANE_Byte ImageEndAddr_2;
 | 
						|
 | 
						|
  SANE_Byte ImageFullBank_0;
 | 
						|
  SANE_Byte ImageFullBank_1;
 | 
						|
}
 | 
						|
RamPosition;
 | 
						|
 | 
						|
typedef enum tagTASSTATUS
 | 
						|
{
 | 
						|
  TA_NOT_PLUGIN = 0,
 | 
						|
  TA_PLUGIN = 1,
 | 
						|
  TA_UNKNOW = 2
 | 
						|
} TASTATUS;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  int fd;			/* File Description of Scanner */
 | 
						|
 | 
						|
  FIRMWARESTATE firmwarestate;	/* record firmware state */
 | 
						|
  MOTORSTATE motorstate;	/* record motor status */
 | 
						|
  SANE_Bool isFirstOpenChip;		/* If first open chip, is TRUE */
 | 
						|
  USBHOST UsbHost;		/* The type of USB port */
 | 
						|
  LIGHTSOURCE lsLightSource;	/* light source of scanner */
 | 
						|
  ScanParam Scan;		/* The parameters of Scan */
 | 
						|
 | 
						|
  unsigned int dwBytesCountPerRow;
 | 
						|
  unsigned int dwCalibrationBytesCountPerRow;
 | 
						|
 | 
						|
  Temps Temp;
 | 
						|
  Timings Timing;
 | 
						|
  ADConverter AD;
 | 
						|
 | 
						|
  SANE_Bool isHardwareShading;
 | 
						|
 | 
						|
  RamPosition RamPositions;
 | 
						|
 | 
						|
  unsigned short * lpGammaTable;
 | 
						|
  SANE_Byte isMotorMove;
 | 
						|
 | 
						|
  unsigned int ibase1;
 | 
						|
  unsigned int ibase2;
 | 
						|
 | 
						|
  unsigned short SWWidth;
 | 
						|
 | 
						|
  TASTATUS TA_Status;
 | 
						|
 | 
						|
  SANE_Byte isMotorGoToFirstLine;	/*Roy add */
 | 
						|
  SANE_Byte * lpShadingTable;	/*Roy add */
 | 
						|
  SANE_Byte isUniformSpeedToScan;
 | 
						|
}
 | 
						|
Asic, *PAsic;
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
  STATUS_GOOD = 0,
 | 
						|
  STATUS_CANCELLED,
 | 
						|
  STATUS_EOF,
 | 
						|
  STATUS_DEVICE_BUSY,
 | 
						|
  STATUS_INVAL,
 | 
						|
  STATUS_MEM_ERROR,
 | 
						|
  STATUS_IO_ERROR,
 | 
						|
  STATUS_ACCESS_ERROR
 | 
						|
}
 | 
						|
STATUS;
 | 
						|
 | 
						|
 | 
						|
/* For ScanObj */
 | 
						|
typedef struct Point
 | 
						|
{
 | 
						|
  unsigned int x;
 | 
						|
  unsigned int y;
 | 
						|
}
 | 
						|
Point;
 | 
						|
 | 
						|
typedef struct Rect
 | 
						|
{
 | 
						|
  unsigned int left;
 | 
						|
  unsigned int right;
 | 
						|
  unsigned int top;
 | 
						|
  unsigned int bottom;
 | 
						|
}
 | 
						|
Rect;
 | 
						|
 | 
						|
typedef struct RGBColor
 | 
						|
{
 | 
						|
  unsigned short Red;
 | 
						|
  unsigned short Green;
 | 
						|
  unsigned short Blue;
 | 
						|
}
 | 
						|
RGBColor;
 | 
						|
 | 
						|
/* debug levels */
 | 
						|
#define DBG_CRIT 	0	/* Critical errors thatshould be printed even
 | 
						|
				   if user hasn't enabled debugging -- use
 | 
						|
				   with care and only after sane_open has been
 | 
						|
				   called */
 | 
						|
#define DBG_ERR 	1	/* Other errors */
 | 
						|
#define DBG_WARN 	2	/* unusual conditions that may not be fatal */
 | 
						|
#define DBG_INFO 	3	/* information useful for the deucated user */
 | 
						|
#define DBG_DET 	4	/* more detailed information */
 | 
						|
#define DBG_FUNC 	5	/* start and exits of high level functions */
 | 
						|
#define DBG_ASIC 	6	/* starts and exits of low level functions */
 | 
						|
#define DBG_DBG 	10	/* useful only for tracing bugs */
 | 
						|
 | 
						|
 | 
						|
#define		DPI_2400		0x8000
 | 
						|
#define		DPI_1200		0x8000
 | 
						|
#define		DPI_600			0x8000
 | 
						|
#define		DPI_300			0x4000
 | 
						|
#define		DPI_200			0x2aaa
 | 
						|
#define		DPI_150			0x2000
 | 
						|
#define		DPI_100			0x1555
 | 
						|
#define		DPI_75			0x1000
 | 
						|
#define     DPI_50          0xaaa
 | 
						|
#define		PIXEL_TIME		333	/*unit : ms */
 | 
						|
#define DRAM_1Mx16_SIZE				(1024*1024)	/*unit : word */
 | 
						|
#define PackAreaStartAddress ((DRAM_1Mx16_SIZE/4)*3)
 | 
						|
 | 
						|
#define TEMP_MEMORY_SIZE_64K 64*1024
 | 
						|
 | 
						|
#define CALIBRATION_PIXEL_WIDTH			10240	/*need 512x */
 | 
						|
#define	CALIBRATE_WHITE_LINECOUNT	40
 | 
						|
#define	CALIBRATE_DARK_LINECOUNT	2
 | 
						|
 | 
						|
#define ACTION_MODE_ACCDEC_MOVE 0
 | 
						|
#define ACTION_MODE_UNIFORM_SPEED_MOVE 1
 | 
						|
 | 
						|
#define ACTION_TYPE_BACKWARD 0
 | 
						|
#define ACTION_TYPE_FORWARD  1
 | 
						|
#define ACTION_TYPE_BACKTOHOME 2
 | 
						|
#define ACTION_TYPE_TEST_MODE 3
 | 
						|
 | 
						|
 | 
						|
#define SENSOR0_DETECTED 0x10
 | 
						|
#define SENSOR1_DETECTED 0x20
 | 
						|
#define SENSOR0AND1_DETECTED 0x30
 | 
						|
 | 
						|
#define READ_RAM	0
 | 
						|
#define WRITE_RAM	1
 | 
						|
 | 
						|
#define EXTERNAL_RAM	0
 | 
						|
#define ON_CHIP_PRE_GAMMA	1
 | 
						|
#define ON_CHIP_FINAL_GAMMA	2
 | 
						|
 | 
						|
#define MOTOR_TABLE_SIZE	512*8
 | 
						|
 | 
						|
#define ValidPixelNumberFor600DPI 5100 + 50 + 250
 | 
						|
#define ValidPixelNumberFor1200DPI 10200 + 100 + 500
 | 
						|
 | 
						|
#define OverLapPixelNumber600 0
 | 
						|
#define OverLapPixelNumber1200 0
 | 
						|
#define SegmentGap 0
 | 
						|
#define	BANK_SIZE	(64)
 | 
						|
 | 
						|
#define WaitBufferOneLineSize 11000*6
 | 
						|
 | 
						|
#define CCD_PIXEL_NUMBER   21600
 | 
						|
#define CCD_Line_Spacing   24
 | 
						|
#define CCD_EvneOdd_Spacing 2
 | 
						|
 | 
						|
#define	ShadingTableSize(x)			( ((x + 10)*6) + ( ((x + 10)*6)/240)*16 )
 | 
						|
#define ACC_DEC_STEP_TABLE_SIZE		(512)	/*unit : word */
 | 
						|
#define TableBase(x)				((((x)+((1<<TABLE_OFFSET_BASE)-1))>>TABLE_OFFSET_BASE)<<TABLE_OFFSET_BASE)
 | 
						|
#define NUM_OF_ACC_DEC_STEP_TABLE	(8)	/*unit : word */
 | 
						|
#define TABLE_BASE_SIZE				(1024*2*2*2*2)	/*unit : word */
 | 
						|
#define LAMP0_PWM_DEFAULT            255
 | 
						|
#define LAMP1_PWM_DEFAULT            255
 | 
						|
 | 
						|
#define TABLE_OFFSET_BASE			(14)	/*unit : word */
 | 
						|
#define CHECK_HOME_SLEEP_TIME 100
 | 
						|
 | 
						|
#define _MOTOR_MOVE_TYPE _4_TABLE_SPACE_FOR_FULL_STEP
 | 
						|
 | 
						|
 | 
						|
#define TA_CAL_PIXELNUMBER 50000
 | 
						|
 | 
						|
#define SENSOR_DPI  1200
 | 
						|
#define TA_IMAGE_PIXELNUMBER 61000
 | 
						|
#define MAX_PATH 256
 | 
						|
 | 
						|
 | 
						|
/**************************** ASIC registers ***********************/
 | 
						|
 | 
						|
/*ES01_XX = Easy Scan_01 register hex xx*/
 | 
						|
#define		ES01_00_AFEReg0				0x00
 | 
						|
#define		ES01_01_AFEReg1				0x01
 | 
						|
#define		ES01_02_AFEReg2				0x02
 | 
						|
#define		ES01_03_AFEReg3				0x03
 | 
						|
#define		ES01_04_AFEReset			0x04
 | 
						|
#define		ES01_05_AFEReg4				0x05
 | 
						|
 | 
						|
#define		ES01_20_DACRed				0x20
 | 
						|
#define		ES01_21_DACGreen			0x21
 | 
						|
#define		ES01_22_DACBlue				0x22
 | 
						|
#define		ES01_24_SignRed				0x24
 | 
						|
#define		ES01_25_SignGreen			0x25
 | 
						|
#define		ES01_26_SignBlue			0x26
 | 
						|
#define		ES01_28_PGARed				0x28
 | 
						|
#define		ES01_29_PGAGreen			0x29
 | 
						|
#define		ES01_2A_PGABlue				0x2A
 | 
						|
 | 
						|
#define		ES01_00_ADAFEConfiguration	0x00
 | 
						|
#define		ES01_02_ADAFEMuxConfig		0x02
 | 
						|
#define		ES01_04_ADAFEPGACH1			0x04
 | 
						|
#define		ES01_06_ADAFEPGACH2			0x06
 | 
						|
#define		ES01_08_ADAFEPGACH3			0x08
 | 
						|
 | 
						|
#define		ES01_0C_ADAFEOffsetCH1P		0x0C
 | 
						|
#define		ES01_0D_ADAFEOffsetCH1N		0x0D
 | 
						|
#define		ES01_0E_ADAFEOffsetCH2P		0x0E
 | 
						|
#define		ES01_0F_ADAFEOffsetCH2N		0x0F
 | 
						|
#define		ES01_10_ADAFEOffsetCH3P		0x10
 | 
						|
#define		ES01_11_ADAFEOffsetCH3N		0x11
 | 
						|
 | 
						|
#define		ES01_00_AD9826Configuration	0x00
 | 
						|
#define		ES01_02_AD9826MuxConfig		0x02
 | 
						|
#define		ES01_04_AD9826PGARed		0x04
 | 
						|
#define		ES01_06_AD9826PGAGreen		0x06
 | 
						|
#define		ES01_08_AD9826PGABlue		0x08
 | 
						|
#define		ES01_0A_AD9826OffsetRedP	0x0a
 | 
						|
#define		ES01_0B_AD9826OffsetRedN	0x0b
 | 
						|
#define		ES01_0C_AD9826OffsetGreenP	0x0c
 | 
						|
#define		ES01_0D_AD9826OffsetGreenN	0x0d
 | 
						|
#define		ES01_0E_AD9826OffsetBlueP	0x0e
 | 
						|
#define		ES01_0F_AD9826OffsetBlueN	0x0f
 | 
						|
 | 
						|
#define		ES02_50_MOTOR_CURRENT_CONTORL		0x50
 | 
						|
			/* bit[0] */
 | 
						|
#define	DOWN_LOAD_MOTOR_TABLE_DISABLE	0x00
 | 
						|
#define	DOWN_LOAD_MOTOR_TABLE_ENABLE	0x01
 | 
						|
			/* bit[3:1] */
 | 
						|
#define	_4_TABLE_SPACE_FOR_FULL_STEP	0x00
 | 
						|
#define	_8_TABLE_SPACE_FOR_1_DIV_2_STEP	0x02
 | 
						|
#define	_16_TABLE_SPACE_FOR_1_DIV_4_STEP	0x06
 | 
						|
#define	_32_TABLE_SPACE_FOR_1_DIV_8_STEP	0x0E
 | 
						|
			/* bit[4] */
 | 
						|
#define	MOTOR_TABLE_ADDR_SHOW_IN_FIRST_PIXEL_OF_LINE_DISABLE	0x00
 | 
						|
#define	MOTOR_TABLE_ADDR_SHOW_IN_FIRST_PIXEL_OF_LINE_ENABLE		0x10
 | 
						|
			/* bit[5] */
 | 
						|
#define	MOTOR_CURRENT_TABLE_ADDRESS_BIT4_TO_BIT0_DISABLE	0x00
 | 
						|
#define	MOTOR_CURRENT_TABLE_ADDRESS_BIT4_TO_BIT0_ENABLE		0x20
 | 
						|
 | 
						|
#define		ES02_51_MOTOR_PHASE_TABLE_1			0x51
 | 
						|
#define		ES02_52_MOTOR_CURRENT_TABLE_A		0x52
 | 
						|
#define		ES02_53_MOTOR_CURRENT_TABLE_B		0x53
 | 
						|
 | 
						|
#define		ES01_5F_REGISTER_BANK_SELECT	0x5F
 | 
						|
		/* bit[1:0] */
 | 
						|
#define		SELECT_REGISTER_BANK0	0x00
 | 
						|
#define		SELECT_REGISTER_BANK1	0x01
 | 
						|
#define		SELECT_REGISTER_BANK2	0x02
 | 
						|
 | 
						|
/* AFE Auto Configuration Gain & Offset Register */
 | 
						|
#define		ES01_60_AFE_AUTO_GAIN_OFFSET_RED_LB		0x60
 | 
						|
#define		ES01_61_AFE_AUTO_GAIN_OFFSET_RED_HB		0x61
 | 
						|
#define		ES01_62_AFE_AUTO_GAIN_OFFSET_GREEN_LB	0x62
 | 
						|
#define		ES01_63_AFE_AUTO_GAIN_OFFSET_GREEN_HB	0x63
 | 
						|
#define		ES01_64_AFE_AUTO_GAIN_OFFSET_BLUE_LB	0x64
 | 
						|
#define		ES01_65_AFE_AUTO_GAIN_OFFSET_BLUE_HB	0x65
 | 
						|
 | 
						|
#define	ES01_74_HARDWARE_SETTING	0x74
 | 
						|
/* bit[0] */
 | 
						|
#define	MOTOR1_SERIAL_INTERFACE_G10_8_ENABLE	0x01
 | 
						|
#define	MOTOR1_SERIAL_INTERFACE_G10_8_DISABLE	0x00
 | 
						|
/* bit[1]*/
 | 
						|
#define LED_OUT_G11_ENABLE	0x02
 | 
						|
#define LED_OUT_G11_DISABLE	0x00
 | 
						|
		  /* bit[2] */
 | 
						|
#define	SLAVE_SERIAL_INTERFACE_G15_14_ENABLE	0x04
 | 
						|
#define	SLAVE_SERIAL_INTERFACE_G15_14_DISABLE	0x00
 | 
						|
		  /* bit[3] */
 | 
						|
#define	SHUTTLE_CCD_ENABLE	0x08
 | 
						|
#define	SHUTTLE_CCD_DISABLE	0x00
 | 
						|
		  /* bit[4] */
 | 
						|
#define	HARDWARE_RESET_ESIC_AFE_ENABLE	0x10
 | 
						|
#define	HARDWARE_RESET_ESIC_AFE_DISABLE	0x00
 | 
						|
 | 
						|
#define		ES01_79_AFEMCLK_SDRAMCLK_DELAY_CONTROL		0x79
 | 
						|
			/* bit[3:0] */
 | 
						|
#define	AFEMCLK_DELAY_0_ns		0x00
 | 
						|
#define	AFEMCLK_DELAY_2_ns		0x01
 | 
						|
#define	AFEMCLK_DELAY_4_ns		0x02
 | 
						|
#define	AFEMCLK_DELAY_6_ns		0x03
 | 
						|
#define	AFEMCLK_DELAY_8_ns		0x04
 | 
						|
#define	AFEMCLK_DELAY_10_ns		0x05
 | 
						|
#define	AFEMCLK_DELAY_12_ns		0x06
 | 
						|
#define	AFEMCLK_DELAY_14_ns		0x07
 | 
						|
#define	AFEMCLK_DELAY_16_ns		0x08
 | 
						|
#define	AFEMCLK_DELAY_18_ns		0x09
 | 
						|
#define	AFEMCLK_DELAY_20_ns		0x0A
 | 
						|
/* bit[7:4]*/
 | 
						|
#define	SDRAMCLK_DELAY_0_ns		0x00
 | 
						|
#define	SDRAMCLK_DELAY_2_ns		0x10
 | 
						|
#define	SDRAMCLK_DELAY_4_ns		0x20
 | 
						|
#define	SDRAMCLK_DELAY_6_ns		0x30
 | 
						|
#define	SDRAMCLK_DELAY_8_ns		0x40
 | 
						|
#define	SDRAMCLK_DELAY_10_ns	0x50
 | 
						|
#define	SDRAMCLK_DELAY_12_ns	0x60
 | 
						|
#define	SDRAMCLK_DELAY_14_ns	0x70
 | 
						|
#define	SDRAMCLK_DELAY_16_ns	0x80
 | 
						|
#define	SDRAMCLK_DELAY_18_ns	0x90
 | 
						|
#define	SDRAMCLK_DELAY_20_ns	0xA0
 | 
						|
 | 
						|
#define		ES01_82_AFE_ADCCLK_TIMING_ADJ_BYTE0		0x82
 | 
						|
#define		ES01_83_AFE_ADCCLK_TIMING_ADJ_BYTE1		0x83
 | 
						|
#define		ES01_84_AFE_ADCCLK_TIMING_ADJ_BYTE2		0x84
 | 
						|
#define		ES01_85_AFE_ADCCLK_TIMING_ADJ_BYTE3		0x85
 | 
						|
#define		ES01_86_DisableAllClockWhenIdle		0x86
 | 
						|
			/* bit[0] */
 | 
						|
#define		CLOSE_ALL_CLOCK_ENABLE	0x01
 | 
						|
#define		CLOSE_ALL_CLOCK_DISABLE	0x00
 | 
						|
#define		ES01_87_SDRAM_Timing				0x87
 | 
						|
 | 
						|
#define		ES01_88_LINE_ART_THRESHOLD_HIGH_VALUE	0x88
 | 
						|
#define		ES01_89_LINE_ART_THRESHOLD_LOW_VALUE	0x89
 | 
						|
 | 
						|
#define ES01_8A_FixScanStepMSB			0x8a
 | 
						|
#define ES01_8B_Status					0x8b
 | 
						|
		/* bit[4:0] */
 | 
						|
#define		H1H0L1L0_PS_MJ				0x00
 | 
						|
#define		SCAN_STATE					0x01
 | 
						|
#define		GPIO0_7						0x02
 | 
						|
#define		GPIO8_15					0x03
 | 
						|
#define		AVAILABLE_BANK_COUNT0_7		0x04
 | 
						|
#define		AVAILABLE_BANK_COUNT8_15	0x05
 | 
						|
#define		RAM_ADDRESS_POINTER0_7		0x06
 | 
						|
#define		RAM_ADDRESS_POINTER8_15		0x07
 | 
						|
#define		RAM_ADDRESS_POINTER16_19	0x08
 | 
						|
#define		CARRIAGE_POS_DURING_SCAN0_7	0x09
 | 
						|
#define		CARRIAGE_POS_DURING_SCAN8_15	0x0a
 | 
						|
#define		CARRIAGE_POS_DURING_SCAN16_19	0x0b
 | 
						|
#define		LINE_TIME0_7				0x0C
 | 
						|
#define		LINE_TIME8_15				0x0d
 | 
						|
#define		LINE_TIME16_19				0x0e
 | 
						|
#define		LAST_COMMAND_ADDRESS		0x0f
 | 
						|
#define		LAST_COMMAND_DATA			0x10
 | 
						|
#define		SERIAL_READ_REGISTER_0		0x11
 | 
						|
#define		SERIAL_READ_REGISTER_1		0x12
 | 
						|
#define		SERIAL_READ_REGISTER_2		0x13
 | 
						|
#define		SERIAL_READ_REGISTER_3		0x14
 | 
						|
#define		MOTOR_STEP_TRIGER_POSITION7_0	0x15
 | 
						|
#define		MOTOR_STEP_TRIGER_POSITION15_8	0x16
 | 
						|
#define		MOTOR_STEP_TRIGER_POSITION23_16	0x17
 | 
						|
#define		CHIP_STATUS_A				0x18	/*reserve */
 | 
						|
#define		CHIP_STRING_0				0x19	/*0x45'E' */
 | 
						|
#define		CHIP_STRING_1				0x1a	/*0x53'S' */
 | 
						|
#define		CHIP_STRING_2				0x1b	/*0x43'C' */
 | 
						|
#define		CHIP_STRING_3				0x1c	/*0x41'A' */
 | 
						|
#define		CHIP_STRING_4				0x1d	/*0x4E'N' */
 | 
						|
#define		CHIP_STRING_5				0x1e	/*0x30'0' */
 | 
						|
#define		CHIP_STRING_6				0x1f	/*0x31'1' */
 | 
						|
#define ES01_8C_RestartMotorSynPixelNumberM16LSB	0x8c
 | 
						|
#define ES01_8D_RestartMotorSynPixelNumberM16MSB	0x8d
 | 
						|
#define ES01_90_Lamp0PWM				0x90
 | 
						|
#define ES01_91_Lamp1PWM				0x91
 | 
						|
#define ES01_92_TimerPowerSaveTime		0x92
 | 
						|
#define ES01_93_MotorWatchDogTime		0x93
 | 
						|
#define ES01_94_PowerSaveControl		0x94
 | 
						|
		/* bit[0] */
 | 
						|
#define		TIMER_POWER_SAVE_ENABLE		0x01
 | 
						|
#define		TIMER_POWER_SAVE_DISABLE	0x00
 | 
						|
 | 
						|
/* bit[1]*/
 | 
						|
#define		USB_POWER_SAVE_ENABLE		0x02
 | 
						|
#define		USB_POWER_SAVE_DISABLE		0x00
 | 
						|
/* bit[2]*/
 | 
						|
#define		USB_REMOTE_WAKEUP_ENABLE	0x04
 | 
						|
#define		USB_REMOTE_WAKEUP_DISABLE	0x00
 | 
						|
/* bit[5:4]*/
 | 
						|
#define		LED_MODE_ON					0x00
 | 
						|
#define		LED_MODE_OFF				0x10
 | 
						|
#define		LED_MODE_FLASH_SLOWLY		0x20
 | 
						|
#define		LED_MODE_FLASH_QUICKLY		0x30
 | 
						|
 | 
						|
 | 
						|
#define ES01_95_GPIOValue0_7			0x95
 | 
						|
#define ES01_96_GPIOValue8_15			0x96
 | 
						|
#define ES01_97_GPIOControl0_7			0x97
 | 
						|
#define ES01_98_GPIOControl8_15			0x98
 | 
						|
#define	ES01_99_LAMP_PWM_FREQ_CONTROL	0x99
 | 
						|
#define ES01_9A_AFEControl				0x9a
 | 
						|
		/*bit[0] */
 | 
						|
#define ADAFE_AFE		0x00
 | 
						|
#define AD9826_AFE		0x01
 | 
						|
/*bit[1]*/
 | 
						|
#define AUTO_CHANGE_AFE_GAIN_OFFSET_ENABLE 0x02
 | 
						|
#define AUTO_CHANGE_AFE_GAIN_OFFSET_DISABLE 0x00
 | 
						|
 | 
						|
#define	ES01_9B_ShadingTableAddrA14_A21		0x9B
 | 
						|
#define ES01_9C_ShadingTableAddrODDA12_A19 0x9c
 | 
						|
#define ES01_9D_MotorTableAddrA14_A21	0x9d
 | 
						|
#define ES01_9E_HorizontalRatio1to15LSB 0x9e
 | 
						|
#define ES01_9F_HorizontalRatio1to15MSB 0x9f
 | 
						|
#define ES01_A0_HostStartAddr0_7		0xa0
 | 
						|
#define ES01_A1_HostStartAddr8_15		0xa1
 | 
						|
		/* bit[3] */
 | 
						|
#define		ES01_ACCESS_PRE_GAMMA			0x08
 | 
						|
#define		ES01_ACCESS_FINAL_GAMMA			0x00
 | 
						|
#define ES01_A2_HostStartAddr16_21		0xa2
 | 
						|
		/* bit[7] */
 | 
						|
#define		ACCESS_DRAM	       			0x00
 | 
						|
#define		ACCESS_GAMMA_RAM    		0x80
 | 
						|
#define ES01_A3_HostEndAddr0_7			0xa3
 | 
						|
#define ES01_A4_HostEndAddr8_15			0xa4
 | 
						|
#define ES01_A5_HostEndAddr16_21		0xa5
 | 
						|
 | 
						|
#define		ES01_A6_MotorOption				0xA6
 | 
						|
		/* bit[0] */
 | 
						|
#define		MOTOR_0_ENABLE				0x01
 | 
						|
#define		MOTOR_0_DISABLE				0x00
 | 
						|
/*	bit[1]*/
 | 
						|
#define		MOTOR_1_ENABLE				0x02
 | 
						|
#define		MOTOR_1_DISABLE				0x00
 | 
						|
/* bit[3:2]*/
 | 
						|
#define		HOME_SENSOR_0_ENABLE		0x00
 | 
						|
#define		HOME_SENSOR_1_ENABLE		0x04
 | 
						|
#define		HOME_SENSOR_BOTH_ENABLE		0x08
 | 
						|
#define		HOME_SENSOR_0_INVERT_ENABLE	0x0c
 | 
						|
/* bit[7:4]*/
 | 
						|
#define		ES03_UNIPOLAR_FULL_STEP_2003	0x00
 | 
						|
#define		ES03_BIPOLAR_FULL_2916			0x10
 | 
						|
#define		ES03_BIPOLAR_FULL_3955_3966		0x20
 | 
						|
#define		ES03_UNIPOLAR_PWM_2003			0x30
 | 
						|
#define		ES03_BIPOLAR_3967				0x40
 | 
						|
#define		ES03_TABLE_DEFINE				0x50
 | 
						|
#define ES01_A7_MotorPWMOnTimePhasA		0xa7
 | 
						|
#define ES01_A8_MotorPWMOnTimePhasB		0xa8
 | 
						|
#define ES01_A9_MotorPWMOffTimePhasA	0xa9
 | 
						|
#define ES01_AA_MotorPWMOffTimePhasB	0xaa
 | 
						|
#define ES01_AB_PWM_CURRENT_CONTROL		0xab
 | 
						|
 | 
						|
		/* bit[1:0] */
 | 
						|
#define	MOTOR_PWM_CURRENT_0	0x00
 | 
						|
#define	MOTOR_PWM_CURRENT_1	0x01
 | 
						|
#define	MOTOR_PWM_CURRENT_2	0x02
 | 
						|
#define	MOTOR_PWM_CURRENT_3	0x03
 | 
						|
/* bit[3:2]*/
 | 
						|
#define	MOTOR1_GPO_VALUE_0	0x00
 | 
						|
#define	MOTOR1_GPO_VALUE_1	0x04
 | 
						|
#define	MOTOR1_GPO_VALUE_2	0x08
 | 
						|
#define	MOTOR1_GPO_VALUE_3	0x0c
 | 
						|
/* bit[4]*/
 | 
						|
#define	GPO_OUTPUT_ENABLE	0x10
 | 
						|
#define	GPO_OUTPUT_DISABLE	0x00
 | 
						|
/* bit[5]*/
 | 
						|
#define	SERIAL_PORT_CONTINUOUS_OUTPUT_ENABLE	0x20
 | 
						|
#define	SERIAL_PORT_CONTINUOUS_OUTPUT_DISABLE	0x00
 | 
						|
#define ES01_AC_MotorPWMJamRangeLSB		0xac
 | 
						|
#define ES01_AD_MotorPWMJamRangeMSB		0xad
 | 
						|
#define ES01_AE_MotorSyncPixelNumberM16LSB	0xae
 | 
						|
#define ES01_AF_MotorSyncPixelNumberM16MSB	0xaf
 | 
						|
#define	ES01_B0_CCDPixelLSB					0xb0
 | 
						|
#define	ES01_B1_CCDPixelMSB					0xb1
 | 
						|
#define ES01_B2_PHTGPulseWidth				0xb2
 | 
						|
#define ES01_B3_PHTGWaitWidth				0xb3
 | 
						|
#define ES01_B4_StartPixelLSB				0xb4
 | 
						|
#define ES01_B5_StartPixelMSB				0xb5
 | 
						|
#define ES01_B6_LineWidthPixelLSB			0xb6
 | 
						|
#define ES01_B7_LineWidthPixelMSB			0xb7
 | 
						|
 | 
						|
#define ES01_B8_ChannelRedExpStartPixelLSB		0xb8
 | 
						|
#define ES01_B9_ChannelRedExpStartPixelMSB		0xb9
 | 
						|
#define ES01_BA_ChannelRedExpEndPixelLSB		0xba
 | 
						|
#define ES01_BB_ChannelRedExpEndPixelMSB		0xbb
 | 
						|
#define ES01_BC_ChannelGreenExpStartPixelLSB	0xbc
 | 
						|
#define ES01_BD_ChannelGreenExpStartPixelMSB	0xbd
 | 
						|
#define ES01_BE_ChannelGreenExpEndPixelLSB		0xbe
 | 
						|
#define ES01_BF_ChannelGreenExpEndPixelMSB		0xbf
 | 
						|
#define ES01_C0_ChannelBlueExpStartPixelLSB		0xc0
 | 
						|
#define ES01_C1_ChannelBlueExpStartPixelMSB		0xc1
 | 
						|
#define ES01_C2_ChannelBlueExpEndPixelLSB		0xc2
 | 
						|
#define ES01_C3_ChannelBlueExpEndPixelMSB		0xc3
 | 
						|
 | 
						|
 | 
						|
#define ES01_C4_MultiTGTimesRed				0xc4
 | 
						|
#define ES01_C5_MultiTGTimesGreen			0xc5
 | 
						|
#define ES01_C6_MultiTGTimesBlue			0xc6
 | 
						|
#define ES01_C7_MultiTGDummyPixelNumberLSB	0xc7
 | 
						|
#define ES01_C8_MultiTGDummyPixelNumberMSB	0xc8
 | 
						|
#define ES01_C9_CCDDummyPixelNumberLSB		0xc9
 | 
						|
#define ES01_CA_CCDDummyPixelNumberMSB		0xca
 | 
						|
#define ES01_CB_CCDDummyCycleNumber			0xcb
 | 
						|
#define ES01_CC_PHTGTimingAdjust			0xcc
 | 
						|
		/*      bit[0] */
 | 
						|
#define		PHTG_INVERT_OUTPUT_ENABLE			0x01
 | 
						|
#define		PHTG_INVERT_OUTPUT_DISABLE			0x00
 | 
						|
/*	bit[1]*/
 | 
						|
#define		TWO_TG								0x01
 | 
						|
#define		MULTI_TG							0x00
 | 
						|
		  /*    bit[3:2] */
 | 
						|
#define		CCD_PIXEL_MODE_RED					0x0c
 | 
						|
#define		CCD_LINE_MOE_RED_00					0x00
 | 
						|
#define		CCD_LINE_MOE_RED_01					0x04
 | 
						|
#define		CCD_LINE_MOE_RED_10					0x08
 | 
						|
/*	bit[5:4]*/
 | 
						|
#define		CCD_PIXEL_MODE_GREEN				0x30
 | 
						|
#define		CCD_LINE_MOE_GREEN_00				0x00
 | 
						|
#define		CCD_LINE_MOE_GREEN_01				0x40
 | 
						|
#define		CCD_LINE_MOE_GREEN_10				0x80
 | 
						|
/*	bit[7:6]*/
 | 
						|
#define		CCD_PIXEL_MODE_BLUE					0xc0
 | 
						|
#define		CCD_LINE_MOE_BLUE_00				0x00
 | 
						|
#define		CCD_LINE_MOE_BLUE_01				0x40
 | 
						|
#define		CCD_LINE_MOE_BLUE_10				0x80
 | 
						|
 | 
						|
#define		ES01_CD_TG_R_CONTROL					0xCD
 | 
						|
#define		ES01_CE_TG_G_CONTROL					0xCE
 | 
						|
#define		ES01_CF_TG_B_CONTROL					0xCF
 | 
						|
 | 
						|
#define		ES01_D9_CLEAR_PULSE_WIDTH				0xD9
 | 
						|
#define		ES01_DA_CLEAR_SIGNAL_INVERTING_OUTPUT	0xDA
 | 
						|
#define		ES01_DB_PH_RESET_EDGE_TIMING_ADJUST		0xDB
 | 
						|
#define		ES01_DC_CLEAR_EDGE_TO_PH_TG_EDGE_WIDTH	0xDC
 | 
						|
#define		ES01_D0_PH1_0						0xD0
 | 
						|
#define		ES01_D1_PH2_0						0xD1
 | 
						|
#define		ES01_D2_PH1B_0						0xD2
 | 
						|
#define		ES01_D4_PHRS_0						0xD4
 | 
						|
#define		ES01_D5_PHCP_0						0xD5
 | 
						|
#define		ES01_D6_AFE_VSAMP_0					0xD6
 | 
						|
#define		ES01_D7_AFE_RSAMP_0					0xD7
 | 
						|
 | 
						|
#define		ES01_D8_PHTG_EDGE_TIMING_ADJUST		0xD8
 | 
						|
 | 
						|
#define ES01_CD_PH1_0						0xcd
 | 
						|
#define ES01_CE_PH1_1						0xce
 | 
						|
#define ES01_CF_PH2_0						0xcf
 | 
						|
#define ES01_D0_PH2_1						0xd0
 | 
						|
#define ES01_D1_PH1B_0						0xd1
 | 
						|
#define ES01_D2_PH1B_1						0xd2
 | 
						|
#define ES01_D3_PH2B_0						0xd3
 | 
						|
#define ES01_D4_PH2B_1						0xd4
 | 
						|
#define ES01_D5_PHRS_0						0xd5
 | 
						|
#define ES01_D6_PHRS_1						0xd6
 | 
						|
#define ES01_D7_PHCP_0						0xd7
 | 
						|
#define ES01_D8_PHCP_1						0xd8
 | 
						|
#define ES01_D9_AFE_VSAMP_0					0xd9
 | 
						|
#define ES01_DA_AFE_VSAMP_1					0xda
 | 
						|
#define ES01_DB_AFE_RSAMP_0					0xdb
 | 
						|
#define ES01_DC_AFE_RSAMP_1					0xdc
 | 
						|
#define ES01_DD_PH1234_IN_DUMMY_TG			0xdd
 | 
						|
#define		ES01_DE_CCD_SETUP_REGISTER				0xDE
 | 
						|
		/* bit[0] */
 | 
						|
#define		ES01_LINE_SCAN_MODE_DISABLE		0x00
 | 
						|
#define		ES01_LINE_SCAN_MODE_ENABLE		0x01
 | 
						|
		/* bit[1] */
 | 
						|
#define		ES01_CIS_SENSOR_MODE_DISABLE	0x00
 | 
						|
#define		ES01_CIS_SENSOR_MODE_ENABLE		0x02
 | 
						|
		/* bit[2] */
 | 
						|
#define		ES01_CIS_LED_OUTPUT_RGB			0x00
 | 
						|
#define		ES01_CIS_LED_OUTPUT_RtoGtoB		0x04
 | 
						|
		/* bit[3] */
 | 
						|
#define		ES01_CIS_LED_NORMAL_OUTPUT		0x00
 | 
						|
#define		ES01_CIS_LED_INVERT_OUTPUT		0x08
 | 
						|
		/* bit[4] */
 | 
						|
#define		ES01_ACC_IN_IDLE_DISABLE		0x00
 | 
						|
#define		ES01_ACC_IN_IDLE_ENABLE			0x10
 | 
						|
		/* bit[5] */
 | 
						|
#define		ES01_EVEN_ODD_DISABLE			0x00
 | 
						|
#define		ES01_EVEN_ODD_ENABLE			0x20
 | 
						|
		/* bit[6] */
 | 
						|
#define		ES01_ALTERNATE_EVEN_ODD_DISABLE	0x00
 | 
						|
#define		ES01_ALTERNATE_EVEN_ODD_ENABLE	0x40
 | 
						|
		/* bit[7] */
 | 
						|
#define		ES01_RESET_CCD_STATE_DISABLE	0x00
 | 
						|
#define		ES01_RESET_CCD_STATE_ENABLE		0x80
 | 
						|
 | 
						|
#define ES01_DF_ICG_CONTROL					0xdf
 | 
						|
		/*      bit[2:0] */
 | 
						|
#define	BEFORE_PHRS_0_ns		0x00
 | 
						|
#define	BEFORE_PHRS_416_7t_ns	0x01
 | 
						|
#define	BEFORE_PHRS_416_6t_ns	0x02
 | 
						|
#define	BEFORE_PHRS_416_5t_ns	0x03
 | 
						|
#define	BEFORE_PHRS_416_4t_ns	0x04
 | 
						|
#define	BEFORE_PHRS_416_3t_ns	0x05
 | 
						|
#define	BEFORE_PHRS_416_2t_ns	0x06
 | 
						|
#define	BEFORE_PHRS_416_1t_ns	0x07
 | 
						|
/*	bit[2:0]*/
 | 
						|
#define	ICG_UNIT_1_PIXEL_TIME	0x00
 | 
						|
#define	ICG_UNIT_4_PIXEL_TIME	0x10
 | 
						|
#define	ICG_UNIT_8_PIXEL_TIME	0x20
 | 
						|
#define	ICG_UNIT_16_PIXEL_TIME	0x30
 | 
						|
#define	ICG_UNIT_32_PIXEL_TIME	0x40
 | 
						|
#define	ICG_UNIT_64_PIXEL_TIME	0x50
 | 
						|
#define	ICG_UNIT_128_PIXEL_TIME	0x60
 | 
						|
#define	ICG_UNIT_256_PIXEL_TIME	0x70
 | 
						|
 | 
						|
#define ES01_E0_MotorAccStep0_7				0xe0
 | 
						|
#define ES01_E1_MotorAccStep8_8				0xe1
 | 
						|
#define ES01_E2_MotorStepOfMaxSpeed0_7		0xe2
 | 
						|
#define ES01_E3_MotorStepOfMaxSpeed8_15		0xe3
 | 
						|
#define ES01_E4_MotorStepOfMaxSpeed16_19	0xe4
 | 
						|
#define ES01_E5_MotorDecStep				0xe5
 | 
						|
#define ES01_E6_ScanBackTrackingStepLSB		0xe6
 | 
						|
#define ES01_E7_ScanBackTrackingStepMSB		0xe7
 | 
						|
#define ES01_E8_ScanRestartStepLSB			0xe8
 | 
						|
#define ES01_E9_ScanRestartStepMSB			0xe9
 | 
						|
#define ES01_EA_ScanBackHomeExtStepLSB		0xea
 | 
						|
#define ES01_EB_ScanBackHomeExtStepMSB		0xeb
 | 
						|
#define ES01_EC_ScanAccStep0_7				0xec
 | 
						|
#define ES01_ED_ScanAccStep8_8				0xed
 | 
						|
#define ES01_EE_FixScanStepLSB				0xee
 | 
						|
#define ES01_EF_ScanDecStep					0xef
 | 
						|
#define ES01_F0_ScanImageStep0_7			0xf0
 | 
						|
#define ES01_F1_ScanImageStep8_15			0xf1
 | 
						|
#define ES01_F2_ScanImageStep16_19			0xf2
 | 
						|
 | 
						|
#define ES01_F3_ActionOption				0xf3
 | 
						|
		/*      bit[0] */
 | 
						|
#define		MOTOR_MOVE_TO_FIRST_LINE_ENABLE			0x01
 | 
						|
#define		MOTOR_MOVE_TO_FIRST_LINE_DISABLE		0x00
 | 
						|
/*	bit[1]*/
 | 
						|
#define		MOTOR_BACK_HOME_AFTER_SCAN_ENABLE		0x02
 | 
						|
#define		MOTOR_BACK_HOME_AFTER_SCAN_DISABLE		0x00
 | 
						|
/*	bit[2]*/
 | 
						|
#define		SCAN_ENABLE								0x04
 | 
						|
#define		SCAN_DISABLE							0x00
 | 
						|
/*	bit[3]*/
 | 
						|
#define		SCAN_BACK_TRACKING_ENABLE				0x08
 | 
						|
#define		SCAN_BACK_TRACKING_DISABLE				0x00
 | 
						|
/*	bit[4]*/
 | 
						|
#define		INVERT_MOTOR_DIRECTION_ENABLE			0x10
 | 
						|
#define		INVERT_MOTOR_DIRECTION_DISABLE			0x00
 | 
						|
/*	bit[5]*/
 | 
						|
#define		UNIFORM_MOTOR_AND_SCAN_SPEED_ENABLE		0x20
 | 
						|
#define		UNIFORM_MOTOR_AND_SCAN_SPEED_DISABLE	0x00
 | 
						|
 | 
						|
	 /* bit[6] */
 | 
						|
#define     ES01_STATIC_SCAN_ENABLE                 0x40
 | 
						|
#define     ES01_STATIC_SCAN_DISABLE                0x00
 | 
						|
 | 
						|
/*	bit[7]*/
 | 
						|
#define		MOTOR_TEST_LOOP_ENABLE					0x80
 | 
						|
#define		MOTOR_TEST_LOOP_DISABLE					0x00
 | 
						|
#define ES01_F4_ActiveTriger				0xf4
 | 
						|
		/* bit[0] */
 | 
						|
#define		ACTION_TRIGER_ENABLE			0x01
 | 
						|
#define		ACTION_TRIGER_DISABLE			0x00
 | 
						|
 | 
						|
#define		ES01_F5_ScanDataFormat				0xf5
 | 
						|
			/* bit[0] */
 | 
						|
#define		COLOR_ES02							0x00
 | 
						|
#define		GRAY_ES02							0x01
 | 
						|
/* bit[2:1]*/
 | 
						|
#define		_8_BITS_ES02						0x00
 | 
						|
#define		_16_BITS_ES02						0x02
 | 
						|
#define		_1_BIT_ES02							0x04
 | 
						|
/* bit[5:4]*/
 | 
						|
#define		GRAY_RED_ES02						0x00
 | 
						|
#define		GRAY_GREEN_ES02						0x10
 | 
						|
#define		GRAY_BLUE_ES02						0x20
 | 
						|
#define		GRAY_GREEN_BLUE_ES02				0x30
 | 
						|
 | 
						|
#define ES01_F6_MorotControl1				0xf6
 | 
						|
		/* bit[2:0] */
 | 
						|
#define		SPEED_UNIT_1_PIXEL_TIME			0x00
 | 
						|
#define		SPEED_UNIT_4_PIXEL_TIME			0x01
 | 
						|
#define		SPEED_UNIT_8_PIXEL_TIME			0x02
 | 
						|
#define		SPEED_UNIT_16_PIXEL_TIME		0x03
 | 
						|
#define		SPEED_UNIT_32_PIXEL_TIME		0x04
 | 
						|
#define		SPEED_UNIT_64_PIXEL_TIME		0x05
 | 
						|
#define		SPEED_UNIT_128_PIXEL_TIME		0x06
 | 
						|
#define		SPEED_UNIT_256_PIXEL_TIME		0x07
 | 
						|
/* bit[5:4]*/
 | 
						|
#define		MOTOR_SYNC_UNIT_1_PIXEL_TIME		0x00
 | 
						|
#define		MOTOR_SYNC_UNIT_16_PIXEL_TIME		0x10
 | 
						|
#define		MOTOR_SYNC_UNIT_64_PIXEL_TIME		0x20
 | 
						|
#define		MOTOR_SYNC_UNIT_256_PIXEL_TIME		0x30
 | 
						|
#define ES01_F7_DigitalControl							0xf7
 | 
						|
		/* bit[0] */
 | 
						|
#define		DIGITAL_REDUCE_ENABLE	0x01
 | 
						|
#define		DIGITAL_REDUCE_DISABLE	0x00
 | 
						|
/* bit[3:1]*/
 | 
						|
#define		DIGITAL_REDUCE_1_1		0x00
 | 
						|
#define		DIGITAL_REDUCE_1_2		0x02
 | 
						|
#define		DIGITAL_REDUCE_1_4		0x04
 | 
						|
#define		DIGITAL_REDUCE_1_8		0x06
 | 
						|
#define		DIGITAL_REDUCE_1_16		0x08
 | 
						|
 | 
						|
#define		ES01_F8_WHITE_SHADING_DATA_FORMAT		0xF8
 | 
						|
			/* bit[1:0] */
 | 
						|
#define		ES01_SHADING_2_INT_14_DEC		0x00
 | 
						|
#define		ES01_SHADING_3_INT_13_DEC		0x01
 | 
						|
#define		ES01_SHADING_4_INT_12_DEC		0x02
 | 
						|
#define		ES01_SHADING_5_INT_11_DEC		0x03
 | 
						|
#define ES01_F9_BufferFullSize16WordLSB		0xf9
 | 
						|
#define ES01_FA_BufferFullSize16WordMSB		0xfa
 | 
						|
#define ES01_FB_BufferEmptySize16WordLSB	0xfb
 | 
						|
#define ES01_FC_BufferEmptySize16WordMSB	0xfc
 | 
						|
#define ES01_FD_MotorFixedspeedLSB			0xfd
 | 
						|
#define ES01_FE_MotorFixedspeedMSB			0xfe
 | 
						|
#define		ES01_FF_TestControl				0xff
 | 
						|
		/* bit[0] */
 | 
						|
#define		OUTPUT_HORIZONTAL_PATTERN_ENABLE	0x01
 | 
						|
#define		OUTPUT_HORIZONTAL_PATTERN_DISABLE	0x00
 | 
						|
/* bit[1]*/
 | 
						|
#define		OUTPUT_VERTICAL_PATTERN_ENABLE	0x02
 | 
						|
#define		OUTPUT_VERTICAL_PATTERN_DISABLE	0x00
 | 
						|
/* bit[2]*/
 | 
						|
#define		BYPASS_DARK_SHADING_ENABLE	0x04
 | 
						|
#define		BYPASS_DARK_SHADING_DISABLE	0x00
 | 
						|
/* bit[3]*/
 | 
						|
#define		BYPASS_WHITE_SHADING_ENABLE		0x08
 | 
						|
#define		BYPASS_WHITE_SHADING_DISABLE	0x00
 | 
						|
/* bit[4]*/
 | 
						|
#define		BYPASS_PRE_GAMMA_ENABLE		0x10
 | 
						|
#define		BYPASS_PRE_GAMMA_DISABLE	0x00
 | 
						|
/* bit[5]*/
 | 
						|
#define		BYPASS_CONVOLUTION_ENABLE	0x20
 | 
						|
#define		BYPASS_CONVOLUTION_DISABLE	0x00
 | 
						|
/* bit[6]*/
 | 
						|
#define		BYPASS_MATRIX_ENABLE	0x40
 | 
						|
#define		BYPASS_MATRIX_DISABLE	0x00
 | 
						|
/* bit[7]*/
 | 
						|
#define		BYPASS_GAMMA_ENABLE		0x80
 | 
						|
#define		BYPASS_GAMMA_DISABLE	0x00
 | 
						|
#define		ES01_FF_SCAN_IMAGE_OPTION				0xFF
 | 
						|
		/* bit[0] */
 | 
						|
#define		OUTPUT_HORIZONTAL_PATTERN_ENABLE	0x01
 | 
						|
#define		OUTPUT_HORIZONTAL_PATTERN_DISABLE	0x00
 | 
						|
/* bit[1]*/
 | 
						|
#define		OUTPUT_VERTICAL_PATTERN_ENABLE	0x02
 | 
						|
#define		OUTPUT_VERTICAL_PATTERN_DISABLE	0x00
 | 
						|
/* bit[2]*/
 | 
						|
#define		BYPASS_DARK_SHADING_ENABLE	0x04
 | 
						|
#define		BYPASS_DARK_SHADING_DISABLE	0x00
 | 
						|
/* bit[3]*/
 | 
						|
#define		BYPASS_WHITE_SHADING_ENABLE		0x08
 | 
						|
#define		BYPASS_WHITE_SHADING_DISABLE	0x00
 | 
						|
/* bit[4]*/
 | 
						|
#define		BYPASS_PRE_GAMMA_ENABLE		0x10
 | 
						|
#define		BYPASS_PRE_GAMMA_DISABLE	0x00
 | 
						|
/* bit[5]*/
 | 
						|
#define		BYPASS_CONVOLUTION_ENABLE	0x20
 | 
						|
#define		BYPASS_CONVOLUTION_DISABLE	0x00
 | 
						|
/* bit[6]*/
 | 
						|
#define		BYPASS_MATRIX_ENABLE	0x40
 | 
						|
#define		BYPASS_MATRIX_DISABLE	0x00
 | 
						|
/* bit[7]*/
 | 
						|
#define		BYPASS_GAMMA_ENABLE		0x80
 | 
						|
#define		BYPASS_GAMMA_DISABLE	0x00
 | 
						|
 | 
						|
/*******************************************************************/
 | 
						|
#define		ES01_160_CHANNEL_A_LATCH_POSITION_HB	0x160
 | 
						|
#define		ES01_161_CHANNEL_A_LATCH_POSITION_LB	0x161
 | 
						|
#define		ES01_162_CHANNEL_B_LATCH_POSITION_HB	0x162
 | 
						|
#define		ES01_163_CHANNEL_B_LATCH_POSITION_LB	0x163
 | 
						|
#define		ES01_164_CHANNEL_C_LATCH_POSITION_HB	0x164
 | 
						|
#define		ES01_165_CHANNEL_C_LATCH_POSITION_LB	0x165
 | 
						|
#define		ES01_166_CHANNEL_D_LATCH_POSITION_HB	0x166
 | 
						|
#define		ES01_167_CHANNEL_D_LATCH_POSITION_LB	0x167
 | 
						|
 | 
						|
#define		ES01_168_SECONDARY_FF_LATCH_POSITION	0x168
 | 
						|
 | 
						|
#define		ES01_169_NUMBER_OF_SEGMENT_PIXEL_LB		0x169
 | 
						|
#define		ES01_16A_NUMBER_OF_SEGMENT_PIXEL_HB		0x16A
 | 
						|
 | 
						|
#define		ES01_16B_BETWEEN_SEGMENT_INVALID_PIXEL	0x16B
 | 
						|
#define		ES01_16C_LINE_SHIFT_OUT_TIMES_DIRECTION	0x16C	/* bit[3:0] */
 | 
						|
 | 
						|
/* segment start address */
 | 
						|
#define		ES01_16D_EXPOSURE_CYCLE1_SEGMENT1_START_ADDR_BYTE0	0x16D
 | 
						|
#define		ES01_16E_EXPOSURE_CYCLE1_SEGMENT1_START_ADDR_BYTE1	0x16E
 | 
						|
#define		ES01_16F_EXPOSURE_CYCLE1_SEGMENT1_START_ADDR_BYTE2	0x16F	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_170_EXPOSURE_CYCLE1_SEGMENT2_START_ADDR_BYTE0	0x170
 | 
						|
#define		ES01_171_EXPOSURE_CYCLE1_SEGMENT2_START_ADDR_BYTE1	0x171
 | 
						|
#define		ES01_172_EXPOSURE_CYCLE1_SEGMENT2_START_ADDR_BYTE2	0x172	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_173_EXPOSURE_CYCLE1_SEGMENT3_START_ADDR_BYTE0	0x173
 | 
						|
#define		ES01_174_EXPOSURE_CYCLE1_SEGMENT3_START_ADDR_BYTE1	0x174
 | 
						|
#define		ES01_175_EXPOSURE_CYCLE1_SEGMENT3_START_ADDR_BYTE2	0x175	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_176_EXPOSURE_CYCLE1_SEGMENT4_START_ADDR_BYTE0	0x176
 | 
						|
#define		ES01_177_EXPOSURE_CYCLE1_SEGMENT4_START_ADDR_BYTE1	0x177
 | 
						|
#define		ES01_178_EXPOSURE_CYCLE1_SEGMENT4_START_ADDR_BYTE2	0x178	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_179_EXPOSURE_CYCLE2_SEGMENT1_START_ADDR_BYTE0	0x179
 | 
						|
#define		ES01_17A_EXPOSURE_CYCLE2_SEGMENT1_START_ADDR_BYTE1	0x17A
 | 
						|
#define		ES01_17B_EXPOSURE_CYCLE2_SEGMENT1_START_ADDR_BYTE2	0x17B	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_17C_EXPOSURE_CYCLE2_SEGMENT2_START_ADDR_BYTE0	0x17C
 | 
						|
#define		ES01_17D_EXPOSURE_CYCLE2_SEGMENT2_START_ADDR_BYTE1	0x17D
 | 
						|
#define		ES01_17E_EXPOSURE_CYCLE2_SEGMENT2_START_ADDR_BYTE2	0x17E	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_17F_EXPOSURE_CYCLE2_SEGMENT3_START_ADDR_BYTE0	0x17F
 | 
						|
#define		ES01_180_EXPOSURE_CYCLE2_SEGMENT3_START_ADDR_BYTE1	0x180
 | 
						|
#define		ES01_181_EXPOSURE_CYCLE2_SEGMENT3_START_ADDR_BYTE2	0x181	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_182_EXPOSURE_CYCLE2_SEGMENT4_START_ADDR_BYTE0	0x182
 | 
						|
#define		ES01_183_EXPOSURE_CYCLE2_SEGMENT4_START_ADDR_BYTE1	0x183
 | 
						|
#define		ES01_184_EXPOSURE_CYCLE2_SEGMENT4_START_ADDR_BYTE2	0x184	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_185_EXPOSURE_CYCLE3_SEGMENT1_START_ADDR_BYTE0	0x185
 | 
						|
#define		ES01_186_EXPOSURE_CYCLE3_SEGMENT1_START_ADDR_BYTE1	0x186
 | 
						|
#define		ES01_187_EXPOSURE_CYCLE3_SEGMENT1_START_ADDR_BYTE2	0x187	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_188_EXPOSURE_CYCLE3_SEGMENT2_START_ADDR_BYTE0	0x188
 | 
						|
#define		ES01_189_EXPOSURE_CYCLE3_SEGMENT2_START_ADDR_BYTE1	0x189
 | 
						|
#define		ES01_18A_EXPOSURE_CYCLE3_SEGMENT2_START_ADDR_BYTE2	0x18A	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_18B_EXPOSURE_CYCLE3_SEGMENT3_START_ADDR_BYTE0	0x18B
 | 
						|
#define		ES01_18C_EXPOSURE_CYCLE3_SEGMENT3_START_ADDR_BYTE1	0x18C
 | 
						|
#define		ES01_18D_EXPOSURE_CYCLE3_SEGMENT3_START_ADDR_BYTE2	0x18D	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_18E_EXPOSURE_CYCLE3_SEGMENT4_START_ADDR_BYTE0	0x18E
 | 
						|
#define		ES01_18F_EXPOSURE_CYCLE3_SEGMENT4_START_ADDR_BYTE1	0x18F
 | 
						|
#define		ES01_190_EXPOSURE_CYCLE3_SEGMENT4_START_ADDR_BYTE2	0x190	/* bit[3:0] */
 | 
						|
 | 
						|
/* channel gap */
 | 
						|
#define		ES01_191_CHANNEL_GAP1_BYTE0	0x191
 | 
						|
#define		ES01_192_CHANNEL_GAP1_BYTE1	0x192
 | 
						|
#define		ES01_193_CHANNEL_GAP1_BYTE2	0x193	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_194_CHANNEL_GAP2_BYTE0	0x194
 | 
						|
#define		ES01_195_CHANNEL_GAP2_BYTE1	0x195
 | 
						|
#define		ES01_196_CHANNEL_GAP2_BYTE2	0x196	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_197_CHANNEL_GAP3_BYTE0	0x197
 | 
						|
#define		ES01_198_CHANNEL_GAP3_BYTE1	0x198
 | 
						|
#define		ES01_199_CHANNEL_GAP3_BYTE2	0x199	/* bit[3:0] */
 | 
						|
 | 
						|
/* channel line gap */
 | 
						|
#define		ES01_19A_CHANNEL_LINE_GAP_LB	0x19A
 | 
						|
#define		ES01_19B_CHANNEL_LINE_GAP_HB	0x19B
 | 
						|
 | 
						|
/* max pack line */
 | 
						|
#define		ES01_19C_MAX_PACK_LINE	0x19C	/* bit[5:0] */
 | 
						|
 | 
						|
/*pack threshold */
 | 
						|
#define		ES01_19D_PACK_THRESHOLD_LINE	0x19D
 | 
						|
 | 
						|
/* pack area start address */
 | 
						|
#define		ES01_19E_PACK_AREA_R_START_ADDR_BYTE0	0x19E
 | 
						|
#define		ES01_19F_PACK_AREA_R_START_ADDR_BYTE1	0x19F
 | 
						|
#define		ES01_1A0_PACK_AREA_R_START_ADDR_BYTE2	0x1A0	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1A1_PACK_AREA_G_START_ADDR_BYTE0	0x1A1
 | 
						|
#define		ES01_1A2_PACK_AREA_G_START_ADDR_BYTE1	0x1A2
 | 
						|
#define		ES01_1A3_PACK_AREA_G_START_ADDR_BYTE2	0x1A3	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1A4_PACK_AREA_B_START_ADDR_BYTE0	0x1A4
 | 
						|
#define		ES01_1A5_PACK_AREA_B_START_ADDR_BYTE1	0x1A5
 | 
						|
#define		ES01_1A6_PACK_AREA_B_START_ADDR_BYTE2	0x1A6	/* bit[3:0] */
 | 
						|
 | 
						|
/* pack area end address */
 | 
						|
#define		ES01_1A7_PACK_AREA_R_END_ADDR_BYTE0	0x1A7
 | 
						|
#define		ES01_1A8_PACK_AREA_R_END_ADDR_BYTE1	0x1A8
 | 
						|
#define		ES01_1A9_PACK_AREA_R_END_ADDR_BYTE2	0x1A9	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1AA_PACK_AREA_G_END_ADDR_BYTE0	0x1AA
 | 
						|
#define		ES01_1AB_PACK_AREA_G_END_ADDR_BYTE1	0x1AB
 | 
						|
#define		ES01_1AC_PACK_AREA_G_END_ADDR_BYTE2	0x1AC	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1AD_PACK_AREA_B_END_ADDR_BYTE0	0x1AD
 | 
						|
#define		ES01_1AE_PACK_AREA_B_END_ADDR_BYTE1	0x1AE
 | 
						|
#define		ES01_1AF_PACK_AREA_B_END_ADDR_BYTE2	0x1AF	/* bit[3:0] */
 | 
						|
 | 
						|
/* segment pixel number */
 | 
						|
#define		ES01_1B0_SEGMENT_PIXEL_NUMBER_LB	0x1B0
 | 
						|
#define		ES01_1B1_SEGMENT_PIXEL_NUMBER_HB	0x1B1
 | 
						|
 | 
						|
/*overlap pixel number and hold pixel number */
 | 
						|
#define		ES01_1B2_OVERLAP_AND_HOLD_PIXEL_NUMBER	0x1B2
 | 
						|
 | 
						|
/*convolution parameter */
 | 
						|
#define		ES01_1B3_CONVOLUTION_A	0x1B3
 | 
						|
#define		ES01_1B4_CONVOLUTION_B	0x1B4
 | 
						|
#define		ES01_1B5_CONVOLUTION_C	0x1B5
 | 
						|
#define		ES01_1B6_CONVOLUTION_D	0x1B6
 | 
						|
#define		ES01_1B7_CONVOLUTION_E	0x1B7
 | 
						|
#define		ES01_1B8_CONVOLUTION_F	0x1B8	/* bit[2:0] */
 | 
						|
 | 
						|
/* line pixel number */
 | 
						|
#define		ES01_1B9_LINE_PIXEL_NUMBER_LB	0x1B9
 | 
						|
#define		ES01_1BA_LINE_PIXEL_NUMBER_HB	0x1BA
 | 
						|
 | 
						|
/* matrix parameter */
 | 
						|
#define		ES01_1BB_MATRIX_A_LB	0x1BB
 | 
						|
#define		ES01_1BC_MATRIX_A_HB	0x1BC	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1BD_MATRIX_B_LB	0x1BD
 | 
						|
#define		ES01_1BE_MATRIX_B_HB	0x1BE	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1BF_MATRIX_C_LB	0x1BF
 | 
						|
#define		ES01_1C0_MATRIX_C_HB	0x1C0	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1C1_MATRIX_D_LB	0x1C1
 | 
						|
#define		ES01_1C2_MATRIX_D_HB	0x1C2	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1C3_MATRIX_E_LB	0x1C3
 | 
						|
#define		ES01_1C4_MATRIX_E_HB	0x1C4	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1C5_MATRIX_F_LB	0x1C5
 | 
						|
#define		ES01_1C6_MATRIX_F_HB	0x1C6	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1C7_MATRIX_G_LB	0x1C7
 | 
						|
#define		ES01_1C8_MATRIX_G_HB	0x1C8	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1C9_MATRIX_H_LB	0x1C9
 | 
						|
#define		ES01_1CA_MATRIX_H_HB	0x1CA	/* bit[3:0] */
 | 
						|
 | 
						|
#define		ES01_1CB_MATRIX_I_LB	0x1CB
 | 
						|
#define		ES01_1CC_MATRIX_I_HB	0x1CC	/* bit[3:0] */
 | 
						|
 | 
						|
/*dummy clock number */
 | 
						|
#define		ES01_1CD_DUMMY_CLOCK_NUMBER	0x1CD	/* bit[3:0] */
 | 
						|
 | 
						|
/* line segment number */
 | 
						|
#define		ES01_1CE_LINE_SEGMENT_NUMBER 0x1CE
 | 
						|
 | 
						|
/* dummy cycle timing */
 | 
						|
#define		ES01_1D0_DUMMY_CYCLE_TIMING_B0	0x1D0
 | 
						|
#define		ES01_1D1_DUMMY_CYCLE_TIMING_B1	0x1D1
 | 
						|
#define		ES01_1D2_DUMMY_CYCLE_TIMING_B2	0x1D2
 | 
						|
#define		ES01_1D3_DUMMY_CYCLE_TIMING_B3	0x1D3
 | 
						|
 | 
						|
/* PH1 timing adjust register */
 | 
						|
#define		ES01_1D4_PH1_TIMING_ADJ_B0	0x1D4
 | 
						|
#define		ES01_1D5_PH1_TIMING_ADJ_B1	0x1D5
 | 
						|
#define		ES01_1D6_PH1_TIMING_ADJ_B2	0x1D6
 | 
						|
#define		ES01_1D7_PH1_TIMING_ADJ_B3	0x1D7
 | 
						|
 | 
						|
/* PH2 timing adjust register */
 | 
						|
#define		ES01_1D8_PH2_TIMING_ADJ_B0	0x1D8
 | 
						|
#define		ES01_1D9_PH2_TIMING_ADJ_B1	0x1D9
 | 
						|
#define		ES01_1DA_PH2_TIMING_ADJ_B2	0x1DA
 | 
						|
#define		ES01_1DB_PH2_TIMING_ADJ_B3	0x1DB
 | 
						|
 | 
						|
/* PH3 timing adjust register */
 | 
						|
#define		ES01_1DC_PH3_TIMING_ADJ_B0	0x1DC
 | 
						|
#define		ES01_1DD_PH3_TIMING_ADJ_B1	0x1DD
 | 
						|
#define		ES01_1DE_PH3_TIMING_ADJ_B2	0x1DE
 | 
						|
#define		ES01_1DF_PH3_TIMING_ADJ_B3	0x1DF
 | 
						|
 | 
						|
/* PH4 timing adjust register */
 | 
						|
#define		ES01_1E0_PH4_TIMING_ADJ_B0	0x1E0
 | 
						|
#define		ES01_1E1_PH4_TIMING_ADJ_B1	0x1E1
 | 
						|
#define		ES01_1E2_PH4_TIMING_ADJ_B2	0x1E2
 | 
						|
#define		ES01_1E3_PH4_TIMING_ADJ_B3	0x1E3
 | 
						|
 | 
						|
/*PHRS timing adjust register */
 | 
						|
#define		ES01_1E4_PHRS_TIMING_ADJ_B0	0x1E4
 | 
						|
#define		ES01_1E5_PHRS_TIMING_ADJ_B1	0x1E5
 | 
						|
#define		ES01_1E6_PHRS_TIMING_ADJ_B2	0x1E6
 | 
						|
#define		ES01_1E7_PHRS_TIMING_ADJ_B3	0x1E7
 | 
						|
 | 
						|
/* PHCP timing adjust register */
 | 
						|
#define		ES01_1E8_PHCP_TIMING_ADJ_B0	0x1E8
 | 
						|
#define		ES01_1E9_PHCP_TIMING_ADJ_B1	0x1E9
 | 
						|
#define		ES01_1EA_PHCP_TIMING_ADJ_B2	0x1EA
 | 
						|
#define		ES01_1EB_PHCP_TIMING_ADJ_B3	0x1EB
 | 
						|
 | 
						|
/*AFEVS timing adjust register */
 | 
						|
#define		ES01_1EC_AFEVS_TIMING_ADJ_B0	0x1EC
 | 
						|
#define		ES01_1ED_AFEVS_TIMING_ADJ_B1	0x1ED
 | 
						|
#define		ES01_1EE_AFEVS_TIMING_ADJ_B2	0x1EE
 | 
						|
#define		ES01_1EF_AFEVS_TIMING_ADJ_B3	0x1EF
 | 
						|
 | 
						|
/*AFERS timing adjust register */
 | 
						|
#define		ES01_1F0_AFERS_TIMING_ADJ_B0	0x1F0
 | 
						|
#define		ES01_1F1_AFERS_TIMING_ADJ_B1	0x1F1
 | 
						|
#define		ES01_1F2_AFERS_TIMING_ADJ_B2	0x1F2
 | 
						|
#define		ES01_1F3_AFERS_TIMING_ADJ_B3	0x1F3
 | 
						|
 | 
						|
/* read out pixel */
 | 
						|
#define		ES01_1F4_START_READ_OUT_PIXEL_LB	0x1F4
 | 
						|
#define		ES01_1F5_START_READ_OUT_PIXEL_HB	0x1F5
 | 
						|
#define		ES01_1F6_READ_OUT_PIXEL_LENGTH_LB	0x1F6
 | 
						|
#define		ES01_1F7_READ_OUT_PIXEL_LENGTH_HB	0x1F7
 | 
						|
 | 
						|
/* pack channel setting */
 | 
						|
#define		ES01_1F8_PACK_CHANNEL_SELECT_B0	0x1F8
 | 
						|
#define		ES01_1F9_PACK_CHANNEL_SELECT_B1	0x1F9
 | 
						|
#define		ES01_1FA_PACK_CHANNEL_SELECT_B2	0x1FA
 | 
						|
#define		ES01_1FB_PACK_CHANNEL_SIZE_B0	0x1FB
 | 
						|
#define		ES01_1FC_PACK_CHANNEL_SIZE_B1	0x1FC
 | 
						|
#define		ES01_1FD_PACK_CHANNEL_SIZE_B2	0x1FD
 | 
						|
 | 
						|
/* AFE gain offset control*/
 | 
						|
  /* rom code ver 0.10  */
 | 
						|
#define		ES01_2A0_AFE_GAIN_OFFSET_CONTROL	0x2A0
 | 
						|
#define		ES01_2A1_AFE_AUTO_CONFIG_GAIN		0x2A1
 | 
						|
#define		ES01_2A2_AFE_AUTO_CONFIG_OFFSET		0x2A2
 | 
						|
 | 
						|
#define		ES01_2B0_SEGMENT0_OVERLAP_SEGMENT1	0x2B0
 | 
						|
#define		ES01_2B1_SEGMENT1_OVERLAP_SEGMENT2	0x2B1
 | 
						|
#define		ES01_2B2_SEGMENT2_OVERLAP_SEGMENT3	0x2B2
 | 
						|
 | 
						|
/* valid pixel parameter */
 | 
						|
#define		ES01_2C0_VALID_PIXEL_PARAMETER_OF_SEGMENT1	0x2C0
 | 
						|
#define		ES01_2C1_VALID_PIXEL_PARAMETER_OF_SEGMENT2	0x2C1
 | 
						|
#define		ES01_2C2_VALID_PIXEL_PARAMETER_OF_SEGMENT3	0x2C2
 | 
						|
#define		ES01_2C3_VALID_PIXEL_PARAMETER_OF_SEGMENT4	0x2C3
 | 
						|
#define		ES01_2C4_VALID_PIXEL_PARAMETER_OF_SEGMENT5	0x2C4
 | 
						|
#define		ES01_2C5_VALID_PIXEL_PARAMETER_OF_SEGMENT6	0x2C5
 | 
						|
#define		ES01_2C6_VALID_PIXEL_PARAMETER_OF_SEGMENT7	0x2C6
 | 
						|
#define		ES01_2C7_VALID_PIXEL_PARAMETER_OF_SEGMENT8	0x2C7
 | 
						|
#define		ES01_2C8_VALID_PIXEL_PARAMETER_OF_SEGMENT9	0x2C8
 | 
						|
#define		ES01_2C9_VALID_PIXEL_PARAMETER_OF_SEGMENT10	0x2C9
 | 
						|
#define		ES01_2CA_VALID_PIXEL_PARAMETER_OF_SEGMENT11	0x2CA
 | 
						|
#define		ES01_2CB_VALID_PIXEL_PARAMETER_OF_SEGMENT12	0x2CB
 | 
						|
#define		ES01_2CC_VALID_PIXEL_PARAMETER_OF_SEGMENT13	0x2CC
 | 
						|
#define		ES01_2CD_VALID_PIXEL_PARAMETER_OF_SEGMENT14	0x2CD
 | 
						|
#define		ES01_2CE_VALID_PIXEL_PARAMETER_OF_SEGMENT15	0x2CE
 | 
						|
#define		ES01_2CF_VALID_PIXEL_PARAMETER_OF_SEGMENT16	0x2CF
 | 
						|
 | 
						|
/* forward declarations */
 | 
						|
static STATUS OpenScanChip (PAsic chip);
 | 
						|
static STATUS CloseScanChip (PAsic chip);
 | 
						|
static STATUS SafeInitialChip (PAsic chip);
 | 
						|
static STATUS DRAM_Test (PAsic chip);
 | 
						|
#if SANE_UNUSED
 | 
						|
static STATUS SetPowerSave (PAsic chip);
 | 
						|
#endif
 | 
						|
static STATUS SetLineTimeAndExposure (PAsic chip);
 | 
						|
static STATUS CCDTiming (PAsic chip);
 | 
						|
static STATUS IsCarriageHome (PAsic chip, SANE_Bool * LampHome, SANE_Bool * TAHome);
 | 
						|
static STATUS InitTiming (PAsic chip);
 | 
						|
static STATUS GetChipStatus (PAsic chip, SANE_Byte Selector, SANE_Byte * ChipStatus);
 | 
						|
static STATUS SetAFEGainOffset (PAsic chip);
 | 
						|
static STATUS SetLEDTime (PAsic chip);
 | 
						|
static STATUS SetScanMode (PAsic chip, SANE_Byte bScanBits);
 | 
						|
static STATUS SetPackAddress (PAsic chip, unsigned short wXResolution,
 | 
						|
			      unsigned short wWidth, unsigned short wX, double XRatioAdderDouble,
 | 
						|
			      double XRatioTypeDouble,
 | 
						|
			      SANE_Byte byClear_Pulse_Width,
 | 
						|
			      unsigned short * PValidPixelNumber);
 | 
						|
static STATUS SetExtraSetting (PAsic chip, unsigned short wXResolution,
 | 
						|
			       unsigned short wCCD_PixelNumber, SANE_Bool isCaribrate);
 | 
						|
 | 
						|
 | 
						|
/* Forward declarations */
 | 
						|
 | 
						|
static STATUS Mustek_SendData (PAsic chip, unsigned short reg, SANE_Byte data);
 | 
						|
static STATUS Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data);
 | 
						|
static STATUS Mustek_ReceiveData (PAsic chip, SANE_Byte * reg);
 | 
						|
static STATUS Mustek_WriteAddressLineForRegister (PAsic chip, SANE_Byte x);
 | 
						|
static STATUS WriteIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex,
 | 
						|
			      unsigned short wLength, SANE_Byte * lpbuf);
 | 
						|
static STATUS ReadIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex,
 | 
						|
			     unsigned short wLength, SANE_Byte * lpbuf);
 | 
						|
static STATUS Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata);
 | 
						|
static STATUS Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata);
 | 
						|
static STATUS Mustek_ClearFIFO (PAsic chip);
 | 
						|
static STATUS SetRWSize (PAsic chip, SANE_Byte ReadWrite, unsigned int size);
 | 
						|
 | 
						|
/* Open Scanner by Scanner Name and return Chip Information */
 | 
						|
static STATUS Asic_Open (PAsic chip, SANE_Byte *pDeviceName);
 | 
						|
/* Close Scanner */
 | 
						|
static STATUS Asic_Close (PAsic chip);
 | 
						|
#if SANE_UNUSED
 | 
						|
/* Release Scanner Resource */
 | 
						|
static STATUS Asic_Release (PAsic chip);
 | 
						|
#endif
 | 
						|
/* Initialize Scanner Parameters */
 | 
						|
static STATUS Asic_Initialize (PAsic chip);
 | 
						|
/* Set Scan Window */
 | 
						|
static STATUS Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
 | 
						|
			      unsigned short wXResolution, unsigned short wYResolution,
 | 
						|
			      unsigned short wX, unsigned short wY, unsigned short wWidth, unsigned short wLength);
 | 
						|
/* Turn Lamp  ON or OFF */
 | 
						|
static STATUS Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn);
 | 
						|
/* Turn TA ON or OFF */
 | 
						|
static STATUS Asic_TurnTA (PAsic chip, SANE_Bool isTAOn);
 | 
						|
/* Reset some parameter of asic */
 | 
						|
static STATUS Asic_Reset (PAsic chip);
 | 
						|
/* Set scan source */
 | 
						|
static STATUS Asic_SetSource (PAsic chip, LIGHTSOURCE lsLightSource);
 | 
						|
/* Start scanner to scan */
 | 
						|
static STATUS Asic_ScanStart (PAsic chip);
 | 
						|
/* Stop scanner to scan */
 | 
						|
static STATUS Asic_ScanStop (PAsic chip);
 | 
						|
/* Read One Scan Line When Scanning */
 | 
						|
static STATUS Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount);
 | 
						|
#if SANE_UNUSED
 | 
						|
/* To Check Hard Key */
 | 
						|
static STATUS Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key);
 | 
						|
#endif
 | 
						|
/* To Check if TA id connected */
 | 
						|
static STATUS Asic_IsTAConnected (PAsic chip, SANE_Bool *hasTA);
 | 
						|
#if SANE_UNUSED
 | 
						|
/* Download GammaTable to Scanner */
 | 
						|
static STATUS Asic_DownloadGammaTable (PAsic chip, void * lpBuffer);
 | 
						|
#endif
 | 
						|
/* For AdjustAD Calculate Scanner*/
 | 
						|
static STATUS Asic_ReadCalibrationData (PAsic chip, void * pBuffer,
 | 
						|
					unsigned int dwXferBytes, SANE_Byte bScanBits);
 | 
						|
/* Set motor move or not */
 | 
						|
static STATUS Asic_SetMotorType (PAsic chip, SANE_Bool isMotorMove, SANE_Bool isUniformSpeed);
 | 
						|
/* Move Motor Forward or Backward */
 | 
						|
static STATUS Asic_MotorMove (PAsic chip, SANE_Bool isForward, unsigned int dwTotalSteps);
 | 
						|
/* Move Motor to Home. */
 | 
						|
/* If isTA is TRUE, move TA to home, else move Lamp to home */
 | 
						|
static STATUS Asic_CarriageHome (PAsic chip, SANE_Bool isTA);
 | 
						|
/* For ShadingTable */
 | 
						|
static STATUS Asic_SetShadingTable (PAsic chip, unsigned short * lpWhiteShading,
 | 
						|
				    unsigned short * lpDarkShading,
 | 
						|
				    unsigned short wXResolution, unsigned short wWidth, unsigned short wX);
 | 
						|
/* Wait motor move to home. isTA no used */
 | 
						|
static STATUS Asic_WaitCarriageHome (PAsic chip, SANE_Bool isTA);
 | 
						|
/* Wait until asic idle */
 | 
						|
static STATUS Asic_WaitUnitReady (PAsic chip);
 | 
						|
/* Set Scan Parameter to Scanner */
 | 
						|
static STATUS Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution,
 | 
						|
				 unsigned short wYResolution, unsigned short wX, unsigned short wY,
 | 
						|
				 unsigned short wWidth, unsigned short wLength, SANE_Bool isShading);
 | 
						|
/* Set AFE  Parameter to Scanner */
 | 
						|
static STATUS Asic_SetAFEGainOffset (PAsic chip);
 | 
						|
 | 
						|
/* ---------------------- asic motor defines -------------------------- */
 | 
						|
 | 
						|
 | 
						|
#define ACTION_MODE_ACCDEC_MOVE 0
 | 
						|
#define ACTION_MODE_UNIFORM_SPEED_MOVE 1
 | 
						|
 | 
						|
 | 
						|
typedef struct tagMOTOR_CURRENT_AND_PHASE
 | 
						|
{
 | 
						|
  SANE_Byte MoveType;
 | 
						|
  SANE_Byte FillPhase;
 | 
						|
  SANE_Byte MotorDriverIs3967;
 | 
						|
  SANE_Byte MotorCurrentTableA[32];
 | 
						|
  SANE_Byte MotorCurrentTableB[32];
 | 
						|
  SANE_Byte MotorPhaseTable[32];
 | 
						|
} MOTOR_CURRENT_AND_PHASE, LPMOTOR_CURRENT_AND_PHASE;
 | 
						|
 | 
						|
typedef struct tagLLF_RAMACCESS
 | 
						|
{
 | 
						|
  SANE_Byte ReadWrite;
 | 
						|
  SANE_Byte IsOnChipGamma;
 | 
						|
  unsigned short LoStartAddress;
 | 
						|
  unsigned short HiStartAddress;
 | 
						|
  int RwSize;
 | 
						|
  SANE_Byte DramDelayTime;
 | 
						|
  SANE_Byte *BufferPtr;
 | 
						|
} LLF_RAMACCESS;
 | 
						|
 | 
						|
typedef struct tagLLF_MOTOR_CURRENT_AND_PHASE
 | 
						|
{
 | 
						|
  SANE_Byte MoveType;
 | 
						|
  SANE_Byte FillPhase;
 | 
						|
  SANE_Byte MotorDriverIs3967;
 | 
						|
  SANE_Byte MotorCurrentTableA[32];
 | 
						|
  SANE_Byte MotorCurrentTableB[32];
 | 
						|
  SANE_Byte MotorPhaseTable[32];
 | 
						|
} LLF_MOTOR_CURRENT_AND_PHASE;
 | 
						|
 | 
						|
typedef struct tagLLF_CALCULATEMOTORTABLE
 | 
						|
{
 | 
						|
  unsigned short StartSpeed;
 | 
						|
  unsigned short EndSpeed;
 | 
						|
  unsigned short AccStepBeforeScan;
 | 
						|
  SANE_Byte DecStepAfterScan;
 | 
						|
  unsigned short * lpMotorTable;
 | 
						|
} LLF_CALCULATEMOTORTABLE;
 | 
						|
 | 
						|
typedef struct tagLLF_SETMOTORTABLE
 | 
						|
{
 | 
						|
  unsigned int TableSize;
 | 
						|
  SANE_Byte MotorTableAddress;
 | 
						|
  unsigned short *MotorTablePtr;
 | 
						|
} LLF_SETMOTORTABLE;
 | 
						|
 | 
						|
typedef struct tagLLF_MOTORMOVE
 | 
						|
{
 | 
						|
  SANE_Byte ActionMode;		/* 0: AccDec Mode, 1: Uniform Speed Mode, 2: Test Mode */
 | 
						|
  SANE_Byte ActionType;		/* 0: Forward, 1: Backward, 2:Back To Home */
 | 
						|
  SANE_Byte MotorSelect;		/* 0: Motor 0 only, 1: Motor 1 only, 2: Motor 0 & 1 */
 | 
						|
  SANE_Byte HomeSensorSelect;	/* 0: Sensor 0, 1: Sensor 1, 2: Sensor 0 & 1, 3:Invert Sensor 1 */
 | 
						|
  unsigned short FixMoveSpeed;
 | 
						|
  unsigned int FixMoveSteps;		/* 3 bytes */
 | 
						|
  SANE_Byte MotorSpeedUnit;
 | 
						|
  SANE_Byte MotorSyncUnit;
 | 
						|
  unsigned short AccStep;			/*Max = 511 */
 | 
						|
  SANE_Byte DecStep;			/* Max = 255 */
 | 
						|
  SANE_Byte MotorMoveUnit;
 | 
						|
  SANE_Byte WaitOrNoWait;		/* 0: no wait, 1: wait */
 | 
						|
  SANE_Byte Lamp0PwmFreq;		/* Lamp0 PWM freq */
 | 
						|
  SANE_Byte Lamp1PwmFreq;		/* Lamp1 PWM freq */
 | 
						|
 | 
						|
  unsigned short wForwardSteps;
 | 
						|
  unsigned short wScanAccSteps;
 | 
						|
  SANE_Byte bScanDecSteps;
 | 
						|
  unsigned short wFixScanSteps;
 | 
						|
  unsigned short wScanBackTrackingSteps;
 | 
						|
  unsigned short wScanRestartSteps;
 | 
						|
  unsigned short wScanBackHomeExtSteps;
 | 
						|
} LLF_MOTORMOVE;
 | 
						|
 | 
						|
static STATUS CalculateMotorTable (LLF_CALCULATEMOTORTABLE *
 | 
						|
				   lpCalculateMotorTable, unsigned short wYResolution);
 | 
						|
static STATUS LLFCalculateMotorTable (LLF_CALCULATEMOTORTABLE *
 | 
						|
				      lpCalculateMotorTable);
 | 
						|
static STATUS LLFSetMotorCurrentAndPhase (PAsic chip,
 | 
						|
					  LLF_MOTOR_CURRENT_AND_PHASE *
 | 
						|
					  MotorCurrentAndPhase);
 | 
						|
static STATUS SetMotorStepTable (PAsic chip, LLF_MOTORMOVE * MotorStepsTable,
 | 
						|
				 unsigned short wStartY, unsigned int dwScanImageSteps,
 | 
						|
				 unsigned short wYResolution);
 | 
						|
static STATUS LLFSetMotorTable (PAsic chip,
 | 
						|
				LLF_SETMOTORTABLE * LLF_SetMotorTable);
 | 
						|
static STATUS SetMotorCurrent (PAsic chip, unsigned short dwMotorSpeed,
 | 
						|
			       LLF_MOTOR_CURRENT_AND_PHASE * CurrentPhase);
 | 
						|
static STATUS LLFMotorMove (PAsic chip, LLF_MOTORMOVE * LLF_MotorMove);
 | 
						|
#if SANE_UNUSED
 | 
						|
static STATUS LLFStopMotorMove (PAsic chip);
 | 
						|
#endif
 | 
						|
static STATUS LLFSetRamAddress (PAsic chip, unsigned int dwStartAddr,
 | 
						|
				unsigned int dwEndAddr, SANE_Byte byAccessTarget);
 | 
						|
static STATUS LLFRamAccess (PAsic chip, LLF_RAMACCESS * RamAccess);
 | 
						|
static STATUS MotorBackHome (PAsic chip, SANE_Byte WaitOrNoWait);
 | 
						|
 | 
						|
#endif
 |