kopia lustrzana https://gitlab.com/sane-project/backends
- support for UMAX Astra 610P in umax_pp backend
rodzic
3a8d80a390
commit
d41fed97b2
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
111
tools/umax_pp.c
111
tools/umax_pp.c
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue