1 /* sane - Scanner Access Now Easy. 2 3 Copyright (C) 2005 Mustek. 4 Originally maintained by Mustek 5 Author:Roy 2005.5.24 6 7 This file is part of the SANE package. 8 9 This program is free software; you can redistribute it and/or 10 modify it under the terms of the GNU General Public License as 11 published by the Free Software Foundation; either version 2 of the 12 License, or (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, but 15 WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program. If not, see <https://www.gnu.org/licenses/>. 21 22 As a special exception, the authors of SANE give permission for 23 additional uses of the libraries contained in this release of SANE. 24 25 The exception is that, if you link a SANE library with other files 26 to produce an executable, this does not by itself cause the 27 resulting executable to be covered by the GNU General Public 28 License. Your use of that executable is in no way restricted on 29 account of linking the SANE library code into it. 30 31 This exception does not, however, invalidate any other reasons why 32 the executable file might be covered by the GNU General Public 33 License. 34 35 If you submit changes to SANE to the maintainers to be included in 36 a subsequent release, you agree by submitting the changes that 37 those changes may be distributed with this exception intact. 38 39 If you write modifications of your own for SANE, it is your choice 40 whether to permit this exception to apply to your modifications. 41 If you do not wish that, delete this exception notice. 42 43 This file implements a SANE backend for the Mustek BearPaw 2448 TA Pro 44 and similar USB2 scanners. */ 45 46 #ifndef MUSTEK_USB2_ASIC_H 47 #define MUSTEK_USB2_ASIC_H 48 49 #include "../include/sane/sanei_usb.h" 50 51 /* ---------------------- low level asic defines -------------------------- */ 52 53 #define TRUE 1 54 #define FALSE 0 55 56 #define _MAX(a,b) ((a)>(b)?(a):(b)) 57 #define _MIN(a,b) ((a)<(b)?(a):(b)) 58 59 #ifndef LOBYTE 60 #define LOBYTE(w) (SANE_Byte)((unsigned short)(w) & 0x00ff) 61 #endif 62 63 #ifndef HIBYTE 64 #define HIBYTE(w) (SANE_Byte)((unsigned short)(w)>>8 & 0x00ff) 65 #endif 66 67 68 typedef enum tagFIRMWARESTATE 69 { 70 FS_NULL = 0, 71 FS_ATTACHED = 1, 72 FS_OPENED = 2, 73 FS_SCANNING = 3 74 } FIRMWARESTATE, *LPFIRMWARESTATE; 75 76 typedef enum tagMOTORSTATE 77 { 78 MS_STILL = 0, 79 MS_MOVED = 1 80 } MOTORSTATE, *LPMOTORSTATE; 81 82 typedef enum tagUSBHOST 83 { 84 HT_USB10 = 0, 85 HT_USB20 = 1 86 } USBHOST; 87 88 typedef enum tagLIGHTSOURCE 89 { 90 LS_REFLECTIVE = 1, 91 LS_POSITIVE = 2, 92 LS_NEGATIVE = 4 93 } LIGHTSOURCE; 94 95 typedef struct 96 { 97 unsigned int LongX; 98 unsigned int PicWidth; 99 unsigned int PicHeight; 100 101 unsigned int Top; 102 unsigned int Bottom; 103 unsigned int Left; 104 unsigned int Right; 105 unsigned int ScanMode; 106 unsigned int Dpi; 107 unsigned int TotalMotorSteps; 108 109 unsigned int CCD_Pixel_Length; 110 SANE_Byte LineGap; 111 SANE_Byte TG_Pulse_Width_Pixel; 112 SANE_Byte TG_Wait_Width_Pixel; 113 unsigned short Multi_TG_Dummy_Pixel; 114 unsigned short CCD_Dummy_Pixel; 115 SANE_Byte Dummy_Cycle; 116 SANE_Byte TG_Times; 117 118 double LineTime; 119 120 unsigned short StartPixel; 121 unsigned short StartLine; 122 } 123 ScanParam; 124 125 typedef struct 126 { 127 unsigned int Shading_Table_Size; 128 unsigned int Image_Buffer_Size; 129 unsigned int Full_Bank; 130 unsigned int Line_Pixel; 131 double Line_Time; 132 SANE_Byte LineGap; 133 } 134 Temps; 135 136 typedef struct 137 { 138 /* AFE */ 139 unsigned int AFE_ADCCLK_Timing; 140 unsigned int AFE_ADCVS_Timing; 141 unsigned int AFE_ADCRS_Timing; 142 unsigned short AFE_ChannelA_LatchPos; 143 unsigned short AFE_ChannelB_LatchPos; 144 unsigned short AFE_ChannelC_LatchPos; 145 unsigned short AFE_ChannelD_LatchPos; 146 SANE_Byte AFE_Secondary_FF_LatchPos; 147 /* Sensor */ 148 unsigned int CCD_DummyCycleTiming; 149 SANE_Byte PHTG_PluseWidth; 150 SANE_Byte PHTG_WaitWidth; 151 unsigned short ChannelR_StartPixel; 152 unsigned short ChannelR_EndPixel; 153 unsigned short ChannelG_StartPixel; 154 unsigned short ChannelG_EndPixel; 155 unsigned short ChannelB_StartPixel; 156 unsigned short ChannelB_EndPixel; 157 SANE_Byte PHTG_TimingAdj; 158 SANE_Byte PHTG_TimingSetup; 159 160 /*1200dpi */ 161 unsigned int CCD_PHRS_Timing_1200; 162 unsigned int CCD_PHCP_Timing_1200; 163 unsigned int CCD_PH1_Timing_1200; 164 unsigned int CCD_PH2_Timing_1200; 165 SANE_Byte DE_CCD_SETUP_REGISTER_1200; 166 unsigned short wCCDPixelNumber_1200; 167 168 /*600dpi */ 169 unsigned int CCD_PHRS_Timing_600; 170 unsigned int CCD_PHCP_Timing_600; 171 unsigned int CCD_PH1_Timing_600; 172 unsigned int CCD_PH2_Timing_600; 173 SANE_Byte DE_CCD_SETUP_REGISTER_600; 174 unsigned short wCCDPixelNumber_600; 175 } Timings; 176 177 178 typedef struct tagADConverter 179 { 180 SANE_Byte GainR; 181 SANE_Byte GainG; 182 SANE_Byte GainB; 183 SANE_Byte OffsetR; 184 SANE_Byte OffsetG; 185 SANE_Byte OffsetB; 186 SANE_Bool DirectionR; 187 SANE_Bool DirectionG; 188 SANE_Bool DirectionB; 189 } ADConverter, LPADConverter; 190 191 192 193 typedef struct 194 { 195 unsigned int Shading; 196 SANE_Byte Shading_0; 197 SANE_Byte Shading_1; 198 SANE_Byte Shading_2; 199 200 unsigned int Motor; 201 SANE_Byte Motor_0; 202 SANE_Byte Motor_1; 203 SANE_Byte Motor_2; 204 205 SANE_Byte ImageEndAddr_0; 206 SANE_Byte ImageEndAddr_1; 207 SANE_Byte ImageEndAddr_2; 208 209 SANE_Byte ImageFullBank_0; 210 SANE_Byte ImageFullBank_1; 211 } 212 RamPosition; 213 214 typedef enum tagTASSTATUS 215 { 216 TA_NOT_PLUGIN = 0, 217 TA_PLUGIN = 1, 218 TA_UNKNOW = 2 219 } TASTATUS; 220 221 typedef struct 222 { 223 int fd; /* File Description of Scanner */ 224 225 FIRMWARESTATE firmwarestate; /* record firmware state */ 226 MOTORSTATE motorstate; /* record motor status */ 227 SANE_Bool isFirstOpenChip; /* If first open chip, is TRUE */ 228 USBHOST UsbHost; /* The type of USB port */ 229 LIGHTSOURCE lsLightSource; /* light source of scanner */ 230 ScanParam Scan; /* The parameters of Scan */ 231 232 unsigned int dwBytesCountPerRow; 233 unsigned int dwCalibrationBytesCountPerRow; 234 235 Temps Temp; 236 Timings Timing; 237 ADConverter AD; 238 239 SANE_Bool isHardwareShading; 240 241 RamPosition RamPositions; 242 243 unsigned short * lpGammaTable; 244 SANE_Byte isMotorMove; 245 246 unsigned int ibase1; 247 unsigned int ibase2; 248 249 unsigned short SWWidth; 250 251 TASTATUS TA_Status; 252 253 SANE_Byte isMotorGoToFirstLine; /*Roy add */ 254 SANE_Byte * lpShadingTable; /*Roy add */ 255 SANE_Byte isUniformSpeedToScan; 256 } 257 Asic, *PAsic; 258 259 260 /* For ScanObj */ 261 typedef struct Point 262 { 263 unsigned int x; 264 unsigned int y; 265 } 266 Point; 267 268 typedef struct Rect 269 { 270 unsigned int left; 271 unsigned int right; 272 unsigned int top; 273 unsigned int bottom; 274 } 275 Rect; 276 277 typedef struct RGBColor 278 { 279 unsigned short Red; 280 unsigned short Green; 281 unsigned short Blue; 282 } 283 RGBColor; 284 285 /* debug levels */ 286 #define DBG_CRIT 0 /* Critical errors thatshould be printed even 287 if user hasn't enabled debugging -- use 288 with care and only after sane_open has been 289 called */ 290 #define DBG_ERR 1 /* Other errors */ 291 #define DBG_WARN 2 /* unusual conditions that may not be fatal */ 292 #define DBG_INFO 3 /* information useful for the deucated user */ 293 #define DBG_DET 4 /* more detailed information */ 294 #define DBG_FUNC 5 /* start and exits of high level functions */ 295 #define DBG_ASIC 6 /* starts and exits of low level functions */ 296 #define DBG_DBG 10 /* useful only for tracing bugs */ 297 298 299 #define DPI_2400 0x8000 300 #define DPI_1200 0x8000 301 #define DPI_600 0x8000 302 #define DPI_300 0x4000 303 #define DPI_200 0x2aaa 304 #define DPI_150 0x2000 305 #define DPI_100 0x1555 306 #define DPI_75 0x1000 307 #define DPI_50 0xaaa 308 #define PIXEL_TIME 333 /*unit : ms */ 309 #define DRAM_1Mx16_SIZE (1024*1024) /*unit : word */ 310 #define PackAreaStartAddress ((DRAM_1Mx16_SIZE/4)*3) 311 312 #define TEMP_MEMORY_SIZE_64K 64*1024 313 314 #define CALIBRATION_PIXEL_WIDTH 10240 /*need 512x */ 315 #define CALIBRATE_WHITE_LINECOUNT 40 316 #define CALIBRATE_DARK_LINECOUNT 2 317 318 #define ACTION_MODE_ACCDEC_MOVE 0 319 #define ACTION_MODE_UNIFORM_SPEED_MOVE 1 320 321 #define ACTION_TYPE_BACKWARD 0 322 #define ACTION_TYPE_FORWARD 1 323 #define ACTION_TYPE_BACKTOHOME 2 324 #define ACTION_TYPE_TEST_MODE 3 325 326 327 #define SENSOR0_DETECTED 0x10 328 #define SENSOR1_DETECTED 0x20 329 #define SENSOR0AND1_DETECTED 0x30 330 331 #define READ_RAM 0 332 #define WRITE_RAM 1 333 334 #define EXTERNAL_RAM 0 335 #define ON_CHIP_PRE_GAMMA 1 336 #define ON_CHIP_FINAL_GAMMA 2 337 338 #define MOTOR_TABLE_SIZE 512*8 339 340 #define ValidPixelNumberFor600DPI 5100 + 50 + 250 341 #define ValidPixelNumberFor1200DPI 10200 + 100 + 500 342 343 #define OverLapPixelNumber600 0 344 #define OverLapPixelNumber1200 0 345 #define SegmentGap 0 346 #define BANK_SIZE (64) 347 348 #define WaitBufferOneLineSize 11000*6 349 350 #define CCD_PIXEL_NUMBER 21600 351 #define CCD_Line_Spacing 24 352 #define CCD_EvneOdd_Spacing 2 353 354 #define ShadingTableSize(x) ( ((x + 10)*6) + ( ((x + 10)*6)/240)*16 ) 355 #define ACC_DEC_STEP_TABLE_SIZE (512) /*unit : word */ 356 #define TableBase(x) ((((x)+((1<<TABLE_OFFSET_BASE)-1))>>TABLE_OFFSET_BASE)<<TABLE_OFFSET_BASE) 357 #define NUM_OF_ACC_DEC_STEP_TABLE (8) /*unit : word */ 358 #define TABLE_BASE_SIZE (1024*2*2*2*2) /*unit : word */ 359 #define LAMP0_PWM_DEFAULT 255 360 #define LAMP1_PWM_DEFAULT 255 361 362 #define TABLE_OFFSET_BASE (14) /*unit : word */ 363 #define CHECK_HOME_SLEEP_TIME 100 364 365 #define _MOTOR_MOVE_TYPE _4_TABLE_SPACE_FOR_FULL_STEP 366 367 368 #define TA_CAL_PIXELNUMBER 50000 369 370 #define SENSOR_DPI 1200 371 #define TA_IMAGE_PIXELNUMBER 61000 372 #define MAX_PATH 256 373 374 375 /**************************** ASIC registers ***********************/ 376 377 /*ES01_XX = Easy Scan_01 register hex xx*/ 378 #define ES01_00_AFEReg0 0x00 379 #define ES01_01_AFEReg1 0x01 380 #define ES01_02_AFEReg2 0x02 381 #define ES01_03_AFEReg3 0x03 382 #define ES01_04_AFEReset 0x04 383 #define ES01_05_AFEReg4 0x05 384 385 #define ES01_20_DACRed 0x20 386 #define ES01_21_DACGreen 0x21 387 #define ES01_22_DACBlue 0x22 388 #define ES01_24_SignRed 0x24 389 #define ES01_25_SignGreen 0x25 390 #define ES01_26_SignBlue 0x26 391 #define ES01_28_PGARed 0x28 392 #define ES01_29_PGAGreen 0x29 393 #define ES01_2A_PGABlue 0x2A 394 395 #define ES01_00_ADAFEConfiguration 0x00 396 #define ES01_02_ADAFEMuxConfig 0x02 397 #define ES01_04_ADAFEPGACH1 0x04 398 #define ES01_06_ADAFEPGACH2 0x06 399 #define ES01_08_ADAFEPGACH3 0x08 400 401 #define ES01_0C_ADAFEOffsetCH1P 0x0C 402 #define ES01_0D_ADAFEOffsetCH1N 0x0D 403 #define ES01_0E_ADAFEOffsetCH2P 0x0E 404 #define ES01_0F_ADAFEOffsetCH2N 0x0F 405 #define ES01_10_ADAFEOffsetCH3P 0x10 406 #define ES01_11_ADAFEOffsetCH3N 0x11 407 408 #define ES01_00_AD9826Configuration 0x00 409 #define ES01_02_AD9826MuxConfig 0x02 410 #define ES01_04_AD9826PGARed 0x04 411 #define ES01_06_AD9826PGAGreen 0x06 412 #define ES01_08_AD9826PGABlue 0x08 413 #define ES01_0A_AD9826OffsetRedP 0x0a 414 #define ES01_0B_AD9826OffsetRedN 0x0b 415 #define ES01_0C_AD9826OffsetGreenP 0x0c 416 #define ES01_0D_AD9826OffsetGreenN 0x0d 417 #define ES01_0E_AD9826OffsetBlueP 0x0e 418 #define ES01_0F_AD9826OffsetBlueN 0x0f 419 420 #define ES02_50_MOTOR_CURRENT_CONTORL 0x50 421 /* bit[0] */ 422 #define DOWN_LOAD_MOTOR_TABLE_DISABLE 0x00 423 #define DOWN_LOAD_MOTOR_TABLE_ENABLE 0x01 424 /* bit[3:1] */ 425 #define _4_TABLE_SPACE_FOR_FULL_STEP 0x00 426 #define _8_TABLE_SPACE_FOR_1_DIV_2_STEP 0x02 427 #define _16_TABLE_SPACE_FOR_1_DIV_4_STEP 0x06 428 #define _32_TABLE_SPACE_FOR_1_DIV_8_STEP 0x0E 429 /* bit[4] */ 430 #define MOTOR_TABLE_ADDR_SHOW_IN_FIRST_PIXEL_OF_LINE_DISABLE 0x00 431 #define MOTOR_TABLE_ADDR_SHOW_IN_FIRST_PIXEL_OF_LINE_ENABLE 0x10 432 /* bit[5] */ 433 #define MOTOR_CURRENT_TABLE_ADDRESS_BIT4_TO_BIT0_DISABLE 0x00 434 #define MOTOR_CURRENT_TABLE_ADDRESS_BIT4_TO_BIT0_ENABLE 0x20 435 436 #define ES02_51_MOTOR_PHASE_TABLE_1 0x51 437 #define ES02_52_MOTOR_CURRENT_TABLE_A 0x52 438 #define ES02_53_MOTOR_CURRENT_TABLE_B 0x53 439 440 #define ES01_5F_REGISTER_BANK_SELECT 0x5F 441 /* bit[1:0] */ 442 #define SELECT_REGISTER_BANK0 0x00 443 #define SELECT_REGISTER_BANK1 0x01 444 #define SELECT_REGISTER_BANK2 0x02 445 446 /* AFE Auto Configuration Gain & Offset Register */ 447 #define ES01_60_AFE_AUTO_GAIN_OFFSET_RED_LB 0x60 448 #define ES01_61_AFE_AUTO_GAIN_OFFSET_RED_HB 0x61 449 #define ES01_62_AFE_AUTO_GAIN_OFFSET_GREEN_LB 0x62 450 #define ES01_63_AFE_AUTO_GAIN_OFFSET_GREEN_HB 0x63 451 #define ES01_64_AFE_AUTO_GAIN_OFFSET_BLUE_LB 0x64 452 #define ES01_65_AFE_AUTO_GAIN_OFFSET_BLUE_HB 0x65 453 454 #define ES01_74_HARDWARE_SETTING 0x74 455 /* bit[0] */ 456 #define MOTOR1_SERIAL_INTERFACE_G10_8_ENABLE 0x01 457 #define MOTOR1_SERIAL_INTERFACE_G10_8_DISABLE 0x00 458 /* bit[1]*/ 459 #define LED_OUT_G11_ENABLE 0x02 460 #define LED_OUT_G11_DISABLE 0x00 461 /* bit[2] */ 462 #define SLAVE_SERIAL_INTERFACE_G15_14_ENABLE 0x04 463 #define SLAVE_SERIAL_INTERFACE_G15_14_DISABLE 0x00 464 /* bit[3] */ 465 #define SHUTTLE_CCD_ENABLE 0x08 466 #define SHUTTLE_CCD_DISABLE 0x00 467 /* bit[4] */ 468 #define HARDWARE_RESET_ESIC_AFE_ENABLE 0x10 469 #define HARDWARE_RESET_ESIC_AFE_DISABLE 0x00 470 471 #define ES01_79_AFEMCLK_SDRAMCLK_DELAY_CONTROL 0x79 472 /* bit[3:0] */ 473 #define AFEMCLK_DELAY_0_ns 0x00 474 #define AFEMCLK_DELAY_2_ns 0x01 475 #define AFEMCLK_DELAY_4_ns 0x02 476 #define AFEMCLK_DELAY_6_ns 0x03 477 #define AFEMCLK_DELAY_8_ns 0x04 478 #define AFEMCLK_DELAY_10_ns 0x05 479 #define AFEMCLK_DELAY_12_ns 0x06 480 #define AFEMCLK_DELAY_14_ns 0x07 481 #define AFEMCLK_DELAY_16_ns 0x08 482 #define AFEMCLK_DELAY_18_ns 0x09 483 #define AFEMCLK_DELAY_20_ns 0x0A 484 /* bit[7:4]*/ 485 #define SDRAMCLK_DELAY_0_ns 0x00 486 #define SDRAMCLK_DELAY_2_ns 0x10 487 #define SDRAMCLK_DELAY_4_ns 0x20 488 #define SDRAMCLK_DELAY_6_ns 0x30 489 #define SDRAMCLK_DELAY_8_ns 0x40 490 #define SDRAMCLK_DELAY_10_ns 0x50 491 #define SDRAMCLK_DELAY_12_ns 0x60 492 #define SDRAMCLK_DELAY_14_ns 0x70 493 #define SDRAMCLK_DELAY_16_ns 0x80 494 #define SDRAMCLK_DELAY_18_ns 0x90 495 #define SDRAMCLK_DELAY_20_ns 0xA0 496 497 #define ES01_82_AFE_ADCCLK_TIMING_ADJ_BYTE0 0x82 498 #define ES01_83_AFE_ADCCLK_TIMING_ADJ_BYTE1 0x83 499 #define ES01_84_AFE_ADCCLK_TIMING_ADJ_BYTE2 0x84 500 #define ES01_85_AFE_ADCCLK_TIMING_ADJ_BYTE3 0x85 501 #define ES01_86_DisableAllClockWhenIdle 0x86 502 /* bit[0] */ 503 #define CLOSE_ALL_CLOCK_ENABLE 0x01 504 #define CLOSE_ALL_CLOCK_DISABLE 0x00 505 #define ES01_87_SDRAM_Timing 0x87 506 507 #define ES01_88_LINE_ART_THRESHOLD_HIGH_VALUE 0x88 508 #define ES01_89_LINE_ART_THRESHOLD_LOW_VALUE 0x89 509 510 #define ES01_8A_FixScanStepMSB 0x8a 511 #define ES01_8B_Status 0x8b 512 /* bit[4:0] */ 513 #define H1H0L1L0_PS_MJ 0x00 514 #define SCAN_STATE 0x01 515 #define GPIO0_7 0x02 516 #define GPIO8_15 0x03 517 #define AVAILABLE_BANK_COUNT0_7 0x04 518 #define AVAILABLE_BANK_COUNT8_15 0x05 519 #define RAM_ADDRESS_POINTER0_7 0x06 520 #define RAM_ADDRESS_POINTER8_15 0x07 521 #define RAM_ADDRESS_POINTER16_19 0x08 522 #define CARRIAGE_POS_DURING_SCAN0_7 0x09 523 #define CARRIAGE_POS_DURING_SCAN8_15 0x0a 524 #define CARRIAGE_POS_DURING_SCAN16_19 0x0b 525 #define LINE_TIME0_7 0x0C 526 #define LINE_TIME8_15 0x0d 527 #define LINE_TIME16_19 0x0e 528 #define LAST_COMMAND_ADDRESS 0x0f 529 #define LAST_COMMAND_DATA 0x10 530 #define SERIAL_READ_REGISTER_0 0x11 531 #define SERIAL_READ_REGISTER_1 0x12 532 #define SERIAL_READ_REGISTER_2 0x13 533 #define SERIAL_READ_REGISTER_3 0x14 534 #define MOTOR_STEP_TRIGER_POSITION7_0 0x15 535 #define MOTOR_STEP_TRIGER_POSITION15_8 0x16 536 #define MOTOR_STEP_TRIGER_POSITION23_16 0x17 537 #define CHIP_STATUS_A 0x18 /*reserve */ 538 #define CHIP_STRING_0 0x19 /*0x45'E' */ 539 #define CHIP_STRING_1 0x1a /*0x53'S' */ 540 #define CHIP_STRING_2 0x1b /*0x43'C' */ 541 #define CHIP_STRING_3 0x1c /*0x41'A' */ 542 #define CHIP_STRING_4 0x1d /*0x4E'N' */ 543 #define CHIP_STRING_5 0x1e /*0x30'0' */ 544 #define CHIP_STRING_6 0x1f /*0x31'1' */ 545 #define ES01_8C_RestartMotorSynPixelNumberM16LSB 0x8c 546 #define ES01_8D_RestartMotorSynPixelNumberM16MSB 0x8d 547 #define ES01_90_Lamp0PWM 0x90 548 #define ES01_91_Lamp1PWM 0x91 549 #define ES01_92_TimerPowerSaveTime 0x92 550 #define ES01_93_MotorWatchDogTime 0x93 551 #define ES01_94_PowerSaveControl 0x94 552 /* bit[0] */ 553 #define TIMER_POWER_SAVE_ENABLE 0x01 554 #define TIMER_POWER_SAVE_DISABLE 0x00 555 556 /* bit[1]*/ 557 #define USB_POWER_SAVE_ENABLE 0x02 558 #define USB_POWER_SAVE_DISABLE 0x00 559 /* bit[2]*/ 560 #define USB_REMOTE_WAKEUP_ENABLE 0x04 561 #define USB_REMOTE_WAKEUP_DISABLE 0x00 562 /* bit[5:4]*/ 563 #define LED_MODE_ON 0x00 564 #define LED_MODE_OFF 0x10 565 #define LED_MODE_FLASH_SLOWLY 0x20 566 #define LED_MODE_FLASH_QUICKLY 0x30 567 568 569 #define ES01_95_GPIOValue0_7 0x95 570 #define ES01_96_GPIOValue8_15 0x96 571 #define ES01_97_GPIOControl0_7 0x97 572 #define ES01_98_GPIOControl8_15 0x98 573 #define ES01_99_LAMP_PWM_FREQ_CONTROL 0x99 574 #define ES01_9A_AFEControl 0x9a 575 /*bit[0] */ 576 #define ADAFE_AFE 0x00 577 #define AD9826_AFE 0x01 578 /*bit[1]*/ 579 #define AUTO_CHANGE_AFE_GAIN_OFFSET_ENABLE 0x02 580 #define AUTO_CHANGE_AFE_GAIN_OFFSET_DISABLE 0x00 581 582 #define ES01_9B_ShadingTableAddrA14_A21 0x9B 583 #define ES01_9C_ShadingTableAddrODDA12_A19 0x9c 584 #define ES01_9D_MotorTableAddrA14_A21 0x9d 585 #define ES01_9E_HorizontalRatio1to15LSB 0x9e 586 #define ES01_9F_HorizontalRatio1to15MSB 0x9f 587 #define ES01_A0_HostStartAddr0_7 0xa0 588 #define ES01_A1_HostStartAddr8_15 0xa1 589 /* bit[3] */ 590 #define ES01_ACCESS_PRE_GAMMA 0x08 591 #define ES01_ACCESS_FINAL_GAMMA 0x00 592 #define ES01_A2_HostStartAddr16_21 0xa2 593 /* bit[7] */ 594 #define ACCESS_DRAM 0x00 595 #define ACCESS_GAMMA_RAM 0x80 596 #define ES01_A3_HostEndAddr0_7 0xa3 597 #define ES01_A4_HostEndAddr8_15 0xa4 598 #define ES01_A5_HostEndAddr16_21 0xa5 599 600 #define ES01_A6_MotorOption 0xA6 601 /* bit[0] */ 602 #define MOTOR_0_ENABLE 0x01 603 #define MOTOR_0_DISABLE 0x00 604 /* bit[1]*/ 605 #define MOTOR_1_ENABLE 0x02 606 #define MOTOR_1_DISABLE 0x00 607 /* bit[3:2]*/ 608 #define HOME_SENSOR_0_ENABLE 0x00 609 #define HOME_SENSOR_1_ENABLE 0x04 610 #define HOME_SENSOR_BOTH_ENABLE 0x08 611 #define HOME_SENSOR_0_INVERT_ENABLE 0x0c 612 /* bit[7:4]*/ 613 #define ES03_UNIPOLAR_FULL_STEP_2003 0x00 614 #define ES03_BIPOLAR_FULL_2916 0x10 615 #define ES03_BIPOLAR_FULL_3955_3966 0x20 616 #define ES03_UNIPOLAR_PWM_2003 0x30 617 #define ES03_BIPOLAR_3967 0x40 618 #define ES03_TABLE_DEFINE 0x50 619 #define ES01_A7_MotorPWMOnTimePhasA 0xa7 620 #define ES01_A8_MotorPWMOnTimePhasB 0xa8 621 #define ES01_A9_MotorPWMOffTimePhasA 0xa9 622 #define ES01_AA_MotorPWMOffTimePhasB 0xaa 623 #define ES01_AB_PWM_CURRENT_CONTROL 0xab 624 625 /* bit[1:0] */ 626 #define MOTOR_PWM_CURRENT_0 0x00 627 #define MOTOR_PWM_CURRENT_1 0x01 628 #define MOTOR_PWM_CURRENT_2 0x02 629 #define MOTOR_PWM_CURRENT_3 0x03 630 /* bit[3:2]*/ 631 #define MOTOR1_GPO_VALUE_0 0x00 632 #define MOTOR1_GPO_VALUE_1 0x04 633 #define MOTOR1_GPO_VALUE_2 0x08 634 #define MOTOR1_GPO_VALUE_3 0x0c 635 /* bit[4]*/ 636 #define GPO_OUTPUT_ENABLE 0x10 637 #define GPO_OUTPUT_DISABLE 0x00 638 /* bit[5]*/ 639 #define SERIAL_PORT_CONTINUOUS_OUTPUT_ENABLE 0x20 640 #define SERIAL_PORT_CONTINUOUS_OUTPUT_DISABLE 0x00 641 #define ES01_AC_MotorPWMJamRangeLSB 0xac 642 #define ES01_AD_MotorPWMJamRangeMSB 0xad 643 #define ES01_AE_MotorSyncPixelNumberM16LSB 0xae 644 #define ES01_AF_MotorSyncPixelNumberM16MSB 0xaf 645 #define ES01_B0_CCDPixelLSB 0xb0 646 #define ES01_B1_CCDPixelMSB 0xb1 647 #define ES01_B2_PHTGPulseWidth 0xb2 648 #define ES01_B3_PHTGWaitWidth 0xb3 649 #define ES01_B4_StartPixelLSB 0xb4 650 #define ES01_B5_StartPixelMSB 0xb5 651 #define ES01_B6_LineWidthPixelLSB 0xb6 652 #define ES01_B7_LineWidthPixelMSB 0xb7 653 654 #define ES01_B8_ChannelRedExpStartPixelLSB 0xb8 655 #define ES01_B9_ChannelRedExpStartPixelMSB 0xb9 656 #define ES01_BA_ChannelRedExpEndPixelLSB 0xba 657 #define ES01_BB_ChannelRedExpEndPixelMSB 0xbb 658 #define ES01_BC_ChannelGreenExpStartPixelLSB 0xbc 659 #define ES01_BD_ChannelGreenExpStartPixelMSB 0xbd 660 #define ES01_BE_ChannelGreenExpEndPixelLSB 0xbe 661 #define ES01_BF_ChannelGreenExpEndPixelMSB 0xbf 662 #define ES01_C0_ChannelBlueExpStartPixelLSB 0xc0 663 #define ES01_C1_ChannelBlueExpStartPixelMSB 0xc1 664 #define ES01_C2_ChannelBlueExpEndPixelLSB 0xc2 665 #define ES01_C3_ChannelBlueExpEndPixelMSB 0xc3 666 667 668 #define ES01_C4_MultiTGTimesRed 0xc4 669 #define ES01_C5_MultiTGTimesGreen 0xc5 670 #define ES01_C6_MultiTGTimesBlue 0xc6 671 #define ES01_C7_MultiTGDummyPixelNumberLSB 0xc7 672 #define ES01_C8_MultiTGDummyPixelNumberMSB 0xc8 673 #define ES01_C9_CCDDummyPixelNumberLSB 0xc9 674 #define ES01_CA_CCDDummyPixelNumberMSB 0xca 675 #define ES01_CB_CCDDummyCycleNumber 0xcb 676 #define ES01_CC_PHTGTimingAdjust 0xcc 677 /* bit[0] */ 678 #define PHTG_INVERT_OUTPUT_ENABLE 0x01 679 #define PHTG_INVERT_OUTPUT_DISABLE 0x00 680 /* bit[1]*/ 681 #define TWO_TG 0x01 682 #define MULTI_TG 0x00 683 /* bit[3:2] */ 684 #define CCD_PIXEL_MODE_RED 0x0c 685 #define CCD_LINE_MOE_RED_00 0x00 686 #define CCD_LINE_MOE_RED_01 0x04 687 #define CCD_LINE_MOE_RED_10 0x08 688 /* bit[5:4]*/ 689 #define CCD_PIXEL_MODE_GREEN 0x30 690 #define CCD_LINE_MOE_GREEN_00 0x00 691 #define CCD_LINE_MOE_GREEN_01 0x40 692 #define CCD_LINE_MOE_GREEN_10 0x80 693 /* bit[7:6]*/ 694 #define CCD_PIXEL_MODE_BLUE 0xc0 695 #define CCD_LINE_MOE_BLUE_00 0x00 696 #define CCD_LINE_MOE_BLUE_01 0x40 697 #define CCD_LINE_MOE_BLUE_10 0x80 698 699 #define ES01_CD_TG_R_CONTROL 0xCD 700 #define ES01_CE_TG_G_CONTROL 0xCE 701 #define ES01_CF_TG_B_CONTROL 0xCF 702 703 #define ES01_D9_CLEAR_PULSE_WIDTH 0xD9 704 #define ES01_DA_CLEAR_SIGNAL_INVERTING_OUTPUT 0xDA 705 #define ES01_DB_PH_RESET_EDGE_TIMING_ADJUST 0xDB 706 #define ES01_DC_CLEAR_EDGE_TO_PH_TG_EDGE_WIDTH 0xDC 707 #define ES01_D0_PH1_0 0xD0 708 #define ES01_D1_PH2_0 0xD1 709 #define ES01_D2_PH1B_0 0xD2 710 #define ES01_D4_PHRS_0 0xD4 711 #define ES01_D5_PHCP_0 0xD5 712 #define ES01_D6_AFE_VSAMP_0 0xD6 713 #define ES01_D7_AFE_RSAMP_0 0xD7 714 715 #define ES01_D8_PHTG_EDGE_TIMING_ADJUST 0xD8 716 717 #define ES01_CD_PH1_0 0xcd 718 #define ES01_CE_PH1_1 0xce 719 #define ES01_CF_PH2_0 0xcf 720 #define ES01_D0_PH2_1 0xd0 721 #define ES01_D1_PH1B_0 0xd1 722 #define ES01_D2_PH1B_1 0xd2 723 #define ES01_D3_PH2B_0 0xd3 724 #define ES01_D4_PH2B_1 0xd4 725 #define ES01_D5_PHRS_0 0xd5 726 #define ES01_D6_PHRS_1 0xd6 727 #define ES01_D7_PHCP_0 0xd7 728 #define ES01_D8_PHCP_1 0xd8 729 #define ES01_D9_AFE_VSAMP_0 0xd9 730 #define ES01_DA_AFE_VSAMP_1 0xda 731 #define ES01_DB_AFE_RSAMP_0 0xdb 732 #define ES01_DC_AFE_RSAMP_1 0xdc 733 #define ES01_DD_PH1234_IN_DUMMY_TG 0xdd 734 #define ES01_DE_CCD_SETUP_REGISTER 0xDE 735 /* bit[0] */ 736 #define ES01_LINE_SCAN_MODE_DISABLE 0x00 737 #define ES01_LINE_SCAN_MODE_ENABLE 0x01 738 /* bit[1] */ 739 #define ES01_CIS_SENSOR_MODE_DISABLE 0x00 740 #define ES01_CIS_SENSOR_MODE_ENABLE 0x02 741 /* bit[2] */ 742 #define ES01_CIS_LED_OUTPUT_RGB 0x00 743 #define ES01_CIS_LED_OUTPUT_RtoGtoB 0x04 744 /* bit[3] */ 745 #define ES01_CIS_LED_NORMAL_OUTPUT 0x00 746 #define ES01_CIS_LED_INVERT_OUTPUT 0x08 747 /* bit[4] */ 748 #define ES01_ACC_IN_IDLE_DISABLE 0x00 749 #define ES01_ACC_IN_IDLE_ENABLE 0x10 750 /* bit[5] */ 751 #define ES01_EVEN_ODD_DISABLE 0x00 752 #define ES01_EVEN_ODD_ENABLE 0x20 753 /* bit[6] */ 754 #define ES01_ALTERNATE_EVEN_ODD_DISABLE 0x00 755 #define ES01_ALTERNATE_EVEN_ODD_ENABLE 0x40 756 /* bit[7] */ 757 #define ES01_RESET_CCD_STATE_DISABLE 0x00 758 #define ES01_RESET_CCD_STATE_ENABLE 0x80 759 760 #define ES01_DF_ICG_CONTROL 0xdf 761 /* bit[2:0] */ 762 #define BEFORE_PHRS_0_ns 0x00 763 #define BEFORE_PHRS_416_7t_ns 0x01 764 #define BEFORE_PHRS_416_6t_ns 0x02 765 #define BEFORE_PHRS_416_5t_ns 0x03 766 #define BEFORE_PHRS_416_4t_ns 0x04 767 #define BEFORE_PHRS_416_3t_ns 0x05 768 #define BEFORE_PHRS_416_2t_ns 0x06 769 #define BEFORE_PHRS_416_1t_ns 0x07 770 /* bit[2:0]*/ 771 #define ICG_UNIT_1_PIXEL_TIME 0x00 772 #define ICG_UNIT_4_PIXEL_TIME 0x10 773 #define ICG_UNIT_8_PIXEL_TIME 0x20 774 #define ICG_UNIT_16_PIXEL_TIME 0x30 775 #define ICG_UNIT_32_PIXEL_TIME 0x40 776 #define ICG_UNIT_64_PIXEL_TIME 0x50 777 #define ICG_UNIT_128_PIXEL_TIME 0x60 778 #define ICG_UNIT_256_PIXEL_TIME 0x70 779 780 #define ES01_E0_MotorAccStep0_7 0xe0 781 #define ES01_E1_MotorAccStep8_8 0xe1 782 #define ES01_E2_MotorStepOfMaxSpeed0_7 0xe2 783 #define ES01_E3_MotorStepOfMaxSpeed8_15 0xe3 784 #define ES01_E4_MotorStepOfMaxSpeed16_19 0xe4 785 #define ES01_E5_MotorDecStep 0xe5 786 #define ES01_E6_ScanBackTrackingStepLSB 0xe6 787 #define ES01_E7_ScanBackTrackingStepMSB 0xe7 788 #define ES01_E8_ScanRestartStepLSB 0xe8 789 #define ES01_E9_ScanRestartStepMSB 0xe9 790 #define ES01_EA_ScanBackHomeExtStepLSB 0xea 791 #define ES01_EB_ScanBackHomeExtStepMSB 0xeb 792 #define ES01_EC_ScanAccStep0_7 0xec 793 #define ES01_ED_ScanAccStep8_8 0xed 794 #define ES01_EE_FixScanStepLSB 0xee 795 #define ES01_EF_ScanDecStep 0xef 796 #define ES01_F0_ScanImageStep0_7 0xf0 797 #define ES01_F1_ScanImageStep8_15 0xf1 798 #define ES01_F2_ScanImageStep16_19 0xf2 799 800 #define ES01_F3_ActionOption 0xf3 801 /* bit[0] */ 802 #define MOTOR_MOVE_TO_FIRST_LINE_ENABLE 0x01 803 #define MOTOR_MOVE_TO_FIRST_LINE_DISABLE 0x00 804 /* bit[1]*/ 805 #define MOTOR_BACK_HOME_AFTER_SCAN_ENABLE 0x02 806 #define MOTOR_BACK_HOME_AFTER_SCAN_DISABLE 0x00 807 /* bit[2]*/ 808 #define SCAN_ENABLE 0x04 809 #define SCAN_DISABLE 0x00 810 /* bit[3]*/ 811 #define SCAN_BACK_TRACKING_ENABLE 0x08 812 #define SCAN_BACK_TRACKING_DISABLE 0x00 813 /* bit[4]*/ 814 #define INVERT_MOTOR_DIRECTION_ENABLE 0x10 815 #define INVERT_MOTOR_DIRECTION_DISABLE 0x00 816 /* bit[5]*/ 817 #define UNIFORM_MOTOR_AND_SCAN_SPEED_ENABLE 0x20 818 #define UNIFORM_MOTOR_AND_SCAN_SPEED_DISABLE 0x00 819 820 /* bit[6] */ 821 #define ES01_STATIC_SCAN_ENABLE 0x40 822 #define ES01_STATIC_SCAN_DISABLE 0x00 823 824 /* bit[7]*/ 825 #define MOTOR_TEST_LOOP_ENABLE 0x80 826 #define MOTOR_TEST_LOOP_DISABLE 0x00 827 #define ES01_F4_ActiveTriger 0xf4 828 /* bit[0] */ 829 #define ACTION_TRIGER_ENABLE 0x01 830 #define ACTION_TRIGER_DISABLE 0x00 831 832 #define ES01_F5_ScanDataFormat 0xf5 833 /* bit[0] */ 834 #define COLOR_ES02 0x00 835 #define GRAY_ES02 0x01 836 /* bit[2:1]*/ 837 #define _8_BITS_ES02 0x00 838 #define _16_BITS_ES02 0x02 839 #define _1_BIT_ES02 0x04 840 /* bit[5:4]*/ 841 #define GRAY_RED_ES02 0x00 842 #define GRAY_GREEN_ES02 0x10 843 #define GRAY_BLUE_ES02 0x20 844 #define GRAY_GREEN_BLUE_ES02 0x30 845 846 #define ES01_F6_MorotControl1 0xf6 847 /* bit[2:0] */ 848 #define SPEED_UNIT_1_PIXEL_TIME 0x00 849 #define SPEED_UNIT_4_PIXEL_TIME 0x01 850 #define SPEED_UNIT_8_PIXEL_TIME 0x02 851 #define SPEED_UNIT_16_PIXEL_TIME 0x03 852 #define SPEED_UNIT_32_PIXEL_TIME 0x04 853 #define SPEED_UNIT_64_PIXEL_TIME 0x05 854 #define SPEED_UNIT_128_PIXEL_TIME 0x06 855 #define SPEED_UNIT_256_PIXEL_TIME 0x07 856 /* bit[5:4]*/ 857 #define MOTOR_SYNC_UNIT_1_PIXEL_TIME 0x00 858 #define MOTOR_SYNC_UNIT_16_PIXEL_TIME 0x10 859 #define MOTOR_SYNC_UNIT_64_PIXEL_TIME 0x20 860 #define MOTOR_SYNC_UNIT_256_PIXEL_TIME 0x30 861 #define ES01_F7_DigitalControl 0xf7 862 /* bit[0] */ 863 #define DIGITAL_REDUCE_ENABLE 0x01 864 #define DIGITAL_REDUCE_DISABLE 0x00 865 /* bit[3:1]*/ 866 #define DIGITAL_REDUCE_1_1 0x00 867 #define DIGITAL_REDUCE_1_2 0x02 868 #define DIGITAL_REDUCE_1_4 0x04 869 #define DIGITAL_REDUCE_1_8 0x06 870 #define DIGITAL_REDUCE_1_16 0x08 871 872 #define ES01_F8_WHITE_SHADING_DATA_FORMAT 0xF8 873 /* bit[1:0] */ 874 #define ES01_SHADING_2_INT_14_DEC 0x00 875 #define ES01_SHADING_3_INT_13_DEC 0x01 876 #define ES01_SHADING_4_INT_12_DEC 0x02 877 #define ES01_SHADING_5_INT_11_DEC 0x03 878 #define ES01_F9_BufferFullSize16WordLSB 0xf9 879 #define ES01_FA_BufferFullSize16WordMSB 0xfa 880 #define ES01_FB_BufferEmptySize16WordLSB 0xfb 881 #define ES01_FC_BufferEmptySize16WordMSB 0xfc 882 #define ES01_FD_MotorFixedspeedLSB 0xfd 883 #define ES01_FE_MotorFixedspeedMSB 0xfe 884 #define ES01_FF_TestControl 0xff 885 /* bit[0] */ 886 #define OUTPUT_HORIZONTAL_PATTERN_ENABLE 0x01 887 #define OUTPUT_HORIZONTAL_PATTERN_DISABLE 0x00 888 /* bit[1]*/ 889 #define OUTPUT_VERTICAL_PATTERN_ENABLE 0x02 890 #define OUTPUT_VERTICAL_PATTERN_DISABLE 0x00 891 /* bit[2]*/ 892 #define BYPASS_DARK_SHADING_ENABLE 0x04 893 #define BYPASS_DARK_SHADING_DISABLE 0x00 894 /* bit[3]*/ 895 #define BYPASS_WHITE_SHADING_ENABLE 0x08 896 #define BYPASS_WHITE_SHADING_DISABLE 0x00 897 /* bit[4]*/ 898 #define BYPASS_PRE_GAMMA_ENABLE 0x10 899 #define BYPASS_PRE_GAMMA_DISABLE 0x00 900 /* bit[5]*/ 901 #define BYPASS_CONVOLUTION_ENABLE 0x20 902 #define BYPASS_CONVOLUTION_DISABLE 0x00 903 /* bit[6]*/ 904 #define BYPASS_MATRIX_ENABLE 0x40 905 #define BYPASS_MATRIX_DISABLE 0x00 906 /* bit[7]*/ 907 #define BYPASS_GAMMA_ENABLE 0x80 908 #define BYPASS_GAMMA_DISABLE 0x00 909 #define ES01_FF_SCAN_IMAGE_OPTION 0xFF 910 /* bit[0] */ 911 #define OUTPUT_HORIZONTAL_PATTERN_ENABLE 0x01 912 #define OUTPUT_HORIZONTAL_PATTERN_DISABLE 0x00 913 /* bit[1]*/ 914 #define OUTPUT_VERTICAL_PATTERN_ENABLE 0x02 915 #define OUTPUT_VERTICAL_PATTERN_DISABLE 0x00 916 /* bit[2]*/ 917 #define BYPASS_DARK_SHADING_ENABLE 0x04 918 #define BYPASS_DARK_SHADING_DISABLE 0x00 919 /* bit[3]*/ 920 #define BYPASS_WHITE_SHADING_ENABLE 0x08 921 #define BYPASS_WHITE_SHADING_DISABLE 0x00 922 /* bit[4]*/ 923 #define BYPASS_PRE_GAMMA_ENABLE 0x10 924 #define BYPASS_PRE_GAMMA_DISABLE 0x00 925 /* bit[5]*/ 926 #define BYPASS_CONVOLUTION_ENABLE 0x20 927 #define BYPASS_CONVOLUTION_DISABLE 0x00 928 /* bit[6]*/ 929 #define BYPASS_MATRIX_ENABLE 0x40 930 #define BYPASS_MATRIX_DISABLE 0x00 931 /* bit[7]*/ 932 #define BYPASS_GAMMA_ENABLE 0x80 933 #define BYPASS_GAMMA_DISABLE 0x00 934 935 /*******************************************************************/ 936 #define ES01_160_CHANNEL_A_LATCH_POSITION_HB 0x160 937 #define ES01_161_CHANNEL_A_LATCH_POSITION_LB 0x161 938 #define ES01_162_CHANNEL_B_LATCH_POSITION_HB 0x162 939 #define ES01_163_CHANNEL_B_LATCH_POSITION_LB 0x163 940 #define ES01_164_CHANNEL_C_LATCH_POSITION_HB 0x164 941 #define ES01_165_CHANNEL_C_LATCH_POSITION_LB 0x165 942 #define ES01_166_CHANNEL_D_LATCH_POSITION_HB 0x166 943 #define ES01_167_CHANNEL_D_LATCH_POSITION_LB 0x167 944 945 #define ES01_168_SECONDARY_FF_LATCH_POSITION 0x168 946 947 #define ES01_169_NUMBER_OF_SEGMENT_PIXEL_LB 0x169 948 #define ES01_16A_NUMBER_OF_SEGMENT_PIXEL_HB 0x16A 949 950 #define ES01_16B_BETWEEN_SEGMENT_INVALID_PIXEL 0x16B 951 #define ES01_16C_LINE_SHIFT_OUT_TIMES_DIRECTION 0x16C /* bit[3:0] */ 952 953 /* segment start address */ 954 #define ES01_16D_EXPOSURE_CYCLE1_SEGMENT1_START_ADDR_BYTE0 0x16D 955 #define ES01_16E_EXPOSURE_CYCLE1_SEGMENT1_START_ADDR_BYTE1 0x16E 956 #define ES01_16F_EXPOSURE_CYCLE1_SEGMENT1_START_ADDR_BYTE2 0x16F /* bit[3:0] */ 957 958 #define ES01_170_EXPOSURE_CYCLE1_SEGMENT2_START_ADDR_BYTE0 0x170 959 #define ES01_171_EXPOSURE_CYCLE1_SEGMENT2_START_ADDR_BYTE1 0x171 960 #define ES01_172_EXPOSURE_CYCLE1_SEGMENT2_START_ADDR_BYTE2 0x172 /* bit[3:0] */ 961 962 #define ES01_173_EXPOSURE_CYCLE1_SEGMENT3_START_ADDR_BYTE0 0x173 963 #define ES01_174_EXPOSURE_CYCLE1_SEGMENT3_START_ADDR_BYTE1 0x174 964 #define ES01_175_EXPOSURE_CYCLE1_SEGMENT3_START_ADDR_BYTE2 0x175 /* bit[3:0] */ 965 966 #define ES01_176_EXPOSURE_CYCLE1_SEGMENT4_START_ADDR_BYTE0 0x176 967 #define ES01_177_EXPOSURE_CYCLE1_SEGMENT4_START_ADDR_BYTE1 0x177 968 #define ES01_178_EXPOSURE_CYCLE1_SEGMENT4_START_ADDR_BYTE2 0x178 /* bit[3:0] */ 969 970 #define ES01_179_EXPOSURE_CYCLE2_SEGMENT1_START_ADDR_BYTE0 0x179 971 #define ES01_17A_EXPOSURE_CYCLE2_SEGMENT1_START_ADDR_BYTE1 0x17A 972 #define ES01_17B_EXPOSURE_CYCLE2_SEGMENT1_START_ADDR_BYTE2 0x17B /* bit[3:0] */ 973 974 #define ES01_17C_EXPOSURE_CYCLE2_SEGMENT2_START_ADDR_BYTE0 0x17C 975 #define ES01_17D_EXPOSURE_CYCLE2_SEGMENT2_START_ADDR_BYTE1 0x17D 976 #define ES01_17E_EXPOSURE_CYCLE2_SEGMENT2_START_ADDR_BYTE2 0x17E /* bit[3:0] */ 977 978 #define ES01_17F_EXPOSURE_CYCLE2_SEGMENT3_START_ADDR_BYTE0 0x17F 979 #define ES01_180_EXPOSURE_CYCLE2_SEGMENT3_START_ADDR_BYTE1 0x180 980 #define ES01_181_EXPOSURE_CYCLE2_SEGMENT3_START_ADDR_BYTE2 0x181 /* bit[3:0] */ 981 982 #define ES01_182_EXPOSURE_CYCLE2_SEGMENT4_START_ADDR_BYTE0 0x182 983 #define ES01_183_EXPOSURE_CYCLE2_SEGMENT4_START_ADDR_BYTE1 0x183 984 #define ES01_184_EXPOSURE_CYCLE2_SEGMENT4_START_ADDR_BYTE2 0x184 /* bit[3:0] */ 985 986 #define ES01_185_EXPOSURE_CYCLE3_SEGMENT1_START_ADDR_BYTE0 0x185 987 #define ES01_186_EXPOSURE_CYCLE3_SEGMENT1_START_ADDR_BYTE1 0x186 988 #define ES01_187_EXPOSURE_CYCLE3_SEGMENT1_START_ADDR_BYTE2 0x187 /* bit[3:0] */ 989 990 #define ES01_188_EXPOSURE_CYCLE3_SEGMENT2_START_ADDR_BYTE0 0x188 991 #define ES01_189_EXPOSURE_CYCLE3_SEGMENT2_START_ADDR_BYTE1 0x189 992 #define ES01_18A_EXPOSURE_CYCLE3_SEGMENT2_START_ADDR_BYTE2 0x18A /* bit[3:0] */ 993 994 #define ES01_18B_EXPOSURE_CYCLE3_SEGMENT3_START_ADDR_BYTE0 0x18B 995 #define ES01_18C_EXPOSURE_CYCLE3_SEGMENT3_START_ADDR_BYTE1 0x18C 996 #define ES01_18D_EXPOSURE_CYCLE3_SEGMENT3_START_ADDR_BYTE2 0x18D /* bit[3:0] */ 997 998 #define ES01_18E_EXPOSURE_CYCLE3_SEGMENT4_START_ADDR_BYTE0 0x18E 999 #define ES01_18F_EXPOSURE_CYCLE3_SEGMENT4_START_ADDR_BYTE1 0x18F 1000 #define ES01_190_EXPOSURE_CYCLE3_SEGMENT4_START_ADDR_BYTE2 0x190 /* bit[3:0] */ 1001 1002 /* channel gap */ 1003 #define ES01_191_CHANNEL_GAP1_BYTE0 0x191 1004 #define ES01_192_CHANNEL_GAP1_BYTE1 0x192 1005 #define ES01_193_CHANNEL_GAP1_BYTE2 0x193 /* bit[3:0] */ 1006 1007 #define ES01_194_CHANNEL_GAP2_BYTE0 0x194 1008 #define ES01_195_CHANNEL_GAP2_BYTE1 0x195 1009 #define ES01_196_CHANNEL_GAP2_BYTE2 0x196 /* bit[3:0] */ 1010 1011 #define ES01_197_CHANNEL_GAP3_BYTE0 0x197 1012 #define ES01_198_CHANNEL_GAP3_BYTE1 0x198 1013 #define ES01_199_CHANNEL_GAP3_BYTE2 0x199 /* bit[3:0] */ 1014 1015 /* channel line gap */ 1016 #define ES01_19A_CHANNEL_LINE_GAP_LB 0x19A 1017 #define ES01_19B_CHANNEL_LINE_GAP_HB 0x19B 1018 1019 /* max pack line */ 1020 #define ES01_19C_MAX_PACK_LINE 0x19C /* bit[5:0] */ 1021 1022 /*pack threshold */ 1023 #define ES01_19D_PACK_THRESHOLD_LINE 0x19D 1024 1025 /* pack area start address */ 1026 #define ES01_19E_PACK_AREA_R_START_ADDR_BYTE0 0x19E 1027 #define ES01_19F_PACK_AREA_R_START_ADDR_BYTE1 0x19F 1028 #define ES01_1A0_PACK_AREA_R_START_ADDR_BYTE2 0x1A0 /* bit[3:0] */ 1029 1030 #define ES01_1A1_PACK_AREA_G_START_ADDR_BYTE0 0x1A1 1031 #define ES01_1A2_PACK_AREA_G_START_ADDR_BYTE1 0x1A2 1032 #define ES01_1A3_PACK_AREA_G_START_ADDR_BYTE2 0x1A3 /* bit[3:0] */ 1033 1034 #define ES01_1A4_PACK_AREA_B_START_ADDR_BYTE0 0x1A4 1035 #define ES01_1A5_PACK_AREA_B_START_ADDR_BYTE1 0x1A5 1036 #define ES01_1A6_PACK_AREA_B_START_ADDR_BYTE2 0x1A6 /* bit[3:0] */ 1037 1038 /* pack area end address */ 1039 #define ES01_1A7_PACK_AREA_R_END_ADDR_BYTE0 0x1A7 1040 #define ES01_1A8_PACK_AREA_R_END_ADDR_BYTE1 0x1A8 1041 #define ES01_1A9_PACK_AREA_R_END_ADDR_BYTE2 0x1A9 /* bit[3:0] */ 1042 1043 #define ES01_1AA_PACK_AREA_G_END_ADDR_BYTE0 0x1AA 1044 #define ES01_1AB_PACK_AREA_G_END_ADDR_BYTE1 0x1AB 1045 #define ES01_1AC_PACK_AREA_G_END_ADDR_BYTE2 0x1AC /* bit[3:0] */ 1046 1047 #define ES01_1AD_PACK_AREA_B_END_ADDR_BYTE0 0x1AD 1048 #define ES01_1AE_PACK_AREA_B_END_ADDR_BYTE1 0x1AE 1049 #define ES01_1AF_PACK_AREA_B_END_ADDR_BYTE2 0x1AF /* bit[3:0] */ 1050 1051 /* segment pixel number */ 1052 #define ES01_1B0_SEGMENT_PIXEL_NUMBER_LB 0x1B0 1053 #define ES01_1B1_SEGMENT_PIXEL_NUMBER_HB 0x1B1 1054 1055 /*overlap pixel number and hold pixel number */ 1056 #define ES01_1B2_OVERLAP_AND_HOLD_PIXEL_NUMBER 0x1B2 1057 1058 /*convolution parameter */ 1059 #define ES01_1B3_CONVOLUTION_A 0x1B3 1060 #define ES01_1B4_CONVOLUTION_B 0x1B4 1061 #define ES01_1B5_CONVOLUTION_C 0x1B5 1062 #define ES01_1B6_CONVOLUTION_D 0x1B6 1063 #define ES01_1B7_CONVOLUTION_E 0x1B7 1064 #define ES01_1B8_CONVOLUTION_F 0x1B8 /* bit[2:0] */ 1065 1066 /* line pixel number */ 1067 #define ES01_1B9_LINE_PIXEL_NUMBER_LB 0x1B9 1068 #define ES01_1BA_LINE_PIXEL_NUMBER_HB 0x1BA 1069 1070 /* matrix parameter */ 1071 #define ES01_1BB_MATRIX_A_LB 0x1BB 1072 #define ES01_1BC_MATRIX_A_HB 0x1BC /* bit[3:0] */ 1073 1074 #define ES01_1BD_MATRIX_B_LB 0x1BD 1075 #define ES01_1BE_MATRIX_B_HB 0x1BE /* bit[3:0] */ 1076 1077 #define ES01_1BF_MATRIX_C_LB 0x1BF 1078 #define ES01_1C0_MATRIX_C_HB 0x1C0 /* bit[3:0] */ 1079 1080 #define ES01_1C1_MATRIX_D_LB 0x1C1 1081 #define ES01_1C2_MATRIX_D_HB 0x1C2 /* bit[3:0] */ 1082 1083 #define ES01_1C3_MATRIX_E_LB 0x1C3 1084 #define ES01_1C4_MATRIX_E_HB 0x1C4 /* bit[3:0] */ 1085 1086 #define ES01_1C5_MATRIX_F_LB 0x1C5 1087 #define ES01_1C6_MATRIX_F_HB 0x1C6 /* bit[3:0] */ 1088 1089 #define ES01_1C7_MATRIX_G_LB 0x1C7 1090 #define ES01_1C8_MATRIX_G_HB 0x1C8 /* bit[3:0] */ 1091 1092 #define ES01_1C9_MATRIX_H_LB 0x1C9 1093 #define ES01_1CA_MATRIX_H_HB 0x1CA /* bit[3:0] */ 1094 1095 #define ES01_1CB_MATRIX_I_LB 0x1CB 1096 #define ES01_1CC_MATRIX_I_HB 0x1CC /* bit[3:0] */ 1097 1098 /*dummy clock number */ 1099 #define ES01_1CD_DUMMY_CLOCK_NUMBER 0x1CD /* bit[3:0] */ 1100 1101 /* line segment number */ 1102 #define ES01_1CE_LINE_SEGMENT_NUMBER 0x1CE 1103 1104 /* dummy cycle timing */ 1105 #define ES01_1D0_DUMMY_CYCLE_TIMING_B0 0x1D0 1106 #define ES01_1D1_DUMMY_CYCLE_TIMING_B1 0x1D1 1107 #define ES01_1D2_DUMMY_CYCLE_TIMING_B2 0x1D2 1108 #define ES01_1D3_DUMMY_CYCLE_TIMING_B3 0x1D3 1109 1110 /* PH1 timing adjust register */ 1111 #define ES01_1D4_PH1_TIMING_ADJ_B0 0x1D4 1112 #define ES01_1D5_PH1_TIMING_ADJ_B1 0x1D5 1113 #define ES01_1D6_PH1_TIMING_ADJ_B2 0x1D6 1114 #define ES01_1D7_PH1_TIMING_ADJ_B3 0x1D7 1115 1116 /* PH2 timing adjust register */ 1117 #define ES01_1D8_PH2_TIMING_ADJ_B0 0x1D8 1118 #define ES01_1D9_PH2_TIMING_ADJ_B1 0x1D9 1119 #define ES01_1DA_PH2_TIMING_ADJ_B2 0x1DA 1120 #define ES01_1DB_PH2_TIMING_ADJ_B3 0x1DB 1121 1122 /* PH3 timing adjust register */ 1123 #define ES01_1DC_PH3_TIMING_ADJ_B0 0x1DC 1124 #define ES01_1DD_PH3_TIMING_ADJ_B1 0x1DD 1125 #define ES01_1DE_PH3_TIMING_ADJ_B2 0x1DE 1126 #define ES01_1DF_PH3_TIMING_ADJ_B3 0x1DF 1127 1128 /* PH4 timing adjust register */ 1129 #define ES01_1E0_PH4_TIMING_ADJ_B0 0x1E0 1130 #define ES01_1E1_PH4_TIMING_ADJ_B1 0x1E1 1131 #define ES01_1E2_PH4_TIMING_ADJ_B2 0x1E2 1132 #define ES01_1E3_PH4_TIMING_ADJ_B3 0x1E3 1133 1134 /*PHRS timing adjust register */ 1135 #define ES01_1E4_PHRS_TIMING_ADJ_B0 0x1E4 1136 #define ES01_1E5_PHRS_TIMING_ADJ_B1 0x1E5 1137 #define ES01_1E6_PHRS_TIMING_ADJ_B2 0x1E6 1138 #define ES01_1E7_PHRS_TIMING_ADJ_B3 0x1E7 1139 1140 /* PHCP timing adjust register */ 1141 #define ES01_1E8_PHCP_TIMING_ADJ_B0 0x1E8 1142 #define ES01_1E9_PHCP_TIMING_ADJ_B1 0x1E9 1143 #define ES01_1EA_PHCP_TIMING_ADJ_B2 0x1EA 1144 #define ES01_1EB_PHCP_TIMING_ADJ_B3 0x1EB 1145 1146 /*AFEVS timing adjust register */ 1147 #define ES01_1EC_AFEVS_TIMING_ADJ_B0 0x1EC 1148 #define ES01_1ED_AFEVS_TIMING_ADJ_B1 0x1ED 1149 #define ES01_1EE_AFEVS_TIMING_ADJ_B2 0x1EE 1150 #define ES01_1EF_AFEVS_TIMING_ADJ_B3 0x1EF 1151 1152 /*AFERS timing adjust register */ 1153 #define ES01_1F0_AFERS_TIMING_ADJ_B0 0x1F0 1154 #define ES01_1F1_AFERS_TIMING_ADJ_B1 0x1F1 1155 #define ES01_1F2_AFERS_TIMING_ADJ_B2 0x1F2 1156 #define ES01_1F3_AFERS_TIMING_ADJ_B3 0x1F3 1157 1158 /* read out pixel */ 1159 #define ES01_1F4_START_READ_OUT_PIXEL_LB 0x1F4 1160 #define ES01_1F5_START_READ_OUT_PIXEL_HB 0x1F5 1161 #define ES01_1F6_READ_OUT_PIXEL_LENGTH_LB 0x1F6 1162 #define ES01_1F7_READ_OUT_PIXEL_LENGTH_HB 0x1F7 1163 1164 /* pack channel setting */ 1165 #define ES01_1F8_PACK_CHANNEL_SELECT_B0 0x1F8 1166 #define ES01_1F9_PACK_CHANNEL_SELECT_B1 0x1F9 1167 #define ES01_1FA_PACK_CHANNEL_SELECT_B2 0x1FA 1168 #define ES01_1FB_PACK_CHANNEL_SIZE_B0 0x1FB 1169 #define ES01_1FC_PACK_CHANNEL_SIZE_B1 0x1FC 1170 #define ES01_1FD_PACK_CHANNEL_SIZE_B2 0x1FD 1171 1172 /* AFE gain offset control*/ 1173 /* rom code ver 0.10 */ 1174 #define ES01_2A0_AFE_GAIN_OFFSET_CONTROL 0x2A0 1175 #define ES01_2A1_AFE_AUTO_CONFIG_GAIN 0x2A1 1176 #define ES01_2A2_AFE_AUTO_CONFIG_OFFSET 0x2A2 1177 1178 #define ES01_2B0_SEGMENT0_OVERLAP_SEGMENT1 0x2B0 1179 #define ES01_2B1_SEGMENT1_OVERLAP_SEGMENT2 0x2B1 1180 #define ES01_2B2_SEGMENT2_OVERLAP_SEGMENT3 0x2B2 1181 1182 /* valid pixel parameter */ 1183 #define ES01_2C0_VALID_PIXEL_PARAMETER_OF_SEGMENT1 0x2C0 1184 #define ES01_2C1_VALID_PIXEL_PARAMETER_OF_SEGMENT2 0x2C1 1185 #define ES01_2C2_VALID_PIXEL_PARAMETER_OF_SEGMENT3 0x2C2 1186 #define ES01_2C3_VALID_PIXEL_PARAMETER_OF_SEGMENT4 0x2C3 1187 #define ES01_2C4_VALID_PIXEL_PARAMETER_OF_SEGMENT5 0x2C4 1188 #define ES01_2C5_VALID_PIXEL_PARAMETER_OF_SEGMENT6 0x2C5 1189 #define ES01_2C6_VALID_PIXEL_PARAMETER_OF_SEGMENT7 0x2C6 1190 #define ES01_2C7_VALID_PIXEL_PARAMETER_OF_SEGMENT8 0x2C7 1191 #define ES01_2C8_VALID_PIXEL_PARAMETER_OF_SEGMENT9 0x2C8 1192 #define ES01_2C9_VALID_PIXEL_PARAMETER_OF_SEGMENT10 0x2C9 1193 #define ES01_2CA_VALID_PIXEL_PARAMETER_OF_SEGMENT11 0x2CA 1194 #define ES01_2CB_VALID_PIXEL_PARAMETER_OF_SEGMENT12 0x2CB 1195 #define ES01_2CC_VALID_PIXEL_PARAMETER_OF_SEGMENT13 0x2CC 1196 #define ES01_2CD_VALID_PIXEL_PARAMETER_OF_SEGMENT14 0x2CD 1197 #define ES01_2CE_VALID_PIXEL_PARAMETER_OF_SEGMENT15 0x2CE 1198 #define ES01_2CF_VALID_PIXEL_PARAMETER_OF_SEGMENT16 0x2CF 1199 1200 /* forward declarations */ 1201 static SANE_Status OpenScanChip (PAsic chip); 1202 static SANE_Status CloseScanChip (PAsic chip); 1203 static SANE_Status SafeInitialChip (PAsic chip); 1204 static SANE_Status DRAM_Test (PAsic chip); 1205 #if SANE_UNUSED 1206 static SANE_Status SetPowerSave (PAsic chip); 1207 #endif 1208 static SANE_Status SetLineTimeAndExposure (PAsic chip); 1209 static SANE_Status CCDTiming (PAsic chip); 1210 static SANE_Status IsCarriageHome (PAsic chip, SANE_Bool * LampHome, SANE_Bool * TAHome); 1211 static SANE_Status InitTiming (PAsic chip); 1212 static SANE_Status GetChipStatus (PAsic chip, SANE_Byte Selector, SANE_Byte * ChipStatus); 1213 static SANE_Status SetAFEGainOffset (PAsic chip); 1214 static SANE_Status SetLEDTime (PAsic chip); 1215 static SANE_Status SetScanMode (PAsic chip, SANE_Byte bScanBits); 1216 static SANE_Status SetPackAddress (PAsic chip, unsigned short wXResolution, 1217 unsigned short wWidth, unsigned short wX, double XRatioAdderDouble, 1218 double XRatioTypeDouble, 1219 SANE_Byte byClear_Pulse_Width, 1220 unsigned short * PValidPixelNumber); 1221 static SANE_Status SetExtraSetting (PAsic chip, unsigned short wXResolution, 1222 unsigned short wCCD_PixelNumber, SANE_Bool isCaribrate); 1223 1224 1225 /* Forward declarations */ 1226 1227 static SANE_Status Mustek_SendData (PAsic chip, unsigned short reg, SANE_Byte data); 1228 static SANE_Status Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data); 1229 static SANE_Status Mustek_ReceiveData (PAsic chip, SANE_Byte * reg); 1230 static SANE_Status Mustek_WriteAddressLineForRegister (PAsic chip, SANE_Byte x); 1231 static SANE_Status WriteIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, 1232 unsigned short wLength, SANE_Byte * lpbuf); 1233 static SANE_Status ReadIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, 1234 unsigned short wLength, SANE_Byte * lpbuf); 1235 static SANE_Status Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata); 1236 static SANE_Status Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata); 1237 static SANE_Status Mustek_ClearFIFO (PAsic chip); 1238 static SANE_Status SetRWSize (PAsic chip, SANE_Byte ReadWrite, unsigned int size); 1239 1240 /* Open Scanner by Scanner Name and return Chip Information */ 1241 static SANE_Status Asic_Open (PAsic chip, SANE_Byte *pDeviceName); 1242 /* Close Scanner */ 1243 static SANE_Status Asic_Close (PAsic chip); 1244 #if SANE_UNUSED 1245 /* Release Scanner Resource */ 1246 static SANE_Status Asic_Release (PAsic chip); 1247 #endif 1248 /* Initialize Scanner Parameters */ 1249 static SANE_Status Asic_Initialize (PAsic chip); 1250 /* Set Scan Window */ 1251 static SANE_Status Asic_SetWindow (PAsic chip, SANE_Byte bScanBits, 1252 unsigned short wXResolution, unsigned short wYResolution, 1253 unsigned short wX, unsigned short wY, unsigned short wWidth, unsigned short wLength); 1254 /* Turn Lamp ON or OFF */ 1255 static SANE_Status Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn); 1256 /* Turn TA ON or OFF */ 1257 static SANE_Status Asic_TurnTA (PAsic chip, SANE_Bool isTAOn); 1258 /* Reset some parameter of asic */ 1259 static SANE_Status Asic_Reset (PAsic chip); 1260 /* Set scan source */ 1261 static SANE_Status Asic_SetSource (PAsic chip, LIGHTSOURCE lsLightSource); 1262 /* Start scanner to scan */ 1263 static SANE_Status Asic_ScanStart (PAsic chip); 1264 /* Stop scanner to scan */ 1265 static SANE_Status Asic_ScanStop (PAsic chip); 1266 /* Read One Scan Line When Scanning */ 1267 static SANE_Status Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount); 1268 #if SANE_UNUSED 1269 /* To Check Hard Key */ 1270 static SANE_Status Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key); 1271 #endif 1272 /* To Check if TA id connected */ 1273 static SANE_Status Asic_IsTAConnected (PAsic chip, SANE_Bool *hasTA); 1274 #if SANE_UNUSED 1275 /* Download GammaTable to Scanner */ 1276 static SANE_Status Asic_DownloadGammaTable (PAsic chip, void * lpBuffer); 1277 #endif 1278 /* For AdjustAD Calculate Scanner*/ 1279 static SANE_Status Asic_ReadCalibrationData (PAsic chip, void * pBuffer, 1280 unsigned int dwXferBytes, SANE_Byte bScanBits); 1281 /* Set motor move or not */ 1282 static SANE_Status Asic_SetMotorType (PAsic chip, SANE_Bool isMotorMove, SANE_Bool isUniformSpeed); 1283 /* Move Motor Forward or Backward */ 1284 static SANE_Status Asic_MotorMove (PAsic chip, SANE_Bool isForward, unsigned int dwTotalSteps); 1285 /* Move Motor to Home. */ 1286 /* If isTA is TRUE, move TA to home, else move Lamp to home */ 1287 static SANE_Status Asic_CarriageHome (PAsic chip, SANE_Bool isTA); 1288 /* For ShadingTable */ 1289 static SANE_Status Asic_SetShadingTable (PAsic chip, unsigned short * lpWhiteShading, 1290 unsigned short * lpDarkShading, 1291 unsigned short wXResolution, unsigned short wWidth, unsigned short wX); 1292 /* Wait motor move to home. isTA no used */ 1293 static SANE_Status Asic_WaitCarriageHome (PAsic chip, SANE_Bool isTA); 1294 /* Wait until asic idle */ 1295 static SANE_Status Asic_WaitUnitReady (PAsic chip); 1296 /* Set Scan Parameter to Scanner */ 1297 static SANE_Status Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, 1298 unsigned short wYResolution, unsigned short wX, unsigned short wY, 1299 unsigned short wWidth, unsigned short wLength, SANE_Bool isShading); 1300 /* Set AFE Parameter to Scanner */ 1301 static SANE_Status Asic_SetAFEGainOffset (PAsic chip); 1302 1303 /* ---------------------- asic motor defines -------------------------- */ 1304 1305 1306 #define ACTION_MODE_ACCDEC_MOVE 0 1307 #define ACTION_MODE_UNIFORM_SPEED_MOVE 1 1308 1309 1310 typedef struct tagMOTOR_CURRENT_AND_PHASE 1311 { 1312 SANE_Byte MoveType; 1313 SANE_Byte FillPhase; 1314 SANE_Byte MotorDriverIs3967; 1315 SANE_Byte MotorCurrentTableA[32]; 1316 SANE_Byte MotorCurrentTableB[32]; 1317 SANE_Byte MotorPhaseTable[32]; 1318 } MOTOR_CURRENT_AND_PHASE, LPMOTOR_CURRENT_AND_PHASE; 1319 1320 typedef struct tagLLF_RAMACCESS 1321 { 1322 SANE_Byte ReadWrite; 1323 SANE_Byte IsOnChipGamma; 1324 unsigned short LoStartAddress; 1325 unsigned short HiStartAddress; 1326 int RwSize; 1327 SANE_Byte DramDelayTime; 1328 SANE_Byte *BufferPtr; 1329 } LLF_RAMACCESS; 1330 1331 typedef struct tagLLF_MOTOR_CURRENT_AND_PHASE 1332 { 1333 SANE_Byte MoveType; 1334 SANE_Byte FillPhase; 1335 SANE_Byte MotorDriverIs3967; 1336 SANE_Byte MotorCurrentTableA[32]; 1337 SANE_Byte MotorCurrentTableB[32]; 1338 SANE_Byte MotorPhaseTable[32]; 1339 } LLF_MOTOR_CURRENT_AND_PHASE; 1340 1341 typedef struct tagLLF_CALCULATEMOTORTABLE 1342 { 1343 unsigned short StartSpeed; 1344 unsigned short EndSpeed; 1345 unsigned short AccStepBeforeScan; 1346 SANE_Byte DecStepAfterScan; 1347 unsigned short * lpMotorTable; 1348 } LLF_CALCULATEMOTORTABLE; 1349 1350 typedef struct tagLLF_SETMOTORTABLE 1351 { 1352 unsigned int TableSize; 1353 SANE_Byte MotorTableAddress; 1354 unsigned short *MotorTablePtr; 1355 } LLF_SETMOTORTABLE; 1356 1357 typedef struct tagLLF_MOTORMOVE 1358 { 1359 SANE_Byte ActionMode; /* 0: AccDec Mode, 1: Uniform Speed Mode, 2: Test Mode */ 1360 SANE_Byte ActionType; /* 0: Forward, 1: Backward, 2:Back To Home */ 1361 SANE_Byte MotorSelect; /* 0: Motor 0 only, 1: Motor 1 only, 2: Motor 0 & 1 */ 1362 SANE_Byte HomeSensorSelect; /* 0: Sensor 0, 1: Sensor 1, 2: Sensor 0 & 1, 3:Invert Sensor 1 */ 1363 unsigned short FixMoveSpeed; 1364 unsigned int FixMoveSteps; /* 3 bytes */ 1365 SANE_Byte MotorSpeedUnit; 1366 SANE_Byte MotorSyncUnit; 1367 unsigned short AccStep; /*Max = 511 */ 1368 SANE_Byte DecStep; /* Max = 255 */ 1369 SANE_Byte MotorMoveUnit; 1370 SANE_Byte WaitOrNoWait; /* 0: no wait, 1: wait */ 1371 SANE_Byte Lamp0PwmFreq; /* Lamp0 PWM freq */ 1372 SANE_Byte Lamp1PwmFreq; /* Lamp1 PWM freq */ 1373 1374 unsigned short wForwardSteps; 1375 unsigned short wScanAccSteps; 1376 SANE_Byte bScanDecSteps; 1377 unsigned short wFixScanSteps; 1378 unsigned short wScanBackTrackingSteps; 1379 unsigned short wScanRestartSteps; 1380 unsigned short wScanBackHomeExtSteps; 1381 } LLF_MOTORMOVE; 1382 1383 static SANE_Status CalculateMotorTable (LLF_CALCULATEMOTORTABLE * 1384 lpCalculateMotorTable, unsigned short wYResolution); 1385 static SANE_Status LLFCalculateMotorTable (LLF_CALCULATEMOTORTABLE * 1386 lpCalculateMotorTable); 1387 static SANE_Status LLFSetMotorCurrentAndPhase (PAsic chip, 1388 LLF_MOTOR_CURRENT_AND_PHASE * 1389 MotorCurrentAndPhase); 1390 static SANE_Status SetMotorStepTable (PAsic chip, LLF_MOTORMOVE * MotorStepsTable, 1391 unsigned short wStartY, unsigned int dwScanImageSteps, 1392 unsigned short wYResolution); 1393 static SANE_Status LLFSetMotorTable (PAsic chip, 1394 LLF_SETMOTORTABLE * LLF_SetMotorTable); 1395 static SANE_Status SetMotorCurrent (PAsic chip, unsigned short dwMotorSpeed, 1396 LLF_MOTOR_CURRENT_AND_PHASE * CurrentPhase); 1397 static SANE_Status LLFMotorMove (PAsic chip, LLF_MOTORMOVE * LLF_MotorMove); 1398 #if SANE_UNUSED 1399 static SANE_Status LLFStopMotorMove (PAsic chip); 1400 #endif 1401 static SANE_Status LLFSetRamAddress (PAsic chip, unsigned int dwStartAddr, 1402 unsigned int dwEndAddr, SANE_Byte byAccessTarget); 1403 static SANE_Status LLFRamAccess (PAsic chip, LLF_RAMACCESS * RamAccess); 1404 static SANE_Status MotorBackHome (PAsic chip, SANE_Byte WaitOrNoWait); 1405 1406 #endif 1407