Lines Matching defs:dev

72 static SANE_Bool fnReadToDriver( U12_Device *dev )
74 dev->regs.RD_ModeControl = _ModeFifoBSel;
75 u12io_ReadMonoData( dev, dev->scan.BufPut.blue.bp,
76 dev->DataInf.dwAsicBytesPerPlane );
78 dev->regs.RD_ModeControl = _ModeFifoGSel;
79 u12io_ReadMonoData( dev, dev->scan.BufPut.green.bp,
80 dev->DataInf.dwAsicBytesPerPlane );
82 if( dev->scan.gd_gk.wGreenKeep )
83 dev->scan.gd_gk.wGreenKeep--;
85 dev->scan.BufPut.green.bp += dev->DataInf.dwAsicBytesPerPlane;
87 if( dev->scan.BufPut.green.bp >= dev->scan.BufEnd.green.bp )
88 dev->scan.BufPut.green.bp = dev->scan.BufBegin.green.bp;
91 dev->regs.RD_ModeControl = _ModeFifoRSel;
92 u12io_ReadMonoData( dev, dev->scan.BufPut.red.bp,
93 dev->DataInf.dwAsicBytesPerPlane );
95 dev->scan.BufPut.red.bp += dev->DataInf.dwAsicBytesPerPlane;
96 if( dev->scan.BufPut.red.bp >= dev->scan.BufEnd.red.bp )
97 dev->scan.BufPut.red.bp = dev->scan.BufBegin.red.bp;
99 if( dev->scan.bd_rk.wRedKeep ) {
100 dev->scan.bd_rk.wRedKeep--;
105 dev->scan.BufData.green.bp = dev->scan.BufGet.green.bp;
106 dev->scan.BufData.red.bp = dev->scan.BufGet.red.bp;
107 dev->scan.BufData.blue.bp = dev->scan.BufGet.blue.bp;
109 dev->scan.BufGet.red.bp += dev->DataInf.dwAsicBytesPerPlane;
110 dev->scan.BufGet.green.bp += dev->DataInf.dwAsicBytesPerPlane;
112 if( dev->scan.BufGet.red.bp >= dev->scan.BufEnd.red.bp )
113 dev->scan.BufGet.red.bp = dev->scan.BufBegin.red.bp;
115 if( dev->scan.BufGet.green.bp >= dev->scan.BufEnd.green.bp )
116 dev->scan.BufGet.green.bp = dev->scan.BufBegin.green.bp;
124 static SANE_Bool fnReadOutScanner( U12_Device *dev )
126 if( dev->scan.bd_rk.wBlueDiscard ) {
128 dev->scan.bd_rk.wBlueDiscard--;
129 dev->regs.RD_ModeControl = _ModeFifoBSel;
131 u12io_ReadMonoData( dev, dev->bufs.b1.pReadBuf,
132 dev->DataInf.dwAsicBytesPerPlane );
134 if( dev->scan.gd_gk.wGreenDiscard ) {
135 dev->scan.gd_gk.wGreenDiscard--;
137 dev->regs.RD_ModeControl = _ModeFifoGSel;
138 u12io_ReadMonoData( dev, dev->bufs.b1.pReadBuf,
139 dev->DataInf.dwAsicBytesPerPlane );
144 u12io_ReadColorData( dev, dev->bufs.b1.pReadBuf,
145 dev->DataInf.dwAsicBytesPerPlane );
152 static SANE_Bool fnEveryLine( U12_Device *dev )
154 _VAR_NOT_USED( dev );
158 static SANE_Bool fnSampleLines( U12_Device *dev )
160 dev->DataInf.wYSum += dev->DataInf.xyAppDpi.y;
162 if( dev->DataInf.wYSum >= dev->DataInf.xyPhyDpi.y ) {
163 dev->DataInf.wYSum -= dev->DataInf.xyPhyDpi.y;
169 static SANE_Bool fnSamplePreview( U12_Device *dev )
171 dev->DataInf.wYSum += wPreviewScanned;
172 if( dev->DataInf.wYSum >= 150 ) {
174 dev->DataInf.wYSum -= 150;
186 static void fnDataDirect( U12_Device *dev, void *src, void *dest, u_long len )
188 _VAR_NOT_USED( dev );
194 static void fnColorDirect( U12_Device *dev, void *pb, void *img, u_long len )
202 for ( len = dev->DataInf.dwAsicPixelsPerPlane; len; len--, src++, dest++) {
205 dest->Green = src[dev->DataInf.dwAsicPixelsPerPlane];
206 dest->Blue = src[dev->DataInf.dwAsicPixelsPerPlane*2];
214 static void fnColor42( U12_Device *dev, void *pb, void *img, u_long len )
225 for ( i = dev->DataInf.dwAsicPixelsPerPlane; i; i--, src++, dest++) {
228 dest->Green = (src[dev->DataInf.dwAsicPixelsPerPlane]) << 4;
229 dest->Blue = (src[dev->DataInf.dwAsicPixelsPerPlane * 2]) << 4;
235 static void u12image_SetupScanStateVariables( U12_Device *dev, u_long index )
240 dev->scan.dpiIdx = index;
242 if(!(dev->DataInf.dwScanFlag & _SCANDEF_TPA)) {
244 dev->shade.wExposure = nmlScan[index].exposureTime;
245 dev->shade.wXStep = nmlScan[index].xStepTime;
247 if( dev->shade.intermediate & _ScanMode_AverageOut ) {
248 dev->shade.wExposure >>= 1;
249 dev->shade.wXStep >>= 1;
252 if( dev->DataInf.dwScanFlag & _SCANDEF_Transparency ) {
253 dev->shade.wExposure = posScan[index].exposureTime;
254 dev->shade.wXStep = posScan[index].xStepTime;
256 dev->shade.wExposure = dev->scan.negScan[index].exposureTime;
257 dev->shade.wXStep = dev->scan.negScan[index].xStepTime;
260 dev->scan.dwInterval = 1;
262 if( dev->DataInf.wPhyDataType == COLOR_BW )
265 if( dev->DataInf.wPhyDataType == COLOR_256GRAY )
272 if((dev->DataInf.xyAppDpi.y >= 300) && var.dwValue &&
273 (dev->DataInf.dwAsicBytesPerPlane <= var.dwValue)) {
274 dev->scan.dwInterval <<= 1;
277 if( var.dwValue && dev->DataInf.dwAsicBytesPerPlane > var.dwValue ) {
278 if((var.dwValue << 1) > dev->DataInf.dwAsicBytesPerPlane)
279 dev->scan.dwInterval <<= 1;
281 if((var.dwValue << 2) > dev->DataInf.dwAsicBytesPerPlane)
282 dev->scan.dwInterval <<= 2;
284 dev->scan.dwInterval <<= 3;
287 if( dev->DataInf.wPhyDataType >= COLOR_TRUE24 ) {
289 if( dev->DataInf.xyPhyDpi.y > 75U ) {
290 if( dev->f0_8_16 ) {
291 dev->scan.gd_gk.wGreenDiscard = dev->DataInf.xyPhyDpi.y / 75U;
293 dev->scan.gd_gk.wGreenDiscard = dev->DataInf.xyPhyDpi.y / 150U;
296 dev->scan.gd_gk.wGreenDiscard = 1;
299 dev->scan.bd_rk.wBlueDiscard = dev->scan.gd_gk.wGreenDiscard << 1;
301 dev->scan.bd_rk.wBlueDiscard = dev->scan.gd_gk.wGreenDiscard = 0;
308 u12image_GetPhysDPI( U12_Device *dev, ImgDef *img, SANE_Bool fDpiX )
312 if( img->xyDpi.x > dev->dpi_max_x )
313 return dev->dpi_max_x;
319 if( img->xyDpi.y > dev->dpi_max_y )
320 return dev->dpi_max_y;
329 static void u12image_GetImageInfo( U12_Device *dev, ImgDef *image )
333 dev->DataInf.xyPhyDpi.x = u12image_GetPhysDPI(dev, image, SANE_TRUE );
334 dev->DataInf.xyPhyDpi.y = u12image_GetPhysDPI(dev, image, SANE_FALSE);
337 dev->DataInf.xyPhyDpi.x, dev->DataInf.xyPhyDpi.y );
345 dev->DataInf.xyRatio = (double)dev->DataInf.xyPhyDpi.y/
346 (double)dev->DataInf.xyPhyDpi.x;
348 dev->DataInf.dwAppLinesPerArea = (u_long)image->crArea.cy *
351 dev->DataInf.dwAppPixelsPerLine = (u_long)image->crArea.cx *
354 dev->DataInf.dwPhysBytesPerLine = (u_long)image->crArea.cx *
355 dev->DataInf.xyPhyDpi.x / _MEASURE_BASE;
358 dev->DataInf.dwAsicPixelsPerPlane =
359 (dev->DataInf.dwAppPixelsPerLine+7UL) & 0xfffffff8UL;
360 dev->DataInf.dwAppPhyBytesPerLine =
361 dev->DataInf.dwAppBytesPerLine =
362 dev->DataInf.dwAsicBytesPerLine =
363 dev->DataInf.dwAsicBytesPerPlane = dev->DataInf.dwAsicPixelsPerPlane>>3;
365 dev->DataInf.dwAsicBytesPerPlane =
366 dev->DataInf.dwAsicPixelsPerPlane = dev->DataInf.dwAppPixelsPerLine;
370 dev->DataInf.dwAsicBytesPerPlane *= 2;
376 dev->scan.DataProcess = fnDataDirect;
377 dev->DataInf.wPhyDataType = COLOR_BW;
378 dev->shade.intermediate = _ScanMode_Mono;
382 dev->scan.DataProcess = fnDataDirect;
383 dev->DataInf.dwAsicBytesPerLine =
384 dev->DataInf.dwAppPhyBytesPerLine = dev->DataInf.dwAppPixelsPerLine;
385 dev->DataInf.wPhyDataType = COLOR_256GRAY;
386 dev->shade.intermediate = _ScanMode_Mono;
390 dev->scan.DataProcess = fnColorDirect;
391 dev->DataInf.dwAsicBytesPerLine =
392 dev->DataInf.dwAppPhyBytesPerLine = dev->DataInf.dwAppPixelsPerLine * 3;
393 dev->DataInf.wPhyDataType = COLOR_TRUE24;
394 dev->shade.intermediate = _ScanMode_Color;
398 dev->scan.DataProcess = fnColor42;
399 dev->DataInf.dwAsicBytesPerLine =
400 dev->DataInf.dwAppPhyBytesPerLine = dev->DataInf.dwAppPixelsPerLine * 6;
401 dev->DataInf.wPhyDataType = COLOR_TRUE42;
402 dev->shade.intermediate = _ScanMode_Color;
407 dev->DataInf.dwAppBytesPerLine = dev->DataInf.dwAppPhyBytesPerLine;
409 DBG( _DBG_INFO, "AppLinesPerArea = %lu\n", dev->DataInf.dwAppLinesPerArea );
410 DBG( _DBG_INFO, "AppPixelsPerLine = %lu\n", dev->DataInf.dwAppPixelsPerLine );
411 DBG( _DBG_INFO, "AppPhyBytesPerLine = %lu\n", dev->DataInf.dwAppPhyBytesPerLine );
412 DBG( _DBG_INFO, "AppBytesPerLine = %lu\n", dev->DataInf.dwAppBytesPerLine );
413 DBG( _DBG_INFO, "AsicPixelsPerPlane = %lu\n", dev->DataInf.dwAsicPixelsPerPlane );
414 DBG( _DBG_INFO, "AsicBytesPerPlane = %lu\n", dev->DataInf.dwAsicBytesPerPlane );
415 DBG( _DBG_INFO, "AsicBytesPerLine = %lu\n", dev->DataInf.dwAsicBytesPerLine );
416 DBG( _DBG_INFO, "Physical Bytes = %lu\n", dev->DataInf.dwPhysBytesPerLine );
421 static int imageSetupScanSettings( U12_Device *dev, ImgDef *img )
427 dev->DataInf.dwScanFlag = img->dwFlag;
428 dev->DataInf.crImage = img->crArea;
430 DBG( _DBG_INFO,"* DataInf.dwScanFlag = 0x%08lx\n",dev->DataInf.dwScanFlag);
432 dev->DataInf.crImage.x <<= 1;
434 dev->DataInf.xyAppDpi = img->xyDpi;
435 dev->DataInf.wAppDataType = img->wDataType;
437 u12image_GetImageInfo( dev, img );
439 dev->scan.lBufferAdjust = (long)dev->DataInf.dwAppBytesPerLine;
443 dev->DataInf.crImage.x, dev->DataInf.crImage.y,
444 dev->DataInf.crImage.cx, dev->DataInf.crImage.cy );
461 DBG( _DBG_INFO, "* brightness = %i\n", dev->DataInf.siBrightness );
462 if ( dev->DataInf.siBrightness < 0) {
464 (255 - _DEF_BW_THRESHOLD) * dev->DataInf.siBrightness /127);
467 _DEF_BW_THRESHOLD * dev->DataInf.siBrightness /127);
470 dev->regs.RD_ThresholdControl = brightness;
477 static SANE_Status u12image_SetupScanSettings( U12_Device *dev, ImgDef *img )
482 dev->scan.dpiIdx = 0;
483 dev->scan.negScan = negScan;
485 imageSetupScanSettings( dev, img );
487 if( !(dev->DataInf.dwScanFlag & _SCANDEF_TPA )) {
489 dev->scan.dwScanOrigin = dev->adj.upNormal * 4 + _RFT_SCANNING_ORG;
491 } else if( dev->DataInf.dwScanFlag & _SCANDEF_Transparency) {
493 dev->scan.dwScanOrigin = dev->adj.upPositive * 4 + _POS_SCANNING_ORG;
495 dev->scan.dwScanOrigin = dev->adj.upNegative * 4 + _NEG_SCANNING_ORG;
497 dev->scan.dwScanOrigin += 64 /*dev->dwModelOriginY*/;
499 if( dev->DataInf.xyAppDpi.y <= 75 ) {
501 if( dev->DataInf.dwScanFlag & _SCANDEF_PREVIEW ) {
503 dev->scan.bDiscardAll = 0;
504 dev->DataInf.xyPhyDpi.y = 150;
505 dev->shade.intermediate |= _ScanMode_AverageOut;
506 u12image_SetupScanStateVariables( dev, 1 );
507 dev->scan.gd_gk.wGreenDiscard = 0;
509 if( dev->DataInf.xyAppDpi.y >= 38 )
510 dev->scan.bd_rk.wBlueDiscard = 1;
512 dev->scan.bd_rk.wBlueDiscard = 0;
514 if( dev->DataInf.wPhyDataType >= COLOR_256GRAY ) {
515 dev->shade.wXStep = 6;
516 dev->shade.wExposure = 8 * dev->shade.wXStep;
519 if(!(dev->DataInf.dwScanFlag & _SCANDEF_TPA) &&
520 (dev->DataInf.xyAppDpi.y <= 50) &&
521 (dev->DataInf.wPhyDataType >= COLOR_TRUE24)) {
522 dev->shade.intermediate |= _ScanMode_AverageOut;
525 if((dev->DataInf.wPhyDataType<COLOR_TRUE24) || dev->f0_8_16 ||
526 (dev->shade.intermediate & _ScanMode_AverageOut)) {
528 dev->scan.bDiscardAll = 1;
529 dev->DataInf.xyPhyDpi.y = 75;
530 u12image_SetupScanStateVariables( dev, 0 );
532 dev->scan.bDiscardAll = 2;
533 dev->DataInf.xyPhyDpi.y = 150;
534 u12image_SetupScanStateVariables( dev, 1 );
538 if( dev->DataInf.xyAppDpi.y <= 150 ) {
540 dev->scan.bDiscardAll = 2;
541 dev->DataInf.xyPhyDpi.y = 150;
542 u12image_SetupScanStateVariables( dev, 1 );
544 } else if( dev->DataInf.xyAppDpi.y <= 300 ) {
546 dev->scan.bDiscardAll = 4;
547 dev->DataInf.xyPhyDpi.y = 300;
548 u12image_SetupScanStateVariables( dev, 2 );
550 } else if( dev->DataInf.xyAppDpi.y <= 600 ) {
552 dev->scan.bDiscardAll = 8;
553 dev->DataInf.xyPhyDpi.y = 600;
554 u12image_SetupScanStateVariables( dev, 3 );
558 dev->scan.bDiscardAll = 16;
559 dev->DataInf.xyPhyDpi.y = 1200;
560 u12image_SetupScanStateVariables( dev, 4 );
565 if( dev->DataInf.xyAppDpi.y == dev->DataInf.xyPhyDpi.y ) {
567 dev->scan.DoSample = fnEveryLine;
569 if( dev->DataInf.dwScanFlag & _SCANDEF_PREVIEW ) {
572 dev->scan.DoSample = fnSamplePreview;
573 dev->DataInf.wYSum = 150;
575 if( dev->DataInf.xyAppDpi.y >= 38 )
576 wPreviewScanned = dev->DataInf.xyAppDpi.y * 2;
577 else if( dev->DataInf.xyAppDpi.y >= 19 )
578 wPreviewScanned = dev->DataInf.xyAppDpi.y * 4;
580 wPreviewScanned = dev->DataInf.xyAppDpi.y * 8;
584 dev->DataInf.xyPhyDpi.y, dev->DataInf.xyAppDpi.y );
585 dev->scan.DoSample = fnSampleLines;
586 dev->DataInf.wYSum = dev->DataInf.xyPhyDpi.y - dev->DataInf.xyAppDpi.y;
592 dev->scan.p48BitBuf.pb = NULL;
594 if( dev->DataInf.wPhyDataType >= COLOR_TRUE24 ) {
599 dev->DataInf.dwAsicBytesPerPlane - dev->scan.bd_rk.wRedKeep;
601 dev->DataInf.dwAsicBytesPerPlane - dev->scan.gd_gk.wGreenKeep;
605 b = (u_long)(dev->scan.bd_rk.wRedKeep +
606 dev->scan.gd_gk.wGreenKeep + 2U) *
607 dev->DataInf.dwAsicBytesPerPlane;
617 dev->scan.p48BitBuf.pb = dev->bufs.b1.pReadBuf;
621 if( dev->scan.p48BitBuf.pb ){
622 dev->scan.DataRead = fnReadToDriver;
623 dev->scan.BufGet.red.bp =
624 dev->scan.BufPut.red.bp =
625 dev->scan.BufBegin.red.bp = dev->scan.p48BitBuf.pb;
626 dev->scan.BufEnd.red.bp =
627 dev->scan.BufBegin.green.bp =
628 dev->scan.BufGet.green.bp =
629 dev->scan.BufPut.green.bp = dev->scan.p48BitBuf.pb +
630 dev->DataInf.dwAsicBytesPerLine *
631 (dev->scan.bd_rk.wRedKeep + 1U);
633 dev->scan.BufEnd.green.bp = dev->scan.BufBegin.green.bp +
634 dev->DataInf.dwAsicBytesPerLine *
635 (dev->scan.gd_gk.wGreenKeep + 1U);
636 dev->scan.BufPut.blue.bp =
637 dev->scan.BufGet.blue.bp = dev->bufs.b1.pReadBuf +
638 dev->DataInf.dwAsicBytesPerLine * 2;
640 dev->scan.DataRead = fnReadOutScanner;
641 dev->scan.BufPut.red.bp = dev->bufs.b1.pReadBuf;
642 dev->scan.BufData.green.bp =
643 dev->scan.BufPut.green.bp = dev->scan.BufPut.red.bp +
644 dev->DataInf.dwAsicBytesPerLine;
645 dev->scan.BufPut.blue.bp = dev->scan.BufPut.green.bp +
646 dev->DataInf.dwAsicBytesPerLine;
648 dev->scan.BufData.red.bp = dev->scan.BufPut.red.bp;
649 dev->scan.BufData.blue.bp = dev->scan.BufPut.blue.bp;
688 static SANE_Bool u12image_DataIsReady( U12_Device *dev, void* buf )
692 if( dev->scan.bDiscardAll ) {
693 dev->scan.bDiscardAll--;
695 if( dev->DataInf.wPhyDataType <= COLOR_256GRAY ) {
696 dev->regs.RD_ModeControl = _ModeFifoGSel;
697 u12io_ReadMonoData( dev, dev->bufs.b1.pReadBuf,
698 dev->DataInf.dwAsicBytesPerPlane );
700 u12io_ReadColorData( dev, dev->bufs.b1.pReadBuf,
701 dev->DataInf.dwAsicBytesPerPlane );
706 if( dev->DataInf.wPhyDataType <= COLOR_256GRAY ) {
708 dev->regs.RD_ModeControl = _ModeFifoGSel;
709 u12io_ReadMonoData( dev, buf, dev->DataInf.dwAsicBytesPerPlane );
713 if( !dev->scan.DataRead( dev )) {
718 if( dev->scan.DoSample( dev )) {
721 if( fnDataDirect != dev->scan.DataProcess ) {
722 (*dev->scan.DataProcess)(dev, buf, (void*)(dev->scan.BufPut.red.bp),
723 dev->DataInf.dwAppPhyBytesPerLine);
732 static SANE_Status u12image_ReadOneImageLine( U12_Device *dev, void* buf )
743 state = u12io_GetScanState( dev );
744 dev->scan.bNowScanState = (state & _SCANSTATE_MASK);
749 u12motor_ModuleForwardBackward( dev );
751 if( u12io_GetFifoLength( dev ) >= dev->scan.dwMinReadFifo )
752 if( u12image_DataIsReady( dev, buf ))
757 dev->scan.bModuleState = _MotorInNormalState;
758 b = dev->scan.bNowScanState - dev->scan.oldScanState;
763 if( b >= dev->scan.bRefresh ) {
765 u12io_RegisterToScanner( dev, REG_REFRESHSCANSTATE );
766 dev->scan.oldScanState = u12io_GetScanState( dev );
767 dev->scan.oldScanState &= _SCANSTATE_MASK;
770 if( u12io_GetFifoLength( dev ) >= dev->scan.dwMaxReadFifo ) {
772 if( u12image_DataIsReady( dev, buf ))
777 b = dev->scan.bNowScanState - dev->scan.oldScanState;
782 if( b >= dev->scan.bRefresh ) {
784 u12io_RegisterToScanner( dev, REG_REFRESHSCANSTATE );
785 dev->scan.oldScanState = u12io_GetScanState( dev );
786 dev->scan.oldScanState &= _SCANSTATE_MASK;
789 if( u12io_GetFifoLength( dev ) >= dev->scan.dwMinReadFifo ) {
790 if( u12image_DataIsReady( dev, buf ))
799 u12motor_ToHomePosition( dev, SANE_TRUE );
807 static void u12image_PrepareScaling( U12_Device *dev )
812 dev->scaleBuf = NULL;
814 dev->DataInf.xyAppDpi.x, dev->dpi_max_x );
816 if( dev->DataInf.xyAppDpi.x > dev->dpi_max_x ) {
818 dev->scaleBuf = malloc( dev->DataInf.dwAppBytesPerLine );
820 ratio = (double)dev->DataInf.xyAppDpi.x/(double)dev->dpi_max_x;
821 dev->scaleIzoom = (int)(1.0/ratio * 1000);
823 switch( dev->DataInf.wAppDataType ) {
831 dev->scaleStep = step;
834 dev->scaleIzoom, step );
844 static void u12image_ScaleX( U12_Device *dev, SANE_Byte *ib, SANE_Byte *ob )
851 if( 99 == dev->scaleStep ) {
852 memcpy( ob, ib, dev->DataInf.dwAppBytesPerLine );
857 if( 0 == dev->scaleStep ) {
862 memset( ob, 0, dev->DataInf.dwAppBytesPerLine );
864 for( i = 0; i < dev->DataInf.dwPhysBytesPerLine*8; i++ ) {
872 if((x>>3) < dev->DataInf.dwAppBytesPerLine ) {
877 ddax += dev->scaleIzoom;
886 for( i = 0; i < dev->DataInf.dwPhysBytesPerLine*dev->scaleStep;
887 i+=dev->scaleStep ) {
893 for( j = 0; j < (u_long)dev->scaleStep; j++ ) {
895 if((x+j) < dev->DataInf.dwAppBytesPerLine ) {
899 x += dev->scaleStep;
900 ddax += dev->scaleIzoom;