Merge mustek_usb2_reflective/transparent.c into mustek_usb2_high.c.

merge-requests/1/head
Jan Hauffa 2011-04-16 20:24:26 +02:00 zatwierdzone przez m. allan noah
rodzic a45931dd11
commit 3479acf538
7 zmienionych plików z 1010 dodań i 2828 usunięć

Wyświetl plik

@ -1073,16 +1073,8 @@ sane_start (SANE_Handle handle)
return SANE_STATUS_NO_MEM;
s->scan_buffer_len = 0;
if (s->setpara.ssScanSource == SS_Reflective)
{
DBG (DBG_INFO, "StartScan: ssScanSource==SS_Reflective\n");
Reflective_SetupScan (&s->setpara); /* TODO: error handling */
}
else
{
DBG (DBG_INFO, "StartScan: ssScanSource!=SS_Reflective\n");
Transparent_SetupScan (&s->setpara); /* TODO: error handling */
}
if (!MustScanner_SetupScan (&s->setpara))
return SANE_STATUS_INVAL;
DBG (DBG_FUNC, "sane_start: exit\n");
return SANE_STATUS_GOOD;

Wyświetl plik

@ -1512,46 +1512,29 @@ SetLEDTime (PAsic chip)
static void
SetAFEGainOffset (PAsic chip)
{
int i;
int i, j;
DBG (DBG_ASIC, "SetAFEGainOffset: Enter\n");
Mustek_SendData (chip, ES01_60_AFE_AUTO_GAIN_OFFSET_RED_LB,
(chip->AD.GainR << 1) | chip->AD.DirectionR);
Mustek_SendData (chip, ES01_61_AFE_AUTO_GAIN_OFFSET_RED_HB,
chip->AD.OffsetR);
Mustek_SendData (chip, ES01_62_AFE_AUTO_GAIN_OFFSET_GREEN_LB,
(chip->AD.GainG << 1) | chip->AD.DirectionG);
Mustek_SendData (chip, ES01_63_AFE_AUTO_GAIN_OFFSET_GREEN_HB,
chip->AD.OffsetG);
Mustek_SendData (chip, ES01_64_AFE_AUTO_GAIN_OFFSET_BLUE_LB,
(chip->AD.GainB << 1) | chip->AD.DirectionB);
Mustek_SendData (chip, ES01_65_AFE_AUTO_GAIN_OFFSET_BLUE_HB,
chip->AD.OffsetB);
for (i = 0; i < 3; i++)
{
Mustek_SendData (chip, ES01_60_AFE_AUTO_GAIN_OFFSET_RED_LB + (i * 2),
(chip->AD.Gain[i] << 1) | chip->AD.Direction[i]);
Mustek_SendData (chip, ES01_61_AFE_AUTO_GAIN_OFFSET_RED_HB + (i * 2),
chip->AD.Offset[i]);
}
Mustek_SendData (chip, ES01_2A0_AFE_GAIN_OFFSET_CONTROL, 0x01);
for (i = 0; i < 4; i++)
for (i = 0; i < 3; i++)
{
Mustek_SendData (chip, ES01_2A1_AFE_AUTO_CONFIG_GAIN,
(chip->AD.GainR << 1) | chip->AD.DirectionR);
Mustek_SendData (chip, ES01_2A2_AFE_AUTO_CONFIG_OFFSET, chip->AD.OffsetR);
}
for (i = 0; i < 4; i++)
{
Mustek_SendData (chip, ES01_2A1_AFE_AUTO_CONFIG_GAIN,
(chip->AD.GainG << 1) | chip->AD.DirectionG);
Mustek_SendData (chip, ES01_2A2_AFE_AUTO_CONFIG_OFFSET, chip->AD.OffsetG);
}
for (i = 0; i < 4; i++)
{
Mustek_SendData (chip, ES01_2A1_AFE_AUTO_CONFIG_GAIN,
(chip->AD.GainB << 1) | chip->AD.DirectionB);
Mustek_SendData (chip, ES01_2A2_AFE_AUTO_CONFIG_OFFSET, chip->AD.OffsetB);
for (j = 0; j < 4; j++)
{
Mustek_SendData (chip, ES01_2A1_AFE_AUTO_CONFIG_GAIN,
(chip->AD.Gain[i] << 1) | chip->AD.Direction[i]);
Mustek_SendData (chip, ES01_2A2_AFE_AUTO_CONFIG_OFFSET,
chip->AD.Offset[i]);
}
}
for (i = 0; i < 36; i++)
@ -1562,24 +1545,18 @@ SetAFEGainOffset (PAsic chip)
Mustek_SendData (chip, ES01_2A0_AFE_GAIN_OFFSET_CONTROL, 0x00);
Mustek_SendData (chip, ES01_04_ADAFEPGACH1, chip->AD.GainR);
Mustek_SendData (chip, ES01_06_ADAFEPGACH2, chip->AD.GainG);
Mustek_SendData (chip, ES01_08_ADAFEPGACH3, chip->AD.GainB);
for (i = 0; i < 3; i++)
Mustek_SendData (chip, ES01_04_ADAFEPGACH1 + (i * 2), chip->AD.Gain[i]);
if (chip->AD.DirectionR == DIR_NEGATIVE)
Mustek_SendData (chip, ES01_0B_AD9826OffsetRedN, chip->AD.OffsetR);
else
Mustek_SendData (chip, ES01_0A_AD9826OffsetRedP, chip->AD.OffsetR);
if (chip->AD.DirectionG == DIR_NEGATIVE)
Mustek_SendData (chip, ES01_0D_AD9826OffsetGreenN, chip->AD.OffsetG);
else
Mustek_SendData (chip, ES01_0C_AD9826OffsetGreenP, chip->AD.OffsetG);
if (chip->AD.DirectionB == DIR_NEGATIVE)
Mustek_SendData (chip, ES01_0F_AD9826OffsetBlueN, chip->AD.OffsetB);
else
Mustek_SendData (chip, ES01_0E_AD9826OffsetBlueP, chip->AD.OffsetB);
for (i = 0; i < 3; i++)
{
if (chip->AD.Direction[i] == DIR_NEGATIVE)
Mustek_SendData (chip, ES01_0B_AD9826OffsetRedN + (i * 2),
chip->AD.Offset[i]);
else
Mustek_SendData (chip, ES01_0A_AD9826OffsetRedP + (i * 2),
chip->AD.Offset[i]);
}
DBG (DBG_ASIC, "SetAFEGainOffset: Exit\n");
}
@ -2016,7 +1993,6 @@ Asic_Initialize (PAsic chip)
chip->isMotorMoveToFirstLine = MOTOR_MOVE_TO_FIRST_LINE_ENABLE;
chip->lpShadingTable = NULL;
Asic_ResetADParameters (chip, LS_REFLECTIVE);
InitTiming (chip);
chip->firmwarestate = FS_ATTACHED;
@ -2086,10 +2062,11 @@ GetBytePerPixel (SANE_Byte bBitPerPixel)
}
static SANE_Byte
GetDummyCycleNumber (PAsic chip, unsigned short wYResolution)
GetDummyCycleNumber (PAsic chip, unsigned short wYResolution,
SCANSOURCE lsLightSource)
{
SANE_Byte bDummyCycleNum = 0;
if (chip->lsLightSource == LS_REFLECTIVE)
if (lsLightSource == SS_Reflective)
{
if (chip->UsbHost == HT_USB10)
{
@ -2148,7 +2125,8 @@ GetDummyCycleNumber (PAsic chip, unsigned short wYResolution)
}
static SANE_Status
Asic_SetWindow (PAsic chip, SANE_Byte bScanType, SANE_Byte bScanBits,
Asic_SetWindow (PAsic chip, SCANSOURCE lsLightSource,
SANE_Byte bScanType, SANE_Byte bScanBits,
unsigned short wXResolution, unsigned short wYResolution,
unsigned short wX, unsigned short wY,
unsigned short wWidth, unsigned short wLength)
@ -2178,10 +2156,11 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanType, SANE_Byte bScanBits,
unsigned short wFullBank;
DBG (DBG_ASIC, "Asic_SetWindow: Enter\n");
DBG (DBG_ASIC, "bScanType=%d,bScanBits=%d,wXResolution=%d,wYResolution=%d," \
"wX=%d,wY=%d,wWidth=%d,wLength=%d\n",
bScanType, bScanBits, wXResolution, wYResolution, wX, wY, wWidth,
wLength);
DBG (DBG_ASIC, "lsLightSource=%d,bScanType=%d,bScanBits=%d," \
"wXResolution=%d,wYResolution=%d,wX=%d,wY=%d," \
"wWidth=%d,wLength=%d\n",
lsLightSource, bScanType, bScanBits, wXResolution, wYResolution, wX, wY,
wWidth, wLength);
if (chip->firmwarestate != FS_OPENED)
{
@ -2205,7 +2184,7 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanType, SANE_Byte bScanBits,
DBG (DBG_ASIC, "dwBytesCountPerRow=%d\n", chip->dwBytesCountPerRow);
if (bScanType == SCAN_TYPE_NORMAL)
bDummyCycleNum = GetDummyCycleNumber (chip, wYResolution);
bDummyCycleNum = GetDummyCycleNumber (chip, wYResolution, lsLightSource);
else
bDummyCycleNum = 1;
@ -2224,7 +2203,7 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanType, SANE_Byte bScanBits,
Mustek_SendData (chip, ES01_96_GPIOValue8_15, 0x00);
}
if (chip->lsLightSource == LS_REFLECTIVE)
if (lsLightSource == SS_Reflective)
{
if (wXResolution > (SENSOR_DPI / 2))
wCCD_PixelNumber = chip->Timing.wCCDPixelNumber_Full;
@ -2305,7 +2284,7 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanType, SANE_Byte bScanBits,
SetScanMode (chip, bScanBits);
if (chip->lsLightSource == LS_REFLECTIVE)
if (lsLightSource == SS_Reflective)
Mustek_SendData (chip, ES01_F8_WHITE_SHADING_DATA_FORMAT,
SHADING_3_INT_13_DEC_ES01);
else
@ -2454,27 +2433,6 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanType, SANE_Byte bScanBits,
return status;
}
static void
Asic_ResetADParameters (PAsic chip, LIGHTSOURCE lsLightSource)
{
DBG (DBG_ASIC, "Asic_ResetADParameters: Enter\n");
chip->lsLightSource = lsLightSource;
chip->dwBytesCountPerRow = 0;
chip->AD.DirectionR = DIR_POSITIVE;
chip->AD.DirectionG = DIR_POSITIVE;
chip->AD.DirectionB = DIR_POSITIVE;
chip->AD.GainR = 0;
chip->AD.GainG = 0;
chip->AD.GainB = 0;
chip->AD.OffsetR = 0;
chip->AD.OffsetG = 0;
chip->AD.OffsetB = 0;
DBG (DBG_ASIC, "Asic_ResetADParameters: Exit\n");
}
static SANE_Status
Asic_ScanStart (PAsic chip)
{

Wyświetl plik

@ -67,23 +67,24 @@
typedef enum
{
FS_ATTACHED = 1,
FS_OPENED = 2,
FS_SCANNING = 3
FS_ATTACHED,
FS_OPENED,
FS_SCANNING
} FIRMWARESTATE;
typedef enum
{
HT_USB10 = 0,
HT_USB20 = 1
HT_USB10,
HT_USB20
} USBHOST;
typedef enum
{
LS_REFLECTIVE = 1,
LS_POSITIVE = 2,
LS_NEGATIVE = 4
} LIGHTSOURCE;
SS_Reflective,
SS_Positive,
SS_Negative
} SCANSOURCE;
typedef struct
{
@ -159,15 +160,9 @@ typedef struct
typedef struct
{
SANE_Byte GainR;
SANE_Byte GainG;
SANE_Byte GainB;
SANE_Byte OffsetR;
SANE_Byte OffsetG;
SANE_Byte OffsetB;
SANE_Bool DirectionR;
SANE_Bool DirectionG;
SANE_Bool DirectionB;
SANE_Byte Gain[3];
SANE_Byte Offset[3];
SANE_Bool Direction[3];
} ADConverter;
typedef struct
@ -177,7 +172,6 @@ typedef struct
FIRMWARESTATE firmwarestate;
SANE_Bool isFirstOpenChip; /* == SANE_FALSE after first Asic_Open */
USBHOST UsbHost;
LIGHTSOURCE lsLightSource;
unsigned int dwBytesCountPerRow;
@ -1039,14 +1033,13 @@ static SANE_Status Asic_Close (PAsic chip);
static void Asic_Initialize (PAsic chip);
static SANE_Status Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn);
static SANE_Status Asic_TurnTA (PAsic chip, SANE_Bool isTAOn);
static SANE_Status Asic_SetWindow (PAsic chip,
static SANE_Status Asic_SetWindow (PAsic chip, SCANSOURCE lsLightSource,
SANE_Byte bScanType, SANE_Byte bScanBits,
unsigned short wXResolution,
unsigned short wYResolution,
unsigned short wX, unsigned short wY,
unsigned short wWidth,
unsigned short wLength);
static void Asic_ResetADParameters (PAsic chip, LIGHTSOURCE lsLightSource);
static SANE_Status Asic_ScanStart (PAsic chip);
static SANE_Status Asic_ScanStop (PAsic chip);
static SANE_Status Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer,

Wyświetl plik

@ -48,13 +48,6 @@
#ifndef MUSTEK_USB2_HIGH_H
#define MUSTEK_USB2_HIGH_H
typedef enum
{
SS_Reflective,
SS_Positive,
SS_Negative
} SCANSOURCE;
typedef enum
{
RO_RGB,
@ -96,27 +89,11 @@ typedef struct
#define _MAX(a,b) ((a)>(b)?(a):(b))
#define _MIN(a,b) ((a)<(b)?(a):(b))
#define R_GAIN 0
#define G_GAIN 0
#define B_GAIN 0
#define R_DIRECTION DIR_POSITIVE
#define G_DIRECTION DIR_POSITIVE
#define B_DIRECTION DIR_POSITIVE
/* used for adjusting the AD offset */
/* for Reflective */
#define REFL_WHITE_MAX_LEVEL 220
#define REFL_WHITE_MIN_LEVEL 210
#define REFL_MAX_LEVEL_RANGE 210
#define REFL_MIN_LEVEL_RANGE 190
/* for Transparent */
#define TRAN_WHITE_MAX_LEVEL 220
#define TRAN_WHITE_MIN_LEVEL 210
#define TRAN_MAX_LEVEL_RANGE 210
#define TRAN_MIN_LEVEL_RANGE 190
#define WHITE_MAX_LEVEL 220
#define WHITE_MIN_LEVEL 210
#define MAX_LEVEL_RANGE 210
#define MIN_LEVEL_RANGE 190
/* 600 dpi */
#define FIND_LEFT_TOP_WIDTH_IN_DIP 512
@ -161,6 +138,11 @@ static SANE_Bool MustScanner_GetRows (SANE_Byte * lpBlock,
unsigned short * Rows,
SANE_Bool isOrderInvert);
static SANE_Bool MustScanner_Reset (SCANSOURCE ssScanSource);
static SANE_Bool MustScanner_SetupScan (TARGETIMAGE *pTarget);
static SANE_Bool MustScanner_AdjustAD (void);
static SANE_Bool MustScanner_FindTopLeft (unsigned short * lpwStartX,
unsigned short * lpwStartY);
static SANE_Bool MustScanner_LineCalibration16Bits (void);
#endif