kopia lustrzana https://gitlab.com/sane-project/backends
Merge mustek_usb2_reflective/transparent.c into mustek_usb2_high.c.
rodzic
a45931dd11
commit
3479acf538
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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,
|
||||
|
|
Plik diff jest za duży
Load Diff
|
@ -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
|
||||
|
|
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
Ładowanie…
Reference in New Issue