1/* @file plustek-pp_models.c 2 * @brief model specific stuff 3 * 4 * based on sources acquired from Plustek Inc. 5 * Copyright (C) 1998 Plustek Inc. 6 * Copyright (C) 2000-2004 Gerhard Jaeger <gerhard@gjaeger.de> 7 * also based on the work done by Rick Bronson 8 * 9 * History: 10 * - 0.30 - initial version 11 * - 0.31 - no changes 12 * - 0.32 - no changes 13 * - 0.33 - no changes 14 * - 0.34 - no changes 15 * - 0.35 - added some comments 16 * - did some fine tuning on the 9630P and 12000P/9600P models 17 * - moved function initPageSettings() to this module 18 * - 0.36 - as the ps->MaxWideLineBlks and ps->MaxWideLineLen are only used 19 * for the OP 4800, it has been removed from pScanData 20 * - changed settings of OP600 according to the Primax Direct 4800 tests 21 * - removed dwPreferSize from struct ScannerCaps 22 * - fixed the 5seconds bed-hit problem for ASIC 96001/3 based models 23 * - changes, due to define renaming 24 * - 0.37 - added ButtonCount init 25 * - added A3I model 26 * - added functions modelInitCaps(), modelInitMotor() and 27 * modelSetBufferSizes() 28 * - 0.38 - added P12 stuff 29 * - code cleanup 30 * - 0.39 - no changes 31 * - 0.40 - changed back to build 0.39-3 (disabled A3I stuff) 32 * - 0.41 - added _OVR_PLUSTEK_4800P switch 33 * - 0.42 - added SFLAG_CUSTOM_GAMMA to capabilities 34 * - added _OVR_PRIMAX_4800D30 switch 35 * - changed include names 36 * - 0.43 - no changes 37 * . 38 * <hr> 39 * This file is part of the SANE package. 40 * 41 * This program is free software; you can redistribute it and/or 42 * modify it under the terms of the GNU General Public License as 43 * published by the Free Software Foundation; either version 2 of the 44 * License, or (at your option) any later version. 45 * 46 * This program is distributed in the hope that it will be useful, but 47 * WITHOUT ANY WARRANTY; without even the implied warranty of 48 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 49 * General Public License for more details. 50 * 51 * You should have received a copy of the GNU General Public License 52 * along with this program. If not, see <https://www.gnu.org/licenses/>. 53 * 54 * As a special exception, the authors of SANE give permission for 55 * additional uses of the libraries contained in this release of SANE. 56 * 57 * The exception is that, if you link a SANE library with other files 58 * to produce an executable, this does not by itself cause the 59 * resulting executable to be covered by the GNU General Public 60 * License. Your use of that executable is in no way restricted on 61 * account of linking the SANE library code into it. 62 * 63 * This exception does not, however, invalidate any other reasons why 64 * the executable file might be covered by the GNU General Public 65 * License. 66 * 67 * If you submit changes to SANE to the maintainers to be included in 68 * a subsequent release, you agree by submitting the changes that 69 * those changes may be distributed with this exception intact. 70 * 71 * If you write modifications of your own for SANE, it is your choice 72 * whether to permit this exception to apply to your modifications. 73 * If you do not wish that, delete this exception notice. 74 * <hr> 75 */ 76#include "plustek-pp_scan.h" 77 78/*************************** local functions *********************************/ 79 80/*............................................................................. 81 * initialize the extension according to the page size... 82 */ 83static void modelInitPageSettings( pScanData ps ) 84{ 85 DBG(DBG_LOW, "modelInitPageSettings()\n" ); 86 87 if( MODEL_OP_9630PL == ps->sCaps.Model ) 88 ps->dwScannerSize = _SCANSIZE_LEGAL; 89 else if( MODEL_OP_A3I == ps->sCaps.Model ) 90 ps->dwScannerSize = _SCANSIZE_A3; 91 else 92 ps->dwScannerSize = _SCANSIZE_A4; 93 94 /* default width for all but A3 - 8.5"* 300dpi (_MEASURE_BASE) */ 95 ps->sCaps.wMaxExtentX = 2550; 96 97 /* this applies to all scanners but the A3 model */ 98 ps->LensInf.rExtentX.wMin = 150; 99 ps->LensInf.rExtentX.wDef = 2550; 100 ps->LensInf.rExtentX.wMax = 2550; 101 ps->LensInf.rExtentX.wPhyMax = 2500; 102 103 ps->LensInf.rExtentY.wMin = 150; 104 105 ps->LensInf.wBeginX = 0; 106 ps->LensInf.wBeginY = 0; 107 108 switch( ps->dwScannerSize ) { 109 110 case _SCANSIZE_A4: 111 /* 11.69 inches */ 112 DBG( DBG_LOW, "A4 set\n" ); 113 ps->sCaps.wMaxExtentY = 114 ps->LensInf.rExtentY.wDef = 115 ps->LensInf.rExtentY.wMax = 116 ps->LensInf.rExtentY.wPhyMax = _MEASURE_BASE * 11.6934; 117 break; 118 119 case _SCANSIZE_A3: 120 /* 17 inches */ 121 DBG( DBG_LOW, "A3 set\n" ); 122 ps->sCaps.wMaxExtentY = 123 ps->LensInf.rExtentY.wMax = 124 ps->LensInf.rExtentY.wDef = 125 ps->LensInf.rExtentY.wPhyMax = _MEASURE_BASE * 17; 126 127 /* _MEASURE_BASE * 11.69 */ 128 ps->sCaps.wMaxExtentX = 129 ps->LensInf.rExtentX.wDef = 130 ps->LensInf.rExtentX.wMax = 3507; 131 ps->LensInf.rExtentX.wPhyMax = 3500; 132 break; 133 134 case _SCANSIZE_LETTER: 135 /* 11 inches */ 136 DBG( DBG_LOW, "Letter set\n" ); 137 ps->sCaps.wMaxExtentY = 138 ps->LensInf.rExtentY.wDef = 139 ps->LensInf.rExtentY.wMax = 140 ps->LensInf.rExtentY.wPhyMax = _MEASURE_BASE * 11; 141 break; 142 143 case _SCANSIZE_LEGAL: 144 /* 14 inches */ 145 DBG( DBG_LOW, "Legal set\n" ); 146 ps->sCaps.wMaxExtentY = 147 ps->LensInf.rExtentY.wDef = 148 ps->LensInf.rExtentY.wMax = 149 ps->LensInf.rExtentY.wPhyMax = _MEASURE_BASE * 14; 150 } 151 152 /* 153 * add this value to avoid the problems in binary mode 154 */ 155 ps->LensInf.rExtentY.wMax += 64; 156 157 /* set the DPI stuff */ 158 ps->LensInf.rDpiX.wMin = 16; 159 ps->LensInf.rDpiX.wDef = 50; 160 ps->LensInf.rDpiX.wMax = (ps->PhysicalDpi * 16); 161 ps->LensInf.rDpiX.wPhyMax = ps->PhysicalDpi; 162 ps->LensInf.rDpiY.wMin = 16; 163 ps->LensInf.rDpiY.wDef = 50; 164 ps->LensInf.rDpiY.wMax = (ps->PhysicalDpi * 16); 165 ps->LensInf.rDpiY.wPhyMax = (ps->PhysicalDpi * 2); 166} 167 168/*............................................................................. 169 * set the scanner capabilities 170 */ 171static void modelInitCaps( pScanData ps ) 172{ 173 ps->sCaps.wIOBase = _NO_BASE; 174 ps->sCaps.dwFlag = SFLAG_CUSTOM_GAMMA; 175} 176 177/*............................................................................. 178 * set the motor stuff 179 */ 180static void modelInitMotor( pScanData ps ) 181{ 182 if( _ASIC_IS_96001 == ps->sCaps.AsicID ) { 183 ps->FullStep = _MotorFullStep96001; 184 ps->MotorOn = _MotorOn96001; 185 ps->IgnorePF = _MotorIgnorePF96001; 186 ps->StepMask = ~ps->FullStep; 187 } else { 188 ps->FullStep = _Motor1FullStep; 189 ps->MotorOn = _MotorOn; 190 ps->IgnorePF = _MotorIgnorePF; 191 ps->StepMask = _MotorStepMask; 192 } 193 194 ps->BackwardSteps = 4000; 195} 196 197/*............................................................................. 198 * according to the models' capabilities, set the buffer stuff 199 */ 200static void modelSetBufferSizes( pScanData ps ) 201{ 202 /* should depend on the scan-area !!!! */ 203 if( 400 == ps->PhysicalDpi ) { 204 205 /* assuming a A3I */ 206 ps->BufferSizeBase = 3517; 207 ps->BufferForColorRunTable = (5500 * 4); /* might be 17" * 800dpi !!! */ 208 209 } else if( 600 == ps->PhysicalDpi ) { 210 211 ps->BufferSizeBase = 2560; 212 ps->BufferForColorRunTable = (5500 * 4); 213 214 } else { 215 ps->BufferSizeBase = 1280; 216 ps->BufferForColorRunTable = 9000; 217 } 218 219 ps->BufferSizePerModel = ps->BufferSizeBase * 2; 220 ps->BufferForDataRead1 = ps->BufferSizePerModel * 3; 221 222 /* patch that for the 600 DPI models OP9630 etc.*/ 223 if(( 300 != ps->PhysicalDpi) && (_ASIC_IS_96003 == ps->sCaps.AsicID)) 224 ps->BufferForDataRead1 += 300; 225 226 ps->BufferFor1stColor = (ps->BufferSizePerModel * 17); 227 ps->BufferFor2ndColor = (ps->BufferSizePerModel * 9); 228 ps->TotalBufferRequire = (ps->BufferFor1stColor + 229 ps->BufferFor2ndColor + 230 ps->BufferForDataRead1 + 231 ps->BufferForColorRunTable ); 232} 233 234/************************ exported functions *********************************/ 235 236/*............................................................................. 237 * set the model to 4800 238 */ 239_LOC void ModelSet4800( pScanData ps ) 240{ 241 DBG( DBG_LOW, "ModelSet4800()\n" ); 242 243 /* has 96001 ASIC */ 244 ps->sCaps.AsicID = _ASIC_IS_96001; 245 ps->sCaps.Model = MODEL_OP_4800P; 246 ps->Device.buttons = 0; 247 ps->Device.ModelCtrl = (_ModelDpi300 | _ModelMemSize32k96001 | _ModelWhiteIs0); 248 ps->Device.DataOriginX = 72; 249 250 ps->PhysicalDpi = 300; 251 ps->TimePerLine = 0x30; 252 ps->Offset70 = 70; 253 254 modelSetBufferSizes( ps ); 255 256 ps->a_wGrayInitTime[0] = 220; /* _EppTimeForOthers */ 257 ps->a_wGrayInitTime[1] = 720; /* _SppTimeForOthers */ 258 ps->a_wGrayInitTime[2] = 360; /* _BidirTimeForOthers */ 259 ps->a_wColorInitTime[0] = 500; /* _EppTimeForColor */ 260 ps->a_wColorInitTime[1] = 1680; /* _SppTimeForColor */ 261 ps->a_wColorInitTime[2] = 1100; /* _BidirTimeForColor */ 262 263 ps->AsicRedColor = _ASIC_REDCOLOR; 264 ps->AsicGreenColor = _ASIC_GREENCOLOR; 265 ps->RedDataReady = _RED_DATA_READY; 266 ps->GreenDataReady = _GREEN_DATA_READY; 267 268 /* 269 * used for shading stuff (see dac.c) 270 */ 271 ps->FBKScanLineBlks = 5; 272 ps->FBKScanLineLenBase = 1024; 273 ps->FBKScanLineLen = (ps->FBKScanLineLenBase * 3); 274 275 ps->ShadingBufferSize = ps->FBKScanLineLen; 276 ps->ShadingBankSize = (ps->FBKScanLineLenBase * 4); 277 ps->ShadingBankRed = (_MemBankSize4k96001 | 0x3a); 278 ps->ShadingBankGreen = (_MemBankSize4k96001 | 0x3e); 279 ps->ShadingBankBlue = (_MemBankSize4k96001 | 0x3c); 280 ps->ShadingScanLineBlks = 6; 281 ps->ShadingScanLineLen = (ps->BufferSizeBase * 3); 282 ps->OneScanLineLen = (ps->BufferSizePerModel * 3); 283 284 modelInitMotor( ps ); 285 modelInitCaps ( ps ); 286 modelInitPageSettings( ps ); 287 288 DBG( DBG_LOW, "ModelSet4800() done.\n" ); 289} 290 291/*............................................................................. 292 * set the model to 4830 293 */ 294_LOC void ModelSet4830( pScanData ps ) 295{ 296 DBG( DBG_LOW, "ModelSet4830()\n" ); 297 298 /* has 96003 ASIC */ 299 ps->sCaps.Model = MODEL_OP_4830P; 300 if( _OVR_PRIMAX_4800D30 == ps->ModelOverride ) { 301 DBG( DBG_LOW, "Model Override --> Primax 4800D 30\n" ); 302 ps->sCaps.Model = MODEL_PMX_4800D3; 303 } 304 ps->sCaps.AsicID = _ASIC_IS_96003; 305 ps->Device.buttons = 1; 306 ps->Device.ModelCtrl = (_ModelDpi300 | _ModelMemSize32k3 | _ModelWhiteIs0); 307 ps->Device.DataOriginX = 72; 308 309 ps->PhysicalDpi = 300; 310 ps->TimePerLine = 0x30; 311 ps->Offset70 = 70; 312 313 modelSetBufferSizes( ps ); 314 315 ps->a_wGrayInitTime[0] = 220; /* _EppTimeForOthers */ 316 ps->a_wGrayInitTime[1] = 720; /* _SppTimeForOthers */ 317 ps->a_wGrayInitTime[2] = 360; /* _BidirTimeForOthers */ 318 ps->a_wColorInitTime[0] = 500; /* _EppTimeForColor */ 319 ps->a_wColorInitTime[1] = 1680; /* _SppTimeForColor */ 320 ps->a_wColorInitTime[2] = 1100; /* _BidirTimeForColor */ 321 322 ps->AsicRedColor = _ASIC_REDCOLOR; 323 ps->AsicGreenColor = _ASIC_GREENCOLOR; 324 ps->RedDataReady = _RED_DATA_READY; 325 ps->GreenDataReady = _GREEN_DATA_READY; 326 327 /* 328 * used for shading stuff (see dac.c) 329 */ 330 ps->FBKScanLineBlks = 5; 331 ps->FBKScanLineLenBase = 1024; 332 ps->FBKScanLineLen = (ps->FBKScanLineLenBase * 3); 333 334 ps->ShadingBufferSize = ps->FBKScanLineLen; 335 ps->ShadingBankSize = (ps->FBKScanLineLenBase * 4); 336 ps->ShadingBankRed = (_MemBankSize4k | 0x3a); 337 ps->ShadingBankGreen = (_MemBankSize4k | 0x3e); 338 ps->ShadingBankBlue = (_MemBankSize4k | 0x3c); 339 ps->ShadingScanLineBlks = 6; 340 ps->ShadingScanLineLen = (ps->BufferSizeBase * 3); 341 ps->OneScanLineLen = (ps->BufferSizePerModel * 3); 342 343 modelInitMotor( ps ); 344 modelInitCaps ( ps ); 345 modelInitPageSettings( ps ); 346 347 DBG( DBG_LOW, "ModelSet4830() done.\n" ); 348} 349 350/*............................................................................. 351 * set the model to 600, tested on a Primax Direct 4800 and OP600 352 */ 353_LOC void ModelSet600( pScanData ps ) 354{ 355 DBG( DBG_LOW, "ModelSet600()\n" ); 356 357 /* 358 * set to 4830 first, then do the differences 359 */ 360 ModelSet4830( ps ); 361 ps->Device.buttons = 0; 362 363 if( _OVR_PLUSTEK_4800P == ps->ModelOverride ) { 364 365 DBG( DBG_LOW, "Model Override --> OpticPro4800\n" ); 366 ps->sCaps.Model = MODEL_OP_4800P; 367 368 } else if( _OVR_PRIMAX_4800D == ps->ModelOverride ) { 369 370 DBG( DBG_LOW, "Model Override --> Primax 4800D\n" ); 371 ps->sCaps.Model = MODEL_PMX_4800D; 372 373 } else { 374 375 ps->sCaps.Model = MODEL_OP_600P; 376 377 /* for Plustek OpticPro 600P it's necessary to swap Red and Green 378 * changed by mh moloch@nikocity.de 379 */ 380 ps->AsicRedColor = _ASIC_GREENCOLOR; 381 ps->AsicGreenColor = _ASIC_REDCOLOR; 382 } 383 384 DBG( DBG_LOW, "ModelSet600() done.\n" ); 385} 386 387/*............................................................................. 388 * set the model to 12000P, 96000P (tested on a OP96000P) 389 */ 390_LOC void ModelSet12000( pScanData ps ) 391{ 392 DBG( DBG_LOW, "ModelSet12000()\n" ); 393 394 /* 395 * set to 9630 first, then do the differences 396 */ 397 ModelSet9630( ps ); 398 ps->Device.buttons = 0; 399 ps->sCaps.Model = MODEL_OP_12000P; 400 401 /* 402 * swapped Red and Green for 12000P/96000P 403 */ 404 ps->AsicRedColor = _ASIC_GREENCOLOR; 405 ps->AsicGreenColor = _ASIC_REDCOLOR; 406 ps->RedDataReady = _GREEN_DATA_READY; 407 ps->GreenDataReady = _RED_DATA_READY; 408 409 DBG( DBG_LOW, "ModelSet12000() done.\n" ); 410} 411 412/*............................................................................. 413 * set the model to A3I 414 */ 415_LOC void ModelSetA3I( pScanData ps ) 416{ 417 DBG( DBG_LOW, "ModelSetA3I()\n" ); 418 419 /* 420 * has 96003 ASIC 421 */ 422 ps->Device.buttons = 1; 423 ps->sCaps.Model = MODEL_OP_A3I; 424 ps->sCaps.AsicID = _ASIC_IS_96003; 425 426 ps->Device.ModelCtrl = (_ModelDpi400 | _ModelMemSize128k4 | _ModelWhiteIs0); 427 ps->Device.DataOriginX = 164; 428 429 ps->PhysicalDpi = 400; 430 ps->TimePerLine = 0x50; 431 ps->Offset70 = 145; 432 433 modelSetBufferSizes( ps ); 434 435 ps->a_wGrayInitTime[0] = 133; /* _EppTimeForOthers */ 436 ps->a_wGrayInitTime[1] = 720; /* _SppTimeForOthers */ 437 ps->a_wGrayInitTime[2] = 300; /* _BidirTimeForOthers */ 438 ps->a_wColorInitTime[0] = 400; /* _EppTimeForColor */ 439 ps->a_wColorInitTime[1] = 1800; /* _SppTimeForColor */ 440 ps->a_wColorInitTime[2] = 800; /* _BidirTimeForColor */ 441 442 ps->AsicRedColor = _ASIC_GREENCOLOR; 443 ps->AsicGreenColor = _ASIC_REDCOLOR; 444 ps->RedDataReady = _GREEN_DATA_READY; 445 ps->GreenDataReady = _RED_DATA_READY; 446 447 ps->FBKScanLineBlks = 10; 448 ps->FBKScanLineLenBase = 2048; 449 ps->FBKScanLineLen = (ps->FBKScanLineLenBase * 3); 450 451 ps->ShadingBufferSize = (1024 * 7); 452 ps->ShadingBankSize = 8192; 453 ps->ShadingBankRed = (_MemBankSize8k | 0x34); 454 ps->ShadingBankGreen = (_MemBankSize8k | 0x3c); 455 ps->ShadingBankBlue = (_MemBankSize8k | 0x38); 456 ps->ShadingScanLineBlks = 10; 457 ps->ShadingScanLineLen = (ps->BufferSizeBase * 3); 458 ps->OneScanLineLen = (ps->ShadingScanLineLen * 2); 459 460 modelInitMotor( ps ); 461 ps->BackwardSteps = 9000; 462 463 modelInitCaps( ps ); 464 modelInitPageSettings( ps ); 465 466 /* 467 * need to double the vals 468 */ 469 ps->LensInf.rExtentX.wMax *= 2; 470 ps->LensInf.rExtentX.wPhyMax *= 2; 471 ps->LensInf.rExtentY.wMax *= 2; 472 ps->LensInf.rExtentY.wPhyMax *= 2; 473 474 DBG( DBG_LOW, "ModelSetA3I() done.\n" ); 475} 476 477/*............................................................................. 478 * set the model to 9630 479 */ 480_LOC void ModelSet9630( pScanData ps ) 481{ 482 DBG( DBG_LOW, "ModelSet9360()\n" ); 483 484 /* 485 * has 96003 ASIC 486 */ 487 if( _OVR_PLUSTEK_9630PL == ps->ModelOverride ) { 488 DBG( DBG_LOW, "Model Override --> 9630PL\n" ); 489 ps->sCaps.Model = MODEL_OP_9630PL; 490 } else { 491 ps->sCaps.Model = MODEL_OP_9630P; 492 } 493 494 ps->Device.buttons = 1; 495 ps->sCaps.AsicID = _ASIC_IS_96003; 496 497 ps->Device.ModelCtrl = (_ModelDpi600 | _ModelMemSize128k4 | _ModelWhiteIs0); 498 ps->Device.DataOriginX = 64; 499 500 ps->PhysicalDpi = 600; 501 ps->TimePerLine = 0x5a; 502 ps->Offset70 = 95; 503 504 modelSetBufferSizes( ps ); 505 506 ps->a_wGrayInitTime[0] = 133; /* _EppTimeForOthers */ 507 ps->a_wGrayInitTime[1] = 720; /* _SppTimeForOthers */ 508 ps->a_wGrayInitTime[2] = 300; /* _BidirTimeForOthers */ 509 ps->a_wColorInitTime[0] = 400; /* _EppTimeForColor */ 510 ps->a_wColorInitTime[1] = 1800; /* _SppTimeForColor */ 511 ps->a_wColorInitTime[2] = 800; /* _BidirTimeForColor */ 512 513 ps->AsicRedColor = _ASIC_REDCOLOR; 514 ps->AsicGreenColor = _ASIC_GREENCOLOR; 515 ps->RedDataReady = _RED_DATA_READY; 516 ps->GreenDataReady = _GREEN_DATA_READY; 517 518 ps->ShadingBufferSize = (1024 * 7); 519 ps->ShadingBankSize = 8192; 520 ps->ShadingBankRed = (_MemBankSize8k | 0x34); 521 ps->ShadingBankGreen = (_MemBankSize8k | 0x3c); 522 ps->ShadingBankBlue = (_MemBankSize8k | 0x38); 523 ps->ShadingScanLineBlks = 10; 524 ps->ShadingScanLineLen = (2560 * 3); 525 526 ps->FBKScanLineBlks = 10; 527 ps->FBKScanLineLenBase = 2048; 528 ps->FBKScanLineLen = (ps->FBKScanLineLenBase * 6); 529 530 ps->OneScanLineLen = (5120 * 3); 531 532 modelInitMotor( ps ); 533 ps->BackwardSteps = 9000; 534 535 modelInitCaps( ps ); 536 modelInitPageSettings( ps ); 537 538 /* 539 * need to double the vals 540 */ 541 ps->LensInf.rExtentX.wMax *= 2; 542 ps->LensInf.rExtentX.wPhyMax *= 2; 543 ps->LensInf.rExtentY.wMax *= 2; 544 ps->LensInf.rExtentY.wPhyMax *= 2; 545 546 DBG( DBG_LOW, "ModelSet9630() done.\n" ); 547} 548 549/*............................................................................. 550 * set the model to 9636 (ASIC 98001 models) 551 * works for 9636P Turbo and 9636T /12000T 552 */ 553_LOC void ModelSet9636( pScanData ps ) 554{ 555 DBG( DBG_LOW, "ModelSet9636()\n" ); 556 557 /* 558 *set to 9630 first, then do the differences 559 */ 560 ModelSet9630( ps ); 561 ps->Device.buttons = 0; 562 563 /* 564 * has 98001 ASIC 565 */ 566 if( _OVR_PLUSTEK_9636 == ps->ModelOverride ) { 567 DBG( DBG_LOW, "Model Override --> 9636P+/Turbo\n" ); 568 ps->sCaps.Model = MODEL_OP_9636PP; 569 } else if( _OVR_PLUSTEK_9636P == ps->ModelOverride ) { 570 DBG( DBG_LOW, "Model Override --> 9636P\n" ); 571 ps->sCaps.Model = MODEL_OP_9636P; 572 } else { 573 ps->sCaps.Model = MODEL_OP_9636T; 574 ps->sCaps.dwFlag |= SFLAG_TPA; 575 } 576 577 ps->Device.DataOriginX = 72; 578 ps->sCaps.AsicID = _ASIC_IS_98001; 579 580 ps->TotalBufferRequire = _LINE_BUFSIZE * 2 + _LINE_BUFSIZE1 + 581 ps->BufferForColorRunTable + _PROCESS_BUFSIZE; 582 583 /* do it again, as ModelSet9630() changes the result of this function !*/ 584 modelInitPageSettings( ps ); 585 586 DBG( DBG_LOW, "ModelSet9636() done.\n" ); 587} 588 589/*............................................................................. 590 * set the model to P12 (ASIC 98003 models) 591 */ 592_LOC void ModelSetP12( pScanData ps ) 593{ 594 DBG( DBG_LOW, "ModelSetP12()\n" ); 595 596 /* 597 * set to 9630 first, then do the differences 598 */ 599 ModelSet9630( ps ); 600 ps->Device.DataOriginX = 72; 601 ps->sCaps.Model = MODEL_OP_PT12; 602 ps->sCaps.AsicID = _ASIC_IS_98003; 603 604 ps->TotalBufferRequire = _SizeTotalBufTpa; 605 606 /* do it again, as ModelSet9630() changes the result of this function !*/ 607 modelInitPageSettings( ps ); 608 609 DBG( DBG_LOW, "ModelSetP12() done.\n" ); 610} 611 612/* END PLUSTEK-PP_MODEL.C ...................................................*/ 613