kopia lustrzana https://gitlab.com/sane-project/backends
1422 wiersze
46 KiB
C
1422 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, 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.
|
|
|
|
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 /* usefull 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 Backword */
|
|
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
|