- support for UMAX Astra 610P in umax_pp backend

merge-requests/1/head
Stéphane Voltz 2004-05-03 05:14:20 +00:00
rodzic 3a8d80a390
commit d41fed97b2
8 zmienionych plików z 2303 dodań i 768 usunięć

Wyświetl plik

@ -1,3 +1,9 @@
2004-03-15 Stéphane Voltz <svoltz@wanadoo.fr>
* backend/umax_pp_low.c backend/umax_pp_low.h backend/umax_pp_mid.c
backend/umax_pp_mid.h backend/umax_pp.c backend/umax_pp.h
tools/umax_pp.c: added support for 610P
2004-05-01 Henning Meier-Geinitz <henning@meier-geinitz.de>
* configure configure.in: Warnings enabled again. Added -cvs to

Wyświetl plik

@ -43,7 +43,11 @@
/* CREDITS:
Started by being a mere copy of mustek_pp
by Jochen Eisinger <jochen.eisinger@gmx.net>
then evolved in its own thing */
then evolved in its own thing
support for the 610P has been made possible thank to an hardware donation
by William Stuart
*/
#include "../include/sane/config.h"
@ -102,7 +106,7 @@
* see Changelog
*/
#define UMAX_PP_BUILD 14
#define UMAX_PP_BUILD 15
#define UMAX_PP_STATE "dev"
static int num_devices = 0;
@ -299,12 +303,14 @@ attach (const char *devname)
if (mdl > 610)
{ /* Astra 1220, 1600 and 2000 */
dev->max_res = 1200;
dev->ccd_res = 600;
dev->max_h_size = 5100;
dev->max_v_size = 7000 - 8; /* -8: workaround 'y overflow bug at 600 dpi' */
dev->max_v_size = 7000 - 8; /* -8: workaround 'y overflow bug at 600 dpi' */
}
else
{ /* Astra 610 */
dev->max_res = 600;
dev->ccd_res = 300;
dev->max_h_size = 2550;
dev->max_v_size = 3500;
}
@ -379,18 +385,35 @@ static SANE_Int
umax_pp_get_sync (SANE_Int dpi)
{
/* delta between color frames */
switch (dpi)
if (sanei_umax_pp_getastra () > 610)
{
case 1200:
return 8;
case 600:
return 4;
case 300:
return 2;
case 150:
return 1;
default:
return 0;
switch (dpi)
{
case 1200:
return 8;
case 600:
return 4;
case 300:
return 2;
case 150:
return 1;
default:
return 0;
}
}
else
{
switch (dpi)
{
case 600:
return 8;
case 300:
return 8;
case 150:
return 4;
default:
return 2;
}
}
}
@ -1973,9 +1996,9 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
}
else
{
dev->red_contrast = 2;
dev->green_contrast = 2;
dev->blue_contrast = 2;
dev->red_contrast = 6;
dev->green_contrast = 6;
dev->blue_contrast = 6;
}
/* brightness control */
@ -2031,12 +2054,12 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
{
DBG (64, "sane_get_parameters: %d-%d -> remain is %d\n",
dev->BottomX, dev->TopX, remain);
if (dev->BottomX + remain < 5100)
if (dev->BottomX + remain < dev->desc->max_h_size)
dev->BottomX += remain;
else
{
remain -= (5100 - dev->BottomX);
dev->BottomX = 5100;
remain -= (dev->desc->max_h_size - dev->BottomX);
dev->BottomX = dev->desc->max_h_size;
dev->TopX -= remain;
}
}
@ -2061,33 +2084,33 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
dev->dpi = 75;
dev->TopX = 0;
dev->TopY = 0;
dev->BottomX = 5100;
dev->BottomY = 7000;
dev->BottomX = dev->desc->max_h_size;
dev->BottomY = dev->desc->max_v_size;
}
/* fill params */
dev->params.last_frame = SANE_TRUE;
dev->params.lines = ((dev->BottomY - dev->TopY) * dev->dpi) / 600;
if (dev->dpi == 1200)
dpi = 600;
dev->params.lines =
((dev->BottomY - dev->TopY) * dev->dpi) / dev->desc->ccd_res;
if (dev->dpi >= dev->desc->ccd_res)
dpi = dev->desc->ccd_res;
else
dpi = dev->dpi;
dev->params.pixels_per_line = ((dev->BottomX - dev->TopX) * dpi) / 600;
dev->params.bytes_per_line = dev->params.pixels_per_line;
dev->params.pixels_per_line =
((dev->BottomX - dev->TopX) * dpi) / dev->desc->ccd_res;
if (dev->color == UMAX_PP_MODE_COLOR)
{
dev->params.bytes_per_line *= 3;
dev->params.bytes_per_line = dev->params.pixels_per_line * 3;
dev->params.format = SANE_FRAME_RGB;
}
else
{
dev->params.bytes_per_line = dev->params.pixels_per_line;
dev->params.format = SANE_FRAME_GRAY;
}
dev->params.depth = 8;
/* success */
if (params != NULL)
memcpy (params, &(dev->params), sizeof (dev->params));
@ -2100,12 +2123,12 @@ sane_start (SANE_Handle handle)
{
Umax_PP_Device *dev = handle;
int rc, autoset;
int delta = 0;
int delta = 0, points;
/* sanity check */
if (dev->state == UMAX_PP_STATE_SCANNING)
{
DBG (2, "start: device is already scanning\n");
DBG (2, "sane_start: device is already scanning\n");
DEBUG ();
return SANE_STATUS_DEVICE_BUSY;
@ -2114,14 +2137,14 @@ sane_start (SANE_Handle handle)
/* if cancelled, check if head is back home */
if (dev->state == UMAX_PP_STATE_CANCELLED)
{
DBG (2, "start: checking if scanner is parking head .... \n");
DBG (2, "sane_start: checking if scanner is parking head .... \n");
rc = sanei_umax_pp_status ();
/* check if scanner busy parking */
if (rc == UMAX1220P_BUSY)
{
DBG (2, "start: scanner busy\n");
DBG (2, "sane_start: scanner busy\n");
return SANE_STATUS_DEVICE_BUSY;
}
dev->state = UMAX_PP_STATE_IDLE;
@ -2145,11 +2168,12 @@ sane_start (SANE_Handle handle)
if (dev->color == UMAX_PP_MODE_COLOR)
{
delta = umax_pp_get_sync (dev->dpi);
DBG (64, "start:umax_pp_start(%d,%d,%d,%d,%d,1,%X,%X)\n",
points = 2 * delta;
DBG (64, "sane_start:umax_pp_start(%d,%d,%d,%d,%d,1,%X,%X)\n",
dev->TopX,
dev->TopY - 2 * delta,
dev->TopY - points,
dev->BottomX - dev->TopX,
dev->BottomY - dev->TopY,
dev->BottomY - dev->TopY + points,
dev->dpi,
(dev->red_brightness << 8) + (dev->green_brightness << 4) +
dev->blue_brightness,
@ -2157,9 +2181,9 @@ sane_start (SANE_Handle handle)
dev->blue_contrast);
rc = sanei_umax_pp_start (dev->TopX,
dev->TopY - 2 * delta,
dev->TopY - points,
dev->BottomX - dev->TopX,
dev->BottomY - dev->TopY,
dev->BottomY - dev->TopY + points,
dev->dpi,
2,
autoset,
@ -2175,10 +2199,12 @@ sane_start (SANE_Handle handle)
/* substract it from real scanning */
/* zone */
dev->th -= 2 * delta;
DBG (64, "sane_start: bpp=%d,tw=%d,th=%d\n", dev->bpp, dev->tw,
dev->th);
}
else
{
DBG (64, "start:umax_pp_start(%d,%d,%d,%d,%d,0,%X,%X)\n",
DBG (64, "sane_start:umax_pp_start(%d,%d,%d,%d,%d,0,%X,%X)\n",
dev->TopX,
dev->TopY,
dev->BottomX - dev->TopX,
@ -2189,16 +2215,18 @@ sane_start (SANE_Handle handle)
dev->BottomX - dev->TopX,
dev->BottomY - dev->TopY,
dev->dpi,
(dev->color ==
UMAX_PP_MODE_GRAYSCALE) ? 1 : 0, autoset,
1,
autoset,
dev->gray_brightness << 4,
dev->gray_contrast << 4, &(dev->bpp),
&(dev->tw), &(dev->th));
DBG (64, "sane_start: bpp=%d,tw=%d,th=%d\n", dev->bpp, dev->tw,
dev->th);
}
if (rc != UMAX1220P_OK)
{
DBG (2, "start: failure\n");
DBG (2, "sane_start: failure\n");
DEBUG ();
return SANE_STATUS_IO_ERROR;
@ -2221,7 +2249,7 @@ sane_start (SANE_Handle handle)
2 * delta * dev->tw * dev->bpp);
if (rc != UMAX1220P_OK)
{
DBG (2, "start: preload buffer failed\n");
DBG (2, "sane_start: preload buffer failed\n");
return SANE_STATUS_IO_ERROR;
}
}
@ -2253,7 +2281,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
/* sanity check */
if (dev->state == UMAX_PP_STATE_CANCELLED)
{
DBG (2, "read: scan cancelled\n");
DBG (2, "sane_read: scan cancelled\n");
DEBUG ();
return SANE_STATUS_CANCELLED;
@ -2262,7 +2290,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
/* eof test */
if (dev->read >= dev->th * ll)
{
DBG (2, "read: end of scan reached\n");
DBG (2, "sane_read: end of scan reached\n");
return SANE_STATUS_EOF;
}
@ -2285,12 +2313,14 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
length = (dev->bufsize / ll) * ll;
}
delta = umax_pp_get_sync (dev->dpi);
if (dev->color == UMAX_PP_MODE_COLOR)
rc =
sanei_umax_pp_read (length, dev->tw, dev->dpi, last,
dev->buf + UMAX_PP_RESERVE);
{
delta = umax_pp_get_sync (dev->dpi);
rc =
sanei_umax_pp_read (length, dev->tw, dev->dpi, last,
dev->buf + UMAX_PP_RESERVE);
}
else
rc = sanei_umax_pp_read (length, dev->tw, dev->dpi, last, dev->buf);
if (rc != UMAX1220P_OK)
@ -2337,16 +2367,37 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
{
for (x = 0; x < dev->tw; x++)
{
/* red value: sync'ed */
lbuf[x * dev->bpp + y * ll + UMAX_PP_RESERVE] =
dev->buf[x + y * ll + 2 * dev->tw + UMAX_PP_RESERVE];
/* green value, +delta line ahead of sync */
lbuf[x * dev->bpp + y * ll + 1 + UMAX_PP_RESERVE] =
dev->buf[x + (y - delta) * ll + dev->tw +
UMAX_PP_RESERVE];
/* blue value, +2*delta line ahead of sync */
lbuf[x * dev->bpp + y * ll + 2 + UMAX_PP_RESERVE] =
dev->buf[x + (y - 2 * delta) * ll + UMAX_PP_RESERVE];
switch (sanei_umax_pp_getastra ())
{
case 610:
/* green value: sync'ed */
lbuf[x * dev->bpp + y * ll + 1 + UMAX_PP_RESERVE] =
dev->buf[x + y * ll + 2 * dev->tw + UMAX_PP_RESERVE];
/* blue value, +delta line ahead of sync */
lbuf[x * dev->bpp + y * ll + 2 + UMAX_PP_RESERVE] =
dev->buf[x + (y - delta) * ll + dev->tw +
UMAX_PP_RESERVE];
/* red value, +2*delta line ahead of sync */
lbuf[x * dev->bpp + y * ll + UMAX_PP_RESERVE] =
dev->buf[x + (y - 2 * delta) * ll + UMAX_PP_RESERVE];
break;
default:
/* red value: sync'ed */
lbuf[x * dev->bpp + y * ll + UMAX_PP_RESERVE] =
dev->buf[x + y * ll + 2 * dev->tw + UMAX_PP_RESERVE];
/* green value, +delta line ahead of sync */
lbuf[x * dev->bpp + y * ll + 1 + UMAX_PP_RESERVE] =
dev->buf[x + (y - delta) * ll + dev->tw +
UMAX_PP_RESERVE];
/* blue value, +2*delta line ahead of sync */
lbuf[x * dev->bpp + y * ll + 2 + UMAX_PP_RESERVE] =
dev->buf[x + (y - 2 * delta) * ll + UMAX_PP_RESERVE];
}
}
}
/* store last data lines for next reordering */
@ -2375,7 +2426,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
*len = length;
dev->bufread += length;
dev->read += length;
DBG (64, "sane_read %ld bytes read\n", length);
DBG (64, "sane_read: %ld bytes read\n", length);
return SANE_STATUS_GOOD;

Wyświetl plik

@ -102,6 +102,7 @@ typedef struct Umax_PP_Descriptor
SANE_String ppdevice;
SANE_Int max_res;
SANE_Int ccd_res;
SANE_Int max_h_size;
SANE_Int max_v_size;
long int buf_size;

Plik diff jest za duży Load Diff

Wyświetl plik

@ -73,11 +73,11 @@ extern void sanei_umax_pp_setauto (int mode);
#ifndef PRECISION_ON
#define PRECISION_ON 1
#define PRECISION_OFF 0
#define LAMP_STATE 0x20
#define PRECISION_ON 1
#define PRECISION_OFF 0
#define MOTOR_BIT 0x40
#define LAMP_STATE 0x20
#define MOTOR_BIT 0x40
#define UMAX_PP_PARPORT_PS2 0x01
#define UMAX_PP_PARPORT_BYTE 0x02
@ -108,6 +108,10 @@ extern void sanei_umax_pp_setparport (int fd);
extern int sanei_umax_pp_getparport (void);
extern void sanei_umax_pp_setastra (int mod);
extern int sanei_umax_pp_getastra (void);
extern void sanei_umax_pp_setLeft (int mod);
extern int sanei_umax_pp_getLeft (void);
extern void sanei_umax_pp_setfull (int mod);
extern int sanei_umax_pp_getfull (void);
extern int sanei_umax_pp_scannerStatus (void);
extern int sanei_umax_pp_probeScanner (int recover);

Wyświetl plik

@ -79,7 +79,7 @@ lock_parport (void)
{
if (ioctl (sanei_umax_pp_getparport (), PPCLAIM))
{
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
}
#ifdef PPGETMODE
if (ioctl (fd, PPGETMODE, &exmode))
@ -95,7 +95,7 @@ lock_parport (void)
#else
locked = 1;
#endif
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
@ -121,7 +121,7 @@ unlock_parport (void)
#endif
DBG (3, "unlock_parport\n");
locked = 0;
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
@ -143,7 +143,7 @@ sanei_umax_pp_model (int port, int *model)
DBG (3, "sanei_umax_pp_model\n");
sanei_umax_pp_setport (port);
if (lock_parport () == UMAX1220P_BUSY)
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
/* init transport layer */
/* 0: failed
@ -160,14 +160,14 @@ sanei_umax_pp_model (int port, int *model)
if (rc == 3)
{
unlock_parport ();
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
}
if (rc != 1)
{
DBG (0, "sanei_umax_pp_initTransport() failed (%s:%d)\n", __FILE__,
__LINE__);
unlock_parport ();
return (UMAX1220P_TRANSPORT_FAILED);
return UMAX1220P_TRANSPORT_FAILED;
}
/* check model only, and if only none given in conf file */
@ -181,17 +181,17 @@ sanei_umax_pp_model (int port, int *model)
}
sanei_umax_pp_endSession ();
unlock_parport ();
if (rc < 610)
if (rc < 600)
{
DBG (0, "sanei_umax_pp_CheckModel() failed (%s:%d)\n", __FILE__,
__LINE__);
return (UMAX1220P_PROBE_FAILED);
return UMAX1220P_PROBE_FAILED;
}
*model = rc;
/* OK */
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
int
@ -211,7 +211,7 @@ sanei_umax_pp_attach (int port, char *name)
sanei_umax_pp_setport (port);
if (sanei_umax_pp_initPort (port, name) != 1)
return (UMAX1220P_PROBE_FAILED);
return UMAX1220P_PROBE_FAILED;
/* init port locks the port, so we flag that */
locked = 1;
@ -226,13 +226,13 @@ sanei_umax_pp_attach (int port, char *name)
{
DBG (0, "Recover failed ....\n");
unlock_parport ();
return (UMAX1220P_PROBE_FAILED);
return UMAX1220P_PROBE_FAILED;
}
}
else
{
unlock_parport ();
return (UMAX1220P_PROBE_FAILED);
return UMAX1220P_PROBE_FAILED;
}
}
sanei_umax_pp_endSession ();
@ -240,7 +240,7 @@ sanei_umax_pp_attach (int port, char *name)
/* OK */
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
@ -257,7 +257,7 @@ sanei_umax_pp_open (int port, char *name)
sanei_umax_pp_setport (port);
if (lock_parport () == UMAX1220P_BUSY)
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
/* init transport layer */
/* 0: failed
@ -274,7 +274,7 @@ sanei_umax_pp_open (int port, char *name)
if (rc == 3)
{
unlock_parport ();
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
}
if (rc != 1)
@ -283,7 +283,7 @@ sanei_umax_pp_open (int port, char *name)
DBG (0, "sanei_umax_pp_initTransport() failed (%s:%d)\n", __FILE__,
__LINE__);
unlock_parport ();
return (UMAX1220P_TRANSPORT_FAILED);
return UMAX1220P_TRANSPORT_FAILED;
}
/* init scanner */
if (sanei_umax_pp_initScanner (recover) == 0)
@ -292,12 +292,12 @@ sanei_umax_pp_open (int port, char *name)
__LINE__);
sanei_umax_pp_endSession ();
unlock_parport ();
return (UMAX1220P_SCANNER_FAILED);
return UMAX1220P_SCANNER_FAILED;
}
/* OK */
unlock_parport ();
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
@ -306,7 +306,7 @@ sanei_umax_pp_cancel (void)
{
DBG (3, "sanei_umax_pp_cancel\n");
if (lock_parport () == UMAX1220P_BUSY)
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
/* maybe EPAT reset here if exists */
sanei_umax_pp_cmdSync (0xC2);
@ -314,14 +314,14 @@ sanei_umax_pp_cancel (void)
sanei_umax_pp_cmdSync (0x00);
if (sanei_umax_pp_park () == 0)
{
DBG (0, "Park failed !!! (%s:%d)\n", __FILE__, __LINE__);
DBG (0, "sanei_umax_pp_park failed !!! (%s:%d)\n", __FILE__, __LINE__);
unlock_parport ();
return (UMAX1220P_PARK_FAILED);
return UMAX1220P_PARK_FAILED;
}
/* endSession() cancels any pending command */
/* such as parking ...., so we only return */
unlock_parport ();
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
@ -336,7 +336,7 @@ sanei_umax_pp_start (int x, int y, int width, int height, int dpi, int color,
DBG (3, "sanei_umax_pp_start\n");
if (lock_parport () == UMAX1220P_BUSY)
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
/* end session isn't done by cancel any more */
sanei_umax_pp_endSession ();
@ -359,31 +359,45 @@ sanei_umax_pp_start (int x, int y, int width, int height, int dpi, int color,
}
if (sanei_umax_pp_startScan
(x + 144, y, width, height, dpi, col, brightness, contrast, rbpp, rtw,
rth) != 1)
(x + sanei_umax_pp_getLeft (), y, width, height, dpi, col, brightness,
contrast, rbpp, rtw, rth) != 1)
{
sanei_umax_pp_endSession ();
unlock_parport ();
return (UMAX1220P_START_FAILED);
return UMAX1220P_START_FAILED;
}
unlock_parport ();
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
int
sanei_umax_pp_read (long len, int window, int dpi, int last,
unsigned char *buffer)
{
int read = 0;
int bytes;
DBG (3, "sanei_umax_pp_read\n");
if (lock_parport () == UMAX1220P_BUSY)
return (UMAX1220P_BUSY);
if (sanei_umax_pp_readBlock (len, window, dpi, last, buffer) == 0)
return UMAX1220P_BUSY;
/* since 610P may override len and last to meet its */
/* hardware requirements, we have to loop until we */
/* have all the data */
while (read < len)
{
sanei_umax_pp_endSession ();
return (UMAX1220P_READ_FAILED);
bytes =
sanei_umax_pp_readBlock (len - read, window, dpi, last,
buffer + read);
if (bytes == 0)
{
sanei_umax_pp_endSession ();
return UMAX1220P_READ_FAILED;
}
read += bytes;
}
unlock_parport ();
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
@ -393,8 +407,13 @@ sanei_umax_pp_lamp (int on)
{
/* init transport layer */
DBG (3, "sanei_umax_pp_lamp\n");
/* no lamp support for 610P ... */
if (sanei_umax_pp_getastra () < 1210)
return UMAX1220P_OK;
if (lock_parport () == UMAX1220P_BUSY)
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
if (sanei_umax_pp_setLamp (on) == 0)
{
@ -402,7 +421,7 @@ sanei_umax_pp_lamp (int on)
}
unlock_parport ();
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
@ -415,18 +434,16 @@ sanei_umax_pp_status (void)
DBG (3, "sanei_umax_pp_status\n");
if (lock_parport () == UMAX1220P_BUSY)
return (UMAX1220P_BUSY);
return UMAX1220P_BUSY;
/* check if head is at home */
sanei_umax_pp_cmdSync (0x40);
status = sanei_umax_pp_scannerStatus ();
if ((status & MOTOR_BIT) == 0x00)
{
unlock_parport ();
return (UMAX1220P_BUSY);
}
unlock_parport ();
DBG (8, "sanei_umax_pp_status=0x%02X\n", status);
if ((status & MOTOR_BIT) == 0x00)
return UMAX1220P_BUSY;
return (UMAX1220P_OK);
return UMAX1220P_OK;
}
int
@ -450,5 +467,5 @@ sanei_umax_pp_close ()
sanei_umax_pp_setparport (0);
}
#endif
return (UMAX1220P_OK);
return UMAX1220P_OK;
}

Wyświetl plik

@ -186,5 +186,6 @@ extern void sanei_umax_pp_setastra (int val);
/* set gamma tables */
extern void sanei_umax_pp_gamma (int *red, int *green, int *blue);
/* sets coordinate of first usable left pixel */
extern int sanei_umax_pp_getLeft (void);
#endif

Wyświetl plik

@ -33,17 +33,18 @@ main (int argc, char **argv)
char *name = NULL;
int scan = 0;
int lamp = -1;
int i,fd;
int i, fd;
int found;
int recover = 0;
int trace = 0;
int maxw,maxh;
/* scanning parameters : defaults to preview (75 dpi color, full scan area) */
int brightness = 0x0;
int contrast = 0x2C0;
int contrast = 0x646;
int dpi = 75;
int x = 0, y = 0;
int width = 5100, height = 7000;
int width = -1, height = -1;
int color = RGB_MODE;
@ -120,11 +121,6 @@ main (int argc, char **argv)
return 0;
}
x = atoi (argv[i + 1]);
if (x < 0 || x > 5100)
{
fprintf (stderr, "x must be between 0 and 5099\n");
return 0;
}
i++;
found = 1;
}
@ -138,11 +134,6 @@ main (int argc, char **argv)
return 0;
}
y = atoi (argv[i + 1]);
if (y < 0 || y > 7000)
{
fprintf (stderr, "y must be between 0 and 7000\n");
return 0;
}
i++;
found = 1;
}
@ -156,17 +147,6 @@ main (int argc, char **argv)
return 0;
}
width = atoi (argv[i + 1]);
if ((width < 1) || (width > 5100))
{
fprintf (stderr, "width must be between 1 and 5100\n");
return 0;
}
if (x + width > 5100)
{
fprintf (stderr,
"Right side of scan area exceed physical limits (x+witdh>5100)\n");
return 0;
}
i++;
found = 1;
}
@ -181,17 +161,6 @@ main (int argc, char **argv)
return 0;
}
height = atoi (argv[i + 1]);
if ((height < 1) || (height > 7000))
{
fprintf (stderr, "height must be between 1 and 7000\n");
return 0;
}
if (y + height > 7100)
{
fprintf (stderr,
"Bottom side of scan area exceed physical limits (y+height>7100)\n");
return 0;
}
i++;
found = 1;
}
@ -220,6 +189,8 @@ main (int argc, char **argv)
if ((strcmp (argv[i], "-s") == 0) || (strcmp (argv[i], "--scan") == 0))
{
scan = 1;
/* we have to probe again if we scan */
probe = 1;
found = 1;
}
@ -356,9 +327,6 @@ main (int argc, char **argv)
}
/* set x origin left to right */
x = 144 + (5100 - x) - width;
/* enable I/O */
/* parport_claim */
if (sanei_umax_pp_initPort (port, name) != 1)
@ -368,7 +336,7 @@ main (int argc, char **argv)
}
if (trace)
{
printf ("UMAX 1220P scanning program version 5.1 starting ...\n");
printf ("UMAX 610P/1220P/2000P scanning program version 6.0 starting ...\n");
#ifdef HAVE_LINUX_PPDEV_H
printf ("ppdev character device built-in.\n");
#endif
@ -426,6 +394,7 @@ main (int argc, char **argv)
/* free scanner if a scan is planned */
if (scan)
sanei_umax_pp_endSession ();
printf ("Done ....\n");
}
/* lamp on/off: must come after probing (610p handling) */
@ -459,6 +428,60 @@ main (int argc, char **argv)
/* scan */
if (scan)
{
printf ("Scanning ....\n");
if (sanei_umax_pp_getastra () < 1210)
{
maxw = 2550;
maxh = 3500;
}
else
{
maxw = 5100;
maxh = 7000;
}
if (width < 0)
width = maxw;
if (height < 0)
height = maxh;
if ((width < 1) || (width > maxw))
{
fprintf (stderr, "width must be between 1 and %d\n", maxw);
return 0;
}
if (x + width > maxw)
{
fprintf (stderr,
"Right side of scan area exceed physical limits (x+witdh>%d)\n",
maxw);
return 0;
}
if (y < 0 || y > maxh)
{
fprintf (stderr, "y must be between 0 and %d\n", maxh - 1);
return 0;
}
if (x < 0 || x > maxw)
{
fprintf (stderr, "x must be between 0 and %d\n", maxw - 1);
return 0;
}
if ((height < 1) || (height > maxh))
{
fprintf (stderr, "height must be between 1 and %d\n", maxh);
return 0;
}
if (y + height > maxh)
{
fprintf (stderr,
"Bottom side of scan area exceed physical limits (y+height>%d)\n",
maxh);
return 0;
}
/* set x origin left to right */
x = sanei_umax_pp_getLeft() + (maxw - x) - width;
/* init transport layer */
/* 0: failed
1: success
@ -474,15 +497,6 @@ main (int argc, char **argv)
printf ("initTransport() failed (%s:%d)\n", __FILE__, __LINE__);
return 0;
}
/*i = sanei_umax_pp_checkModel ();
if (i < 610)
{
sanei_umax_pp_endSession ();
printf ("checkModel() failed (%s:%d)\n", __FILE__, __LINE__);
return 0;
}
if (trace)
printf ("UMAX Astra %dP detected \n", i); */
/* init scanner */
if (sanei_umax_pp_initScanner (recover) == 0)
{
@ -499,6 +513,7 @@ main (int argc, char **argv)
/* wait for head parking */
sanei_umax_pp_parkWait ();
printf ("Done ....\n");
}
sanei_umax_pp_endSession ();
#ifdef HAVE_LINUX_PPDEV_H