kopia lustrzana https://gitlab.com/sane-project/backends
- added ppdev support for 610P
- fixed direct hardware ECP support for 1220P - fixed scanning area overflow - removed uneeded functionmerge-requests/1/head
rodzic
12967b4bd1
commit
e2b72e6b57
|
@ -1,3 +1,10 @@
|
||||||
|
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.c tools/umax_pp.c: Added ppdev support for 610P
|
||||||
|
detection. Fixed scan area overflow at >= 600 dpi. Fixed ppdev
|
||||||
|
data direction setting. Fixed direct hardware ECP mode for 1220P.
|
||||||
|
|
||||||
2004-03-14 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
2004-03-14 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
||||||
|
|
||||||
* tools/README tools/hotplug/README tools/hotplug/libsane.usermap
|
* tools/README tools/hotplug/README tools/hotplug/libsane.usermap
|
||||||
|
|
|
@ -300,12 +300,12 @@ attach (const char *devname)
|
||||||
{ /* Astra 1220, 1600 and 2000 */
|
{ /* Astra 1220, 1600 and 2000 */
|
||||||
dev->max_res = 1200;
|
dev->max_res = 1200;
|
||||||
dev->max_h_size = 5100;
|
dev->max_h_size = 5100;
|
||||||
dev->max_v_size = 7000;
|
dev->max_v_size = 7000 - 8; /* -8: workaround 'y overflow bug at 600 dpi' */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ /* Astra 610 */
|
{ /* Astra 610 */
|
||||||
dev->max_res = 600;
|
dev->max_res = 600;
|
||||||
dev->max_h_size = 2050;
|
dev->max_h_size = 2550;
|
||||||
dev->max_v_size = 3500;
|
dev->max_v_size = 3500;
|
||||||
}
|
}
|
||||||
dev->sane.model = strdup (model);
|
dev->sane.model = strdup (model);
|
||||||
|
|
|
@ -1068,6 +1068,8 @@ sanei_umax_pp_initPort (int port, char *name)
|
||||||
/* faking result */
|
/* faking result */
|
||||||
modes = 0xFFFFFFFF;
|
modes = 0xFFFFFFFF;
|
||||||
#endif
|
#endif
|
||||||
|
mode = 0;
|
||||||
|
|
||||||
/* prefered mode is EPP */
|
/* prefered mode is EPP */
|
||||||
if (modes & PARPORT_MODE_EPP)
|
if (modes & PARPORT_MODE_EPP)
|
||||||
{
|
{
|
||||||
|
@ -1134,7 +1136,20 @@ sanei_umax_pp_initPort (int port, char *name)
|
||||||
|
|
||||||
/* allways start in compat mode (for probe) */
|
/* allways start in compat mode (for probe) */
|
||||||
mode = IEEE1284_MODE_COMPAT;
|
mode = IEEE1284_MODE_COMPAT;
|
||||||
ioctl (fd, PPSETMODE, &mode);
|
rc = ioctl (fd, PPSETMODE, &mode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n",
|
||||||
|
strerror (errno), __FILE__, __LINE__);
|
||||||
|
mode = 0; /* data forward */
|
||||||
|
rc = ioctl (fd, PPDATADIR, &mode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n",
|
||||||
|
strerror (errno), __FILE__, __LINE__);
|
||||||
|
mode = 1; /* FW IDLE */
|
||||||
|
rc = ioctl (fd, PPSETPHASE, &mode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n",
|
||||||
|
strerror (errno), __FILE__, __LINE__);
|
||||||
found = 1;
|
found = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1257,24 +1272,24 @@ Outb (int port, int value)
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
return;
|
return;
|
||||||
case 2:
|
case 2:
|
||||||
/* XXX STEF XXX : should we do BOTH ? */
|
mode = val & 0x20;
|
||||||
if (val & 0x20)
|
rc = ioctl (fd, PPDATADIR, &mode);
|
||||||
{
|
if (rc)
|
||||||
rc = ioctl (fd, PPDATADIR, &val);
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n",
|
||||||
if (rc)
|
strerror (errno), __FILE__, __LINE__);
|
||||||
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n",
|
val = val & 0xDF;
|
||||||
strerror (errno), __FILE__, __LINE__);
|
rc = ioctl (fd, PPWCONTROL, &val);
|
||||||
}
|
if (rc)
|
||||||
else
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n",
|
||||||
{
|
strerror (errno), __FILE__, __LINE__);
|
||||||
rc = ioctl (fd, PPWCONTROL, &val);
|
|
||||||
if (rc)
|
|
||||||
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n",
|
|
||||||
strerror (errno), __FILE__, __LINE__);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
case 4:
|
case 4:
|
||||||
rc = ioctl (fd, PPGETMODE, &exmode);
|
rc = ioctl (fd, PPGETMODE, &exmode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
mode = 0; /* data forward */
|
||||||
|
rc = ioctl (fd, PPDATADIR, &mode);
|
||||||
if (rc)
|
if (rc)
|
||||||
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
|
@ -1293,6 +1308,11 @@ Outb (int port, int value)
|
||||||
return;
|
return;
|
||||||
case 3:
|
case 3:
|
||||||
rc = ioctl (fd, PPGETMODE, &exmode);
|
rc = ioctl (fd, PPGETMODE, &exmode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
mode = 0; /* data forward */
|
||||||
|
rc = ioctl (fd, PPDATADIR, &mode);
|
||||||
if (rc)
|
if (rc)
|
||||||
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
|
@ -1743,11 +1763,11 @@ compatMode (void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LINUX_PPDEV_H
|
#ifdef HAVE_LINUX_PPDEV_H
|
||||||
if (ppdev_set_mode (IEEE1284_MODE_COMPAT))
|
if (ppdev_set_mode (IEEE1284_MODE_COMPAT))
|
||||||
{
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
Outb (ECR, 0x14);
|
if (!gECP)
|
||||||
|
return;
|
||||||
|
Outb (ECR, 0x15);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set parallel port mode to 'bidirectionel'*/
|
/* set parallel port mode to 'bidirectionel'*/
|
||||||
|
@ -1758,6 +1778,8 @@ byteMode (void)
|
||||||
if (ppdev_set_mode (IEEE1284_MODE_BYTE))
|
if (ppdev_set_mode (IEEE1284_MODE_BYTE))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
if (!gECP)
|
||||||
|
return;
|
||||||
Outb (ECR, 0x35); /* or 0x34 */
|
Outb (ECR, 0x35); /* or 0x34 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1780,6 +1802,8 @@ ECPFifoMode (void)
|
||||||
if (ppdev_set_mode (IEEE1284_MODE_ECP))
|
if (ppdev_set_mode (IEEE1284_MODE_ECP))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
if (!gECP)
|
||||||
|
return;
|
||||||
Outb (ECR, 0x75);
|
Outb (ECR, 0x75);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1828,7 +1852,6 @@ waitFifoEmpty (void)
|
||||||
{
|
{
|
||||||
breg = Inb (ECR);
|
breg = Inb (ECR);
|
||||||
i++;
|
i++;
|
||||||
/* usleep (2000); */
|
|
||||||
}
|
}
|
||||||
if (i == FIFO_WAIT)
|
if (i == FIFO_WAIT)
|
||||||
{
|
{
|
||||||
|
@ -3546,29 +3569,32 @@ init005 (int arg)
|
||||||
int
|
int
|
||||||
putByte610p (int data)
|
putByte610p (int data)
|
||||||
{
|
{
|
||||||
int status;
|
int status, control;
|
||||||
|
|
||||||
status = Inb (STATUS) & 0xF8;
|
status = Inb (STATUS) & 0xF8;
|
||||||
if (status != 0xC8)
|
if ((status != 0xC8) && (status != 0xC0))
|
||||||
{
|
{
|
||||||
DBG (0, "putByte610p failed, expected 0xC8 got 0x%02X ! (%s:%d)\n",
|
DBG (0,
|
||||||
|
"putByte610p failed, expected 0xC8 or 0xC0 got 0x%02X ! (%s:%d)\n",
|
||||||
status, __FILE__, __LINE__);
|
status, __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
Inb (CONTROL);
|
control = Inb (CONTROL) & 0x1F; /* data forward */
|
||||||
Outb (CONTROL, 0x04);
|
Outb (CONTROL, control);
|
||||||
|
|
||||||
Outb (DATA, data);
|
Outb (DATA, data);
|
||||||
Outb (CONTROL, 0x07);
|
Outb (CONTROL, 0x07);
|
||||||
status = Inb (STATUS) & 0xF8;
|
status = Inb (STATUS) & 0xF8;
|
||||||
if (status != 0x48)
|
if ((status != 0x48) && (status != 0x40))
|
||||||
{
|
{
|
||||||
DBG (0, "putByte610p failed, expected 0xC8 got 0x%02X ! (%s:%d)\n",
|
DBG (0,
|
||||||
|
"putByte610p failed, expected 0x48 or 0x40 got 0x%02X ! (%s:%d)\n",
|
||||||
status, __FILE__, __LINE__);
|
status, __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
Outb (CONTROL, 0x05);
|
Outb (CONTROL, 0x05);
|
||||||
status = Inb (STATUS) & 0xF8;
|
status = Inb (STATUS) & 0xF8;
|
||||||
Outb (CONTROL, 0x04);
|
Outb (CONTROL, control);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3655,6 +3681,7 @@ getStatus610p (void)
|
||||||
{
|
{
|
||||||
int data, status;
|
int data, status;
|
||||||
|
|
||||||
|
/* XXX STEF: we have to save current mode and restore it on return */
|
||||||
byteMode ();
|
byteMode ();
|
||||||
status = Inb (STATUS) & 0xF8;
|
status = Inb (STATUS) & 0xF8;
|
||||||
Outb (CONTROL, 0x26); /* data reverse */
|
Outb (CONTROL, 0x26); /* data reverse */
|
||||||
|
@ -3667,7 +3694,6 @@ getStatus610p (void)
|
||||||
}
|
}
|
||||||
scannerStatus = data;
|
scannerStatus = data;
|
||||||
Outb (CONTROL, 0x24);
|
Outb (CONTROL, 0x24);
|
||||||
compatMode (); /* XXX STEF XXX */
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3678,26 +3704,44 @@ sendLength610p (int *cmd)
|
||||||
int ret, i, wait;
|
int ret, i, wait;
|
||||||
/* 55,AA,x,y,z,t */
|
/* 55,AA,x,y,z,t */
|
||||||
|
|
||||||
|
byteMode ();
|
||||||
wait = putByte610p (0x55);
|
wait = putByte610p (0x55);
|
||||||
if (wait != 0xC8)
|
if ((wait != 0xC8) && (wait != 0xC0))
|
||||||
{
|
{
|
||||||
DBG (0, "sendLength610p failed, expected 0xC8 got %d ! (%s:%d)\n",
|
DBG (0,
|
||||||
|
"sendLength610p failed, expected 0xC8 or 0xC0 got 0x%02X ! (%s:%d)\n",
|
||||||
wait, __FILE__, __LINE__);
|
wait, __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
ret = putByte610p (0xAA);
|
wait = putByte610p (0xAA);
|
||||||
if (ret != 0xC8)
|
if ((wait != 0xC8) && (wait != 0xC0))
|
||||||
{
|
{
|
||||||
DBG (0, "sendLength610p failed, expected 0xC8 got %d ! (%s:%d)\n",
|
DBG (0,
|
||||||
ret, __FILE__, __LINE__);
|
"sendLength610p failed, expected 0xC8 or 0xC0 got 0x%02X ! (%s:%d)\n",
|
||||||
|
wait, __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if wait=C0, we have to ... wait */
|
||||||
|
if (wait == 0xC0)
|
||||||
|
{
|
||||||
|
byteMode ();
|
||||||
|
wait = Inb (STATUS); /* C0 expected */
|
||||||
|
Outb (CONTROL, 0x26);
|
||||||
|
ret = Inb (DATA); /* 88 expected */
|
||||||
|
Outb (CONTROL, 0x24);
|
||||||
|
for (i = 0; i < 10; i++)
|
||||||
|
wait = Inb (STATUS); /* C8 expected */
|
||||||
|
byteMode ();
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
ret = putByte610p (cmd[i]);
|
ret = putByte610p (cmd[i]);
|
||||||
if (ret != 0xC8)
|
if (ret != 0xC8)
|
||||||
{
|
{
|
||||||
DBG (0, "sendLength610p failed, expected 0xC8 got %d ! (%s:%d)\n",
|
DBG (0,
|
||||||
|
"sendLength610p failed, expected 0xC8 got 0x%02X ! (%s:%d)\n",
|
||||||
ret, __FILE__, __LINE__);
|
ret, __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3706,7 +3750,7 @@ sendLength610p (int *cmd)
|
||||||
if ((ret != 0xC0) && (ret != 0xD0))
|
if ((ret != 0xC0) && (ret != 0xD0))
|
||||||
{
|
{
|
||||||
DBG (0,
|
DBG (0,
|
||||||
"sendLength610p failed, expected 0xC0 or 0xD0 got %d ! (%s:%d)\n",
|
"sendLength610p failed, expected 0xC0 or 0xD0 got 0x%02X ! (%s:%d)\n",
|
||||||
ret, __FILE__, __LINE__);
|
ret, __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3731,8 +3775,8 @@ disconnect610p (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Outb (CONTROL, 0x0C);
|
Outb (CONTROL, 0x0C);
|
||||||
Outb (DATA, gData);
|
/*Outb (DATA, gData); */
|
||||||
TRACE (16, "disconnect610p() passed ");
|
Outb (DATA, 0xFF); /* XXX STEF XXX */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3743,31 +3787,56 @@ connect610p (void)
|
||||||
{
|
{
|
||||||
int control;
|
int control;
|
||||||
|
|
||||||
gData = Inb (DATA);
|
gData = Inb (DATA); /* to gDATA ? */
|
||||||
|
|
||||||
Outb (DATA, 0xAA);
|
Outb (DATA, 0xAA);
|
||||||
Outb (CONTROL, 0x0E);
|
Outb (CONTROL, 0x0E);
|
||||||
control = Inb (CONTROL); /* 0x0E expected */
|
control = Inb (CONTROL); /* 0x0E expected */
|
||||||
control = Inb (CONTROL);
|
control = Inb (CONTROL);
|
||||||
|
if (control != 0x0E)
|
||||||
|
{
|
||||||
|
DBG (0, "connect610p control=%02X, expected 0x0E (%s:%d)\n", control,
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
Outb (DATA, 0x00);
|
Outb (DATA, 0x00);
|
||||||
Outb (CONTROL, 0x0C);
|
Outb (CONTROL, 0x0C);
|
||||||
control = Inb (CONTROL); /* 0x0C expected */
|
control = Inb (CONTROL); /* 0x0C expected */
|
||||||
control = Inb (CONTROL);
|
control = Inb (CONTROL);
|
||||||
|
if (control != 0x0C)
|
||||||
|
{
|
||||||
|
DBG (0, "connect610p control=%02X, expected 0x0C (%s:%d)\n", control,
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
Outb (DATA, 0x55);
|
Outb (DATA, 0x55);
|
||||||
Outb (CONTROL, 0x0E);
|
Outb (CONTROL, 0x0E);
|
||||||
control = Inb (CONTROL); /* 0x0E expected */
|
control = Inb (CONTROL); /* 0x0E expected */
|
||||||
control = Inb (CONTROL);
|
control = Inb (CONTROL);
|
||||||
|
if (control != 0x0E)
|
||||||
|
{
|
||||||
|
DBG (0, "connect610p control=%02X, expected 0x0E (%s:%d)\n", control,
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
Outb (DATA, 0xFF);
|
Outb (DATA, 0xFF);
|
||||||
Outb (CONTROL, 0x0C);
|
Outb (CONTROL, 0x0C);
|
||||||
control = Inb (CONTROL); /* 0x0C expected */
|
control = Inb (CONTROL); /* 0x0C expected */
|
||||||
control = Inb (CONTROL);
|
control = Inb (CONTROL);
|
||||||
|
if (control != 0x0C)
|
||||||
|
{
|
||||||
|
DBG (0, "connect610p control=%02X, expected 0x0C (%s:%d)\n", control,
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
Outb (CONTROL, 0x04);
|
Outb (CONTROL, 0x04);
|
||||||
control = Inb (CONTROL); /* 0x04 expected */
|
control = Inb (CONTROL); /* 0x04 expected */
|
||||||
control = Inb (CONTROL);
|
control = Inb (CONTROL);
|
||||||
|
if (control != 0x04)
|
||||||
|
{
|
||||||
|
DBG (0, "connect610p control=%02X, expected 0x04 (%s:%d)\n", control,
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
TRACE (16, "connect610p() passed ");
|
TRACE (16, "connect610p() passed ");
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -4459,7 +4528,27 @@ SPPsendWord610p (int *cmd)
|
||||||
int i;
|
int i;
|
||||||
int tmp, status;
|
int tmp, status;
|
||||||
|
|
||||||
|
#ifdef HAVE_LINUX_PPDEV_H
|
||||||
|
int exmode, mode, rc, fd;
|
||||||
|
#endif
|
||||||
connect610p ();
|
connect610p ();
|
||||||
|
|
||||||
|
#ifdef HAVE_LINUX_PPDEV_H
|
||||||
|
fd = sanei_umax_pp_getparport ();
|
||||||
|
if (fd > 0)
|
||||||
|
{
|
||||||
|
rc = ioctl (fd, PPGETMODE, &exmode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
mode = IEEE1284_MODE_COMPAT;
|
||||||
|
rc = ioctl (fd, PPSETMODE, &mode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
Outb (DATA, 0x55);
|
Outb (DATA, 0x55);
|
||||||
Outb (CONTROL, 0x05);
|
Outb (CONTROL, 0x05);
|
||||||
status = Inb (STATUS) & 0xF8;
|
status = Inb (STATUS) & 0xF8;
|
||||||
|
@ -4551,6 +4640,16 @@ SPPsendWord610p (int *cmd)
|
||||||
Outb (DATA, 0xFF);
|
Outb (DATA, 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LINUX_PPDEV_H
|
||||||
|
fd = sanei_umax_pp_getparport ();
|
||||||
|
if (fd > 0)
|
||||||
|
{
|
||||||
|
rc = ioctl (fd, PPSETMODE, &exmode);
|
||||||
|
if (rc)
|
||||||
|
DBG (0, "ppdev ioctl returned <%s> (%s:%d)\n", strerror (errno),
|
||||||
|
__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
disconnect610p ();
|
disconnect610p ();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -4561,7 +4660,7 @@ static int
|
||||||
EPPsendWord610p (int *cmd)
|
EPPsendWord610p (int *cmd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int tmp;
|
int tmp, control;
|
||||||
|
|
||||||
/* send magic tag */
|
/* send magic tag */
|
||||||
tmp = Inb (STATUS) & 0xF8;
|
tmp = Inb (STATUS) & 0xF8;
|
||||||
|
@ -4572,10 +4671,13 @@ EPPsendWord610p (int *cmd)
|
||||||
tmp, __FILE__, __LINE__);
|
tmp, __FILE__, __LINE__);
|
||||||
/* return 0; XXX STEF XXX */
|
/* return 0; XXX STEF XXX */
|
||||||
}
|
}
|
||||||
tmp = Inb (CONTROL);
|
|
||||||
Outb (CONTROL, 0x04);
|
/* sets to EPP, and get sure that data direction is forward */
|
||||||
|
tmp = (Inb (CONTROL) & 0xE0) | 0x04;
|
||||||
|
Outb (CONTROL, tmp);
|
||||||
Outb (EPPDATA, 0x55);
|
Outb (EPPDATA, 0x55);
|
||||||
|
|
||||||
|
/* bit0 is timeout bit in EPP mode, should we take care of it ? */
|
||||||
tmp = Inb (STATUS) & 0xF8;
|
tmp = Inb (STATUS) & 0xF8;
|
||||||
if (tmp != 0xC8)
|
if (tmp != 0xC8)
|
||||||
{
|
{
|
||||||
|
@ -4584,12 +4686,12 @@ EPPsendWord610p (int *cmd)
|
||||||
tmp, __FILE__, __LINE__);
|
tmp, __FILE__, __LINE__);
|
||||||
/* return 0; XXX STEF XXX */
|
/* return 0; XXX STEF XXX */
|
||||||
}
|
}
|
||||||
tmp = Inb (CONTROL);
|
tmp = (Inb (CONTROL) & 0xE0) | 0x04;
|
||||||
Outb (CONTROL, 0x04);
|
Outb (CONTROL, tmp);
|
||||||
Outb (EPPDATA, 0xAA);
|
Outb (EPPDATA, 0xAA);
|
||||||
|
|
||||||
tmp = Inb (CONTROL);
|
control = (Inb (CONTROL) & 0xE0) | 0xA4;
|
||||||
Outb (CONTROL, 0xA4);
|
Outb (CONTROL, control); /* bit 7 + data reverse + reset */
|
||||||
for (i = 0; i < 9; i++)
|
for (i = 0; i < 9; i++)
|
||||||
{
|
{
|
||||||
tmp = Inb (STATUS) & 0xF8;
|
tmp = Inb (STATUS) & 0xF8;
|
||||||
|
@ -4606,16 +4708,16 @@ EPPsendWord610p (int *cmd)
|
||||||
while ((tmp == 0xC8) && (cmd[i] != -1))
|
while ((tmp == 0xC8) && (cmd[i] != -1))
|
||||||
{
|
{
|
||||||
tmp = Inb (STATUS) & 0xF8;
|
tmp = Inb (STATUS) & 0xF8;
|
||||||
Inb (CONTROL);
|
control = (Inb (CONTROL) & 0xE0) | 0x04;
|
||||||
Outb (CONTROL, 0x04);
|
Outb (CONTROL, control);
|
||||||
Outb (EPPDATA, cmd[i]);
|
Outb (EPPDATA, cmd[i]);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* end */
|
/* end */
|
||||||
Outb (DATA, 0xFF);
|
Outb (DATA, 0xFF);
|
||||||
tmp = Inb (CONTROL);
|
control = (Inb (CONTROL) & 0xE0) | 0xA4;
|
||||||
Outb (CONTROL, 0xA4);
|
Outb (CONTROL, control); /* data reverse + ????? */
|
||||||
tmp = Inb (STATUS) & 0xF8;
|
tmp = Inb (STATUS) & 0xF8;
|
||||||
if (tmp == 0xC8)
|
if (tmp == 0xC8)
|
||||||
{
|
{
|
||||||
|
@ -4630,6 +4732,7 @@ EPPsendWord610p (int *cmd)
|
||||||
tmp, __FILE__, __LINE__);
|
tmp, __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
tmp = Inb (EPPDATA);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5572,50 +5675,6 @@ cmdSetDataBuffer (int *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* free scanner and parallel port
|
|
||||||
0: failure
|
|
||||||
1: success
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
sanei_umax_pp_releaseScanner (void)
|
|
||||||
{
|
|
||||||
int reg;
|
|
||||||
|
|
||||||
/* no op for 610P */
|
|
||||||
if (sanei_umax_pp_getastra () == 610)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* this must set EPAT chips to idle */
|
|
||||||
REGISTERWRITE (0x0A, 0x00);
|
|
||||||
reg = registerRead (0x0D);
|
|
||||||
reg = (reg & 0xBF);
|
|
||||||
registerWrite (0x0D, reg);
|
|
||||||
if (getModel () != 0x07)
|
|
||||||
{
|
|
||||||
if (sendCommand (0x40) == 0)
|
|
||||||
{
|
|
||||||
DBG (0, "sendCommand(0x40) (%s:%d) failed ...\n", __FILE__,
|
|
||||||
__LINE__);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (sendCommand (0x30) == 0)
|
|
||||||
{
|
|
||||||
DBG (0, "sendCommand(0x30) (%s:%d) failed ...\n", __FILE__, __LINE__);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
DBG (1, "releaseScanner() done ...\n");
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* 1: OK
|
|
||||||
0: end session failed */
|
|
||||||
|
|
||||||
/* 1: OK
|
/* 1: OK
|
||||||
0: end session failed */
|
0: end session failed */
|
||||||
|
|
||||||
|
@ -5666,9 +5725,8 @@ sanei_umax_pp_endSession (void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
TRACE (16, "SPPsendWord610p(zero) passed ... ");
|
TRACE (16, "SPPsendWord610p(zero) passed ... ");
|
||||||
compatMode ();
|
|
||||||
}
|
}
|
||||||
sanei_umax_pp_releaseScanner ();
|
compatMode ();
|
||||||
|
|
||||||
/* restore port state */
|
/* restore port state */
|
||||||
Outb (DATA, gData);
|
Outb (DATA, gData);
|
||||||
|
@ -5731,6 +5789,7 @@ initScanner610p (int recover)
|
||||||
|
|
||||||
int op03[9] = { 0x00, 0x00, 0x00, 0xAA, 0xCC, 0xEE, 0xFF, 0xFF, -1 };
|
int op03[9] = { 0x00, 0x00, 0x00, 0xAA, 0xCC, 0xEE, 0xFF, 0xFF, -1 };
|
||||||
|
|
||||||
|
byteMode (); /* just to get sure */
|
||||||
CMDSET (8, 0x23, cmd01);
|
CMDSET (8, 0x23, cmd01);
|
||||||
/* all values but two last should be the same */
|
/* all values but two last should be the same */
|
||||||
CMDGET (8, 0x23, buffer);
|
CMDGET (8, 0x23, buffer);
|
||||||
|
@ -5817,16 +5876,16 @@ initScanner610p (int recover)
|
||||||
* since it is first probe or recover */
|
* since it is first probe or recover */
|
||||||
/* move forward */
|
/* move forward */
|
||||||
CMDSYNC (0xC2);
|
CMDSYNC (0xC2);
|
||||||
if(!recover)
|
if (!recover)
|
||||||
{
|
{
|
||||||
CMDSETGET (2, 0x10, op01);
|
CMDSETGET (2, 0x10, op01);
|
||||||
CMDSETGET (8, 0x22, op02);
|
CMDSETGET (8, 0x22, op02);
|
||||||
CMDSYNC (0xC2);
|
CMDSYNC (0xC2);
|
||||||
CMDSYNC (0x00);
|
CMDSYNC (0x00);
|
||||||
CMDSETGET (4, 0x08, op03);
|
CMDSETGET (4, 0x08, op03);
|
||||||
CMDSYNC (0x40);
|
CMDSYNC (0x40);
|
||||||
sleep (2);
|
sleep (2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* move backward */
|
/* move backward */
|
||||||
CMDSETGET (2, 0x10, op11);
|
CMDSETGET (2, 0x10, op11);
|
||||||
|
@ -5866,7 +5925,7 @@ initScanner610p (int recover)
|
||||||
CMDSYNC (0x00);
|
CMDSYNC (0x00);
|
||||||
CMDSETGET (4, 0x08, op03);
|
CMDSETGET (4, 0x08, op03);
|
||||||
CMDSYNC (0x40);
|
CMDSYNC (0x40);
|
||||||
sleep (8);
|
sleep (9);
|
||||||
}
|
}
|
||||||
|
|
||||||
CMDSYNC (0xC2);
|
CMDSYNC (0xC2);
|
||||||
|
@ -5876,17 +5935,17 @@ initScanner610p (int recover)
|
||||||
* it seem I just can't found 'real' parking command ...
|
* it seem I just can't found 'real' parking command ...
|
||||||
*/
|
*/
|
||||||
/* send park command */
|
/* send park command */
|
||||||
if(sanei_umax_pp_park()==0)
|
if (sanei_umax_pp_park () == 0)
|
||||||
{
|
{
|
||||||
TRACE (0, "sanei_umax_pp_park failed! ");
|
TRACE (0, "sanei_umax_pp_park failed! ");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* and wait it to succeed */
|
/* and wait it to succeed */
|
||||||
if(sanei_umax_pp_parkWait()==0)
|
if (sanei_umax_pp_parkWait () == 0)
|
||||||
{
|
{
|
||||||
TRACE (0, "sanei_umax_pp_parkWait failed! ");
|
TRACE (0, "sanei_umax_pp_parkWait failed! ");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG (1, "initScanner610p done ...\n");
|
DBG (1, "initScanner610p done ...\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -6128,8 +6187,6 @@ initTransport610p (void)
|
||||||
int tmp, i;
|
int tmp, i;
|
||||||
int zero[5] = { 0, 0, 0, 0, -1 };
|
int zero[5] = { 0, 0, 0, 0, -1 };
|
||||||
|
|
||||||
compatMode ();
|
|
||||||
|
|
||||||
/* test EPP availability */
|
/* test EPP availability */
|
||||||
connect610p ();
|
connect610p ();
|
||||||
if (sync610p () == 0)
|
if (sync610p () == 0)
|
||||||
|
@ -6142,6 +6199,11 @@ initTransport610p (void)
|
||||||
if (EPPsendWord610p (zero) == 0)
|
if (EPPsendWord610p (zero) == 0)
|
||||||
{
|
{
|
||||||
DBG (1, "No EPP mode detected\n");
|
DBG (1, "No EPP mode detected\n");
|
||||||
|
gMode = UMAX_PP_PARPORT_BYTE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gMode = UMAX_PP_PARPORT_EPP;
|
||||||
}
|
}
|
||||||
disconnect610p ();
|
disconnect610p ();
|
||||||
|
|
||||||
|
@ -6151,6 +6213,7 @@ initTransport610p (void)
|
||||||
byteMode ();
|
byteMode ();
|
||||||
|
|
||||||
/* reset after failure */
|
/* reset after failure */
|
||||||
|
/* set to data reverse */
|
||||||
Outb (CONTROL, 0x2C);
|
Outb (CONTROL, 0x2C);
|
||||||
Inb (CONTROL);
|
Inb (CONTROL);
|
||||||
for (i = 0; i < 10; i++)
|
for (i = 0; i < 10; i++)
|
||||||
|
@ -6222,14 +6285,12 @@ initTransport1220P (int recover) /* ECP OK !! */
|
||||||
DBG (16, "Error! expected reg0B=0x%02X, found 0x%02X! (%s:%d) \n",
|
DBG (16, "Error! expected reg0B=0x%02X, found 0x%02X! (%s:%d) \n",
|
||||||
gEPAT, reg, __FILE__, __LINE__);
|
gEPAT, reg, __FILE__, __LINE__);
|
||||||
DBG (16, "Scanner needs probing ... \n");
|
DBG (16, "Scanner needs probing ... \n");
|
||||||
sanei_umax_pp_releaseScanner ();
|
|
||||||
if (sanei_umax_pp_probeScanner (recover) != 1)
|
if (sanei_umax_pp_probeScanner (recover) != 1)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sanei_umax_pp_releaseScanner ();
|
|
||||||
return 2; /* signals retry initTransport() */
|
return 2; /* signals retry initTransport() */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6822,7 +6883,7 @@ probeECP (unsigned char *dest)
|
||||||
breg = Inb (ECR);
|
breg = Inb (ECR);
|
||||||
breg = Inb (CONTROL);
|
breg = Inb (CONTROL);
|
||||||
byteMode (); /*Outb (ECR, 0x20); byte mode */
|
byteMode (); /*Outb (ECR, 0x20); byte mode */
|
||||||
byteMode (); /*Outb (ECR, 0x20); */
|
/*byteMode (); Outb (ECR, 0x20); */
|
||||||
breg = Inb (CONTROL);
|
breg = Inb (CONTROL);
|
||||||
Outb (CONTROL, 0x04);
|
Outb (CONTROL, 0x04);
|
||||||
Outb (CONTROL, 0x04);
|
Outb (CONTROL, 0x04);
|
||||||
|
@ -7072,6 +7133,9 @@ sanei_umax_pp_probeScanner (int recover)
|
||||||
int zero[5] = { 0, 0, 0, 0, -1 };
|
int zero[5] = { 0, 0, 0, 0, -1 };
|
||||||
int model;
|
int model;
|
||||||
|
|
||||||
|
/* saves port state */
|
||||||
|
gData = Inb (DATA);
|
||||||
|
gControl = Inb (CONTROL);
|
||||||
|
|
||||||
if (sanei_umax_pp_getastra () == 610)
|
if (sanei_umax_pp_getastra () == 610)
|
||||||
return probe610p (recover);
|
return probe610p (recover);
|
||||||
|
@ -7633,7 +7697,7 @@ sanei_umax_pp_probeScanner (int recover)
|
||||||
REGISTERWRITE (0x0A, 0x11); /*start transfert */
|
REGISTERWRITE (0x0A, 0x11); /*start transfert */
|
||||||
if (gMode == UMAX_PP_PARPORT_ECP)
|
if (gMode == UMAX_PP_PARPORT_ECP)
|
||||||
{
|
{
|
||||||
ECPSetBuffer (0x400);
|
ECPSetBuffer (0x400);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nb; i++) /* 300 for ECP ??? */
|
for (i = 0; i < nb; i++) /* 300 for ECP ??? */
|
||||||
|
@ -9771,19 +9835,19 @@ sanei_umax_pp_park (void)
|
||||||
|
|
||||||
CMDSYNC (0x00);
|
CMDSYNC (0x00);
|
||||||
|
|
||||||
if (sanei_umax_pp_getastra () != 610 )
|
if (sanei_umax_pp_getastra () != 610)
|
||||||
{
|
{
|
||||||
CMDSETGET (0x02, 16, header);
|
CMDSETGET (0x02, 16, header);
|
||||||
CMDSETGET (0x08, 36, body);
|
CMDSETGET (0x08, 36, body);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CMDSETGET (0x02, 16, op11);
|
CMDSETGET (0x02, 16, op11);
|
||||||
CMDSETGET (0x08, 36, op02);
|
CMDSETGET (0x08, 36, op02);
|
||||||
CMDSYNC (0xC2);
|
CMDSYNC (0xC2);
|
||||||
CMDSYNC (0x00);
|
CMDSYNC (0x00);
|
||||||
CMDSETGET (4, 0x08, op03);
|
CMDSETGET (4, 0x08, op03);
|
||||||
}
|
}
|
||||||
|
|
||||||
CMDSYNC (0x40);
|
CMDSYNC (0x40);
|
||||||
|
|
||||||
|
@ -9941,7 +10005,7 @@ sanei_umax_pp_readBlock (long len, int window, int dpi, int last,
|
||||||
{
|
{
|
||||||
DBG (8, "ReadBlock(%ld,%d,%d,%d)\n", len, window, dpi, last);
|
DBG (8, "ReadBlock(%ld,%d,%d,%d)\n", len, window, dpi, last);
|
||||||
/* EPP block reading is available only when dpi >=600 */
|
/* EPP block reading is available only when dpi >=600 */
|
||||||
if ((dpi >= 600) && ( gMode != UMAX_PP_PARPORT_ECP) )
|
if ((dpi >= 600) && (gMode != UMAX_PP_PARPORT_ECP))
|
||||||
{
|
{
|
||||||
DBG (8, "cmdGetBlockBuffer(4,%ld,%d);\n", len, window);
|
DBG (8, "cmdGetBlockBuffer(4,%ld,%d);\n", len, window);
|
||||||
len = cmdGetBlockBuffer (4, len, window, buffer);
|
len = cmdGetBlockBuffer (4, len, window, buffer);
|
||||||
|
@ -10186,12 +10250,12 @@ sanei_umax_pp_parkWait (void)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (sanei_umax_pp_getastra () == 610)
|
if (sanei_umax_pp_getastra () == 610)
|
||||||
{ /* send 'CONTINUE' */
|
{ /* send 'CONTINUE' */
|
||||||
CMDSYNC (0xC2);
|
CMDSYNC (0xC2);
|
||||||
CMDSETGET (2, 0x10, op21);
|
CMDSETGET (2, 0x10, op21);
|
||||||
CMDSETGET (8, 0x22, op22);
|
CMDSETGET (8, 0x22, op22);
|
||||||
}
|
}
|
||||||
sleep (2);
|
usleep (1000);
|
||||||
CMDSYNC (0x40);
|
CMDSYNC (0x40);
|
||||||
status = sanei_umax_pp_scannerStatus ();
|
status = sanei_umax_pp_scannerStatus ();
|
||||||
}
|
}
|
||||||
|
@ -10219,7 +10283,7 @@ sanei_umax_pp_startScan (int x, int y, int width, int height, int dpi,
|
||||||
int xdpi, ydpi, bpl, h;
|
int xdpi, ydpi, bpl, h;
|
||||||
int th, tw, bpp;
|
int th, tw, bpp;
|
||||||
int distance, i;
|
int distance, i;
|
||||||
int hwdpi=600; /* CCD hardware dpi */
|
int hwdpi = 600; /* CCD hardware dpi */
|
||||||
|
|
||||||
int opsc04[9] = { 0x06, 0xF4, 0xFF, 0x81, 0x1B, 0x00, 0x00, 0x00, -1 };
|
int opsc04[9] = { 0x06, 0xF4, 0xFF, 0x81, 0x1B, 0x00, 0x00, 0x00, -1 };
|
||||||
int opsc53[17] =
|
int opsc53[17] =
|
||||||
|
@ -10250,9 +10314,9 @@ sanei_umax_pp_startScan (int x, int y, int width, int height, int dpi,
|
||||||
|
|
||||||
|
|
||||||
if (sanei_umax_pp_getastra () == 610)
|
if (sanei_umax_pp_getastra () == 610)
|
||||||
{
|
{
|
||||||
hwdpi=300;
|
hwdpi = 300;
|
||||||
}
|
}
|
||||||
DBG (8, "startScan(%d,%d,%d,%d,%d,%d,%X);\n", x, y, width, height, dpi,
|
DBG (8, "startScan(%d,%d,%d,%d,%d,%d,%X);\n", x, y, width, height, dpi,
|
||||||
color, brightness);
|
color, brightness);
|
||||||
buffer = (unsigned char *) malloc (2096100);
|
buffer = (unsigned char *) malloc (2096100);
|
||||||
|
@ -10484,6 +10548,8 @@ sanei_umax_pp_startScan (int x, int y, int width, int height, int dpi,
|
||||||
ydpi = 300;
|
ydpi = 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX STEF XXX : bug here, we may overflow there */
|
||||||
|
/* now, how to handle this ? */
|
||||||
if (color >= RGB_MODE)
|
if (color >= RGB_MODE)
|
||||||
{
|
{
|
||||||
h = ((height * ydpi) / hwdpi) + 8;
|
h = ((height * ydpi) / hwdpi) + 8;
|
||||||
|
|
|
@ -47,17 +47,8 @@
|
||||||
/* set port to 'idle state' and get iopl */
|
/* set port to 'idle state' and get iopl */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
extern int sanei_umax_pp_initPort (int port, char *name);
|
extern int sanei_umax_pp_initPort (int port, char *name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern int sanei_umax_pp_probeScanner (int recover);
|
|
||||||
extern int sanei_umax_pp_initScanner (int recover);
|
extern int sanei_umax_pp_initScanner (int recover);
|
||||||
extern int sanei_umax_pp_initTransport (int recover);
|
extern int sanei_umax_pp_initTransport (int recover);
|
||||||
extern int sanei_umax_pp_releaseScanner (void);
|
|
||||||
extern int sanei_umax_pp_endSession (void);
|
extern int sanei_umax_pp_endSession (void);
|
||||||
extern int sanei_umax_pp_initCancel (void);
|
extern int sanei_umax_pp_initCancel (void);
|
||||||
extern int sanei_umax_pp_cancel (void);
|
extern int sanei_umax_pp_cancel (void);
|
||||||
|
@ -118,8 +109,6 @@ extern int sanei_umax_pp_getparport (void);
|
||||||
extern void sanei_umax_pp_setastra (int mod);
|
extern void sanei_umax_pp_setastra (int mod);
|
||||||
extern int sanei_umax_pp_getastra (void);
|
extern int sanei_umax_pp_getastra (void);
|
||||||
extern int sanei_umax_pp_scannerStatus (void);
|
extern int sanei_umax_pp_scannerStatus (void);
|
||||||
extern int sanei_umax_pp_releaseScanner (void);
|
|
||||||
extern int sanei_umax_pp_endSession (void);
|
|
||||||
extern int sanei_umax_pp_probeScanner (int recover);
|
extern int sanei_umax_pp_probeScanner (int recover);
|
||||||
|
|
||||||
extern char **sanei_parport_find_port (void);
|
extern char **sanei_parport_find_port (void);
|
||||||
|
|
|
@ -320,7 +320,6 @@ sanei_umax_pp_cancel (void)
|
||||||
}
|
}
|
||||||
/* endSession() cancels any pending command */
|
/* endSession() cancels any pending command */
|
||||||
/* such as parking ...., so we only return */
|
/* such as parking ...., so we only return */
|
||||||
sanei_umax_pp_releaseScanner ();
|
|
||||||
unlock_parport ();
|
unlock_parport ();
|
||||||
return (UMAX1220P_OK);
|
return (UMAX1220P_OK);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ main (int argc, char **argv)
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
int scan = 0;
|
int scan = 0;
|
||||||
int lamp = -1;
|
int lamp = -1;
|
||||||
int i;
|
int i,fd;
|
||||||
int found;
|
int found;
|
||||||
int recover = 0;
|
int recover = 0;
|
||||||
int trace = 0;
|
int trace = 0;
|
||||||
|
@ -368,7 +368,7 @@ main (int argc, char **argv)
|
||||||
}
|
}
|
||||||
if (trace)
|
if (trace)
|
||||||
{
|
{
|
||||||
printf ("UMAX 1220P scanning program version 5.0 starting ...\n");
|
printf ("UMAX 1220P scanning program version 5.1 starting ...\n");
|
||||||
#ifdef HAVE_LINUX_PPDEV_H
|
#ifdef HAVE_LINUX_PPDEV_H
|
||||||
printf ("ppdev character device built-in.\n");
|
printf ("ppdev character device built-in.\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -406,6 +406,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
/* could be written better .... but it is only test */
|
/* could be written better .... but it is only test */
|
||||||
sanei_umax_pp_endSession ();
|
sanei_umax_pp_endSession ();
|
||||||
|
|
||||||
/* init transport layer */
|
/* init transport layer */
|
||||||
if (sanei_umax_pp_initTransport (0) != 1)
|
if (sanei_umax_pp_initTransport (0) != 1)
|
||||||
{
|
{
|
||||||
|
@ -492,16 +493,22 @@ main (int argc, char **argv)
|
||||||
if (sanei_umax_pp_scan
|
if (sanei_umax_pp_scan
|
||||||
(x, y, width, height, dpi, color, brightness, contrast) != 1)
|
(x, y, width, height, dpi, color, brightness, contrast) != 1)
|
||||||
{
|
{
|
||||||
sanei_umax_pp_releaseScanner ();
|
|
||||||
sanei_umax_pp_endSession ();
|
sanei_umax_pp_endSession ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wait for head parking */
|
/* wait for head parking */
|
||||||
sanei_umax_pp_parkWait ();
|
sanei_umax_pp_parkWait ();
|
||||||
sanei_umax_pp_releaseScanner ();
|
|
||||||
}
|
}
|
||||||
sanei_umax_pp_endSession ();
|
sanei_umax_pp_endSession ();
|
||||||
|
#ifdef HAVE_LINUX_PPDEV_H
|
||||||
|
fd = sanei_umax_pp_getparport ();
|
||||||
|
if (fd > 0)
|
||||||
|
{
|
||||||
|
close (fd);
|
||||||
|
sanei_umax_pp_setparport (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue