Made error handling in mustek_usb2_asic.c more consistent.

merge-requests/1/head
Jan Hauffa 2011-03-12 19:25:59 +01:00 zatwierdzone przez m. allan noah
rodzic 96c6ee1dae
commit 033ebe6d9b
3 zmienionych plików z 91 dodań i 94 usunięć

Wyświetl plik

@ -917,7 +917,7 @@ Return value:
static SANE_Bool
GetKeyStatus (SANE_Byte * pKey)
{
SANE_Byte pKeyTemp = 0x00;
SANE_Byte pKeyTemp;
DBG (DBG_FUNC, "GetKeyStatus: start\n");
if (STATUS_GOOD != Asic_Open (&g_chip))

Wyświetl plik

@ -105,11 +105,9 @@ Mustek_ClearFIFO (PAsic chip)
return status;
status = WriteIOControl (chip, 0xc0, 0, 4, buf);
if (status != STATUS_GOOD)
return status;
DBG (DBG_ASIC, "Mustek_ClearFIFO: Exit\n");
return STATUS_GOOD;
return status;
}
static STATUS
@ -119,19 +117,8 @@ SwitchBank (PAsic chip, unsigned short reg)
SANE_Byte buf[4];
SANE_Byte bank;
if (reg < 0x100)
{
bank = SELECT_REGISTER_BANK0;
}
else if (reg < 0x200)
{
bank = SELECT_REGISTER_BANK1;
}
else if (reg < 0x300)
{
bank = SELECT_REGISTER_BANK2;
}
else
bank = HIBYTE(reg);
if (bank > SELECT_REGISTER_BANK2)
{
DBG (DBG_ERR, "SwitchBank: invalid register %d\n", reg);
return STATUS_INVAL;
@ -139,7 +126,6 @@ SwitchBank (PAsic chip, unsigned short reg)
if (RegisterBankStatus != bank)
{
DBG (DBG_ASIC, "RegisterBankStatus=%d\n", RegisterBankStatus);
buf[0] = ES01_5F_REGISTER_BANK_SELECT;
buf[1] = bank;
buf[2] = ES01_5F_REGISTER_BANK_SELECT;
@ -147,6 +133,7 @@ SwitchBank (PAsic chip, unsigned short reg)
status = WriteIOControl (chip, 0xb0, 0, 4, buf);
if (status != STATUS_GOOD)
return status;
RegisterBankStatus = bank;
DBG (DBG_ASIC, "RegisterBankStatus=%d\n", RegisterBankStatus);
}
@ -217,29 +204,23 @@ SetRWSize (PAsic chip, SANE_Byte ReadWrite, unsigned int size)
if (ReadWrite == READ_RAM)
size >>= 1;
status = Mustek_SendData (chip, ES01_7C_DMA_SIZE_BYTE0,
(SANE_Byte) size);
status = Mustek_SendData (chip, ES01_7C_DMA_SIZE_BYTE0, BYTE0 (size));
if (status != STATUS_GOOD)
return status;
status = Mustek_SendData (chip, ES01_7D_DMA_SIZE_BYTE1,
(SANE_Byte) (size >> 8));
status = Mustek_SendData (chip, ES01_7D_DMA_SIZE_BYTE1, BYTE1 (size));
if (status != STATUS_GOOD)
return status;
status = Mustek_SendData (chip, ES01_7E_DMA_SIZE_BYTE2,
(SANE_Byte) (size >> 16));
if (status != STATUS_GOOD)
return status;
status = Mustek_SendData (chip, ES01_7F_DMA_SIZE_BYTE3,
(SANE_Byte) (size >> 24));
status = Mustek_SendData (chip, ES01_7E_DMA_SIZE_BYTE2, BYTE2 (size));
if (status != STATUS_GOOD)
return status;
status = Mustek_SendData (chip, ES01_7F_DMA_SIZE_BYTE3, BYTE3 (size));
DBG (DBG_ASIC, "SetRWSize: Exit\n");
return STATUS_GOOD;
return status;
}
static STATUS
Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata)
Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpData)
{
STATUS status;
size_t read_size, cur_read_size;
@ -263,7 +244,7 @@ Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata)
if (status != STATUS_GOOD)
return status;
status = sanei_usb_read_bulk (chip->fd, lpdata, &cur_read_size);
status = sanei_usb_read_bulk (chip->fd, lpData, &cur_read_size);
if (status != STATUS_GOOD)
{
DBG (DBG_ERR, "Mustek_DMARead: read error\n");
@ -271,7 +252,7 @@ Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata)
}
size -= cur_read_size;
lpdata += cur_read_size;
lpData += cur_read_size;
}
if (cur_read_size < read_size)
@ -282,7 +263,7 @@ Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata)
}
static STATUS
Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata)
Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpData)
{
STATUS status;
size_t write_size, cur_write_size;
@ -306,7 +287,7 @@ Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata)
if (status != STATUS_GOOD)
return status;
status = sanei_usb_write_bulk (chip->fd, lpdata, &cur_write_size);
status = sanei_usb_write_bulk (chip->fd, lpData, &cur_write_size);
if (status != STATUS_GOOD)
{
DBG (DBG_ERR, "Mustek_DMAWrite: write error\n");
@ -314,7 +295,7 @@ Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata)
}
size -= cur_write_size;
lpdata += cur_write_size;
lpData += cur_write_size;
}
status = Mustek_ClearFIFO (chip);
@ -327,31 +308,29 @@ static STATUS
Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data)
{
static SANE_Bool isTransfer = SANE_FALSE;
static SANE_Byte DataBuf[4];
STATUS status;
static SANE_Byte dataBuf[4];
STATUS status = STATUS_GOOD;
if (!isTransfer)
{
DataBuf[0] = LOBYTE (reg);
DataBuf[1] = data;
dataBuf[0] = LOBYTE (reg);
dataBuf[1] = data;
isTransfer = SANE_TRUE;
}
else
{
DataBuf[2] = LOBYTE (reg);
DataBuf[3] = data;
dataBuf[2] = LOBYTE (reg);
dataBuf[3] = data;
isTransfer = SANE_FALSE;
status = SwitchBank (chip, reg);
if (status != STATUS_GOOD)
return status;
status = WriteIOControl (chip, 0xb0, 0, 4, DataBuf);
if (status != STATUS_GOOD)
return status;
status = WriteIOControl (chip, 0xb0, 0, 4, dataBuf);
}
return STATUS_GOOD;
return status;
}
@ -547,11 +526,9 @@ LLFSetMotorTable (PAsic chip, unsigned short *MotorTablePtr)
RamAccess.BufferPtr = (SANE_Byte *) MotorTablePtr;
status = LLFRamAccess (chip, &RamAccess);
if (status != STATUS_GOOD)
return status;
/* tell scan chip the motor table address, unit is 2^14 words */
status = Mustek_SendData (chip, ES01_9D_MotorTableAddrA14_A21, 0);
Mustek_SendData (chip, ES01_9D_MotorTableAddrA14_A21, 0);
DBG (DBG_ASIC, "LLFSetMotorTable: Exit\n");
return status;
@ -1177,7 +1154,6 @@ SetLineTimeAndExposure (PAsic chip)
DBG (DBG_ASIC, "SetLineTimeAndExposure: Exit\n");
}
static void
CCDTiming (PAsic chip)
{
@ -1350,15 +1326,17 @@ GetChipStatus (PAsic chip, SANE_Byte Selector, SANE_Byte * ChipStatus)
if (status != STATUS_GOOD)
return status;
status = Mustek_ReceiveData (chip, ChipStatus);
if (ChipStatus)
status = Mustek_ReceiveData (chip, ChipStatus);
DBG (DBG_ASIC, "GetChipStatus: Exit\n");
return status;
}
static void
static STATUS
SetAFEGainOffset (PAsic chip)
{
STATUS status;
int i;
DBG (DBG_ASIC, "SetAFEGainOffset: Enter\n");
@ -1428,9 +1406,8 @@ SetAFEGainOffset (PAsic chip)
else
Mustek_SendData (chip, ES01_0E_AD9826OffsetBlueP, chip->AD.OffsetB);
LLFSetRamAddress (chip, 0, PackAreaStartAddress - (512 * 8 - 1),
EXTERNAL_RAM);
status = LLFSetRamAddress (chip, 0, PackAreaStartAddress - (512 * 8 - 1),
EXTERNAL_RAM);
Mustek_SendData (chip, ES01_F3_ActionOption,
SCAN_ENABLE | UNIFORM_MOTOR_AND_SCAN_SPEED_ENABLE);
@ -1441,6 +1418,7 @@ SetAFEGainOffset (PAsic chip)
Mustek_SendData (chip, ES01_02_ADAFEMuxConfig, 0x80);
DBG (DBG_ASIC, "SetAFEGainOffset: Exit\n");
return status;
}
static void
@ -1478,10 +1456,9 @@ SetLEDTime (PAsic chip)
DBG (DBG_ASIC, "SetLEDTime: Exit\n");
}
static STATUS
static void
SetScanMode (PAsic chip, SANE_Byte bScanBits)
{
STATUS status;
SANE_Byte temp_f5_register;
DBG (DBG_ASIC, "SetScanMode(): Enter\n");
@ -1498,11 +1475,10 @@ SetScanMode (PAsic chip, SANE_Byte bScanBits)
else
temp_f5_register |= _16_BITS_ES02;
status = Mustek_SendData (chip, ES01_F5_ScanDataFormat, temp_f5_register);
Mustek_SendData (chip, ES01_F5_ScanDataFormat, temp_f5_register);
DBG (DBG_ASIC, "F5_ScanDataFormat=0x%x\n", temp_f5_register);
DBG (DBG_ASIC, "SetScanMode(): Exit\n");
return status;
}
static void
@ -1970,10 +1946,10 @@ Asic_WaitUnitReady (PAsic chip)
while (++i < 300);
DBG (DBG_ASIC, "Waited %d s\n", (unsigned short) (i * 0.1));
status = Mustek_SendData (chip, ES01_F4_ActiveTrigger, 0);
Mustek_SendData (chip, ES01_F4_ActiveTrigger, 0);
DBG (DBG_ASIC, "Asic_WaitUnitReady: Exit\n");
return status;
return STATUS_GOOD;
}
static void
@ -2044,7 +2020,6 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
return STATUS_INVAL;
}
/* TODO: do we need all this? */
Mustek_SendData (chip, ES01_F3_ActionOption, 0);
Mustek_SendData (chip, ES01_86_DisableAllClockWhenIdle, 0);
Mustek_SendData (chip, ES01_F4_ActiveTrigger, 0);
@ -2200,7 +2175,9 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
/* set AFE */
Mustek_SendData (chip, ES01_9A_AFEControl, AD9826_AFE);
SetAFEGainOffset (chip);
status = SetAFEGainOffset (chip);
if (status != STATUS_GOOD)
return status;
Mustek_SendData (chip, ES01_F7_DigitalControl, 0);
@ -2285,7 +2262,10 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
if (EndSpeed >= 20000)
{
Asic_MotorMove (chip, 1, wY / wMultiMotorStep);
status = Asic_MotorMove (chip, 1, wY / wMultiMotorStep);
if (status != STATUS_GOOD)
return status;
isUniformSpeedToScan = UNIFORM_MOTOR_AND_SCAN_SPEED_ENABLE;
isScanBackTracking = 0;
isMotorMoveToFirstLine = 0;
@ -2342,8 +2322,10 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
RamAccess.StartAddress = dwTableBaseAddr;
RamAccess.RwSize = RealTableSize * 2;
RamAccess.BufferPtr = (SANE_Byte *) lpMotorTable;
LLFRamAccess (chip, &RamAccess);
status = LLFRamAccess (chip, &RamAccess);
free (lpMotorTable);
if (status != STATUS_GOOD)
return status;
Mustek_SendData (chip, ES01_9D_MotorTableAddrA14_A21,
(SANE_Byte) (dwTableBaseAddr >> TABLE_OFFSET_BASE));
@ -2369,7 +2351,9 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
ShadingTableSize ((int) ((wWidth + 4) * dbXRatioAdderDouble)) *
sizeof (unsigned short);
RamAccess.BufferPtr = (SANE_Byte *) chip->lpShadingTable;
LLFRamAccess (chip, &RamAccess);
status = LLFRamAccess (chip, &RamAccess);
if (status != STATUS_GOOD)
return status;
/* tell scan chip the shading table address, unit is 2^15 bytes */
Mustek_SendData (chip, ES01_9B_ShadingTableAddrA14_A21,
@ -2389,7 +2373,7 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
Mustek_SendData (chip, ES01_DB_PH_RESET_EDGE_TIMING_ADJUST, 0x00);
LLFSetRamAddress (chip, 0, dwEndAddr, EXTERNAL_RAM);
status = LLFSetRamAddress (chip, 0, dwEndAddr, EXTERNAL_RAM);
Mustek_SendData (chip, ES01_DC_CLEAR_EDGE_TO_PH_TG_EDGE_WIDTH, 0);
@ -2397,7 +2381,7 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits,
Mustek_SendData (chip, ES01_02_ADAFEMuxConfig, 0x80);
DBG (DBG_ASIC, "Asic_SetWindow: Exit\n");
return STATUS_GOOD;
return status;
}
static void
@ -2424,6 +2408,7 @@ Asic_ResetADParameters (PAsic chip, LIGHTSOURCE lsLightSource)
static STATUS
Asic_ScanStart (PAsic chip)
{
STATUS status;
DBG (DBG_ASIC, "Asic_ScanStart: Enter\n");
if (chip->firmwarestate != FS_OPENED)
@ -2432,9 +2417,14 @@ Asic_ScanStart (PAsic chip)
return STATUS_INVAL;
}
Mustek_SendData (chip, ES01_8B_Status, 0x1c | 0x20);
Mustek_WriteAddressLineForRegister (chip, ES01_8B_Status);
Mustek_ClearFIFO (chip);
status = GetChipStatus(chip, 0x1c | 0x20, NULL);
if (status != STATUS_GOOD)
return status;
status = Mustek_ClearFIFO (chip);
if (status != STATUS_GOOD)
return status;
Mustek_SendData (chip, ES01_F4_ActiveTrigger, ACTION_TRIGGER_ENABLE);
chip->firmwarestate = FS_SCANNING;
@ -2493,7 +2483,10 @@ Asic_ScanStop (PAsic chip)
Mustek_SendData (chip, ES01_F3_ActionOption, 0);
Mustek_SendData (chip, ES01_86_DisableAllClockWhenIdle, 0);
Mustek_SendData (chip, ES01_F4_ActiveTrigger, 0);
Mustek_ClearFIFO (chip);
status = Mustek_ClearFIFO (chip);
if (status != STATUS_GOOD)
return status;
chip->firmwarestate = FS_OPENED;
@ -2541,18 +2534,11 @@ Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key)
DBG (DBG_ASIC, "Asic_CheckFunctionKey: Enter\n");
*key = 0;
if (chip->firmwarestate < FS_OPENED)
if (chip->firmwarestate != FS_OPENED)
{
DBG (DBG_ERR, "Asic_CheckFunctionKey: Scanner is not opened\n");
DBG (DBG_ERR, "Asic_CheckFunctionKey: Scanner is not opened or busy\n");
return STATUS_INVAL;
}
if (chip->firmwarestate > FS_OPENED)
{
DBG (DBG_INFO, "Asic_CheckFunctionKey: Scanner is busy\n");
return STATUS_GOOD;
}
Mustek_SendData (chip, ES01_97_GPIOControl0_7, 0x00);
Mustek_SendData (chip, ES01_95_GPIOValue0_7, 0x17);
@ -2576,6 +2562,8 @@ Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key)
*key = 0x08;
else if ((~bBuffer_1 & 0x02) == 0x02)
*key = 0x10;
else
*key = 0;
DBG (DBG_ASIC, "CheckFunctionKey=%d\n", *key);
DBG (DBG_ASIC, "Asic_CheckFunctionKey: Exit\n");
@ -2586,6 +2574,7 @@ Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key)
static STATUS
Asic_IsTAConnected (PAsic chip, SANE_Bool * hasTA)
{
STATUS status;
SANE_Byte bBuffer_1 = 0xff;
DBG (DBG_ASIC, "Asic_IsTAConnected: Enter\n");
@ -2601,7 +2590,10 @@ Asic_IsTAConnected (PAsic chip, SANE_Bool * hasTA)
Mustek_SendData (chip, ES01_98_GPIOControl8_15, 0x00);
Mustek_SendData (chip, ES01_96_GPIOValue8_15, 0x00);
GetChipStatus (chip, GPIO0_7, &bBuffer_1);
status = GetChipStatus (chip, GPIO0_7, &bBuffer_1);
if (status != STATUS_GOOD)
return status;
*hasTA = ((~bBuffer_1 & 0x08) == 0x08) ? SANE_TRUE : SANE_FALSE;
DBG (DBG_ASIC, "hasTA=%d\n", *hasTA);
@ -2613,6 +2605,7 @@ static STATUS
Asic_ReadCalibrationData (PAsic chip, SANE_Byte * pBuffer,
unsigned int dwXferBytes, SANE_Byte bScanBits)
{
STATUS status = STATUS_GOOD;
SANE_Byte * pCalBuffer;
unsigned int dwTotalReadData = 0;
unsigned int dwReadImageData;
@ -2643,7 +2636,10 @@ Asic_ReadCalibrationData (PAsic chip, SANE_Byte * pBuffer,
if (dwReadImageData > 65536)
dwReadImageData = 65536;
Mustek_DMARead (chip, dwReadImageData, pCalBuffer + dwTotalReadData);
status = Mustek_DMARead (chip, dwReadImageData,
pCalBuffer + dwTotalReadData);
if (status != STATUS_GOOD)
break;
dwTotalReadData += dwReadImageData;
}
@ -2664,13 +2660,16 @@ Asic_ReadCalibrationData (PAsic chip, SANE_Byte * pBuffer,
if (dwReadImageData > 65536)
dwReadImageData = 65536;
Mustek_DMARead (chip, dwReadImageData, pBuffer + dwTotalReadData);
status = Mustek_DMARead (chip, dwReadImageData,
pBuffer + dwTotalReadData);
if (status != STATUS_GOOD)
break;
dwTotalReadData += dwReadImageData;
}
}
DBG (DBG_ASIC, "Asic_ReadCalibrationData: Exit\n");
return STATUS_GOOD;
return status;
}
static void
@ -3106,8 +3105,10 @@ Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits,
RamAccess.StartAddress = dwTableBaseAddr;
RamAccess.RwSize = 512 * 8 * 2;
RamAccess.BufferPtr = (SANE_Byte *) lpMotorTable;
LLFRamAccess (chip, &RamAccess);
status = LLFRamAccess (chip, &RamAccess);
free (lpMotorTable);
if (status != STATUS_GOOD)
return status;
Mustek_SendData (chip, ES01_9D_MotorTableAddrA14_A21,
(SANE_Byte) (dwTableBaseAddr >> TABLE_OFFSET_BASE));
@ -3128,7 +3129,7 @@ Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits,
Mustek_SendData (chip, ES01_DB_PH_RESET_EDGE_TIMING_ADJUST, 0x00);
LLFSetRamAddress (chip, 0, dwEndAddr, EXTERNAL_RAM);
status = LLFSetRamAddress (chip, 0, dwEndAddr, EXTERNAL_RAM);
Mustek_SendData (chip, ES01_DC_CLEAR_EDGE_TO_PH_TG_EDGE_WIDTH, 0);
@ -3136,5 +3137,5 @@ Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits,
Mustek_SendData (chip, ES01_02_ADAFEMuxConfig, 0x80);
DBG (DBG_ASIC, "Asic_SetCalibrate: Exit\n");
return STATUS_GOOD;
return status;
}

Wyświetl plik

@ -48,6 +48,7 @@
#ifndef MUSTEK_USB2_ASIC_H
#define MUSTEK_USB2_ASIC_H
/* ---------------------- low level asic defines -------------------------- */
#ifndef LOBYTE
@ -118,7 +119,6 @@ typedef struct
unsigned short wCCDPixelNumber_600;
} Timings;
typedef struct
{
SANE_Byte GainR;
@ -133,7 +133,6 @@ typedef struct
} ADConverter;
typedef struct
{
int fd; /* file descriptor of scanner */
@ -209,7 +208,6 @@ typedef enum
#define LAMP0_PWM_DEFAULT 255
#define LAMP1_PWM_DEFAULT 255
#define TA_CAL_PIXELNUMBER 50000
#define TA_IMAGE_PIXELNUMBER 61000
#define SENSOR_DPI 1200
@ -941,9 +939,9 @@ static STATUS IsCarriageHome (PAsic chip, SANE_Bool * LampHome);
static STATUS WaitCarriageHome (PAsic chip);
static void InitTiming (PAsic chip);
static STATUS GetChipStatus (PAsic chip, SANE_Byte Selector, SANE_Byte * ChipStatus);
static void SetAFEGainOffset (PAsic chip);
static STATUS SetAFEGainOffset (PAsic chip);
static void SetLEDTime (PAsic chip);
static STATUS SetScanMode (PAsic chip, SANE_Byte bScanBits);
static void SetScanMode (PAsic chip, SANE_Byte bScanBits);
static void SetPackAddress (PAsic chip, unsigned short wWidth,
unsigned short wX, double XRatioAdderDouble,
double XRatioTypeDouble, SANE_Byte bClearPulseWidth,
@ -952,7 +950,6 @@ static void SetExtraSetting (PAsic chip, unsigned short wXResolution,
unsigned short wCCD_PixelNumber,
SANE_Bool bypassShading);
static STATUS Mustek_SendData (PAsic chip, unsigned short reg, SANE_Byte data);
static STATUS Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data);
static STATUS Mustek_ReceiveData (PAsic chip, SANE_Byte * reg);
@ -1005,7 +1002,6 @@ static STATUS Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short
/* ---------------------- ASIC motor defines -------------------------- */
typedef struct
{
SANE_Byte ReadWrite;