Fixed ARM/Xscale issues

merge-requests/1/head
Gerhard Jaeger 2007-12-17 14:28:13 +00:00
rodzic bbc271977b
commit 9e4caebcc2
6 zmienionych plików z 81 dodań i 66 usunięć

Wyświetl plik

@ -1085,7 +1085,7 @@ usbDev_startScan( Plustek_Device *dev )
scan->sParam.PhyDpi.y = usb_SetAsicDpiY(dev,scan->sParam.UserDpi.y);
/* Allocate shading/scan buffer */
scan->pScanBuffer = (u_char*)malloc( _SCANBUF_SIZE );
scan->pScanBuffer = (u_long*)malloc( _SCANBUF_SIZE );
if( scan->pScanBuffer == NULL )
return _E_ALLOC;
@ -1198,7 +1198,7 @@ usbDev_Prepare( Plustek_Device *dev, SANE_Byte *buf )
}
}
scan->pbScanBufBegin = scan->pScanBuffer;
scan->pbScanBufBegin = (u_char*)scan->pScanBuffer;
if((dev->caps.dwFlag & SFLAG_ADF) && (scaps->OpticDpi.x == 600))
scan->dwLinesScanBuf = 8;

Wyświetl plik

@ -125,45 +125,51 @@
#define _HIBYTE(x) ((u_char)((x) >> 8))
#define _HILO2WORD(x) ((u_short)x.bHi * 256U + x.bLo)
#define _LOHI2WORD(x) ((u_short)x.bLo * 256U + x.bHi)
#define _PHILO2WORD(x) ((u_short)x->bHi * 256U + x->bLo)
#define _PLOHI2WORD(x) ((u_short)x->bLo * 256U + x->bHi)
#define PACKED8 __attribute__ ((packed,aligned(1)))
#define PACKED16 __attribute__ ((packed,aligned(2)))
/* useful for RGB-values */
typedef struct __attribute__ ((__packed__)) {
typedef struct {
u_char Red;
u_char Green;
u_char Blue;
} RGBByteDef;
} PACKED8 RGBByteDef;
typedef struct __attribute__ ((__packed__)) {
typedef struct {
u_short Red;
u_short Green;
u_short Blue;
} RGBUShortDef;
} PACKED16 RGBUShortDef;
typedef struct __attribute__ ((__packed__)) {
typedef struct {
u_long Red;
u_long Green;
u_long Blue;
} RGBULongDef;
typedef struct __attribute__ ((__packed__)) {
typedef struct {
u_char a_bColor[3];
} ColorByteDef;
} PACKED8 ColorByteDef;
typedef struct __attribute__ ((__packed__)) {
typedef struct {
u_char bHi;
u_char bLo;
} HiLoDef;
} PACKED8 HiLoDef;
typedef union __attribute__ ((__packed__)) {
typedef union {
HiLoDef HiLo[3];
u_short Colors[3];
} ColorWordDef;
} PACKED16 ColorWordDef;
typedef union __attribute__ ((__packed__)) {
typedef union {
HiLoDef HiLo;
u_short Mono;
} MonoWordDef;
} PACKED16 MonoWordDef;
typedef union {
@ -176,7 +182,7 @@ typedef union {
RGBUShortDef *pw_rgb;
HiLoDef *philo;
} AnyPtr;
} __attribute__ ((aligned(4))) AnyPtr;
typedef struct {
unsigned short x;
@ -629,7 +635,7 @@ typedef struct ScanDef
/** Image processing routine according to the scan mode */
void (*pfnProcess)(struct Plustek_Device*);
u_char* pScanBuffer; /**< our scan buffer */
u_long* pScanBuffer; /**< our scan buffer */
u_long dwLinesPerScanBufs;
u_long dwNumberOfScanBufs;

Wyświetl plik

@ -261,7 +261,7 @@ cano_AdjustLightsource( Plustek_Device *dev )
int res_r, res_g, res_b;
u_long dw, dwR, dwG, dwB, dwDiv, dwLoop1, dwLoop2;
RGBUShortDef max_rgb, min_rgb, tmp_rgb;
u_char *scanbuf = dev->scanning.pScanBuffer;
u_long *scanbuf = dev->scanning.pScanBuffer;
DCapsDef *scaps = &dev->usbDev.Caps;
HWDef *hw = &dev->usbDev.HwSetting;
@ -337,16 +337,16 @@ cano_AdjustLightsource( Plustek_Device *dev )
sprintf( tmp, "coarse-lamp-%u.raw", i );
dumpPicInit( &m_ScanParam, tmp );
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwPhyBytes );
dumpPicInit(&m_ScanParam, tmp);
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwPhyBytes, 0);
if(usb_HostSwap())
usb_Swap((u_short *)scanbuf, m_ScanParam.Size.dwPhyBytes );
sprintf( tmp, "coarse-lamp-swap%u.raw", i );
dumpPicInit( &m_ScanParam, tmp );
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwPhyBytes );
dumpPicInit(&m_ScanParam, tmp);
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwPhyBytes, 0);
dwDiv = 10;
dwLoop1 = m_ScanParam.Size.dwPhyPixels/dwDiv;
@ -512,7 +512,7 @@ cano_AdjustGain( Plustek_Device *dev )
char tmp[40];
int i = 0, adj = 1;
u_long dw;
u_char *scanbuf = dev->scanning.pScanBuffer;
u_long *scanbuf = dev->scanning.pScanBuffer;
DCapsDef *scaps = &dev->usbDev.Caps;
HWDef *hw = &dev->usbDev.HwSetting;
@ -579,8 +579,8 @@ cano_AdjustGain( Plustek_Device *dev )
sprintf( tmp, "coarse-gain-%u.raw", i++ );
dumpPicInit( &m_ScanParam, tmp );
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwPhyBytes );
dumpPicInit(&m_ScanParam, tmp);
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwPhyBytes, 0);
if(usb_HostSwap())
usb_Swap((u_short *)scanbuf, m_ScanParam.Size.dwPhyBytes );
@ -761,7 +761,7 @@ cano_AdjustOffset( Plustek_Device *dev )
signed char now[3] = { 0, 0, 0 };
signed char high[3] = { 31, 31, 31 };
u_char *scanbuf = dev->scanning.pScanBuffer;
u_long *scanbuf = dev->scanning.pScanBuffer;
HWDef *hw = &dev->usbDev.HwSetting;
DCapsDef *scaps = &dev->usbDev.Caps;
@ -823,8 +823,8 @@ cano_AdjustOffset( Plustek_Device *dev )
sprintf( tmp, "coarse-off-%u.raw", i );
dumpPicInit( &m_ScanParam, tmp );
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwPhyBytes );
dumpPicInit(&m_ScanParam, tmp);
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwPhyBytes, 0);
if(usb_HostSwap())
usb_Swap((u_short *)scanbuf, m_ScanParam.Size.dwPhyBytes );
@ -945,7 +945,7 @@ cano_AdjustDarkShading( Plustek_Device *dev, u_short cal_dpi )
char tmp[40];
ScanParam *param = &dev->scanning.sParam;
ScanDef *scan = &dev->scanning;
u_char *scanbuf = scan->pScanBuffer;
u_long *scanbuf = scan->pScanBuffer;
u_short *bufp;
unsigned int i, j;
int step, stepW, val;
@ -959,13 +959,13 @@ cano_AdjustDarkShading( Plustek_Device *dev, u_short cal_dpi )
m_ScanParam.bCalibration = PARAM_DarkShading;
sprintf( tmp, "fine-dark.raw" );
dumpPicInit( &m_ScanParam, tmp );
dumpPicInit(&m_ScanParam, tmp);
usb_SetScanParameters( dev, &m_ScanParam );
if( usb_ScanBegin( dev, SANE_FALSE ) &&
usb_ScanReadImage( dev, scanbuf, m_ScanParam.Size.dwTotalBytes)) {
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwTotalBytes );
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwTotalBytes, 0);
if(usb_HostSwap())
usb_Swap((u_short *)scanbuf, m_ScanParam.Size.dwTotalBytes);
@ -1073,7 +1073,7 @@ cano_AdjustWhiteShading( Plustek_Device *dev, u_short cal_dpi )
char tmp[40];
ScanParam *param = &dev->scanning.sParam;
ScanDef *scan = &dev->scanning;
u_char *scanbuf = scan->pScanBuffer;
u_long *scanbuf = scan->pScanBuffer;
u_short *bufp;
unsigned int i, j;
int step, stepW;
@ -1092,13 +1092,13 @@ cano_AdjustWhiteShading( Plustek_Device *dev, u_short cal_dpi )
DBG( _DBG_INFO2, "Pixels = %lu\n", m_ScanParam.Size.dwPixels );
DBG( _DBG_INFO2, "Bytes = %lu\n", m_ScanParam.Size.dwBytes );
DBG( _DBG_INFO2, "Origin.X = %u\n", m_ScanParam.Origin.x );
dumpPicInit( &m_ScanParam, tmp );
dumpPicInit(&m_ScanParam, tmp);
if( usb_SetScanParameters( dev, &m_ScanParam ) &&
usb_ScanBegin( dev, SANE_FALSE ) &&
usb_ScanReadImage( dev, scanbuf, m_ScanParam.Size.dwTotalBytes)) {
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwTotalBytes );
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwTotalBytes, 0);
if(usb_HostSwap())
usb_Swap((u_short *)scanbuf, m_ScanParam.Size.dwTotalBytes);

Wyświetl plik

@ -767,7 +767,7 @@ static void usb_GrayDuplicate16( Plustek_Device *dev )
if( swap )
*dest = (_PHILO2WORD(pwm)) >> ls;
else
*dest = *((u_short*)pwm) >> ls;
*dest = (_PLOHI2WORD(pwm)) >> ls;
}
}
@ -1643,7 +1643,7 @@ static void usb_GrayScale16( Plustek_Device *dev )
if( swap )
*dest = _PHILO2WORD(pwm) >> ls;
else
*dest = *((u_short*)pwm) >> ls;
*dest = _PLOHI2WORD(pwm) >> ls;
dest += next;
ddax += izoom;
@ -1949,7 +1949,7 @@ static SANE_Int usb_ReadData( Plustek_Device *dev )
if( usb_ScanReadImage( dev, scan->pbGetDataBuf, dw )) {
dumpPic( "plustek-pic.raw", scan->pbGetDataBuf, dw );
dumpPic("plustek-pic.raw", scan->pbGetDataBuf, dw, 0);
if( scan->dwLinesDiscard ) {

Wyświetl plik

@ -97,9 +97,10 @@ static PicDef dPix;
/**
*/
static void dumpPic( char* name, SANE_Byte *buffer, u_long len )
static void dumpPic( char* name, SANE_Byte *buffer, u_long len, int is_gray )
{
FILE *fp;
u_short type;
FILE *fp;
if( DBG_LEVEL < _DBG_DPIC )
return;
@ -114,12 +115,17 @@ static void dumpPic( char* name, SANE_Byte *buffer, u_long len )
if( 0 != dPix.x ) {
if (is_gray)
type = 5;
else
type = 6;
DBG( _DBG_DPIC, "> X=%lu, Y=%lu, depth=%u\n",
dPix.x, dPix.y, dPix.depth );
if( dPix.depth > 8 )
fprintf( fp, "P6\n%lu %lu\n65535\n", dPix.x, dPix.y );
fprintf( fp, "P%u\n%lu %lu\n65535\n", type, dPix.x, dPix.y);
else
fprintf( fp, "P6\n%lu %lu\n255\n", dPix.x, dPix.y );
fprintf( fp, "P%u\n%lu %lu\n255\n", type, dPix.x, dPix.y);
}
}
} else {
@ -150,7 +156,10 @@ static void dumpPicInit( ScanParam *sd, char* name )
dPix.y = sd->Size.dwLines;
dPix.depth = sd->bBitDepth;
dumpPic( name, NULL, 0 );
if( sd->bDataType == SCANDATATYPE_Color )
dumpPic(name, NULL, 0, 0);
else
dumpPic(name, NULL, 0, 1);
}
/**

Wyświetl plik

@ -783,7 +783,7 @@ static SANE_Bool usb_AdjustGain( Plustek_Device *dev, int fNegative )
ScanDef *scanning = &dev->scanning;
DCapsDef *scaps = &dev->usbDev.Caps;
HWDef *hw = &dev->usbDev.HwSetting;
u_char *scanbuf = scanning->pScanBuffer;
u_long *scanbuf = scanning->pScanBuffer;
u_char *regs = dev->usbDev.a_bRegs;
u_long dw, start, end, len;
SANE_Bool fRepeatITA = SANE_TRUE;
@ -868,8 +868,8 @@ TOGAIN:
sprintf( tmp, "coarse-gain-%u.raw", i++ );
dumpPicInit( &m_ScanParam, tmp );
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwPhyBytes );
dumpPicInit(&m_ScanParam, tmp);
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwPhyBytes, 0);
#ifdef SWAP_COARSE
if(usb_HostSwap())
@ -1257,7 +1257,7 @@ static SANE_Bool usb_AdjustOffset( Plustek_Device *dev )
HWDef *hw = &dev->usbDev.HwSetting;
u_char *regs = dev->usbDev.a_bRegs;
u_char *scanbuf = dev->scanning.pScanBuffer;
u_long *scanbuf = dev->scanning.pScanBuffer;
if( usb_IsEscPressed())
return SANE_FALSE;
@ -1354,8 +1354,8 @@ static SANE_Bool usb_AdjustOffset( Plustek_Device *dev )
if(usb_HostSwap())
usb_Swap((u_short *)scanbuf, m_ScanParam.Size.dwPhyBytes );
#endif
dumpPicInit( &m_ScanParam, tmp );
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwPhyBytes );
dumpPicInit(&m_ScanParam, tmp);
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwPhyBytes, 0);
if( m_ScanParam.bDataType == SCANDATATYPE_Color ) {
@ -1467,7 +1467,7 @@ static void usb_GetDarkShading( Plustek_Device *dev, u_short *pwDest,
#ifndef SWAP_FINE
wtmp = ((int)_PHILO2WORD(pSrce) + iOffset);
#else
wtmp = (*((int*)pSrce) + iOffset);
wtmp = ((int)_PLOHI2WORD(pSrce) + iOffset);
#endif
if( wtmp < 0 )
wtmp = 0;
@ -1494,7 +1494,7 @@ static void usb_GetDarkShading( Plustek_Device *dev, u_short *pwDest,
#ifndef SWAP_FINE
dwSum[dw & 1] += (u_long)_PHILO2WORD(pSrce);
#else
dwSum[dw & 1] += (u_long)(*(u_short*)pSrce);
dwSum[dw & 1] += (u_long)_PLOHI2WORD(pSrce);
#endif
}
dwSum[0] /= ((dwPixels + 1UL) >> 1);
@ -1534,7 +1534,7 @@ static void usb_GetDarkShading( Plustek_Device *dev, u_short *pwDest,
#ifndef SWAP_FINE
dwSum[0] += (u_long)_PHILO2WORD(pSrce);
#else
dwSum[0] += (u_long)(*(u_short*)pSrce);
dwSum[0] += (u_long)_PLOHI2WORD(pSrce);
#endif
}
@ -1574,7 +1574,7 @@ static SANE_Bool usb_AdjustDarkShading( Plustek_Device *dev )
ScanDef *scanning = &dev->scanning;
DCapsDef *scaps = &dev->usbDev.Caps;
HWDef *hw = &dev->usbDev.HwSetting;
u_char *scanbuf = scanning->pScanBuffer;
u_long *scanbuf = scanning->pScanBuffer;
u_char *regs = dev->usbDev.a_bRegs;
if( usb_IsEscPressed())
@ -1660,8 +1660,8 @@ static SANE_Bool usb_AdjustDarkShading( Plustek_Device *dev )
sprintf( tmp, "fine-black.raw" );
dumpPicInit( &m_ScanParam, tmp );
dumpPic( tmp, scanbuf, m_ScanParam.Size.dwPhyBytes );
dumpPicInit(&m_ScanParam, tmp);
dumpPic(tmp, (u_char*)scanbuf, m_ScanParam.Size.dwPhyBytes, 0);
usleep(500 * 1000); /* Warm up lamp again */
@ -1817,7 +1817,7 @@ static void usb_procHighlightAndShadow( Plustek_Device *dev, ScanParam *sp,
u_long *pr, *pg, *pb;
RGBUShortDef *rgb;
pr = (u_long*)(scan->pScanBuffer + sp->Size.dwPhyBytes * shading_lines);
pr = (u_long*)((u_char*)scan->pScanBuffer + sp->Size.dwPhyBytes * shading_lines);
pg = pr + sp->Size.dwPhyPixels;
pb = pg + sp->Size.dwPhyPixels;
@ -1855,7 +1855,7 @@ static SANE_Bool usb_AdjustWhiteShading( Plustek_Device *dev )
ScanDef *scan = &dev->scanning;
DCapsDef *scaps = &dev->usbDev.Caps;
HWDef *hw = &dev->usbDev.HwSetting;
u_char *pBuf = scan->pScanBuffer;
u_long *pBuf = scan->pScanBuffer;
u_long dw, dwLines, dwRead;
u_long shading_lines;
MonoWordDef *pValue;
@ -1940,7 +1940,7 @@ static SANE_Bool usb_AdjustWhiteShading( Plustek_Device *dev )
usleep(900000);
}
if( usb_ScanReadImage( dev, pBuf + dwRead,
if( usb_ScanReadImage( dev, (u_char*)pBuf + dwRead,
m_ScanParam.Size.dwTotalBytes)) {
if( _LM9831 == hw->chip ) {
@ -1949,10 +1949,10 @@ static SANE_Bool usb_AdjustWhiteShading( Plustek_Device *dev )
}
if( 0 == dwRead ) {
dumpPicInit( &m_ScanParam, tmp );
dumpPicInit(&m_ScanParam, tmp);
}
dumpPic( tmp, pBuf + dwRead, m_ScanParam.Size.dwTotalBytes );
dumpPic(tmp, (u_char*)pBuf + dwRead, m_ScanParam.Size.dwTotalBytes, 0);
if( usb_ScanEnd( dev )) {
dwRead += m_ScanParam.Size.dwTotalBytes;
@ -1965,7 +1965,7 @@ static SANE_Bool usb_AdjustWhiteShading( Plustek_Device *dev )
return SANE_FALSE;
}
m_pSum = (u_long*)(pBuf + m_ScanParam.Size.dwPhyBytes * shading_lines);
m_pSum = (u_long*)((u_char*)pBuf + m_ScanParam.Size.dwPhyBytes * shading_lines);
/*
* do some reordering on CIS based devices:
@ -2019,11 +2019,11 @@ static SANE_Bool usb_AdjustWhiteShading( Plustek_Device *dev )
if(usb_HostSwap()) {
#endif
for( dw = 0; dw < m_dwPixels * m_ScanParam.bChannels; dw++ )
pwDest[dw] = _HILO2WORD( pwSrce[dw] );
pwDest[dw] = _HILO2WORD(pwSrce[dw]);
#ifdef SWAP_FINE
} else {
for( dw = 0; dw < m_dwPixels * m_ScanParam.bChannels; dw++ )
pwDest[dw] = ((u_short*)pwSrce)[dw];
pwDest[dw] = _LOHI2WORD(pwSrce[dw]);
}
#endif
pwDest += (u_long)m_dwPixels * m_ScanParam.bChannels;
@ -2043,13 +2043,13 @@ static SANE_Bool usb_AdjustWhiteShading( Plustek_Device *dev )
#endif
for( dw = 0; dw < m_ScanParam.Size.dwPhyPixels *
m_ScanParam.bChannels; dw++) {
pwDest[dw] = _HILO2WORD( pwSrce[dw] );
pwDest[dw] = _HILO2WORD(pwSrce[dw]);
}
#ifdef SWAP_FINE
} else {
for( dw = 0; dw < m_ScanParam.Size.dwPhyPixels *
m_ScanParam.bChannels; dw++) {
pwDest[dw] = ((u_short*)pwSrce)[dw];
pwDest[dw] = _LOHI2WORD(pwSrce[dw]);
}
}
#endif
@ -2310,7 +2310,7 @@ usb_SpeedTest( Plustek_Device *dev )
DCapsDef *scaps = &dev->usbDev.Caps;
HWDef *hw = &dev->usbDev.HwSetting;
u_char *regs = dev->usbDev.a_bRegs;
u_char *scanbuf = dev->scanning.pScanBuffer;
u_long *scanbuf = dev->scanning.pScanBuffer;
if( usb_IsEscPressed())
return SANE_FALSE;
@ -2393,7 +2393,7 @@ usb_AutoWarmup( Plustek_Device *dev )
ScanDef *scanning = &dev->scanning;
DCapsDef *scaps = &dev->usbDev.Caps;
HWDef *hw = &dev->usbDev.HwSetting;
u_char *scanbuf = scanning->pScanBuffer;
u_long *scanbuf = scanning->pScanBuffer;
u_char *regs = dev->usbDev.a_bRegs;
u_long dw, start, end, len;
u_long curR, curG, curB;