kopia lustrzana https://gitlab.com/sane-project/backends
major update, compilation fixes.
rodzic
0138f46f66
commit
1db4a06965
159
backend/u12-hw.c
159
backend/u12-hw.c
|
@ -331,6 +331,144 @@ static void u12hw_SetGeneralRegister( U12_Device *dev )
|
|||
dev->regs.RD_StepControl = _MOTOR0_SCANSTATE;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
static void u12hw_SetupPreviewCondition( U12_Device *dev )
|
||||
{
|
||||
int i, c;
|
||||
u_long channel;
|
||||
SANE_Byte rb[100];
|
||||
|
||||
DBG( _DBG_INFO, "u12_SetupPreviewCondition()\n" );
|
||||
|
||||
u12hw_SetGeneralRegister( dev );
|
||||
|
||||
u12io_RegisterToScanner( dev, REG_RESETMTSC );
|
||||
_DODELAY(250);
|
||||
|
||||
/* ------- Set the max. read fifo to Asic ------- */
|
||||
memset( dev->scanStates, 0, _SCANSTATE_BYTES );
|
||||
if( dev->DataInf.xyAppDpi.x >= 38 ) { /* 38 <= x <= 75 */
|
||||
|
||||
for(i = 0; i < _SCANSTATE_BYTES; i++ )
|
||||
dev->scanStates[i] = 0xad;
|
||||
|
||||
} else if( dev->DataInf.xyAppDpi.x >= 19 ) { /* 19 <= x <= 30(37) */
|
||||
|
||||
u_short *pState = (u_short*)dev->scanStates;
|
||||
|
||||
for( i = 0; i < (_SCANSTATE_BYTES / 2); i++ )
|
||||
pState[i] = 0x89ac;
|
||||
|
||||
} else { /* 16 <= x <= 18 */
|
||||
|
||||
u_long *pState = (u_long*)dev->scanStates;
|
||||
|
||||
for(i = 0; i < (_SCANSTATE_BYTES / 4); i++)
|
||||
pState[i] = 0x888889ac;
|
||||
}
|
||||
|
||||
dev->regs.RD_BufFullSize = dev->DataInf.dwAppPixelsPerLine *
|
||||
((dev->DataInf.xyPhyDpi.y * dev->max_y + 299) / 300) + 1;
|
||||
if( dev->regs.RD_BufFullSize > _SIZE_BLUEFIFO )
|
||||
dev->regs.RD_BufFullSize = _SIZE_BLUEFIFO -
|
||||
dev->DataInf.dwAppPixelsPerLine - 1;
|
||||
|
||||
dev->scan.dwMaxReadFifo =
|
||||
dev->scan.dwMinReadFifo = dev->DataInf.dwAppPixelsPerLine *2 ;
|
||||
|
||||
if( dev->scan.dwMinReadFifo < 1024)
|
||||
dev->scan.dwMinReadFifo = dev->scan.dwMaxReadFifo = 1024;
|
||||
|
||||
dev->scan.dwMaxReadFifo += (dev->DataInf.dwAsicBytesPerPlane / 2);
|
||||
|
||||
if( dev->DataInf.wPhyDataType > COLOR_256GRAY )
|
||||
dev->scan.bFifoSelect = REG_BFIFOOFFSET;
|
||||
else
|
||||
dev->scan.bFifoSelect = REG_GFIFOOFFSET;
|
||||
|
||||
channel = _BLUE_FULLSIZE << 16;
|
||||
dev->regs.RD_BufFullSize = _SIZE_BLUEFIFO;
|
||||
|
||||
dev->regs.RD_LineControl = _LOBYTE(dev->shade.wExposure);
|
||||
dev->regs.RD_ExtLineControl = _HIBYTE(dev->shade.wExposure);
|
||||
dev->regs.RD_XStepTime = _LOBYTE(dev->shade.wXStep);
|
||||
dev->regs.RD_ExtXStepTime = _HIBYTE(dev->shade.wXStep);
|
||||
dev->regs.RD_Motor0Control = _FORWARD_MOTOR;
|
||||
dev->regs.RD_StepControl = _MOTOR0_SCANSTATE | _MOTOR_FREERUN;
|
||||
dev->regs.RD_ModeControl = _ModeScan;
|
||||
|
||||
if( dev->DataInf.wPhyDataType == COLOR_BW ) {
|
||||
dev->regs.RD_ScanControl = _SCAN_BITMODE;
|
||||
} else if( dev->DataInf.wPhyDataType <= COLOR_TRUE24 )
|
||||
dev->regs.RD_ScanControl = _SCAN_BYTEMODE;
|
||||
else {
|
||||
dev->regs.RD_ScanControl = _SCAN_12BITMODE;
|
||||
}
|
||||
|
||||
dev->regs.RD_ScanControl |= _SCAN_1ST_AVERAGE;
|
||||
u12hw_SelectLampSource( dev );
|
||||
|
||||
dev->regs.RD_MotorTotalSteps = (dev->DataInf.crImage.cy * 4) +
|
||||
(dev->f0_8_16 ? 32 : 16) +
|
||||
(dev->scan.bDiscardAll ? 32 : 0);
|
||||
DBG( _DBG_INFO, "* RD_MotorTotalSteps = 0x%04x\n",
|
||||
dev->regs.RD_MotorTotalSteps);
|
||||
|
||||
dev->regs.RD_ScanControl1 = (_MTSC_ENABLE | _SCANSTOPONBUFFULL |
|
||||
_MFRC_RUNSCANSTATE | _MFRC_BY_XSTEP);
|
||||
DBG( _DBG_INFO, "* RD_ScanControl1 = 0x%02x\n", dev->regs.RD_ScanControl1);
|
||||
|
||||
dev->regs.RD_Dpi = dev->DataInf.xyPhyDpi.x;
|
||||
|
||||
dev->regs.RD_Origin = (u_short)(dev->adj.leftNormal*2+_DATA_ORIGIN_X);
|
||||
dev->regs.RD_Origin += dev->DataInf.crImage.x;
|
||||
|
||||
if( dev->shade.intermediate & _ScanMode_AverageOut )
|
||||
dev->regs.RD_Origin >>= 1;
|
||||
|
||||
if( dev->DataInf.wPhyDataType == COLOR_BW )
|
||||
dev->regs.RD_Pixels = dev->DataInf.dwAsicBytesPerPlane;
|
||||
else
|
||||
dev->regs.RD_Pixels = dev->DataInf.dwAppPixelsPerLine;
|
||||
|
||||
/* ------- Wait for scan state stop ------- */
|
||||
u12io_DataToRegister( dev, REG_MODECONTROL, _ModeIdle );
|
||||
|
||||
u12io_DownloadScanStates( dev );
|
||||
|
||||
c = 0;
|
||||
_SET_REG( rb, c, REG_LINECONTROL, dev->regs.RD_LineControl );
|
||||
_SET_REG( rb, c, REG_EXTENDEDLINECONTROL,
|
||||
dev->regs.RD_ExtLineControl);
|
||||
_SET_REG( rb, c, REG_XSTEPTIME, dev->regs.RD_XStepTime );
|
||||
_SET_REG( rb, c, REG_EXTENDEDXSTEP, dev->regs.RD_ExtXStepTime );
|
||||
_SET_REG( rb, c, REG_MOTORDRVTYPE,
|
||||
dev->regs.RD_MotorDriverType );
|
||||
_SET_REG( rb, c, REG_STEPCONTROL, dev->regs.RD_StepControl );
|
||||
_SET_REG( rb, c, REG_MOTOR0CONTROL, dev->regs.RD_Motor0Control );
|
||||
_SET_REG( rb, c, REG_MODELCONTROL, dev->regs.RD_ModelControl );
|
||||
_SET_REG( rb, c, REG_DPILO, (_LOBYTE(dev->regs.RD_Dpi)));
|
||||
_SET_REG( rb, c, REG_DPIHI, (_HIBYTE(dev->regs.RD_Dpi)));
|
||||
_SET_REG( rb, c, REG_SCANPOSLO, (_LOBYTE(dev->regs.RD_Origin)));
|
||||
_SET_REG( rb, c, REG_SCANPOSHI,(_HIBYTE(dev->regs.RD_Origin)));
|
||||
_SET_REG( rb, c, REG_WIDTHPIXELLO,(_LOBYTE(dev->regs.RD_Pixels)));
|
||||
_SET_REG( rb, c, REG_WIDTHPIXELHI,(_HIBYTE(dev->regs.RD_Pixels)));
|
||||
_SET_REG( rb, c, REG_THRESHOLDLO,
|
||||
(_LOBYTE(dev->regs.RD_ThresholdControl)));
|
||||
_SET_REG( rb, c, REG_THRESHOLDHI,
|
||||
(_HIBYTE(dev->regs.RD_ThresholdControl)));
|
||||
_SET_REG( rb, c, REG_MOTORTOTALSTEP0,
|
||||
(_LOBYTE(dev->regs.RD_MotorTotalSteps)));
|
||||
_SET_REG( rb, c, REG_MOTORTOTALSTEP1,
|
||||
(_HIBYTE(dev->regs.RD_MotorTotalSteps)));
|
||||
_SET_REG( rb, c, REG_SCANCONTROL, dev->regs.RD_ScanControl);
|
||||
u12io_DataToRegs( dev, rb, c );
|
||||
_DODELAY(100);
|
||||
|
||||
u12io_RegisterToScanner( dev, REG_INITDATAFIFO );
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
static void u12hw_SetupScanningCondition( U12_Device *dev )
|
||||
|
@ -483,7 +621,7 @@ static void u12hw_SetupScanningCondition( U12_Device *dev )
|
|||
dev->regs.RD_Origin, dev->regs.RD_Pixels );
|
||||
|
||||
/* ------- Prepare scan states ------- */
|
||||
memset( dev->a_nbNewAdrPointer, 0, _SCANSTATE_BYTES );
|
||||
memset( dev->scanStates, 0, _SCANSTATE_BYTES );
|
||||
memset( dev->bufs.b1.pReadBuf, 0, _NUMBER_OF_SCANSTEPS );
|
||||
|
||||
if( dev->DataInf.wPhyDataType <= COLOR_256GRAY )
|
||||
|
@ -498,7 +636,7 @@ static void u12hw_SetupScanningCondition( U12_Device *dev )
|
|||
}
|
||||
for( channel = 0, pState = dev->bufs.b1.pReadBuf;
|
||||
channel < _SCANSTATE_BYTES; channel++) {
|
||||
dev->a_nbNewAdrPointer[channel] = pState[0] | (pState[1] << 4);
|
||||
dev->scanStates[channel] = pState[0] | (pState[1] << 4);
|
||||
pState += 2;
|
||||
}
|
||||
|
||||
|
@ -765,10 +903,11 @@ static void usb_LampTimerIrq( int sig )
|
|||
*/
|
||||
static void u12hw_StartLampTimer( U12_Device *dev )
|
||||
{
|
||||
#ifdef HAVE_SETITIMER
|
||||
sigset_t block, pause_mask;
|
||||
struct sigaction s;
|
||||
#ifdef HAVE_SETITIMER
|
||||
struct itimerval interval;
|
||||
#endif
|
||||
|
||||
/* block SIGALRM */
|
||||
sigemptyset( &block );
|
||||
|
@ -786,6 +925,7 @@ static void u12hw_StartLampTimer( U12_Device *dev )
|
|||
|
||||
sigprocmask( SIG_UNBLOCK, &block, &pause_mask );
|
||||
|
||||
#ifdef HAVE_SETITIMER
|
||||
/*
|
||||
* define a one-shot timer
|
||||
*/
|
||||
|
@ -794,16 +934,15 @@ static void u12hw_StartLampTimer( U12_Device *dev )
|
|||
interval.it_interval.tv_usec = 0;
|
||||
interval.it_interval.tv_sec = 0;
|
||||
|
||||
dev_xxx = dev;
|
||||
|
||||
if( 0 != dev->adj.lampOff ) {
|
||||
dev_xxx = dev;
|
||||
setitimer( ITIMER_REAL, &interval, &dev->saveSettings );
|
||||
DBG( _DBG_INFO, "Lamp-Timer started (using ITIMER)\n" );
|
||||
}
|
||||
#else
|
||||
dev_xxx = dev;
|
||||
|
||||
alarm( dev->usbDev.dwLampOnPeriod );
|
||||
alarm( dev->adj.lampOff );
|
||||
DBG( _DBG_INFO, "Lamp-Timer started (using ALARM)\n" );
|
||||
#endif
|
||||
}
|
||||
|
@ -812,7 +951,6 @@ static void u12hw_StartLampTimer( U12_Device *dev )
|
|||
*/
|
||||
static void u12hw_StopLampTimer( U12_Device *dev )
|
||||
{
|
||||
#ifdef HAVE_SETITIMER
|
||||
sigset_t block, pause_mask;
|
||||
|
||||
/* block SIGALRM */
|
||||
|
@ -820,14 +958,13 @@ static void u12hw_StopLampTimer( U12_Device *dev )
|
|||
sigaddset ( &block, SIGALRM );
|
||||
sigprocmask( SIG_BLOCK, &block, &pause_mask );
|
||||
|
||||
dev_xxx = NULL;
|
||||
|
||||
#ifdef HAVE_SETITIMER
|
||||
if( 0 != dev->adj.lampOff )
|
||||
setitimer( ITIMER_REAL, &dev->saveSettings, NULL );
|
||||
|
||||
dev_xxx = NULL;
|
||||
|
||||
#else
|
||||
_VAR_NOT_USED( dev );
|
||||
dev_xxx = NULL;
|
||||
|
||||
alarm( 0 );
|
||||
#endif
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
* - 0.02 - added model tweaking
|
||||
* - fixed autodetection bug
|
||||
* - added line-scaling stuff
|
||||
* - removed u12if_setScanEnv()
|
||||
* .
|
||||
* <hr>
|
||||
* This file is part of the SANE package.
|
||||
|
@ -462,25 +463,6 @@ static SANE_Status u12if_getCaps( U12_Device *dev )
|
|||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
static SANE_Status u12if_setScanEnv( U12_Device *dev, ImgDef *img )
|
||||
{
|
||||
SANE_Status res;
|
||||
|
||||
DBG( _DBG_INFO, "u12if_setScanEnv()\n" );
|
||||
res = u12image_SetupScanSettings( dev, img );
|
||||
|
||||
if( img->wDataType <= COLOR_256GRAY ) {
|
||||
u12map_Adjust( dev, _MAP_MASTER );
|
||||
} else {
|
||||
u12map_Adjust( dev, _MAP_RED );
|
||||
u12map_Adjust( dev, _MAP_GREEN );
|
||||
u12map_Adjust( dev, _MAP_BLUE );
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
static SANE_Status u12if_startScan( U12_Device *dev )
|
||||
|
@ -531,7 +513,10 @@ static SANE_Status u12if_prepare( U12_Device *dev )
|
|||
u12image_PrepareScaling( dev );
|
||||
|
||||
u12motor_ForceToLeaveHomePos( dev );
|
||||
u12hw_SetupScanningCondition( dev );
|
||||
if( dev->DataInf.dwScanFlag & _SCANDEF_PREVIEW )
|
||||
u12hw_SetupPreviewCondition( dev );
|
||||
else
|
||||
u12hw_SetupScanningCondition( dev );
|
||||
|
||||
res = u12motor_WaitForPositionY( dev );
|
||||
|
||||
|
|
|
@ -690,7 +690,7 @@ static SANE_Status u12io_DownloadScanStates( U12_Device *dev )
|
|||
|
||||
bulk_setup_data[1] = 0x01;
|
||||
CHK( gl640WriteBulk( dev->fd, bulk_setup_data,
|
||||
dev->a_nbNewAdrPointer, _SCANSTATE_BYTES ));
|
||||
dev->scanStates, _SCANSTATE_BYTES ));
|
||||
bulk_setup_data[1] = 0x11;
|
||||
|
||||
/* FIXME: refreshState probably always FALSE */
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
*
|
||||
* History:
|
||||
* - 0.01 - initial version
|
||||
* - 0.02 - no changes
|
||||
* - 0.02 - inverting map when scanning binary images
|
||||
* - changed u12map_Adjust()
|
||||
* .
|
||||
* <hr>
|
||||
* This file is part of the SANE package.
|
||||
|
@ -109,7 +110,7 @@ static void u12map_CheckGammaSettings( U12_Device *dev )
|
|||
|
||||
/** adjust acording to brightness and contrast
|
||||
*/
|
||||
static void u12map_Adjust( U12_Device *dev, int which )
|
||||
static void u12map_Adjust( U12_Device *dev, int which, SANE_Byte *buf )
|
||||
{
|
||||
int i;
|
||||
u_long *pdw;
|
||||
|
@ -140,50 +141,51 @@ static void u12map_Adjust( U12_Device *dev, int which )
|
|||
tmp = ((double)(dev->gamma_table[0][i] + b)) * c;
|
||||
if( tmp < 0 ) tmp = 0;
|
||||
if( tmp > 255 ) tmp = 255;
|
||||
dev->gamma_table[0][i] = (SANE_Byte)tmp;
|
||||
buf[i] = (SANE_Byte)tmp;
|
||||
}
|
||||
|
||||
if((_MAP_MASTER == which) || (_MAP_GREEN == which)) {
|
||||
tmp = ((double)(dev->gamma_table[1][i] + b)) * c;
|
||||
if( tmp < 0 ) tmp = 0;
|
||||
if( tmp > 255 ) tmp = 255;
|
||||
dev->gamma_table[1][i] = (SANE_Byte)tmp;
|
||||
buf[4096+i] = (SANE_Byte)tmp;
|
||||
}
|
||||
|
||||
if((_MAP_MASTER == which) || (_MAP_BLUE == which)) {
|
||||
tmp = ((double)(dev->gamma_table[2][i] + b)) * c;
|
||||
if( tmp < 0 ) tmp = 0;
|
||||
if( tmp > 255 ) tmp = 255;
|
||||
dev->gamma_table[2][i] = (SANE_Byte)tmp;
|
||||
buf[8192+i] = (SANE_Byte)tmp;
|
||||
}
|
||||
}
|
||||
|
||||
if( dev->DataInf.dwScanFlag & _SCANDEF_Negative ) {
|
||||
if((dev->DataInf.dwScanFlag & _SCANDEF_Negative) ||
|
||||
(dev->DataInf.wPhyDataType == COLOR_BW)) {
|
||||
DBG( _DBG_INFO, "inverting...\n" );
|
||||
|
||||
if((_MAP_MASTER == which) || (_MAP_RED == which)) {
|
||||
|
||||
DBG( _DBG_INFO, "inverting RED map\n" );
|
||||
pdw = (u_long*)&dev->gamma_table[0];
|
||||
pdw = (u_long*)&buf[0];
|
||||
for( i = dev->gamma_length / 4; i; i--, pdw++ )
|
||||
*pdw = ~(*pdw);
|
||||
}
|
||||
}
|
||||
|
||||
if((_MAP_MASTER == which) || (_MAP_GREEN == which)) {
|
||||
|
||||
DBG( _DBG_INFO, "inverting GREEN map\n" );
|
||||
pdw = (u_long*)&dev->gamma_table[1];
|
||||
pdw = (u_long*)&buf[4096];
|
||||
for( i = dev->gamma_length / 4; i; i--, pdw++ )
|
||||
*pdw = ~(*pdw);
|
||||
}
|
||||
}
|
||||
|
||||
if((_MAP_MASTER == which) || (_MAP_BLUE == which)) {
|
||||
|
||||
DBG( _DBG_INFO, "inverting BLUE map\n" );
|
||||
pdw = (u_long*)&dev->gamma_table[2];
|
||||
pdw = (u_long*)&buf[8192];
|
||||
for( i = dev->gamma_length / 4; i; i--, pdw++ )
|
||||
*pdw = ~(*pdw);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ static TimerDef u12motor_Timer;
|
|||
*/
|
||||
static void u12motor_DownloadNullScanStates( U12_Device *dev )
|
||||
{
|
||||
memset( dev->a_nbNewAdrPointer, 0, _SCANSTATE_BYTES );
|
||||
memset( dev->scanStates, 0, _SCANSTATE_BYTES );
|
||||
u12io_DownloadScanStates( dev );
|
||||
}
|
||||
|
||||
|
@ -165,7 +165,7 @@ static void u12motor_PositionModuleToHome( U12_Device *dev )
|
|||
_SET_REG( rb, c, REG_STEPCONTROL, (_MOTOR0_SCANSTATE | _MOTOR_FREERUN));
|
||||
u12io_DataToRegs( dev, rb, c );
|
||||
|
||||
memset( dev->a_nbNewAdrPointer, 0x88, _SCANSTATE_BYTES );
|
||||
memset( dev->scanStates, 0x88, _SCANSTATE_BYTES );
|
||||
u12io_DownloadScanStates( dev );
|
||||
|
||||
u12io_RegisterToScanner( dev, REG_REFRESHSCANSTATE );
|
||||
|
@ -213,7 +213,7 @@ static SANE_Status u12motor_BackToHomeSensor( U12_Device *dev )
|
|||
u12motor_Force16Steps( dev, _DIR_NONE );
|
||||
|
||||
/* stepping every state */
|
||||
memset( dev->a_nbNewAdrPointer, 0x88, _SCANSTATE_BYTES );
|
||||
memset( dev->scanStates, 0x88, _SCANSTATE_BYTES );
|
||||
u12io_DownloadScanStates( dev );
|
||||
_DODELAY(50);
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ static SANE_Status u12shadingAdjustShadingWaveform( U12_Device *dev )
|
|||
}
|
||||
dev->regs.RD_Origin = _SHADING_BEGINX;
|
||||
|
||||
for( pvar.pdw = (u_long*)dev->a_nbNewAdrPointer,
|
||||
for( pvar.pdw = (u_long*)dev->scanStates,
|
||||
var.dwValue = _SCANSTATE_BYTES >> 2; var.dwValue--; pvar.pdw++) {
|
||||
*pvar.pdw = 0x00f00080;
|
||||
}
|
||||
|
@ -589,8 +589,8 @@ static SANE_Status u12shading_AdjustRGBGain( U12_Device *dev )
|
|||
dev->regs.RD_Dpi = 300;
|
||||
dev->regs.RD_Pixels = 2560;
|
||||
|
||||
memset( dev->a_nbNewAdrPointer, 0, _SCANSTATE_BYTES );
|
||||
dev->a_nbNewAdrPointer[1] = 0x77;
|
||||
memset( dev->scanStates, 0, _SCANSTATE_BYTES );
|
||||
dev->scanStates[1] = 0x77;
|
||||
|
||||
u12io_PutOnAllRegisters( dev );
|
||||
/* _DODELAY( 100 ); */
|
||||
|
@ -698,8 +698,8 @@ static SANE_Status u12shadingAdjustDark( U12_Device *dev )
|
|||
else
|
||||
dev->regs.RD_Dpi = 600;
|
||||
|
||||
memset( dev->a_nbNewAdrPointer, 0, _SCANSTATE_BYTES );
|
||||
dev->a_nbNewAdrPointer[1] = 0x77;
|
||||
memset( dev->scanStates, 0, _SCANSTATE_BYTES );
|
||||
dev->scanStates[1] = 0x77;
|
||||
|
||||
u12io_PutOnAllRegisters( dev );
|
||||
/* _DODELAY( 100 ); */
|
||||
|
@ -789,6 +789,7 @@ static void u12shading_DownloadMapTable( U12_Device *dev, SANE_Byte *buf )
|
|||
*/
|
||||
static SANE_Status u12shading_DoCalibration( U12_Device *dev )
|
||||
{
|
||||
SANE_Byte tb[4096*3];
|
||||
u_long i, tmp;
|
||||
SANE_Byte bScanControl, rb[20];
|
||||
SANE_Status res;
|
||||
|
@ -856,24 +857,16 @@ static SANE_Status u12shading_DoCalibration( U12_Device *dev )
|
|||
|
||||
dev->regs.RD_ScanControl = bScanControl;
|
||||
|
||||
/* here we have to download the table in any case...*/
|
||||
{
|
||||
/* FIXME... */
|
||||
#if 0
|
||||
u12shading_DownloadMapTable( dev, (SANE_Byte *)dev->gamma_table );
|
||||
#else
|
||||
SANE_Byte tb[4096*3];
|
||||
int i;
|
||||
|
||||
for( i = 0; i < 4096; i++ ) {
|
||||
tb[i] = (SANE_Byte)(i >> 4);
|
||||
tb[i+4096] = (SANE_Byte)(i >> 4);
|
||||
tb[i+8192] = (SANE_Byte)(i >> 4);
|
||||
/* here we have to prepare and download the table in any case...*/
|
||||
if( dev->DataInf.wPhyDataType <= COLOR_256GRAY ) {
|
||||
u12map_Adjust( dev, _MAP_MASTER, tb );
|
||||
} else {
|
||||
u12map_Adjust( dev, _MAP_RED, tb );
|
||||
u12map_Adjust( dev, _MAP_GREEN, tb );
|
||||
u12map_Adjust( dev, _MAP_BLUE, tb );
|
||||
}
|
||||
|
||||
u12shading_DownloadMapTable( dev, tb );
|
||||
#endif
|
||||
}
|
||||
|
||||
u12motor_BackToHomeSensor( dev );
|
||||
DBG( _DBG_INFO, "u12shading_DoCalibration() - done.\n" );
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*
|
||||
* History:
|
||||
* - 0.01 - initial version
|
||||
* - 0.02 - no changes
|
||||
* - 0.02 - cleanup
|
||||
* .
|
||||
* <hr>
|
||||
* This file is part of the SANE package.
|
||||
|
@ -101,11 +101,11 @@ static void u12tpa_Reshading( U12_Device *dev )
|
|||
dev->regs.RD_Origin = (u_short)dev->scan.negBegin;
|
||||
dev->regs.RD_Pixels = _NEG_PAGEWIDTH600;
|
||||
|
||||
memset( dev->a_nbNewAdrPointer, 0, _SCANSTATE_BYTES );
|
||||
memset( dev->scanStates, 0, _SCANSTATE_BYTES );
|
||||
|
||||
/* put 9 scan states to make sure there are 8 lines available at least */
|
||||
for( i = 0; i <= 12; i++)
|
||||
dev->a_nbNewAdrPointer[i] = 0x8f;
|
||||
dev->scanStates[i] = 0x8f;
|
||||
|
||||
u12io_PutOnAllRegisters( dev );
|
||||
_DODELAY( 70 );
|
||||
|
@ -319,8 +319,8 @@ static void u12tpa_Reshading( U12_Device *dev )
|
|||
dev->regs.RD_StepControl = _MOTOR0_SCANSTATE;
|
||||
dev->regs.RD_Motor0Control = _FORWARD_MOTOR;
|
||||
|
||||
memset( dev->a_nbNewAdrPointer, 0, _SCANSTATE_BYTES );
|
||||
dev->a_nbNewAdrPointer[1] = 0x77;
|
||||
memset( dev->scanStates, 0, _SCANSTATE_BYTES );
|
||||
dev->scanStates[1] = 0x77;
|
||||
|
||||
u12io_PutOnAllRegisters( dev );
|
||||
_DODELAY( 50 );
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
* History:
|
||||
* - 0.01 - initial version
|
||||
* - 0.02 - enabled other scan-modes
|
||||
* - increased default gamma to 1.5
|
||||
*.
|
||||
* <hr>
|
||||
* This file is part of the SANE package.
|
||||
|
@ -79,7 +80,7 @@
|
|||
#include "../include/sane/sanei.h"
|
||||
#include "../include/sane/saneopts.h"
|
||||
|
||||
#define BACKEND_VERSION "0.02-4"
|
||||
#define BACKEND_VERSION "0.02-6"
|
||||
#define BACKEND_NAME u12
|
||||
#include "../include/sane/sanei_backend.h"
|
||||
#include "../include/sane/sanei_config.h"
|
||||
|
@ -638,7 +639,7 @@ static SANE_Status init_options( U12_Scanner *s )
|
|||
s->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
|
||||
|
||||
|
||||
#ifdef ALL_MODES
|
||||
/* disable extended mode list for devices without TPA */
|
||||
if( SANE_FALSE == s->hw->Tpa ) {
|
||||
|
@ -660,11 +661,11 @@ static void decodeUsbIDs( char *src, char **dest )
|
|||
|
||||
if( isspace(src[len])) {
|
||||
strncpy( tmp, &src[len+1], (strlen(src)-(len+1)));
|
||||
tmp[(strlen(src)-(len+1))] = '\0';
|
||||
tmp[(strlen(src)-(len+1))] = '\0';
|
||||
}
|
||||
|
||||
name = tmp;
|
||||
name = sanei_config_skip_whitespace( name );
|
||||
name = sanei_config_skip_whitespace( name );
|
||||
|
||||
if( '\0' == name[0] ) {
|
||||
DBG( _DBG_SANE_INIT, "next device uses autodetection\n" );
|
||||
|
@ -679,23 +680,23 @@ static void decodeUsbIDs( char *src, char **dest )
|
|||
vi = strtol( tmp, 0, 0 );
|
||||
free( tmp );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
name = sanei_config_skip_whitespace( name );
|
||||
if( *name ) {
|
||||
if( *name ) {
|
||||
|
||||
name = sanei_config_get_string( name, &tmp );
|
||||
if( tmp ) {
|
||||
pi = strtol( tmp, 0, 0 );
|
||||
free( tmp );
|
||||
}
|
||||
pi = strtol( tmp, 0, 0 );
|
||||
free( tmp );
|
||||
}
|
||||
}
|
||||
|
||||
/* create what we need to go through our device list...*/
|
||||
/* create what we need to go through our device list...*/
|
||||
sprintf( *dest, "0x%04X-0x%04X", vi, pi );
|
||||
DBG( _DBG_SANE_INIT, "next device is a USB device (%s)\n", *dest );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define _INT 0
|
||||
#define _FLOAT 1
|
||||
|
@ -721,7 +722,7 @@ static SANE_Bool decodeVal( char *src, char *opt,
|
|||
/* get the name of the option */
|
||||
name = sanei_config_get_string( name, &tmp );
|
||||
|
||||
if( tmp ) {
|
||||
if( tmp ) {
|
||||
|
||||
/* on success, compare wiht the given one */
|
||||
if( 0 == strcmp( tmp, opt )) {
|
||||
|
@ -885,8 +886,8 @@ static SANE_Status attach( const char *dev_name,
|
|||
dev->next = first_dev;
|
||||
first_dev = dev;
|
||||
|
||||
if (devp)
|
||||
*devp = dev;
|
||||
if( devp )
|
||||
*devp = dev;
|
||||
|
||||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
@ -896,7 +897,7 @@ static SANE_Status attach( const char *dev_name,
|
|||
*/
|
||||
static void init_config_struct( pCnfDef cnf )
|
||||
{
|
||||
memset( cnf, 0, sizeof(CnfDef));
|
||||
memset( cnf, 0, sizeof(CnfDef));
|
||||
|
||||
cnf->adj.warmup = -1;
|
||||
cnf->adj.lampOff = -1;
|
||||
|
@ -967,7 +968,7 @@ SANE_Status sane_init( SANE_Int *version_code, SANE_Auth_Callback authorize )
|
|||
|
||||
ival = 0;
|
||||
|
||||
dval = 1.0;
|
||||
dval = 1.5;
|
||||
decodeVal( str, "grayGamma", _FLOAT, &config.adj.graygamma,&dval);
|
||||
decodeVal( str, "redGamma", _FLOAT, &config.adj.rgamma, &dval );
|
||||
decodeVal( str, "greenGamma", _FLOAT, &config.adj.ggamma, &dval );
|
||||
|
@ -1231,7 +1232,7 @@ SANE_Status sane_control_option( SANE_Handle handle, SANE_Int option,
|
|||
s->opt[option].constraint.string_list[s->val[option].w]);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
/* word array options: */
|
||||
case OPT_GAMMA_VECTOR:
|
||||
case OPT_GAMMA_VECTOR_R:
|
||||
|
@ -1239,7 +1240,7 @@ SANE_Status sane_control_option( SANE_Handle handle, SANE_Int option,
|
|||
case OPT_GAMMA_VECTOR_B:
|
||||
memcpy( value, s->val[option].wa, s->opt[option].size );
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
return SANE_STATUS_INVAL;
|
||||
}
|
||||
|
@ -1315,7 +1316,7 @@ SANE_Status sane_control_option( SANE_Handle handle, SANE_Int option,
|
|||
s->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
|
||||
|
||||
|
||||
if( SANE_TRUE == s->val[option].w ) {
|
||||
|
||||
if( scanmode == COLOR_256GRAY ) {
|
||||
|
@ -1667,9 +1668,9 @@ SANE_Status sane_start( SANE_Handle handle )
|
|||
DBG( _DBG_SANE_INIT, "brightness %i, contrast %i\n",
|
||||
dev->DataInf.siBrightness, dev->DataInf.siContrast );
|
||||
|
||||
result = u12if_setScanEnv( dev, &image );
|
||||
result = u12image_SetupScanSettings( dev, &image );
|
||||
if( SANE_STATUS_GOOD != result ) {
|
||||
DBG( _DBG_ERROR, "u12if_setEnv() failed(%d)\n", result );
|
||||
DBG( _DBG_ERROR, "u12image_SetupScanSettings() failed(%d)\n", result );
|
||||
u12if_close( dev );
|
||||
return SANE_STATUS_IO_ERROR;
|
||||
}
|
||||
|
@ -1685,13 +1686,6 @@ SANE_Status sane_start( SANE_Handle handle )
|
|||
/* reset our timer...*/
|
||||
tsecs = 0;
|
||||
|
||||
result = u12if_startScan( dev );
|
||||
if( SANE_STATUS_GOOD != result ) {
|
||||
DBG( _DBG_ERROR, "u12if_startScan() failed(%d)\n", result );
|
||||
u12if_close( dev );
|
||||
return SANE_STATUS_IO_ERROR;
|
||||
}
|
||||
|
||||
s->buf = realloc( s->buf, (s->params.lines) * s->params.bytes_per_line );
|
||||
if( NULL == s->buf ) {
|
||||
DBG( _DBG_ERROR, "realloc failed\n" );
|
||||
|
@ -1699,6 +1693,13 @@ SANE_Status sane_start( SANE_Handle handle )
|
|||
return SANE_STATUS_NO_MEM;
|
||||
}
|
||||
|
||||
result = u12if_startScan( dev );
|
||||
if( SANE_STATUS_GOOD != result ) {
|
||||
DBG( _DBG_ERROR, "u12if_startScan() failed(%d)\n", result );
|
||||
u12if_close( dev );
|
||||
return SANE_STATUS_IO_ERROR;
|
||||
}
|
||||
|
||||
s->scanning = SANE_TRUE;
|
||||
|
||||
tsecs = (unsigned long)time(NULL);
|
||||
|
|
|
@ -51,10 +51,10 @@ option lOffOnEnd 1
|
|||
#
|
||||
# for adjusting the default gamma values
|
||||
#
|
||||
option redGamma 1.0
|
||||
option greenGamma 1.0
|
||||
option blueGamma 1.0
|
||||
option grayGamma 1.0
|
||||
#option redGamma 1.5
|
||||
#option greenGamma 1.5
|
||||
#option blueGamma 1.5
|
||||
#option grayGamma 1.5
|
||||
|
||||
#
|
||||
# and of course the device-name
|
||||
|
|
|
@ -263,7 +263,7 @@ typedef struct u12d
|
|||
SANE_Byte XStepColor;
|
||||
SANE_Byte XStepBack;
|
||||
SANE_Bool f0_8_16;
|
||||
SANE_Byte a_nbNewAdrPointer[_SCANSTATE_BYTES];
|
||||
SANE_Byte scanStates[_SCANSTATE_BYTES];
|
||||
|
||||
/* CCD section */
|
||||
SANE_Byte CCDID; /**< what CCD do we have */
|
||||
|
|
Ładowanie…
Reference in New Issue