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 */
modelInitPageSettings( pScanData ps )83 static 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 */
modelInitCaps( pScanData ps )171 static 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 */
modelInitMotor( pScanData ps )180 static 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 */
modelSetBufferSizes( pScanData ps )200 static 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 */
ModelSet4800( pScanData ps )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 */
ModelSet4830( pScanData ps )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 */
ModelSet600( pScanData ps )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 */
ModelSet12000( pScanData ps )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 */
ModelSetA3I( pScanData ps )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 */
ModelSet9630( pScanData ps )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 */
ModelSet9636( pScanData ps )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 */
ModelSetP12( pScanData ps )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