1141cc406Sopenharmony_ci/* @file plustek-pp_genericio.c 2141cc406Sopenharmony_ci * @brief all i/o functions 3141cc406Sopenharmony_ci * 4141cc406Sopenharmony_ci * based on sources acquired from Plustek Inc. 5141cc406Sopenharmony_ci * Copyright (C) 1998 Plustek Inc. 6141cc406Sopenharmony_ci * Copyright (C) 2000-2004 Gerhard Jaeger <gerhard@gjaeger.de> 7141cc406Sopenharmony_ci * also based on the work done by Rick Bronson 8141cc406Sopenharmony_ci * 9141cc406Sopenharmony_ci * History: 10141cc406Sopenharmony_ci * - 0.30 - initial version 11141cc406Sopenharmony_ci * - 0.31 - moved ioP96ReadScannerImageData and ioP98ReadScannerImageData 12141cc406Sopenharmony_ci * into this file 13141cc406Sopenharmony_ci * - added SPP-read functions 14141cc406Sopenharmony_ci * - 0.32 - changes in function ioControlLampOnOff() 15141cc406Sopenharmony_ci * - made IOReadingImage a local function -> ioP98ReadingImage() 16141cc406Sopenharmony_ci * - rewritten function ioP96ReadScannerImageData() 17141cc406Sopenharmony_ci * - moved function IOSetStartStopRegister to p9636.c 18141cc406Sopenharmony_ci * - 0.33 - added debug messages to IOPutOnAllRegisters 19141cc406Sopenharmony_ci * - fixed a bug in ioP96InitialSetCurrentSpeed 20141cc406Sopenharmony_ci * - 0.34 - no changes 21141cc406Sopenharmony_ci * - 0.35 - no changes 22141cc406Sopenharmony_ci * - 0.36 - removed some warning conditions 23141cc406Sopenharmony_ci * - 0.37 - moved functions IOSPPWrite(), IODataToScanner(), IODataToRegister(), 24141cc406Sopenharmony_ci * IODataFromRegister() to io.c 25141cc406Sopenharmony_ci * - moved the data read functions to io.c 26141cc406Sopenharmony_ci * - renamed IOInitialize to IOFuncInitialize 27141cc406Sopenharmony_ci * - 0.38 - moved some functions to io.c 28141cc406Sopenharmony_ci * - added P12 stuff 29141cc406Sopenharmony_ci * - 0.39 - no changes 30141cc406Sopenharmony_ci * - 0.40 - no changes 31141cc406Sopenharmony_ci * - 0.41 - no changes 32141cc406Sopenharmony_ci * - 0.42 - changed include names 33141cc406Sopenharmony_ci * - 0.43 - fixed a problem in ioP96InitialSetCurrentSpeed(), for COLOR_BW 34141cc406Sopenharmony_ci * at least, used the setting for A3I 35141cc406Sopenharmony_ci * . 36141cc406Sopenharmony_ci * <hr> 37141cc406Sopenharmony_ci * This file is part of the SANE package. 38141cc406Sopenharmony_ci * 39141cc406Sopenharmony_ci * This program is free software; you can redistribute it and/or 40141cc406Sopenharmony_ci * modify it under the terms of the GNU General Public License as 41141cc406Sopenharmony_ci * published by the Free Software Foundation; either version 2 of the 42141cc406Sopenharmony_ci * License, or (at your option) any later version. 43141cc406Sopenharmony_ci * 44141cc406Sopenharmony_ci * This program is distributed in the hope that it will be useful, but 45141cc406Sopenharmony_ci * WITHOUT ANY WARRANTY; without even the implied warranty of 46141cc406Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 47141cc406Sopenharmony_ci * General Public License for more details. 48141cc406Sopenharmony_ci * 49141cc406Sopenharmony_ci * You should have received a copy of the GNU General Public License 50141cc406Sopenharmony_ci * along with this program. If not, see <https://www.gnu.org/licenses/>. 51141cc406Sopenharmony_ci * 52141cc406Sopenharmony_ci * As a special exception, the authors of SANE give permission for 53141cc406Sopenharmony_ci * additional uses of the libraries contained in this release of SANE. 54141cc406Sopenharmony_ci * 55141cc406Sopenharmony_ci * The exception is that, if you link a SANE library with other files 56141cc406Sopenharmony_ci * to produce an executable, this does not by itself cause the 57141cc406Sopenharmony_ci * resulting executable to be covered by the GNU General Public 58141cc406Sopenharmony_ci * License. Your use of that executable is in no way restricted on 59141cc406Sopenharmony_ci * account of linking the SANE library code into it. 60141cc406Sopenharmony_ci * 61141cc406Sopenharmony_ci * This exception does not, however, invalidate any other reasons why 62141cc406Sopenharmony_ci * the executable file might be covered by the GNU General Public 63141cc406Sopenharmony_ci * License. 64141cc406Sopenharmony_ci * 65141cc406Sopenharmony_ci * If you submit changes to SANE to the maintainers to be included in 66141cc406Sopenharmony_ci * a subsequent release, you agree by submitting the changes that 67141cc406Sopenharmony_ci * those changes may be distributed with this exception intact. 68141cc406Sopenharmony_ci * 69141cc406Sopenharmony_ci * If you write modifications of your own for SANE, it is your choice 70141cc406Sopenharmony_ci * whether to permit this exception to apply to your modifications. 71141cc406Sopenharmony_ci * If you do not wish that, delete this exception notice. 72141cc406Sopenharmony_ci * <hr> 73141cc406Sopenharmony_ci */ 74141cc406Sopenharmony_ci#include "plustek-pp_scan.h" 75141cc406Sopenharmony_ci 76141cc406Sopenharmony_ci/*************************** local vars **************************************/ 77141cc406Sopenharmony_ci 78141cc406Sopenharmony_ci/* WORK COMMENT THIS */ 79141cc406Sopenharmony_citypedef void (*pFnSpeed_Set)(pScanData); 80141cc406Sopenharmony_ci 81141cc406Sopenharmony_cistatic ModeTypeVar a_FilmSettings[18] = { 82141cc406Sopenharmony_ci /* SppNegFilmPos */ 83141cc406Sopenharmony_ci {0xa0, 1782, 96, _QuarterStep, 0, 0}, 84141cc406Sopenharmony_ci {0xb7, 1782, 96, _QuarterStep, 0, 0}, 85141cc406Sopenharmony_ci {0xb7, 1782, 96, _QuarterStep, 0, 0}, 86141cc406Sopenharmony_ci /* BppNegFilmPos */ 87141cc406Sopenharmony_ci {0xa9, 1782, 96, _QuarterStep, 0, 0}, 88141cc406Sopenharmony_ci {0xbf, 1782, 96, _QuarterStep, 0, 0}, 89141cc406Sopenharmony_ci {0xbf, 1782, 96, _QuarterStep, 0, 0}, 90141cc406Sopenharmony_ci /* EppNegFilmPos */ 91141cc406Sopenharmony_ci {0x95, 1782, 96, _QuarterStep, 0, 0}, 92141cc406Sopenharmony_ci {0xa6, 1782, 96, _QuarterStep, 0, 0}, 93141cc406Sopenharmony_ci {0xa6, 1782, 96, _QuarterStep, 0, 0}, 94141cc406Sopenharmony_ci /* SppPosFilmPos */ 95141cc406Sopenharmony_ci {0x50, 1782, 96, _QuarterStep, 0, 0}, 96141cc406Sopenharmony_ci {0x67, 1782, 96, _QuarterStep, 0, 0}, 97141cc406Sopenharmony_ci {0x67, 1782, 96, _QuarterStep, 0, 0}, 98141cc406Sopenharmony_ci /* BppPosFilmPos */ 99141cc406Sopenharmony_ci {0x59, 1782, 96, _QuarterStep, 0, 0}, 100141cc406Sopenharmony_ci {0x6f, 1782, 96, _QuarterStep, 0, 0}, 101141cc406Sopenharmony_ci {0x6f, 1782, 96, _QuarterStep, 0, 0}, 102141cc406Sopenharmony_ci /* EppPosFilmPos */ 103141cc406Sopenharmony_ci {0x45, 1782, 96, _QuarterStep, 0, 0}, 104141cc406Sopenharmony_ci {0x56, 1782, 96, _QuarterStep, 0, 0}, 105141cc406Sopenharmony_ci {0x56, 1782, 96, _QuarterStep, 0, 0} 106141cc406Sopenharmony_ci}; 107141cc406Sopenharmony_ci 108141cc406Sopenharmony_cistatic ModeTypeVar a_BwSettings[12] = { 109141cc406Sopenharmony_ci {_Home_BE75, 890, 96, _HalfStep, 2, 1}, 110141cc406Sopenharmony_ci {_Home_BE150, 1780, 88, _QuarterStep, 2, 0}, 111141cc406Sopenharmony_ci {_Home_BE300, 3542, 96, _QuarterStep, 2, 0}, 112141cc406Sopenharmony_ci {_Home_BE600, 7070, 96, _QuarterStep, 2, 0}, 113141cc406Sopenharmony_ci {_Home_BB75, 890, 96, _HalfStep, 2, 1}, 114141cc406Sopenharmony_ci {_Home_BB150, 1780, 88, _QuarterStep, 2, 0}, 115141cc406Sopenharmony_ci {_Home_BB300, 3542, 96, _QuarterStep, 2, 0}, 116141cc406Sopenharmony_ci {_Home_BB600, 7070, 96, _QuarterStep, 2, 0}, 117141cc406Sopenharmony_ci {_Home_BS75, 890, 96, _HalfStep, 2, 1}, 118141cc406Sopenharmony_ci {_Home_BS150, 1780, 88, _QuarterStep, 2, 0}, 119141cc406Sopenharmony_ci {_Home_BS300, 3542, 96, _QuarterStep, 2, 0}, 120141cc406Sopenharmony_ci {_Home_BS600, 7070, 96, _QuarterStep, 2, 0} 121141cc406Sopenharmony_ci}; 122141cc406Sopenharmony_ci 123141cc406Sopenharmony_cistatic ModeTypeVar a_GraySettings[12] = { 124141cc406Sopenharmony_ci {_Home_GE75, 890, 96, _HalfStep, 2, 0}, 125141cc406Sopenharmony_ci {_Home_GE150, 1780, 88, _QuarterStep, 2, 0}, 126141cc406Sopenharmony_ci {_Home_GE300, 3542, 88, _QuarterStep, 2, 0}, 127141cc406Sopenharmony_ci {_Home_GE600, 7070, 88, _QuarterStep, 2, 0}, 128141cc406Sopenharmony_ci {_Home_GB75, 890, 96, _HalfStep, 2, 0}, 129141cc406Sopenharmony_ci {_Home_GB150, 1780, 88, _QuarterStep, 2, 0}, 130141cc406Sopenharmony_ci {_Home_GB300, 3542, 88, _QuarterStep, 2, 0}, 131141cc406Sopenharmony_ci {_Home_GB600, 7070, 88, _QuarterStep, 2, 0}, 132141cc406Sopenharmony_ci {_Home_GS75, 890, 96, _HalfStep, 2, 0}, 133141cc406Sopenharmony_ci {_Home_GS150, 1782, 96, _QuarterStep, 2, 0}, 134141cc406Sopenharmony_ci {_Home_GS300, 3549, 88, _QuarterStep, 2, 0}, 135141cc406Sopenharmony_ci {_Home_GS600, 7070, 88, _QuarterStep, 2, 0} 136141cc406Sopenharmony_ci}; 137141cc406Sopenharmony_ci 138141cc406Sopenharmony_cistatic ModeTypeVar a_ColorSettings[15] = { 139141cc406Sopenharmony_ci {_Home_CE50, 720, 60, _HalfStep, 1, 1}, 140141cc406Sopenharmony_ci {_Home_CE100, 1782, 48, _QuarterStep, 1, 0}, 141141cc406Sopenharmony_ci {_Home_CE150, 1782, 88, _QuarterStep, 0, 0}, 142141cc406Sopenharmony_ci {_Home_CE300, 3549, 96, _QuarterStep, 0, 0}, 143141cc406Sopenharmony_ci {_Home_CE600, 7082, 96, _QuarterStep, 0, 0}, 144141cc406Sopenharmony_ci {_Home_CB50, 720, 120, _QuarterStep, 0, 1}, 145141cc406Sopenharmony_ci {_Home_CB100, 1782, 96, _QuarterStep, 0, 0}, 146141cc406Sopenharmony_ci {_Home_CB150, 1782, 96, _QuarterStep, 0, 0}, 147141cc406Sopenharmony_ci {_Home_CB300, 3549, 96, _QuarterStep, 0, 0}, 148141cc406Sopenharmony_ci {_Home_CB600, 7082, 96, _QuarterStep, 0, 0}, 149141cc406Sopenharmony_ci {_Home_CS50, 720, 120, _QuarterStep, 0, 1}, 150141cc406Sopenharmony_ci {_Home_CS100, 1782, 96, _QuarterStep, 0, 0}, 151141cc406Sopenharmony_ci {_Home_CS150, 1782, 96, _QuarterStep, 0, 0}, 152141cc406Sopenharmony_ci {_Home_CS300, 3549, 96, _QuarterStep, 0, 0}, 153141cc406Sopenharmony_ci {_Home_CS600, 7082, 96, _QuarterStep, 0, 0} 154141cc406Sopenharmony_ci}; 155141cc406Sopenharmony_ci 156141cc406Sopenharmony_cistatic DiffModeVar a_tabDiffParam[] ={ 157141cc406Sopenharmony_ci /* BPP/EPP B/W */ 158141cc406Sopenharmony_ci {0, 1, 11}, /* Bpp/Epp B/W, Dpi <= 150 ;(0) */ 159141cc406Sopenharmony_ci {0, 1, 24}, /* Bpp/Epp B/W, Dpi <= 300 ;(1) */ 160141cc406Sopenharmony_ci {0, 1, 48}, /* Bpp/Epp B/W, Dpi > 300 ;(2) */ 161141cc406Sopenharmony_ci /* SPP B/W */ 162141cc406Sopenharmony_ci {0, 1, 11}, /* Spp B/W, Dpi <= 150 ;(3) */ 163141cc406Sopenharmony_ci {0, 1, 24}, /* Spp B/W, Dpi <= 300 ;(4) */ 164141cc406Sopenharmony_ci {0, 1, 48}, /* Spp B/W, Dpi > 300 ;(5) */ 165141cc406Sopenharmony_ci /* EPP Gray */ 166141cc406Sopenharmony_ci /* The difference for this DPI: 167141cc406Sopenharmony_ci * if pixels <= | 3000 | Others 168141cc406Sopenharmony_ci * --------------------+------+------------- 169141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 170141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 171141cc406Sopenharmony_ci * VarStepSpeed | 44 | 88 172141cc406Sopenharmony_ci */ 173141cc406Sopenharmony_ci {0, 1, 12}, /* Epp Gray, Dpi <= 150 ;(6) */ 174141cc406Sopenharmony_ci {1, 2, 80}, /* Epp Gray, Dpi <= 300 ;(7) */ 175141cc406Sopenharmony_ci {0, 1, 80}, /* Epp Gray, Dpi > 300, Px <= 3000 ;(8) */ 176141cc406Sopenharmony_ci {0, 1, 80}, /* Epp Gray, Dpi > 300, Px > 3000 ;(9) */ 177141cc406Sopenharmony_ci 178141cc406Sopenharmony_ci /* BPP Gray */ 179141cc406Sopenharmony_ci {0, 1, 11}, /* Bpp Gray, Dpi <= 150 ; 10 */ 180141cc406Sopenharmony_ci /* The difference for this DPI: 181141cc406Sopenharmony_ci * if pixels <= | 1600 | Others 182141cc406Sopenharmony_ci * --------------------+------+------------- 183141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 184141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 185141cc406Sopenharmony_ci * VarStepSpeed | 24 | 48 186141cc406Sopenharmony_ci */ 187141cc406Sopenharmony_ci {0, 1, 24}, /* Bpp Gray, Dpi <= 300, Px <= 1600 ; 11 */ 188141cc406Sopenharmony_ci {1, 2, 48}, /* Bpp Gray, Dpi <= 300, Px > 1600 ; 12 */ 189141cc406Sopenharmony_ci /* The difference for this DPI: 190141cc406Sopenharmony_ci * if pixels <= | 1600 | 3200 | Others 191141cc406Sopenharmony_ci * --------------------+-----+-------+---------------------- 192141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 2 193141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 194141cc406Sopenharmony_ci * VarStepSpeed | 44 | 88 | 88 195141cc406Sopenharmony_ci */ 196141cc406Sopenharmony_ci {0, 1, 44}, /* Bpp Gray, Dpi > 300, Px <= 1600 ; 13 */ 197141cc406Sopenharmony_ci {1, 2, 88}, /* Bpp Gray, Dpi > 300, Px <= 3200 ; 14 */ 198141cc406Sopenharmony_ci {2, 4, 88}, /* Bpp Gray, Dpi > 300, Px > 3200 ; 15 */ 199141cc406Sopenharmony_ci /* SPP Gray */ 200141cc406Sopenharmony_ci /* The difference for this DPI: 201141cc406Sopenharmony_ci * if pixels <= | 800 | Others 202141cc406Sopenharmony_ci * --------------------+-----+------------- 203141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 204141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 205141cc406Sopenharmony_ci * VarStepSpeed | 12 | 24 206141cc406Sopenharmony_ci */ 207141cc406Sopenharmony_ci {0, 1, 12}, /* Spp Gray, Dpi <= 150, Px <= 800 ; 16 */ 208141cc406Sopenharmony_ci {1, 2, 24}, /* Spp Gray, Dpi <= 150, Px > 800 ; 17 */ 209141cc406Sopenharmony_ci /* The difference for this DPI: 210141cc406Sopenharmony_ci * if pixels <= | 800 | 1600 | Others 211141cc406Sopenharmony_ci * --------------------+-----+-------+---------------------- 212141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 1 213141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 214141cc406Sopenharmony_ci * VarStepSpeed | 22 | 88 | 88 215141cc406Sopenharmony_ci */ 216141cc406Sopenharmony_ci {0, 1, 22}, /* Spp Gray, Dpi <= 300, Px <= 800 ; 18 */ 217141cc406Sopenharmony_ci {1, 2, 88}, /* Spp Gray, Dpi <= 300, Px <= 1600 ; 19 */ 218141cc406Sopenharmony_ci {1, 4, 88}, /* Spp Gray, Dpi <= 300, Px > 1600 ; 20 */ 219141cc406Sopenharmony_ci /* The difference for this DPI: 220141cc406Sopenharmony_ci * if pixels <= | 800 | 1600 | 3200 | Others 221141cc406Sopenharmony_ci * --------------------+-----+------+------+--------------- 222141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 2 | 3 223141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 | 6 224141cc406Sopenharmony_ci * VarStepSpeed | 44 | 88 | 88 | 88 225141cc406Sopenharmony_ci */ 226141cc406Sopenharmony_ci {0, 1, 44}, /* Spp Gray, Dpi > 300, Px <= 800 ; 21 */ 227141cc406Sopenharmony_ci {1, 2, 88}, /* Spp Gray, Dpi > 300, Px <= 1600 ; 22 */ 228141cc406Sopenharmony_ci {2, 4, 88}, /* Spp Gray, Dpi > 300, Px <= 3200 ; 23 */ 229141cc406Sopenharmony_ci {3, 6, 88}, /* Spp Gray, Dpi > 300, Px > 3200 ; 24 */ 230141cc406Sopenharmony_ci /* EPP Color */ 231141cc406Sopenharmony_ci {0, 1, 6}, /* Epp Color, Dpi <= 60/100 ; 25 */ 232141cc406Sopenharmony_ci {0, 1, 11}, /* Epp Color, Dpi <= 150 ; 26 */ 233141cc406Sopenharmony_ci /* The difference for this DPI: 234141cc406Sopenharmony_ci * if pixels <= | 1200 | Others 235141cc406Sopenharmony_ci * --------------------+------+------------- 236141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 237141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 238141cc406Sopenharmony_ci * VarStepSpeed | 24 | 48 239141cc406Sopenharmony_ci */ 240141cc406Sopenharmony_ci {0, 1, 24}, /* Epp Color, Dpi <= 300, Px <= 1400 ; 27 */ 241141cc406Sopenharmony_ci {1, 2, 48}, /* Epp Color, Dpi <= 300, Px > 1400 ; 28 */ 242141cc406Sopenharmony_ci /* The difference for this DPI: 243141cc406Sopenharmony_ci * if pixels <= | 1400 | 2800 | 4000 | Others 244141cc406Sopenharmony_ci * --------------------+------+------+------+--------------- 245141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 2 | 3 246141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 | 6 247141cc406Sopenharmony_ci * VarStepSpeed | 48 | 96 | 88 | 88 248141cc406Sopenharmony_ci * VarExposureTime | 96 | 96 | 88 | 88 249141cc406Sopenharmony_ci */ 250141cc406Sopenharmony_ci {0, 1, 48}, /* Epp Color, Dpi > 300, Px <= 1400 ; 29 */ 251141cc406Sopenharmony_ci {1, 2, 96}, /* Epp Color, Dpi > 300, Px <= 2800 ; 30 */ 252141cc406Sopenharmony_ci {2, 4, 88}, /* Epp Color, Dpi > 300, Px <= 4000 ; 31 */ 253141cc406Sopenharmony_ci {4, 8, 88}, /* Epp Color, Dpi > 300, Px > 4000 ; 32 */ 254141cc406Sopenharmony_ci /* BPP Color */ 255141cc406Sopenharmony_ci {0, 1, 6}, /* Bpp/Spp Color, Dpi <= 60 ; 33 */ 256141cc406Sopenharmony_ci {0, 1, 12}, /* Bpp/Spp Color, Dpi <= 100 ; 34 */ 257141cc406Sopenharmony_ci /* if pixels <= | 800 | Others 258141cc406Sopenharmony_ci * --------------------+-----+------------- 259141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 260141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 261141cc406Sopenharmony_ci * VarStepSpeed | 12 | 24 262141cc406Sopenharmony_ci */ 263141cc406Sopenharmony_ci {0, 1, 12}, /* Bpp/Spp Color, Dpi <= 150, Px <= 800 ; 35 */ 264141cc406Sopenharmony_ci {1, 2, 24}, /* Bpp/Spp Color, Dpi <= 150, Px > 800 ; 36 */ 265141cc406Sopenharmony_ci /* The difference for this DPI: 266141cc406Sopenharmony_ci * if pixels <= | 800 | 1600 | Others 267141cc406Sopenharmony_ci * --------------------+-----+-------+---------------------- 268141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 1 269141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 270141cc406Sopenharmony_ci * VarStepSpeed | 24 | 48 | 96 271141cc406Sopenharmony_ci */ 272141cc406Sopenharmony_ci {0, 1, 24}, /* Bpp Color, Dpi <= 300, Px <= 800 ; 37 */ 273141cc406Sopenharmony_ci {1, 2, 48}, /* Bpp Color, Dpi <= 300, Px <= 1600 ; 38 */ 274141cc406Sopenharmony_ci {1, 4, 96}, /* Bpp Color, Dpi <= 300, Px > 1600 ; 39 */ 275141cc406Sopenharmony_ci /* The difference for this DPI: 276141cc406Sopenharmony_ci * if pixels <= | 800 | 1600 | 3200 | Others 277141cc406Sopenharmony_ci * --------------------+-----+------+------+--------------- 278141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 2 | 4 279141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 | 8 280141cc406Sopenharmony_ci * VarStepSpeed | 48 | 96 | 96 | 96 281141cc406Sopenharmony_ci */ 282141cc406Sopenharmony_ci {0, 1, 48}, /* Bpp Color, Dpi > 300, Px <= 800 ; 40 */ 283141cc406Sopenharmony_ci {1, 2, 48}, /* Bpp Color, Dpi > 300, Px <= 1600 ; 41 */ 284141cc406Sopenharmony_ci {2, 4, 96}, /* Bpp Color, Dpi > 300, Px <= 3200 ; 42 */ 285141cc406Sopenharmony_ci {4, 8, 96}, /* Bpp Color, Dpi > 300, Px > 3200 ; 43 */ 286141cc406Sopenharmony_ci /* SPP Color */ 287141cc406Sopenharmony_ci /* The difference for this DPI: 288141cc406Sopenharmony_ci * if pixels <= | 500 | 1000 | 2000 | Others 289141cc406Sopenharmony_ci * --------------------+-----+------+------+--------------- 290141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 1 | 2 291141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 | 8 292141cc406Sopenharmony_ci * VarStepSpeed | 24 | 48 | 96 | 96 293141cc406Sopenharmony_ci */ 294141cc406Sopenharmony_ci {0, 1, 24}, /* Spp Color, Dpi <= 300, Px <= 500 ; 44 */ 295141cc406Sopenharmony_ci {1, 2, 48}, /* Spp Color, Dpi <= 300, Px <= 1000 ; 45 */ 296141cc406Sopenharmony_ci {1, 4, 96}, /* Spp Color, Dpi <= 300, Px <= 2000 ; 46 */ 297141cc406Sopenharmony_ci {2, 8, 96}, /* Spp Color, Dpi <= 300, Px > 2000 ; 47 */ 298141cc406Sopenharmony_ci /* The difference for this DPI: 299141cc406Sopenharmony_ci * if pixels <= | 500 | 1000 | 2000 | 4000 | Others 300141cc406Sopenharmony_ci * --------------------+-----+------+------+------+-------- 301141cc406Sopenharmony_ci * VarFullStateSpeed | 0 | 1 | 2 | 4 | 5 302141cc406Sopenharmony_ci * VarCurrentSpeed | 1 | 2 | 4 | 8 | 10 303141cc406Sopenharmony_ci * VarStepSpeed | 48 | 96 | 96 | 96 | 96 304141cc406Sopenharmony_ci */ 305141cc406Sopenharmony_ci {0, 1, 48}, /* Spp Color, Dpi > 300, Px <= 500 ; 48 */ 306141cc406Sopenharmony_ci {1, 2, 96}, /* Spp Color, Dpi > 300, Px <= 1000 ; 49 */ 307141cc406Sopenharmony_ci {2, 4, 96}, /* Spp Color, Dpi > 300, Px <= 2000 ; 50 */ 308141cc406Sopenharmony_ci {4, 8, 96}, /* Spp Color, Dpi > 300, Px <= 4000 ; 51 */ 309141cc406Sopenharmony_ci {5, 10, 96}, /* Spp Color, Dpi > 300, Px > 4000 ; 52 */ 310141cc406Sopenharmony_ci 311141cc406Sopenharmony_ci /* Negative & Transparency */ 312141cc406Sopenharmony_ci /* EPP/SPP/BPP */ 313141cc406Sopenharmony_ci/* for exposure time = 96 */ 314141cc406Sopenharmony_ci {0, 1, 12}, /* Spp/EPP Color, Dpi <= 150 ; 60 */ 315141cc406Sopenharmony_ci {0, 1, 24}, /* Spp Color, Dpi <= 300 ; 61 */ 316141cc406Sopenharmony_ci {0, 1, 48}, /* Spp Color, Dpi > 300 ; 62 */ 317141cc406Sopenharmony_ci {0, 1, 12}, /* Bpp/Epp B/W, Dpi <= 75 ; 56 */ 318141cc406Sopenharmony_ci 319141cc406Sopenharmony_ci/* for exposure time = 144 */ 320141cc406Sopenharmony_ci {0, 1, 18}, /* Spp/EPP Color, Dpi <= 150 ; 57 */ 321141cc406Sopenharmony_ci {0, 1, 36}, /* Spp Color, Dpi <= 300 ; 58 */ 322141cc406Sopenharmony_ci {0, 1, 72}, /* Spp Color, Dpi > 300 ; 59 */ 323141cc406Sopenharmony_ci 324141cc406Sopenharmony_ci/* for exposure time = 192 */ 325141cc406Sopenharmony_ci {0, 1, 24}, /* Spp/EPP Color, Dpi <= 150 ; 53 */ 326141cc406Sopenharmony_ci {0, 1, 48}, /* Spp Color, Dpi <= 300 ; 54 */ 327141cc406Sopenharmony_ci {0, 1, 96}, /* Spp Color, Dpi > 300 ; 55 */ 328141cc406Sopenharmony_ci 329141cc406Sopenharmony_ci/* for 48 bits color */ 330141cc406Sopenharmony_ci {1, 2, 12}, /* Epp Color, Dpi <= 100, Px > 1400 ; 63 */ 331141cc406Sopenharmony_ci {1, 2, 22}, /* Epp Color, Dpi <= 150, Px > 1900 ; 64 */ 332141cc406Sopenharmony_ci {2, 4, 48}, /* Epp Color, Dpi <= 300, Px > 4000 ; 65 */ 333141cc406Sopenharmony_ci {5, 10, 88},/* Epp Color, Dpi > 300, Px > 9600 ; 66 */ 334141cc406Sopenharmony_ci {3, 12, 96} /* Spp Color, Dpi <= 300, Px > 3000 ; 67 */ 335141cc406Sopenharmony_ci}; 336141cc406Sopenharmony_ci 337141cc406Sopenharmony_ci 338141cc406Sopenharmony_cistatic pModeTypeVar pModeType; 339141cc406Sopenharmony_cistatic pDiffModeVar pModeDiff; 340141cc406Sopenharmony_ci 341141cc406Sopenharmony_ci/* 342141cc406Sopenharmony_ci * prototypes for the speed procs (ASIC 98001), EPP, SPP and BIDI 343141cc406Sopenharmony_ci */ 344141cc406Sopenharmony_cistatic void fnLineArtSpeed( pScanData ps ); 345141cc406Sopenharmony_cistatic void fnGraySpeed ( pScanData ps ); 346141cc406Sopenharmony_cistatic void fnColorSpeed ( pScanData ps ); 347141cc406Sopenharmony_ci 348141cc406Sopenharmony_cistatic void fnSppLineArtSpeed( pScanData ps ); 349141cc406Sopenharmony_cistatic void fnSppGraySpeed ( pScanData ps ); 350141cc406Sopenharmony_cistatic void fnSppColorSpeed ( pScanData ps ); 351141cc406Sopenharmony_ci 352141cc406Sopenharmony_cistatic void fnBppLineArtSpeed( pScanData ps ); 353141cc406Sopenharmony_cistatic void fnBppGraySpeed ( pScanData ps ); 354141cc406Sopenharmony_cistatic void fnBppColorSpeed ( pScanData ps ); 355141cc406Sopenharmony_ci 356141cc406Sopenharmony_ci/* 357141cc406Sopenharmony_ci * some procedures for the different modes 358141cc406Sopenharmony_ci */ 359141cc406Sopenharmony_cistatic pFnSpeed_Set a_fnSpeedProcs[5] = { 360141cc406Sopenharmony_ci fnLineArtSpeed, 361141cc406Sopenharmony_ci fnGraySpeed, 362141cc406Sopenharmony_ci fnGraySpeed, 363141cc406Sopenharmony_ci fnColorSpeed, 364141cc406Sopenharmony_ci fnColorSpeed 365141cc406Sopenharmony_ci}; 366141cc406Sopenharmony_ci 367141cc406Sopenharmony_cistatic pFnSpeed_Set a_fnSppSpeedProcs[5] = { 368141cc406Sopenharmony_ci fnSppLineArtSpeed, 369141cc406Sopenharmony_ci fnSppGraySpeed, 370141cc406Sopenharmony_ci fnSppGraySpeed, 371141cc406Sopenharmony_ci fnSppColorSpeed, 372141cc406Sopenharmony_ci fnSppColorSpeed 373141cc406Sopenharmony_ci}; 374141cc406Sopenharmony_ci 375141cc406Sopenharmony_cistatic pFnSpeed_Set a_fnBppSpeedProcs[5] = { 376141cc406Sopenharmony_ci fnBppLineArtSpeed, 377141cc406Sopenharmony_ci fnBppGraySpeed, 378141cc406Sopenharmony_ci fnBppGraySpeed, 379141cc406Sopenharmony_ci fnBppColorSpeed, 380141cc406Sopenharmony_ci fnBppColorSpeed 381141cc406Sopenharmony_ci}; 382141cc406Sopenharmony_ci 383141cc406Sopenharmony_ci 384141cc406Sopenharmony_ci/*************************** local functions *********************************/ 385141cc406Sopenharmony_ci 386141cc406Sopenharmony_ci/*............................................................................. 387141cc406Sopenharmony_ci * 388141cc406Sopenharmony_ci */ 389141cc406Sopenharmony_cistatic void ioP96InitialSetCurrentSpeed( pScanData ps ) 390141cc406Sopenharmony_ci{ 391141cc406Sopenharmony_ci DBG( DBG_LOW, "ioP96InitialSetCurrentSpeed()\n" ); 392141cc406Sopenharmony_ci 393141cc406Sopenharmony_ci switch ( ps->DataInf.wPhyDataType ) { 394141cc406Sopenharmony_ci 395141cc406Sopenharmony_ci case COLOR_BW: 396141cc406Sopenharmony_ci ps->bCurrentSpeed = (ps->DataInf.dwAsicPixelsPerPlane > 397141cc406Sopenharmony_ci _BUF_SIZE_BASE_CONST * 2) ? 2 : 1; 398141cc406Sopenharmony_ci break; 399141cc406Sopenharmony_ci 400141cc406Sopenharmony_ci case COLOR_256GRAY: 401141cc406Sopenharmony_ci if ( COLOR_256GRAY == ps->DataInf.wAppDataType ) { 402141cc406Sopenharmony_ci 403141cc406Sopenharmony_ci ps->bCurrentSpeed = (Byte)(ps->a_wGrayInitTime[ps->IO.portMode] / 404141cc406Sopenharmony_ci ps->wLinesPer64kTime); 405141cc406Sopenharmony_ci if (!ps->bCurrentSpeed) 406141cc406Sopenharmony_ci ps->bCurrentSpeed = 1; 407141cc406Sopenharmony_ci 408141cc406Sopenharmony_ci if ((ps->DataInf.dwAsicPixelsPerPlane>=1500) && (ps->bCurrentSpeed==1)) 409141cc406Sopenharmony_ci ps->bCurrentSpeed = 2; 410141cc406Sopenharmony_ci 411141cc406Sopenharmony_ci if ( ps->DataInf.xyAppDpi.x > 1200) { 412141cc406Sopenharmony_ci ps->bCurrentSpeed += 2; /* 1201-2400 */ 413141cc406Sopenharmony_ci 414141cc406Sopenharmony_ci if ( ps->DataInf.xyAppDpi.x > 2400 ) 415141cc406Sopenharmony_ci ps->bCurrentSpeed += 2; /* >= 2401 */ 416141cc406Sopenharmony_ci } 417141cc406Sopenharmony_ci 418141cc406Sopenharmony_ci MotorP96AdjustCurrentSpeed( ps, ps->bCurrentSpeed ); 419141cc406Sopenharmony_ci 420141cc406Sopenharmony_ci } else { 421141cc406Sopenharmony_ci 422141cc406Sopenharmony_ci if ( _PORT_SPP != ps->IO.portMode ) { 423141cc406Sopenharmony_ci if( ps->DataInf.dwAsicPixelsPerPlane <= 1280 ) 424141cc406Sopenharmony_ci ps->bCurrentSpeed = 1; /* <= 1280 pixels */ 425141cc406Sopenharmony_ci 426141cc406Sopenharmony_ci else if( ps->DataInf.dwAsicPixelsPerPlane <= 1720 ) 427141cc406Sopenharmony_ci ps->bCurrentSpeed = 2; /* 1281-1720 */ 428141cc406Sopenharmony_ci 429141cc406Sopenharmony_ci else if( ps->DataInf.dwAsicPixelsPerPlane <= 3780 ) 430141cc406Sopenharmony_ci ps->bCurrentSpeed = 4; /* 1721-3780 */ 431141cc406Sopenharmony_ci 432141cc406Sopenharmony_ci else 433141cc406Sopenharmony_ci ps->bCurrentSpeed = 6; /* >= 3780 */ 434141cc406Sopenharmony_ci 435141cc406Sopenharmony_ci } else { 436141cc406Sopenharmony_ci 437141cc406Sopenharmony_ci if( ps->DataInf.dwAsicPixelsPerPlane <= 400 ) 438141cc406Sopenharmony_ci ps->bCurrentSpeed = 1; /* <= 400 pixels */ 439141cc406Sopenharmony_ci 440141cc406Sopenharmony_ci else if( ps->DataInf.dwAsicPixelsPerPlane <= 853 ) 441141cc406Sopenharmony_ci ps->bCurrentSpeed = 2; /* 401-853 */ 442141cc406Sopenharmony_ci 443141cc406Sopenharmony_ci else if( ps->DataInf.dwAsicPixelsPerPlane <= 1280 ) 444141cc406Sopenharmony_ci ps->bCurrentSpeed = 4; /* 854-1280 */ 445141cc406Sopenharmony_ci 446141cc406Sopenharmony_ci else if( ps->DataInf.dwAsicPixelsPerPlane <= 1728 ) 447141cc406Sopenharmony_ci ps->bCurrentSpeed = 6; /* 1281-1728 */ 448141cc406Sopenharmony_ci 449141cc406Sopenharmony_ci else if( ps->DataInf.dwAsicPixelsPerPlane <= 3780 ) 450141cc406Sopenharmony_ci ps->bCurrentSpeed = 8; /* 1729-3780 */ 451141cc406Sopenharmony_ci 452141cc406Sopenharmony_ci else 453141cc406Sopenharmony_ci ps->bCurrentSpeed = 10; /* > 3780 */ 454141cc406Sopenharmony_ci } 455141cc406Sopenharmony_ci } 456141cc406Sopenharmony_ci break; 457141cc406Sopenharmony_ci 458141cc406Sopenharmony_ci case COLOR_TRUE24: 459141cc406Sopenharmony_ci ps->bCurrentSpeed = (Byte)(ps->a_wColorInitTime[ps->IO.portMode] / 460141cc406Sopenharmony_ci ps->wLinesPer64kTime); 461141cc406Sopenharmony_ci 462141cc406Sopenharmony_ci if( 0 == ps->bCurrentSpeed ) { 463141cc406Sopenharmony_ci DBG( DBG_LOW, "Initially set to 1\n" ); 464141cc406Sopenharmony_ci ps->bCurrentSpeed = 1; 465141cc406Sopenharmony_ci } 466141cc406Sopenharmony_ci 467141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.x > 150) { 468141cc406Sopenharmony_ci if (ps->bCurrentSpeed < 4) 469141cc406Sopenharmony_ci ps->bCurrentSpeed = 4; 470141cc406Sopenharmony_ci } else { 471141cc406Sopenharmony_ci/* 472141cc406Sopenharmony_ci// HEINER:A3I 473141cc406Sopenharmony_ci// if (ps->DataInf.xyAppDpi.x > 100) 474141cc406Sopenharmony_ci*/ 475141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.x > 75) 476141cc406Sopenharmony_ci if (ps->bCurrentSpeed < 2) 477141cc406Sopenharmony_ci ps->bCurrentSpeed = 2; 478141cc406Sopenharmony_ci } 479141cc406Sopenharmony_ci 480141cc406Sopenharmony_ci if( 1 != ps->bCurrentSpeed ) 481141cc406Sopenharmony_ci ps->bCurrentSpeed += ps->bExtraAdd; 482141cc406Sopenharmony_ci 483141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.x > ps->PhysicalDpi) { 484141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.x <= 600) 485141cc406Sopenharmony_ci ps->bCurrentSpeed += 2; 486141cc406Sopenharmony_ci else if (ps->DataInf.xyAppDpi.x <= 1200) 487141cc406Sopenharmony_ci ps->bCurrentSpeed += 2; 488141cc406Sopenharmony_ci else if (ps->DataInf.xyAppDpi.x <= 2400) 489141cc406Sopenharmony_ci ps->bCurrentSpeed += 2; 490141cc406Sopenharmony_ci else 491141cc406Sopenharmony_ci ps->bCurrentSpeed += 2; 492141cc406Sopenharmony_ci } 493141cc406Sopenharmony_ci 494141cc406Sopenharmony_ci MotorP96AdjustCurrentSpeed( ps, ps->bCurrentSpeed ); 495141cc406Sopenharmony_ci } 496141cc406Sopenharmony_ci 497141cc406Sopenharmony_ci DBG( DBG_LOW, "Current Speed = %u\n", ps->bCurrentSpeed ); 498141cc406Sopenharmony_ci} 499141cc406Sopenharmony_ci 500141cc406Sopenharmony_ci/*............................................................................. 501141cc406Sopenharmony_ci * 502141cc406Sopenharmony_ci */ 503141cc406Sopenharmony_cistatic void fnLineArtSpeed( pScanData ps ) 504141cc406Sopenharmony_ci{ 505141cc406Sopenharmony_ci pModeType = a_BwSettings + _FixParamEppBw; 506141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwEpp75; 507141cc406Sopenharmony_ci 508141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 75) { 509141cc406Sopenharmony_ci pModeType++; 510141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwEpp150; 511141cc406Sopenharmony_ci } 512141cc406Sopenharmony_ci 513141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 150) { 514141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y <= 300) { 515141cc406Sopenharmony_ci pModeType++; 516141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwEpp300; 517141cc406Sopenharmony_ci } else { 518141cc406Sopenharmony_ci pModeType += 2; 519141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwEpp600; 520141cc406Sopenharmony_ci } 521141cc406Sopenharmony_ci } 522141cc406Sopenharmony_ci} 523141cc406Sopenharmony_ci 524141cc406Sopenharmony_ci/*............................................................................. 525141cc406Sopenharmony_ci * 526141cc406Sopenharmony_ci */ 527141cc406Sopenharmony_cistatic void fnGraySpeed( pScanData ps ) 528141cc406Sopenharmony_ci{ 529141cc406Sopenharmony_ci pModeType = a_GraySettings + _FixParamEppGray; 530141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayEpp75; 531141cc406Sopenharmony_ci 532141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 75) { 533141cc406Sopenharmony_ci pModeType++; 534141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayEpp150; 535141cc406Sopenharmony_ci } 536141cc406Sopenharmony_ci 537141cc406Sopenharmony_ci if ( ps->DataInf.xyAppDpi.y > 150) { 538141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y <= 300) { 539141cc406Sopenharmony_ci pModeType++; 540141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayEpp300; 541141cc406Sopenharmony_ci } else { 542141cc406Sopenharmony_ci pModeType += 2; 543141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayEpp600; 544141cc406Sopenharmony_ci if (ps->DataInf.dwAsicPixelsPerPlane > 3000) 545141cc406Sopenharmony_ci pModeDiff++; 546141cc406Sopenharmony_ci } 547141cc406Sopenharmony_ci } 548141cc406Sopenharmony_ci} 549141cc406Sopenharmony_ci 550141cc406Sopenharmony_ci/*............................................................................. 551141cc406Sopenharmony_ci * 552141cc406Sopenharmony_ci */ 553141cc406Sopenharmony_cistatic void fnColorSpeed( pScanData ps ) 554141cc406Sopenharmony_ci{ 555141cc406Sopenharmony_ci DBG( DBG_LOW, "fnColorSpeed();\n" ); 556141cc406Sopenharmony_ci 557141cc406Sopenharmony_ci pModeType = a_ColorSettings + _FixParamEppColor; 558141cc406Sopenharmony_ci 559141cc406Sopenharmony_ci if ( ps->DataInf.xyAppDpi.y <= ps->wMinCmpDpi ) { 560141cc406Sopenharmony_ci /* DPI <= 60 */ 561141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp60; 562141cc406Sopenharmony_ci 563141cc406Sopenharmony_ci } else { 564141cc406Sopenharmony_ci 565141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y <= 100) { 566141cc406Sopenharmony_ci pModeType++; 567141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp100; 568141cc406Sopenharmony_ci 569141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane > 1400) 570141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp100_1400; 571141cc406Sopenharmony_ci } else { 572141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y <= 150) { 573141cc406Sopenharmony_ci pModeType += 2; 574141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp150; 575141cc406Sopenharmony_ci 576141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane > 1900) 577141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp150_1900; 578141cc406Sopenharmony_ci } else { 579141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y <= 300) { 580141cc406Sopenharmony_ci pModeType += 3; 581141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp300_1200; 582141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 1200) 583141cc406Sopenharmony_ci pModeDiff --; 584141cc406Sopenharmony_ci else { 585141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane > 4000) 586141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp300_4000; 587141cc406Sopenharmony_ci } 588141cc406Sopenharmony_ci } else { 589141cc406Sopenharmony_ci pModeType += 4; 590141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp600_4000; 591141cc406Sopenharmony_ci pModeType->bExposureTime = 88; 592141cc406Sopenharmony_ci 593141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 4000) { 594141cc406Sopenharmony_ci pModeDiff--; 595141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 2800) { 596141cc406Sopenharmony_ci pModeType->bExposureTime = 96; 597141cc406Sopenharmony_ci pModeDiff--; 598141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 1200) 599141cc406Sopenharmony_ci pModeDiff--; 600141cc406Sopenharmony_ci } 601141cc406Sopenharmony_ci } else { 602141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane >= 9600) 603141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorEpp600_9600; 604141cc406Sopenharmony_ci } 605141cc406Sopenharmony_ci } 606141cc406Sopenharmony_ci } 607141cc406Sopenharmony_ci } 608141cc406Sopenharmony_ci } 609141cc406Sopenharmony_ci} 610141cc406Sopenharmony_ci 611141cc406Sopenharmony_ci/*............................................................................. 612141cc406Sopenharmony_ci * 613141cc406Sopenharmony_ci */ 614141cc406Sopenharmony_cistatic void fnSppLineArtSpeed( pScanData ps ) 615141cc406Sopenharmony_ci{ 616141cc406Sopenharmony_ci pModeType = a_BwSettings + _FixParamSppBw; 617141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwSpp75; 618141cc406Sopenharmony_ci 619141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 75) { 620141cc406Sopenharmony_ci 621141cc406Sopenharmony_ci pModeType++; 622141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwSpp150; 623141cc406Sopenharmony_ci } 624141cc406Sopenharmony_ci 625141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 150) { 626141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y <= 300) { 627141cc406Sopenharmony_ci pModeType++; 628141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwSpp300; 629141cc406Sopenharmony_ci } else { 630141cc406Sopenharmony_ci pModeType += 2; 631141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwSpp600; 632141cc406Sopenharmony_ci } 633141cc406Sopenharmony_ci } 634141cc406Sopenharmony_ci} 635141cc406Sopenharmony_ci 636141cc406Sopenharmony_ci/*............................................................................. 637141cc406Sopenharmony_ci * 638141cc406Sopenharmony_ci */ 639141cc406Sopenharmony_cistatic void fnSppGraySpeed( pScanData ps ) 640141cc406Sopenharmony_ci{ 641141cc406Sopenharmony_ci pModeType = a_GraySettings + _FixParamSppGray; 642141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GraySpp75; 643141cc406Sopenharmony_ci 644141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 75) { 645141cc406Sopenharmony_ci pModeType++; 646141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GraySpp150_800; 647141cc406Sopenharmony_ci 648141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 150) { 649141cc406Sopenharmony_ci 650141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y <= 300) { 651141cc406Sopenharmony_ci pModeType ++; 652141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GraySpp300_1600; 653141cc406Sopenharmony_ci } else { 654141cc406Sopenharmony_ci 655141cc406Sopenharmony_ci pModeType += 2; 656141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GraySpp600_3200; 657141cc406Sopenharmony_ci 658141cc406Sopenharmony_ci if (ps->DataInf.dwAsicPixelsPerPlane <= 3200) 659141cc406Sopenharmony_ci pModeDiff--; 660141cc406Sopenharmony_ci } 661141cc406Sopenharmony_ci 662141cc406Sopenharmony_ci if (ps->DataInf.dwAsicPixelsPerPlane <= 1600) 663141cc406Sopenharmony_ci pModeDiff--; 664141cc406Sopenharmony_ci } 665141cc406Sopenharmony_ci 666141cc406Sopenharmony_ci if (ps->DataInf.dwAsicPixelsPerPlane <= 800) 667141cc406Sopenharmony_ci pModeDiff--; 668141cc406Sopenharmony_ci } 669141cc406Sopenharmony_ci} 670141cc406Sopenharmony_ci 671141cc406Sopenharmony_ci/*............................................................................. 672141cc406Sopenharmony_ci * 673141cc406Sopenharmony_ci */ 674141cc406Sopenharmony_cistatic void fnSppColorSpeed( pScanData ps ) 675141cc406Sopenharmony_ci{ 676141cc406Sopenharmony_ci pModeType = a_ColorSettings + _FixParamSppColor; 677141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorSpp60; 678141cc406Sopenharmony_ci 679141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > ps->wMinCmpDpi) { 680141cc406Sopenharmony_ci pModeType ++; 681141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorSpp100; 682141cc406Sopenharmony_ci 683141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 100) { 684141cc406Sopenharmony_ci pModeType ++; 685141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorSpp150_800; 686141cc406Sopenharmony_ci 687141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 150) { 688141cc406Sopenharmony_ci pModeType ++; 689141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorSpp300_2000; 690141cc406Sopenharmony_ci 691141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 300) { 692141cc406Sopenharmony_ci 693141cc406Sopenharmony_ci pModeType ++; 694141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorSpp600_4000; 695141cc406Sopenharmony_ci 696141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane > 4000) 697141cc406Sopenharmony_ci return; 698141cc406Sopenharmony_ci else 699141cc406Sopenharmony_ci pModeDiff--; 700141cc406Sopenharmony_ci } else { 701141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane > 3000) 702141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorSpp300_3000; 703141cc406Sopenharmony_ci return; 704141cc406Sopenharmony_ci } 705141cc406Sopenharmony_ci 706141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 2000) { 707141cc406Sopenharmony_ci pModeDiff--; 708141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 1000) { 709141cc406Sopenharmony_ci pModeDiff--; 710141cc406Sopenharmony_ci 711141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 500) 712141cc406Sopenharmony_ci pModeDiff--; 713141cc406Sopenharmony_ci } 714141cc406Sopenharmony_ci } 715141cc406Sopenharmony_ci } else { 716141cc406Sopenharmony_ci 717141cc406Sopenharmony_ci if (ps->DataInf.dwAsicBytesPerPlane <= 800) 718141cc406Sopenharmony_ci pModeDiff--; 719141cc406Sopenharmony_ci } 720141cc406Sopenharmony_ci } 721141cc406Sopenharmony_ci } 722141cc406Sopenharmony_ci} 723141cc406Sopenharmony_ci 724141cc406Sopenharmony_ci/*............................................................................. 725141cc406Sopenharmony_ci * 726141cc406Sopenharmony_ci */ 727141cc406Sopenharmony_cistatic void fnBppLineArtSpeed( pScanData ps ) 728141cc406Sopenharmony_ci{ 729141cc406Sopenharmony_ci pModeType = a_BwSettings + _FixParamBppBw; 730141cc406Sopenharmony_ci/* (+) Micky, 7-14-1998 731141cc406Sopenharmony_ci * pModeDiff = a_tabDiffParam + _BwBpp150; 732141cc406Sopenharmony_ci */ 733141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwBpp75; 734141cc406Sopenharmony_ci 735141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 75 ) { 736141cc406Sopenharmony_ci pModeType++; 737141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwBpp150; 738141cc406Sopenharmony_ci } 739141cc406Sopenharmony_ci/* (-) Micky, 7-14-1998 */ 740141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 150 ) { 741141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y <= 300 ) { 742141cc406Sopenharmony_ci pModeType++; 743141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwBpp300; 744141cc406Sopenharmony_ci } else { 745141cc406Sopenharmony_ci pModeType += 2; 746141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _BwBpp600; 747141cc406Sopenharmony_ci } 748141cc406Sopenharmony_ci } 749141cc406Sopenharmony_ci} 750141cc406Sopenharmony_ci 751141cc406Sopenharmony_ci/*............................................................................. 752141cc406Sopenharmony_ci * 753141cc406Sopenharmony_ci */ 754141cc406Sopenharmony_cistatic void fnBppGraySpeed( pScanData ps ) 755141cc406Sopenharmony_ci{ 756141cc406Sopenharmony_ci pModeType = a_GraySettings + _FixParamBppGray; 757141cc406Sopenharmony_ci/* (+) Micky, 7-14-1998 758141cc406Sopenharmony_ci * pModeDiff = a_tabDiffParam + _GrayBpp150; 759141cc406Sopenharmony_ci */ 760141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayBpp75; 761141cc406Sopenharmony_ci 762141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 75 ) { 763141cc406Sopenharmony_ci pModeType++; 764141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayBpp150; 765141cc406Sopenharmony_ci } 766141cc406Sopenharmony_ci/* (-) Micky, 7-14-1998 */ 767141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 150 ) { 768141cc406Sopenharmony_ci pModeType ++; 769141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayBpp300_1600; 770141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 300 ) { 771141cc406Sopenharmony_ci pModeType ++; 772141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _GrayBpp600_3200; 773141cc406Sopenharmony_ci if( ps->DataInf.dwAsicPixelsPerPlane <= 3200 ) 774141cc406Sopenharmony_ci pModeDiff --; 775141cc406Sopenharmony_ci } 776141cc406Sopenharmony_ci if( ps->DataInf.dwAsicPixelsPerPlane <= 1600 ) 777141cc406Sopenharmony_ci pModeDiff --; 778141cc406Sopenharmony_ci } 779141cc406Sopenharmony_ci} 780141cc406Sopenharmony_ci 781141cc406Sopenharmony_ci/*............................................................................. 782141cc406Sopenharmony_ci * 783141cc406Sopenharmony_ci */ 784141cc406Sopenharmony_cistatic void fnBppColorSpeed( pScanData ps ) 785141cc406Sopenharmony_ci{ 786141cc406Sopenharmony_ci pModeType = a_ColorSettings + _FixParamBppColor; 787141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorBpp60; 788141cc406Sopenharmony_ci 789141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > ps->wMinCmpDpi ) { 790141cc406Sopenharmony_ci pModeType ++; 791141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorBpp100; 792141cc406Sopenharmony_ci 793141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 100 ) { 794141cc406Sopenharmony_ci pModeType ++; 795141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorBpp150_800; 796141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 150 ) { 797141cc406Sopenharmony_ci pModeType ++; 798141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorBpp300_1600; 799141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 300 ) { 800141cc406Sopenharmony_ci pModeType ++; 801141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _ColorBpp600_3200; 802141cc406Sopenharmony_ci if( ps->DataInf.dwAsicBytesPerPlane <= 3200 ) 803141cc406Sopenharmony_ci return; 804141cc406Sopenharmony_ci else 805141cc406Sopenharmony_ci pModeDiff--; 806141cc406Sopenharmony_ci } 807141cc406Sopenharmony_ci 808141cc406Sopenharmony_ci if( ps->DataInf.dwAsicBytesPerPlane <= 1600 ) 809141cc406Sopenharmony_ci pModeDiff--; 810141cc406Sopenharmony_ci } 811141cc406Sopenharmony_ci 812141cc406Sopenharmony_ci if( ps->DataInf.dwAsicBytesPerPlane <= 800 ) 813141cc406Sopenharmony_ci pModeDiff--; 814141cc406Sopenharmony_ci } 815141cc406Sopenharmony_ci } 816141cc406Sopenharmony_ci} 817141cc406Sopenharmony_ci 818141cc406Sopenharmony_ci/*............................................................................. 819141cc406Sopenharmony_ci * 820141cc406Sopenharmony_ci */ 821141cc406Sopenharmony_cistatic void ioP98SppNegativeProcs( pScanData ps ) 822141cc406Sopenharmony_ci{ 823141cc406Sopenharmony_ci if ( ps->DataInf.dwScanFlag & SCANDEF_Negative ) 824141cc406Sopenharmony_ci pModeType = a_FilmSettings + _FixParamSppNegative; 825141cc406Sopenharmony_ci else 826141cc406Sopenharmony_ci pModeType = a_FilmSettings + _FixParamSppPositive; 827141cc406Sopenharmony_ci 828141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _NegativeSpp150; 829141cc406Sopenharmony_ci 830141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 150) { 831141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y < 300) { 832141cc406Sopenharmony_ci pModeType ++; 833141cc406Sopenharmony_ci pModeDiff ++; 834141cc406Sopenharmony_ci } else { 835141cc406Sopenharmony_ci pModeType += 2; 836141cc406Sopenharmony_ci pModeDiff += 2; 837141cc406Sopenharmony_ci } 838141cc406Sopenharmony_ci } 839141cc406Sopenharmony_ci 840141cc406Sopenharmony_ci if (ps->DataInf.dwScanFlag & SCANDEF_Negative) { 841141cc406Sopenharmony_ci if (ps->AsicReg.RD_LineControl == 144) 842141cc406Sopenharmony_ci pModeDiff += 4; 843141cc406Sopenharmony_ci else 844141cc406Sopenharmony_ci if (ps->AsicReg.RD_LineControl == 192) 845141cc406Sopenharmony_ci pModeDiff += 7; 846141cc406Sopenharmony_ci } 847141cc406Sopenharmony_ci} 848141cc406Sopenharmony_ci 849141cc406Sopenharmony_ci/*............................................................................. 850141cc406Sopenharmony_ci * 851141cc406Sopenharmony_ci */ 852141cc406Sopenharmony_cistatic void ioP98EppNegativeProcs( pScanData ps ) 853141cc406Sopenharmony_ci{ 854141cc406Sopenharmony_ci if (ps->DataInf.dwScanFlag & SCANDEF_Negative) 855141cc406Sopenharmony_ci pModeType = a_FilmSettings + _FixParamEppNegative; 856141cc406Sopenharmony_ci else 857141cc406Sopenharmony_ci pModeType = a_FilmSettings + _FixParamEppPositive; 858141cc406Sopenharmony_ci 859141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _NegativeEpp150; 860141cc406Sopenharmony_ci 861141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y > 150) { 862141cc406Sopenharmony_ci if (ps->DataInf.xyAppDpi.y < 300) 863141cc406Sopenharmony_ci { 864141cc406Sopenharmony_ci pModeType ++; 865141cc406Sopenharmony_ci pModeDiff ++; 866141cc406Sopenharmony_ci } else { 867141cc406Sopenharmony_ci pModeType += 2; 868141cc406Sopenharmony_ci pModeDiff += 2; 869141cc406Sopenharmony_ci } 870141cc406Sopenharmony_ci } 871141cc406Sopenharmony_ci 872141cc406Sopenharmony_ci if (ps->DataInf.dwScanFlag & SCANDEF_Negative) { 873141cc406Sopenharmony_ci if (ps->AsicReg.RD_LineControl == 144) 874141cc406Sopenharmony_ci pModeDiff += 4; 875141cc406Sopenharmony_ci else 876141cc406Sopenharmony_ci if (ps->AsicReg.RD_LineControl == 192) 877141cc406Sopenharmony_ci pModeDiff += 7; 878141cc406Sopenharmony_ci } 879141cc406Sopenharmony_ci} 880141cc406Sopenharmony_ci 881141cc406Sopenharmony_ci/*............................................................................. 882141cc406Sopenharmony_ci * 883141cc406Sopenharmony_ci */ 884141cc406Sopenharmony_cistatic void ioP98BppNegativeProcs( pScanData ps ) 885141cc406Sopenharmony_ci{ 886141cc406Sopenharmony_ci if( ps->DataInf.dwScanFlag & SCANDEF_Negative) { 887141cc406Sopenharmony_ci pModeType = a_FilmSettings + _FixParamBppNegative; 888141cc406Sopenharmony_ci } else { 889141cc406Sopenharmony_ci pModeType = a_FilmSettings + _FixParamBppPositive; 890141cc406Sopenharmony_ci } 891141cc406Sopenharmony_ci 892141cc406Sopenharmony_ci pModeDiff = a_tabDiffParam + _NegativeBpp150; 893141cc406Sopenharmony_ci 894141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 150 ) { 895141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y < 300 ) { 896141cc406Sopenharmony_ci pModeType ++; 897141cc406Sopenharmony_ci pModeDiff ++; 898141cc406Sopenharmony_ci } else { 899141cc406Sopenharmony_ci pModeType += 2; 900141cc406Sopenharmony_ci pModeDiff += 2; 901141cc406Sopenharmony_ci } 902141cc406Sopenharmony_ci } 903141cc406Sopenharmony_ci 904141cc406Sopenharmony_ci if ( ps->DataInf.dwScanFlag & SCANDEF_Negative ) { 905141cc406Sopenharmony_ci if( ps->AsicReg.RD_LineControl == 144 ) { 906141cc406Sopenharmony_ci pModeDiff += 4; 907141cc406Sopenharmony_ci } else { 908141cc406Sopenharmony_ci if( ps->AsicReg.RD_LineControl == 192 ) 909141cc406Sopenharmony_ci pModeDiff += 7; 910141cc406Sopenharmony_ci } 911141cc406Sopenharmony_ci } 912141cc406Sopenharmony_ci} 913141cc406Sopenharmony_ci 914141cc406Sopenharmony_ci/*............................................................................. 915141cc406Sopenharmony_ci * 916141cc406Sopenharmony_ci */ 917141cc406Sopenharmony_cistatic void ioControlLampOnOff( pScanData ps ) 918141cc406Sopenharmony_ci{ 919141cc406Sopenharmony_ci Byte lampStatus; 920141cc406Sopenharmony_ci 921141cc406Sopenharmony_ci ps->fWarmupNeeded = _TRUE; 922141cc406Sopenharmony_ci 923141cc406Sopenharmony_ci if( _IS_ASIC98(ps->sCaps.AsicID)) { 924141cc406Sopenharmony_ci 925141cc406Sopenharmony_ci lampStatus = ps->AsicReg.RD_ScanControl & _SCAN_LAMPS_ON; 926141cc406Sopenharmony_ci 927141cc406Sopenharmony_ci if (ps->bLastLampStatus != lampStatus) { 928141cc406Sopenharmony_ci 929141cc406Sopenharmony_ci DBG( DBG_LOW, "Using OTHER Lamp !\n" ); 930141cc406Sopenharmony_ci ps->bLastLampStatus = lampStatus; 931141cc406Sopenharmony_ci 932141cc406Sopenharmony_ci IOCmdRegisterToScanner( ps, ps->RegScanControl, 933141cc406Sopenharmony_ci ps->AsicReg.RD_ScanControl); 934141cc406Sopenharmony_ci return; 935141cc406Sopenharmony_ci } 936141cc406Sopenharmony_ci } else { 937141cc406Sopenharmony_ci 938141cc406Sopenharmony_ci lampStatus = ps->AsicReg.RD_ScanControl & _SCAN_LAMP_ON; 939141cc406Sopenharmony_ci 940141cc406Sopenharmony_ci if (ps->DataInf.dwScanFlag&(SCANDEF_Transparency + SCANDEF_Negative)) { 941141cc406Sopenharmony_ci ps->bLampOn = 0; 942141cc406Sopenharmony_ci } else { 943141cc406Sopenharmony_ci ps->bLampOn = _SCAN_LAMP_ON; 944141cc406Sopenharmony_ci } 945141cc406Sopenharmony_ci 946141cc406Sopenharmony_ci if (ps->bLastLampStatus != lampStatus) { 947141cc406Sopenharmony_ci DBG( DBG_LOW, "Using OTHER Lamp !\n" ); 948141cc406Sopenharmony_ci ps->bLastLampStatus = lampStatus; 949141cc406Sopenharmony_ci return; 950141cc406Sopenharmony_ci } 951141cc406Sopenharmony_ci } 952141cc406Sopenharmony_ci 953141cc406Sopenharmony_ci ps->fWarmupNeeded = _FALSE; 954141cc406Sopenharmony_ci DBG( DBG_LOW, "Using SAME Lamp !\n" ); 955141cc406Sopenharmony_ci} 956141cc406Sopenharmony_ci 957141cc406Sopenharmony_ci/*............................................................................. 958141cc406Sopenharmony_ci * 959141cc406Sopenharmony_ci */ 960141cc406Sopenharmony_cistatic void ioP98InitialSetCurrentSpeed( pScanData ps ) 961141cc406Sopenharmony_ci{ 962141cc406Sopenharmony_ci DBG( DBG_LOW, "ioP98InitialSetCurrentSpeed()\n" ); 963141cc406Sopenharmony_ci 964141cc406Sopenharmony_ci if( ps->DataInf.dwScanFlag & SCANDEF_TPA) { 965141cc406Sopenharmony_ci 966141cc406Sopenharmony_ci switch (ps->IO.portMode) 967141cc406Sopenharmony_ci { 968141cc406Sopenharmony_ci case _PORT_SPP: ioP98SppNegativeProcs( ps ); break; 969141cc406Sopenharmony_ci case _PORT_BIDI: ioP98BppNegativeProcs( ps ); break; 970141cc406Sopenharmony_ci 971141cc406Sopenharmony_ci default: ioP98EppNegativeProcs( ps ); break; 972141cc406Sopenharmony_ci } 973141cc406Sopenharmony_ci } else { 974141cc406Sopenharmony_ci 975141cc406Sopenharmony_ci switch (ps->IO.portMode) { 976141cc406Sopenharmony_ci case _PORT_SPP: 977141cc406Sopenharmony_ci a_fnSppSpeedProcs[ps->DataInf.wAppDataType](ps); 978141cc406Sopenharmony_ci break; 979141cc406Sopenharmony_ci 980141cc406Sopenharmony_ci case _PORT_BIDI: 981141cc406Sopenharmony_ci a_fnBppSpeedProcs[ps->DataInf.wAppDataType](ps); 982141cc406Sopenharmony_ci break; 983141cc406Sopenharmony_ci 984141cc406Sopenharmony_ci default: 985141cc406Sopenharmony_ci a_fnSpeedProcs[ps->DataInf.wAppDataType](ps); 986141cc406Sopenharmony_ci break; 987141cc406Sopenharmony_ci } 988141cc406Sopenharmony_ci } 989141cc406Sopenharmony_ci 990141cc406Sopenharmony_ci ps->wInitialStep = pModeType->wHomePos; 991141cc406Sopenharmony_ci ps->wMaxMoveStep = pModeType->wMaxSteps; 992141cc406Sopenharmony_ci 993141cc406Sopenharmony_ci ps->AsicReg.RD_LineControl = pModeType->bExposureTime; 994141cc406Sopenharmony_ci 995141cc406Sopenharmony_ci if (ps->DataInf.dwScanFlag & SCANDEF_Negative) 996141cc406Sopenharmony_ci ps->AsicReg.RD_LineControl = 144; 997141cc406Sopenharmony_ci 998141cc406Sopenharmony_ci#ifdef DEBUG 999141cc406Sopenharmony_ci if( pModeType->bFlagScanMode != ps->Shade.bIntermediate ) 1000141cc406Sopenharmony_ci DBG( DBG_HIGH, "bSetScanModeFlag != bIntermediate\n" ); 1001141cc406Sopenharmony_ci#endif 1002141cc406Sopenharmony_ci 1003141cc406Sopenharmony_ci ps->bHpMotor = pModeType->bMotorStep; 1004141cc406Sopenharmony_ci ps->bSetScanModeFlag = pModeType->bFlagScanMode; 1005141cc406Sopenharmony_ci ps->bShadingTimeFlag = pModeType->bTimesShading; 1006141cc406Sopenharmony_ci 1007141cc406Sopenharmony_ci ps->dwFullStateSpeed = pModeDiff->dwFullSpeed; 1008141cc406Sopenharmony_ci ps->bCurrentSpeed = pModeDiff->bCurrentSpeed; 1009141cc406Sopenharmony_ci ps->bStepSpeed = pModeDiff->bStepSpeed; 1010141cc406Sopenharmony_ci 1011141cc406Sopenharmony_ci if( ps->DataInf.xyAppDpi.y > 600 ) { 1012141cc406Sopenharmony_ci if( ps->dwFullStateSpeed ) 1013141cc406Sopenharmony_ci ps->dwFullStateSpeed = 0; 1014141cc406Sopenharmony_ci else 1015141cc406Sopenharmony_ci ps->bStepSpeed <<= 1; 1016141cc406Sopenharmony_ci ps->wMaxMoveStep <<= 1; 1017141cc406Sopenharmony_ci } 1018141cc406Sopenharmony_ci} 1019141cc406Sopenharmony_ci 1020141cc406Sopenharmony_ci/************************ exported functions *********************************/ 1021141cc406Sopenharmony_ci 1022141cc406Sopenharmony_ci/*............................................................................. 1023141cc406Sopenharmony_ci * here we do some init work 1024141cc406Sopenharmony_ci */ 1025141cc406Sopenharmony_ci_LOC int IOFuncInitialize( pScanData ps ) 1026141cc406Sopenharmony_ci{ 1027141cc406Sopenharmony_ci DBG( DBG_HIGH, "IOFuncInitialize()\n" ); 1028141cc406Sopenharmony_ci 1029141cc406Sopenharmony_ci if( NULL == ps ) 1030141cc406Sopenharmony_ci return _E_NULLPTR; 1031141cc406Sopenharmony_ci 1032141cc406Sopenharmony_ci ps->lpEppColorHomePos = &a_ColorSettings[0]; 1033141cc406Sopenharmony_ci ps->lpEppColorExposure = &a_ColorSettings[4]; 1034141cc406Sopenharmony_ci ps->lpBppColorHomePos = &a_ColorSettings[5]; 1035141cc406Sopenharmony_ci ps->lpSppColorHomePos = &a_ColorSettings[10]; 1036141cc406Sopenharmony_ci ps->a_tabDiffParam = a_tabDiffParam; 1037141cc406Sopenharmony_ci ps->a_ColorSettings = a_ColorSettings; 1038141cc406Sopenharmony_ci 1039141cc406Sopenharmony_ci /* 1040141cc406Sopenharmony_ci * depending on the asic, we set some functions 1041141cc406Sopenharmony_ci */ 1042141cc406Sopenharmony_ci if( _IS_ASIC98(ps->sCaps.AsicID)) { 1043141cc406Sopenharmony_ci 1044141cc406Sopenharmony_ci ps->InitialSetCurrentSpeed = ioP98InitialSetCurrentSpeed; 1045141cc406Sopenharmony_ci 1046141cc406Sopenharmony_ci } else if( _IS_ASIC96(ps->sCaps.AsicID)) { 1047141cc406Sopenharmony_ci 1048141cc406Sopenharmony_ci ps->InitialSetCurrentSpeed = ioP96InitialSetCurrentSpeed; 1049141cc406Sopenharmony_ci 1050141cc406Sopenharmony_ci } else { 1051141cc406Sopenharmony_ci 1052141cc406Sopenharmony_ci DBG( DBG_HIGH , "NOT SUPPORTED ASIC !!!\n" ); 1053141cc406Sopenharmony_ci return _E_NOSUPP; 1054141cc406Sopenharmony_ci } 1055141cc406Sopenharmony_ci 1056141cc406Sopenharmony_ci return _OK; 1057141cc406Sopenharmony_ci} 1058141cc406Sopenharmony_ci 1059141cc406Sopenharmony_ci/*............................................................................. 1060141cc406Sopenharmony_ci * 1) Fill scan states to asic. 1061141cc406Sopenharmony_ci * 2) Refresh the scan states if necessary 1062141cc406Sopenharmony_ci * 3) Wait for motor running within half-second period. 1063141cc406Sopenharmony_ci */ 1064141cc406Sopenharmony_ci_LOC Byte IOSetToMotorRegister( pScanData ps ) 1065141cc406Sopenharmony_ci{ 1066141cc406Sopenharmony_ci ps->OpenScanPath( ps ); 1067141cc406Sopenharmony_ci 1068141cc406Sopenharmony_ci IORegisterToScanner( ps, ps->RegInitScanState ); 1069141cc406Sopenharmony_ci 1070141cc406Sopenharmony_ci IODownloadScanStates( ps ); 1071141cc406Sopenharmony_ci 1072141cc406Sopenharmony_ci ps->CloseScanPath( ps ); 1073141cc406Sopenharmony_ci 1074141cc406Sopenharmony_ci if( _ASIC_IS_98001 != ps->sCaps.AsicID ) { 1075141cc406Sopenharmony_ci return 0; 1076141cc406Sopenharmony_ci } 1077141cc406Sopenharmony_ci 1078141cc406Sopenharmony_ci ps->Scan.bOldScanState = IOGetScanState( ps, _FALSE ); 1079141cc406Sopenharmony_ci 1080141cc406Sopenharmony_ci return ps->Scan.bOldScanState; 1081141cc406Sopenharmony_ci} 1082141cc406Sopenharmony_ci 1083141cc406Sopenharmony_ci/*............................................................................. 1084141cc406Sopenharmony_ci * 1) If scanner path is not established, connect it 1085141cc406Sopenharmony_ci * 2) Read the recent state count 1086141cc406Sopenharmony_ci * 3) Disconnect the path if necessary 1087141cc406Sopenharmony_ci */ 1088141cc406Sopenharmony_ci_LOC Byte IOGetScanState( pScanData ps, Bool fOpenned ) 1089141cc406Sopenharmony_ci{ 1090141cc406Sopenharmony_ci Byte bScanState, bScanStateNow; 1091141cc406Sopenharmony_ci 1092141cc406Sopenharmony_ci if( !fOpenned && (_ASIC_IS_98003 != ps->sCaps.AsicID)) 1093141cc406Sopenharmony_ci ps->OpenScanPath( ps ); 1094141cc406Sopenharmony_ci 1095141cc406Sopenharmony_ci bScanState = IODataFromRegister( ps, ps->RegGetScanState ); 1096141cc406Sopenharmony_ci bScanStateNow = IODataFromRegister( ps, ps->RegGetScanState ); 1097141cc406Sopenharmony_ci 1098141cc406Sopenharmony_ci if((bScanState != bScanStateNow) 1099141cc406Sopenharmony_ci || ((ps->sCaps.AsicID == _ASIC_IS_98001 && bScanState & 0x40))) { 1100141cc406Sopenharmony_ci bScanState = IODataFromRegister( ps, ps->RegGetScanState); 1101141cc406Sopenharmony_ci } 1102141cc406Sopenharmony_ci 1103141cc406Sopenharmony_ci if( !fOpenned && (_ASIC_IS_98003 != ps->sCaps.AsicID)) 1104141cc406Sopenharmony_ci ps->CloseScanPath( ps ); 1105141cc406Sopenharmony_ci 1106141cc406Sopenharmony_ci return bScanState; 1107141cc406Sopenharmony_ci} 1108141cc406Sopenharmony_ci 1109141cc406Sopenharmony_ci/*............................................................................. 1110141cc406Sopenharmony_ci * ASIC 98003 specific function to read status 2 register 1111141cc406Sopenharmony_ci */ 1112141cc406Sopenharmony_ci_LOC Byte IOGetExtendedStatus( pScanData ps ) 1113141cc406Sopenharmony_ci{ 1114141cc406Sopenharmony_ci Byte b; 1115141cc406Sopenharmony_ci 1116141cc406Sopenharmony_ci b = IODataFromRegister( ps, ps->RegStatus2 ); 1117141cc406Sopenharmony_ci 1118141cc406Sopenharmony_ci if( b == 0xff ) 1119141cc406Sopenharmony_ci return 0; 1120141cc406Sopenharmony_ci return b; 1121141cc406Sopenharmony_ci} 1122141cc406Sopenharmony_ci 1123141cc406Sopenharmony_ci/*............................................................................. 1124141cc406Sopenharmony_ci * Read the scan state. Return the count with status bit, and count. 1125141cc406Sopenharmony_ci */ 1126141cc406Sopenharmony_ci_LOC void IOGetCurrentStateCount( pScanData ps, pScanState pScanStep ) 1127141cc406Sopenharmony_ci{ 1128141cc406Sopenharmony_ci pScanStep->bStatus = IOGetScanState( ps, _FALSE ); 1129141cc406Sopenharmony_ci pScanStep->bStep = pScanStep->bStatus & _SCANSTATE_MASK; 1130141cc406Sopenharmony_ci} 1131141cc406Sopenharmony_ci 1132141cc406Sopenharmony_ci/*............................................................................. 1133141cc406Sopenharmony_ci * 1) If scanner connection is not established, return error 1134141cc406Sopenharmony_ci * 2) If paper not ready, return error 1135141cc406Sopenharmony_ci * 3) If scanning environment is not prepared, return error 1136141cc406Sopenharmony_ci * 4) Setup the buffers for reassembler the CCD incoming lines. 1137141cc406Sopenharmony_ci * 5) Initiate the registers of asic. 1138141cc406Sopenharmony_ci * [NOTE] 1139141cc406Sopenharmony_ci * This routine combines from SetupAsicDependentVariables & IsReadyForScan 1140141cc406Sopenharmony_ci * routines in assembly source. 1141141cc406Sopenharmony_ci */ 1142141cc406Sopenharmony_ci_LOC int IOIsReadyForScan( pScanData ps ) 1143141cc406Sopenharmony_ci{ 1144141cc406Sopenharmony_ci ULong dw; 1145141cc406Sopenharmony_ci pULong pdwTable; 1146141cc406Sopenharmony_ci 1147141cc406Sopenharmony_ci if((_NO_BASE != ps->sCaps.wIOBase) && 1148141cc406Sopenharmony_ci (ps->DataInf.dwVxdFlag & _VF_ENVIRONMENT_READY)) { 1149141cc406Sopenharmony_ci 1150141cc406Sopenharmony_ci if( _ASIC_IS_98001 == ps->sCaps.AsicID ) { 1151141cc406Sopenharmony_ci 1152141cc406Sopenharmony_ci IOSelectLampSource( ps ); 1153141cc406Sopenharmony_ci ioControlLampOnOff( ps ); 1154141cc406Sopenharmony_ci ps->AsicReg.RD_Motor0Control = 0; /* motor off */ 1155141cc406Sopenharmony_ci ps->AsicReg.RD_Motor1Control = 0; /* motor off */ 1156141cc406Sopenharmony_ci ps->AsicReg.RD_ModelControl = (_ModelDpi600 + 1157141cc406Sopenharmony_ci _LED_ACTIVITY + _LED_CONTROL); 1158141cc406Sopenharmony_ci ps->AsicReg.RD_Origin = 0; 1159141cc406Sopenharmony_ci ps->AsicReg.RD_Pixels = 5110; 1160141cc406Sopenharmony_ci 1161141cc406Sopenharmony_ci } else if( _ASIC_IS_98003 == ps->sCaps.AsicID ) { 1162141cc406Sopenharmony_ci 1163141cc406Sopenharmony_ci ps->OpenScanPath( ps ); 1164141cc406Sopenharmony_ci P12SetGeneralRegister( ps ); 1165141cc406Sopenharmony_ci ps->CloseScanPath( ps ); 1166141cc406Sopenharmony_ci 1167141cc406Sopenharmony_ci ioControlLampOnOff( ps ); 1168141cc406Sopenharmony_ci 1169141cc406Sopenharmony_ci } else { 1170141cc406Sopenharmony_ci 1171141cc406Sopenharmony_ci ioControlLampOnOff( ps ); 1172141cc406Sopenharmony_ci 1173141cc406Sopenharmony_ci /* SetupAsicDependentVariables */ 1174141cc406Sopenharmony_ci ps->pPutBufR = ps->pGetBufR = ps->pPrescan16; /* 1st color plane */ 1175141cc406Sopenharmony_ci ps->pPutBufG = ps->pGetBufG = ps->pPrescan8; /* 2nd color plane */ 1176141cc406Sopenharmony_ci 1177141cc406Sopenharmony_ci ps->AsicReg.RD_ScanControl = ps->bLampOn; 1178141cc406Sopenharmony_ci ps->Asic96Reg.RD_MotorControl = 0; 1179141cc406Sopenharmony_ci ps->AsicReg.RD_Origin = 0; 1180141cc406Sopenharmony_ci ps->AsicReg.RD_ModelControl = ps->Device.ModelCtrl | _ModelWhiteIs0; 1181141cc406Sopenharmony_ci ps->AsicReg.RD_Pixels = 5110; /* ps->RdPix; */ 1182141cc406Sopenharmony_ci IOPutOnAllRegisters( ps ); 1183141cc406Sopenharmony_ci } 1184141cc406Sopenharmony_ci 1185141cc406Sopenharmony_ci /* 1186141cc406Sopenharmony_ci * MotorInitiate 1187141cc406Sopenharmony_ci */ 1188141cc406Sopenharmony_ci if( _ASIC_IS_98003 != ps->sCaps.AsicID ) { 1189141cc406Sopenharmony_ci for (dw = _SCANSTATE_BYTES, 1190141cc406Sopenharmony_ci pdwTable = (pULong)ps->a_wMoveStepTable; dw; dw--, pdwTable++) { 1191141cc406Sopenharmony_ci *pdwTable = 0x10001; 1192141cc406Sopenharmony_ci } 1193141cc406Sopenharmony_ci 1194141cc406Sopenharmony_ci memset( ps->a_bColorByteTable, 0, _NUMBER_OF_SCANSTEPS ); 1195141cc406Sopenharmony_ci } 1196141cc406Sopenharmony_ci 1197141cc406Sopenharmony_ci return _OK; 1198141cc406Sopenharmony_ci } 1199141cc406Sopenharmony_ci 1200141cc406Sopenharmony_ci return _E_SEQUENCE; 1201141cc406Sopenharmony_ci} 1202141cc406Sopenharmony_ci 1203141cc406Sopenharmony_ci/*............................................................................. 1204141cc406Sopenharmony_ci * 1205141cc406Sopenharmony_ci */ 1206141cc406Sopenharmony_ci_LOC void IOSetXStepLineScanTime( pScanData ps, Byte b ) 1207141cc406Sopenharmony_ci{ 1208141cc406Sopenharmony_ci ps->AsicReg.RD_LineControl = b; 1209141cc406Sopenharmony_ci ps->bSpeed1 = b; 1210141cc406Sopenharmony_ci ps->bSpeed2 = b >> 1; 1211141cc406Sopenharmony_ci ps->bSpeed4 = b >> 2; 1212141cc406Sopenharmony_ci ps->bSpeed8 = b >> 3; 1213141cc406Sopenharmony_ci ps->bSpeed16 = b >> 4; 1214141cc406Sopenharmony_ci ps->bSpeed32 = b >> 5; 1215141cc406Sopenharmony_ci ps->bSpeed24 = b / 24; 1216141cc406Sopenharmony_ci ps->bSpeed12 = b / 12; 1217141cc406Sopenharmony_ci ps->bSpeed6 = b / 6; 1218141cc406Sopenharmony_ci ps->bSpeed3 = b / 3; 1219141cc406Sopenharmony_ci} 1220141cc406Sopenharmony_ci 1221141cc406Sopenharmony_ci/*............................................................................. 1222141cc406Sopenharmony_ci * 1) Reset and fill all new scan states (Mode = Scan) 1223141cc406Sopenharmony_ci * 2) Refresh scan state 1224141cc406Sopenharmony_ci * 3) Wait for motor running within half second. 1225141cc406Sopenharmony_ci */ 1226141cc406Sopenharmony_ci_LOC void IOSetToMotorStepCount( pScanData ps ) 1227141cc406Sopenharmony_ci{ 1228141cc406Sopenharmony_ci ULong dw; 1229141cc406Sopenharmony_ci pUChar pb; 1230141cc406Sopenharmony_ci TimerDef timer; 1231141cc406Sopenharmony_ci 1232141cc406Sopenharmony_ci ps->OpenScanPath( ps ); 1233141cc406Sopenharmony_ci 1234141cc406Sopenharmony_ci if( _ASIC_IS_98001 == ps->sCaps.AsicID ) { 1235141cc406Sopenharmony_ci IORegisterToScanner( ps, ps->RegInitScanState ); 1236141cc406Sopenharmony_ci } else { 1237141cc406Sopenharmony_ci ps->AsicReg.RD_ModeControl = _ModeScan; 1238141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegModeControl, _ModeScan ); 1239141cc406Sopenharmony_ci } 1240141cc406Sopenharmony_ci IORegisterToScanner( ps, ps->RegScanStateControl ); 1241141cc406Sopenharmony_ci 1242141cc406Sopenharmony_ci for (dw = _SCANSTATE_BYTES, pb = ps->a_nbNewAdrPointer; dw; dw--, pb++) 1243141cc406Sopenharmony_ci IODataToScanner( ps, *pb ); 1244141cc406Sopenharmony_ci 1245141cc406Sopenharmony_ci IORegisterToScanner( ps, ps->RegRefreshScanState ); 1246141cc406Sopenharmony_ci 1247141cc406Sopenharmony_ci MiscStartTimer( &timer, (_SECOND/2)); 1248141cc406Sopenharmony_ci do { 1249141cc406Sopenharmony_ci 1250141cc406Sopenharmony_ci if (!( IOGetScanState( ps, _TRUE) & _SCANSTATE_STOP)) 1251141cc406Sopenharmony_ci break; 1252141cc406Sopenharmony_ci } 1253141cc406Sopenharmony_ci while( !MiscCheckTimer(&timer)); 1254141cc406Sopenharmony_ci 1255141cc406Sopenharmony_ci/* CHECK - this line has been added by Rick ? Why ? 1256141cc406Sopenharmony_ci * return (pScanData->bOldTempScanState = GetScanState (pScanData, FALSE)); 1257141cc406Sopenharmony_ci */ 1258141cc406Sopenharmony_ci ps->Scan.bOldScanState = IOGetScanState( ps, _TRUE ); 1259141cc406Sopenharmony_ci 1260141cc406Sopenharmony_ci ps->CloseScanPath( ps ); 1261141cc406Sopenharmony_ci} 1262141cc406Sopenharmony_ci 1263141cc406Sopenharmony_ci/*............................................................................. 1264141cc406Sopenharmony_ci * 1265141cc406Sopenharmony_ci */ 1266141cc406Sopenharmony_ci_LOC void IOSelectLampSource( pScanData ps ) 1267141cc406Sopenharmony_ci{ 1268141cc406Sopenharmony_ci ps->AsicReg.RD_ScanControl &= (~_SCAN_LAMPS_ON); 1269141cc406Sopenharmony_ci 1270141cc406Sopenharmony_ci if (ps->DataInf.dwScanFlag & (SCANDEF_TPA)) { 1271141cc406Sopenharmony_ci ps->AsicReg.RD_ScanControl |= _SCAN_TPALAMP_ON; 1272141cc406Sopenharmony_ci } else { 1273141cc406Sopenharmony_ci ps->AsicReg.RD_ScanControl |= _SCAN_NORMALLAMP_ON; 1274141cc406Sopenharmony_ci } 1275141cc406Sopenharmony_ci} 1276141cc406Sopenharmony_ci 1277141cc406Sopenharmony_ci/*............................................................................. 1278141cc406Sopenharmony_ci * 1279141cc406Sopenharmony_ci */ 1280141cc406Sopenharmony_ci_LOC Bool IOReadOneShadingLine( pScanData ps, pUChar pBuf, ULong len ) 1281141cc406Sopenharmony_ci{ 1282141cc406Sopenharmony_ci TimerDef timer; 1283141cc406Sopenharmony_ci 1284141cc406Sopenharmony_ci MiscStartTimer( &timer, _SECOND ); 1285141cc406Sopenharmony_ci 1286141cc406Sopenharmony_ci if( _ASIC_IS_98003 == ps->sCaps.AsicID ) 1287141cc406Sopenharmony_ci ps->Scan.bFifoSelect = ps->RegGFifoOffset; 1288141cc406Sopenharmony_ci 1289141cc406Sopenharmony_ci do { 1290141cc406Sopenharmony_ci if( IOReadFifoLength( ps ) >= ps->AsicReg.RD_Pixels ) { 1291141cc406Sopenharmony_ci 1292141cc406Sopenharmony_ci IOReadColorData( ps, pBuf, len ); 1293141cc406Sopenharmony_ci return _TRUE; 1294141cc406Sopenharmony_ci } 1295141cc406Sopenharmony_ci } while( _OK == MiscCheckTimer( &timer )); 1296141cc406Sopenharmony_ci 1297141cc406Sopenharmony_ci return _FALSE; 1298141cc406Sopenharmony_ci} 1299141cc406Sopenharmony_ci 1300141cc406Sopenharmony_ci/*............................................................................. 1301141cc406Sopenharmony_ci * 1302141cc406Sopenharmony_ci */ 1303141cc406Sopenharmony_ci_LOC ULong IOReadFifoLength( pScanData ps ) 1304141cc406Sopenharmony_ci{ 1305141cc406Sopenharmony_ci DataType Data; 1306141cc406Sopenharmony_ci 1307141cc406Sopenharmony_ci Data.dwValue = 0; 1308141cc406Sopenharmony_ci 1309141cc406Sopenharmony_ci if( _ASIC_IS_98003 != ps->sCaps.AsicID ) 1310141cc406Sopenharmony_ci ps->OpenScanPath( ps ); 1311141cc406Sopenharmony_ci 1312141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegBitDepth, _BIT0_7 ); 1313141cc406Sopenharmony_ci Data.dwOverlap.w1st.b1st = IODataFromRegister( ps, ps->Scan.bFifoSelect ); 1314141cc406Sopenharmony_ci 1315141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegBitDepth, _BIT8_15 ); 1316141cc406Sopenharmony_ci Data.dwOverlap.w1st.b2nd = IODataFromRegister( ps, ps->Scan.bFifoSelect ); 1317141cc406Sopenharmony_ci 1318141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegBitDepth, _BIT16_20 ); 1319141cc406Sopenharmony_ci Data.dwOverlap.w2nd.b1st = (IODataFromRegister( ps, ps->Scan.bFifoSelect) & 0x0f); 1320141cc406Sopenharmony_ci 1321141cc406Sopenharmony_ci if( _ASIC_IS_98003 != ps->sCaps.AsicID ) 1322141cc406Sopenharmony_ci ps->CloseScanPath( ps ); 1323141cc406Sopenharmony_ci 1324141cc406Sopenharmony_ci return Data.dwValue; 1325141cc406Sopenharmony_ci} 1326141cc406Sopenharmony_ci 1327141cc406Sopenharmony_ci/*............................................................................. 1328141cc406Sopenharmony_ci * 1) Initiates the scan states 1329141cc406Sopenharmony_ci * 2) Write the contents to corresponding registers (from ps->RegModeControl to 1330141cc406Sopenharmony_ci * ps->RegGreenGainOutDirect (P9363) or from ps->RegModeControl to 1331141cc406Sopenharmony_ci * ps->RegModeControl2 (48xx) 1332141cc406Sopenharmony_ci */ 1333141cc406Sopenharmony_ci_LOC void IOPutOnAllRegisters( pScanData ps ) 1334141cc406Sopenharmony_ci{ 1335141cc406Sopenharmony_ci pUChar pValue; 1336141cc406Sopenharmony_ci Byte bReg; 1337141cc406Sopenharmony_ci 1338141cc406Sopenharmony_ci /* setup scan states */ 1339141cc406Sopenharmony_ci if( _ASIC_IS_98003 == ps->sCaps.AsicID ) 1340141cc406Sopenharmony_ci IODownloadScanStates( ps ); 1341141cc406Sopenharmony_ci else { 1342141cc406Sopenharmony_ci IOSetToMotorRegister( ps ); 1343141cc406Sopenharmony_ci ps->OpenScanPath( ps ); 1344141cc406Sopenharmony_ci } 1345141cc406Sopenharmony_ci 1346141cc406Sopenharmony_ci if( _IS_ASIC98(ps->sCaps.AsicID)) { 1347141cc406Sopenharmony_ci 1348141cc406Sopenharmony_ci IODataToRegister(ps, ps->RegStepControl, ps->AsicReg.RD_StepControl); 1349141cc406Sopenharmony_ci IODataToRegister(ps, ps->RegMotor0Control, 1350141cc406Sopenharmony_ci ps->AsicReg.RD_Motor0Control); 1351141cc406Sopenharmony_ci 1352141cc406Sopenharmony_ci if( _ASIC_IS_98003 == ps->sCaps.AsicID ) 1353141cc406Sopenharmony_ci IODataToRegister(ps,ps->RegLineControl,ps->AsicReg.RD_LineControl); 1354141cc406Sopenharmony_ci 1355141cc406Sopenharmony_ci IODataToRegister(ps, ps->RegXStepTime, ps->AsicReg.RD_XStepTime); 1356141cc406Sopenharmony_ci IODataToRegister(ps, ps->RegModelControl, ps->AsicReg.RD_ModelControl); 1357141cc406Sopenharmony_ci 1358141cc406Sopenharmony_ci /* the 1st register to write */ 1359141cc406Sopenharmony_ci pValue = (pUChar)&ps->AsicReg.RD_Dpi; 1360141cc406Sopenharmony_ci 1361141cc406Sopenharmony_ci /* 0x21 - 0x28 */ 1362141cc406Sopenharmony_ci for (bReg = ps->RegDpiLow; 1363141cc406Sopenharmony_ci bReg <= ps->RegThresholdHigh; bReg++, pValue++) { 1364141cc406Sopenharmony_ci 1365141cc406Sopenharmony_ci IODataToRegister( ps, bReg, *pValue); 1366141cc406Sopenharmony_ci } 1367141cc406Sopenharmony_ci 1368141cc406Sopenharmony_ci IORegisterToScanner( ps, ps->RegInitDataFifo ); 1369141cc406Sopenharmony_ci IORegisterToScanner( ps, ps->RegRefreshScanState ); 1370141cc406Sopenharmony_ci 1371141cc406Sopenharmony_ci if( _ASIC_IS_98003 == ps->sCaps.AsicID ) 1372141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegModeControl, _ModeScan ); 1373141cc406Sopenharmony_ci else 1374141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegModeControl, (_ModeScan + _ModeFifoRSel)); 1375141cc406Sopenharmony_ci 1376141cc406Sopenharmony_ci } else { 1377141cc406Sopenharmony_ci 1378141cc406Sopenharmony_ci /* 1379141cc406Sopenharmony_ci * the original driver uses a loop, starting at RegModeControl 1380141cc406Sopenharmony_ci * 0x18 - 0x26 1381141cc406Sopenharmony_ci * as we use the Asic96Reg structure only for the differences 1382141cc406Sopenharmony_ci * to the AsicReg struct, we have to write to each register by hand 1383141cc406Sopenharmony_ci */ 1384141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegModeControl, ps->AsicReg.RD_ModeControl ); 1385141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegLineControl, ps->AsicReg.RD_LineControl ); 1386141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegScanControl, ps->AsicReg.RD_ScanControl ); 1387141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegMotorControl, 1388141cc406Sopenharmony_ci ps->Asic96Reg.RD_MotorControl ); 1389141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegModelControl, 1390141cc406Sopenharmony_ci ps->AsicReg.RD_ModelControl ); 1391141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegMemAccessControl, 1392141cc406Sopenharmony_ci ps->Asic96Reg.RD_MemAccessControl ); 1393141cc406Sopenharmony_ci 1394141cc406Sopenharmony_ci#if 0 1395141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1396141cc406Sopenharmony_ci ps->RegModeControl, ps->AsicReg.RD_ModeControl ); 1397141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1398141cc406Sopenharmony_ci ps->RegLineControl, ps->AsicReg.RD_LineControl ); 1399141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1400141cc406Sopenharmony_ci ps->RegScanControl, ps->AsicReg.RD_ScanControl ); 1401141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1402141cc406Sopenharmony_ci ps->RegMotorControl, ps->Asic96Reg.RD_MotorControl ); 1403141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1404141cc406Sopenharmony_ci ps->RegModelControl, ps->AsicReg.RD_ModelControl ); 1405141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1406141cc406Sopenharmony_ci ps->RegMemAccessControl, ps->Asic96Reg.RD_MemAccessControl ); 1407141cc406Sopenharmony_ci#endif 1408141cc406Sopenharmony_ci 1409141cc406Sopenharmony_ci pValue = (pUChar)&ps->AsicReg.RD_Dpi; 1410141cc406Sopenharmony_ci 1411141cc406Sopenharmony_ci /* 0x21 - 0x26 */ 1412141cc406Sopenharmony_ci for (bReg = ps->RegDpiLow; 1413141cc406Sopenharmony_ci bReg <= ps->RegWidthPixelsHigh; bReg++, pValue++) { 1414141cc406Sopenharmony_ci 1415141cc406Sopenharmony_ci IODataToRegister( ps, bReg, *pValue ); 1416141cc406Sopenharmony_ci#if 0 1417141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", bReg, *pValue ); 1418141cc406Sopenharmony_ci#endif 1419141cc406Sopenharmony_ci } 1420141cc406Sopenharmony_ci 1421141cc406Sopenharmony_ci /* the rest */ 1422141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegThresholdControl, 1423141cc406Sopenharmony_ci (Byte)ps->AsicReg.RD_ThresholdControl ); 1424141cc406Sopenharmony_ci 1425141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegWatchDogControl, 1426141cc406Sopenharmony_ci (Byte)ps->Asic96Reg.RD_WatchDogControl ); 1427141cc406Sopenharmony_ci 1428141cc406Sopenharmony_ci IODataToRegister( ps, ps->RegModelControl2, 1429141cc406Sopenharmony_ci ps->Asic96Reg.u26.RD_ModelControl2 ); 1430141cc406Sopenharmony_ci 1431141cc406Sopenharmony_ci#if 0 1432141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1433141cc406Sopenharmony_ci ps->RegThresholdControl, ps->AsicReg.RD_ThresholdControl ); 1434141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1435141cc406Sopenharmony_ci ps->RegWatchDogControl, ps->Asic96Reg.RD_WatchDogControl ); 1436141cc406Sopenharmony_ci DBG( DBG_LOW, "[0x%02x] = 0x%02x\n", 1437141cc406Sopenharmony_ci ps->RegModelControl2, ps->Asic96Reg.u26.RD_ModelControl2 ); 1438141cc406Sopenharmony_ci#endif 1439141cc406Sopenharmony_ci IORegisterToScanner( ps, ps->RegInitDataFifo ); 1440141cc406Sopenharmony_ci } 1441141cc406Sopenharmony_ci 1442141cc406Sopenharmony_ci if( _ASIC_IS_98003 != ps->sCaps.AsicID ) 1443141cc406Sopenharmony_ci ps->CloseScanPath( ps ); 1444141cc406Sopenharmony_ci} 1445141cc406Sopenharmony_ci 1446141cc406Sopenharmony_ci/*............................................................................. 1447141cc406Sopenharmony_ci * 1448141cc406Sopenharmony_ci */ 1449141cc406Sopenharmony_ci_LOC void IOReadColorData( pScanData ps, pUChar pBuf, ULong len ) 1450141cc406Sopenharmony_ci{ 1451141cc406Sopenharmony_ci ps->AsicReg.RD_ModeControl = _ModeFifoRSel; 1452141cc406Sopenharmony_ci IOReadScannerImageData( ps, pBuf, len ); 1453141cc406Sopenharmony_ci 1454141cc406Sopenharmony_ci ps->AsicReg.RD_ModeControl = _ModeFifoGSel; 1455141cc406Sopenharmony_ci IOReadScannerImageData( ps, pBuf + len, len ); 1456141cc406Sopenharmony_ci 1457141cc406Sopenharmony_ci ps->AsicReg.RD_ModeControl = _ModeFifoBSel; 1458141cc406Sopenharmony_ci IOReadScannerImageData( ps, pBuf + len * 2, len ); 1459141cc406Sopenharmony_ci} 1460141cc406Sopenharmony_ci 1461141cc406Sopenharmony_ci/* END PLUSTEK-PP_GENERICIO.C ...............................................*/ 1462