diff --git a/backend/mustek_usb2_asic.c b/backend/mustek_usb2_asic.c index 259a44943..02b65236d 100644 --- a/backend/mustek_usb2_asic.c +++ b/backend/mustek_usb2_asic.c @@ -67,8 +67,6 @@ static SANE_Status WaitUnitReady (ASIC * chip); /* ---------------------- low level ASIC functions -------------------------- */ -static SANE_Byte RegisterBankStatus = ~0; - static SANE_Status WriteIOControl (ASIC * chip, unsigned short wValue, unsigned short wIndex, unsigned short wLength, SANE_Byte * pBuf) @@ -133,7 +131,7 @@ Mustek_SwitchBank (ASIC * chip, unsigned short reg) return SANE_STATUS_INVAL; } - if (RegisterBankStatus != bank) + if (chip->RegisterBankStatus != bank) { buf[0] = ES01_5F_REGISTER_BANK_SELECT; buf[1] = bank; @@ -143,8 +141,8 @@ Mustek_SwitchBank (ASIC * chip, unsigned short reg) if (status != SANE_STATUS_GOOD) return status; - RegisterBankStatus = bank; - DBG (DBG_ASIC, "RegisterBankStatus=%d\n", RegisterBankStatus); + chip->RegisterBankStatus = bank; + DBG (DBG_ASIC, "RegisterBankStatus=%d\n", chip->RegisterBankStatus); } return SANE_STATUS_GOOD; @@ -314,27 +312,25 @@ Mustek_DMAWrite (ASIC * chip, unsigned int size, SANE_Byte * pData) static SANE_Status Mustek_SendData2Byte (ASIC * chip, unsigned short reg, SANE_Byte data) { - static SANE_Bool isTransfer = SANE_FALSE; - static SANE_Byte dataBuf[4]; SANE_Status status = SANE_STATUS_GOOD; - if (!isTransfer) + if (!chip->is2ByteTransfer) { - dataBuf[0] = LOBYTE (reg); - dataBuf[1] = data; - isTransfer = SANE_TRUE; + chip->dataBuf[0] = LOBYTE (reg); + chip->dataBuf[1] = data; + chip->is2ByteTransfer = SANE_TRUE; } else { - dataBuf[2] = LOBYTE (reg); - dataBuf[3] = data; - isTransfer = SANE_FALSE; + chip->dataBuf[2] = LOBYTE (reg); + chip->dataBuf[3] = data; + chip->is2ByteTransfer = SANE_FALSE; status = Mustek_SwitchBank (chip, reg); if (status != SANE_STATUS_GOOD) return status; - status = WriteIOControl (chip, 0xb0, 0, 4, dataBuf); + status = WriteIOControl (chip, 0xb0, 0, 4, chip->dataBuf); } return status; @@ -1994,6 +1990,9 @@ Asic_Initialize (ASIC * chip) chip->isMotorMoveToFirstLine = MOTOR_MOVE_TO_FIRST_LINE_ENABLE; chip->pShadingTable = NULL; + chip->RegisterBankStatus = 0xff; + chip->is2ByteTransfer = SANE_FALSE; + InitTiming (chip); chip->firmwarestate = FS_ATTACHED; diff --git a/backend/mustek_usb2_asic.h b/backend/mustek_usb2_asic.h index 06eafd26d..1a0ac2dee 100644 --- a/backend/mustek_usb2_asic.h +++ b/backend/mustek_usb2_asic.h @@ -51,19 +51,22 @@ /* ---------------------- low level ASIC defines -------------------------- */ -#ifndef LOBYTE -#define LOBYTE(w) (SANE_Byte)((unsigned short)(w) & 0x00ff) +#ifndef WORDS_BIGENDIAN +# define LOBYTE(w) (SANE_Byte)((unsigned short)(w) & 0xff) +# define HIBYTE(w) (SANE_Byte)(((unsigned short)(w) >> 8) & 0xff) +# define BYTE0(x) (SANE_Byte)((unsigned int)(x) & 0xff) +# define BYTE1(x) (SANE_Byte)(((unsigned int)(x) >> 8) & 0xff) +# define BYTE2(x) (SANE_Byte)(((unsigned int)(x) >> 16) & 0xff) +# define BYTE3(x) (SANE_Byte)(((unsigned int)(x) >> 24) & 0xff) +#else +# define LOBYTE(w) (SANE_Byte)(((unsigned short)(w) >> 8) & 0xff) +# define HIBYTE(w) (SANE_Byte)((unsigned short)(w) & 0xff) +# define BYTE0(x) (SANE_Byte)(((unsigned int)(x) >> 24) & 0xff) +# define BYTE1(x) (SANE_Byte)(((unsigned int)(x) >> 16) & 0xff) +# define BYTE2(x) (SANE_Byte)(((unsigned int)(x) >> 8) & 0xff) +# define BYTE3(x) (SANE_Byte)((unsigned int)(x) & 0xff) #endif -#ifndef HIBYTE -#define HIBYTE(w) (SANE_Byte)((unsigned short)(w)>>8 & 0x00ff) -#endif - -#define BYTE0(x) (SANE_Byte)((unsigned int)(x) & 0xff) -#define BYTE1(x) (SANE_Byte)(((unsigned int)(x) >> 8) & 0xff) -#define BYTE2(x) (SANE_Byte)(((unsigned int)(x) >> 16) & 0xff) -#define BYTE3(x) (SANE_Byte)(((unsigned int)(x) >> 24) & 0xff) - typedef enum { @@ -201,6 +204,10 @@ typedef struct SANE_Byte isMotorMoveToFirstLine; unsigned short * pShadingTable; + + SANE_Byte RegisterBankStatus; + SANE_Bool is2ByteTransfer; + SANE_Byte dataBuf[4]; } ASIC;