- sane_start change to allow batch scanning. Previous code would

immediatly return if head was parking, now we wait for parking
	  completion
merge-requests/1/head
Stéphane Voltz 2005-10-11 05:28:18 +00:00
rodzic 689749d26f
commit 9c28fc433c
2 zmienionych plików z 67 dodań i 47 usunięć

Wyświetl plik

@ -1,3 +1,8 @@
2005-10-11 Stephane Voltz <stefdev@modulonet.fr>
* backend/umax_pp.c: change sane_start semantic to allow for batch
scanning
2005-10-08 Henning Meier-Geinitz <henning@meier-geinitz.de> 2005-10-08 Henning Meier-Geinitz <henning@meier-geinitz.de>
* doc/descriptions-external/mustek_a3p1.desc: Downgraded status to * doc/descriptions-external/mustek_a3p1.desc: Downgraded status to

Wyświetl plik

@ -172,7 +172,8 @@ static const SANE_Range u8_range = {
#define UMAX_PP_RESERVE 259200 #define UMAX_PP_RESERVE 259200
static int static int
parse_int_option (const char *string, char *name, long int *value, long int fallback); parse_int_option (const char *string, char *name, long int *value,
long int fallback);
/* /*
* devname may be either an hardware address for direct I/O (0x378 for instance) * devname may be either an hardware address for direct I/O (0x378 for instance)
@ -412,14 +413,14 @@ umax_pp_get_sync (SANE_Int dpi)
case 600: case 600:
return 16; return 16;
case 300: case 300:
return 8; /* 8 double-checked*/ return 8; /* 8 double-checked */
case 150: case 150:
/* wrong: 2, 3, 5 /* wrong: 2, 3, 5
* double-checked : 4 * double-checked : 4
*/ */
return 4; return 4;
default: default:
return 2; /* 2 double-checked */ return 2; /* 2 double-checked */
} }
} }
} }
@ -747,7 +748,8 @@ init_options (Umax_PP_Device * dev)
} }
static int static int
parse_int_option (const char *string, char *name, long int *value, long int fallback) parse_int_option (const char *string, char *name, long int *value,
long int fallback)
{ {
int len; int len;
char *end; char *end;
@ -756,14 +758,15 @@ parse_int_option (const char *string, char *name, long int *value, long int fall
if ((strncmp (string, name, len) == 0) && isspace (string[len])) if ((strncmp (string, name, len) == 0) && isspace (string[len]))
{ {
string += len+1; string += len + 1;
errno = 0; errno = 0;
*value = strtol (string, &end, 0); *value = strtol (string, &end, 0);
if (end == string || errno) if (end == string || errno)
{ {
DBG (2, "init: invalid value `%s`, using fallback '%ld'\n", string,fallback); DBG (2, "init: invalid value `%s`, using fallback '%ld'\n", string,
fallback);
*value = fallback; *value = fallback;
} }
DBG (3, "init: option %s %ld\n", name, *value); DBG (3, "init: option %s %ld\n", name, *value);
@ -827,7 +830,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
cp += 7; cp += 7;
cp = sanei_config_skip_whitespace (cp); cp = sanei_config_skip_whitespace (cp);
if (parse_int_option(cp, "buffer", &val, buf_size)) if (parse_int_option (cp, "buffer", &val, buf_size))
{ {
if (val < 8192) if (val < 8192)
{ {
@ -849,86 +852,88 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
devlist[0].buf_size = val; devlist[0].buf_size = val;
} }
} }
else if (parse_int_option(cp, "astra", &val, 0)) else if (parse_int_option (cp, "astra", &val, 0))
{ {
if((val!=610)&&(val!=1200)&&(val!=1600)&&(val!=2000)) if ((val != 610) && (val != 1200) && (val != 1600)
&& (val != 2000))
{ {
val=0; val = 0;
DBG (2, "init: invalid value `%s`, falling back to %ld\n", DBG (2, "init: invalid value `%s`, falling back to %ld\n",
cp, val); cp, val);
} }
DBG (3, "init: setting global option astra to %ld\n", val); DBG (3, "init: setting global option astra to %ld\n", val);
sanei_umax_pp_setastra (val); sanei_umax_pp_setastra (val);
} }
else if (parse_int_option(cp, "red-gain", &val, 12)) else if (parse_int_option (cp, "red-gain", &val, 12))
{ {
if((val<0)||(val>15)) if ((val < 0) || (val > 15))
{ {
val=12; val = 12;
DBG (2, "init: invalid value `%s`, falling back to %ld\n", DBG (2, "init: invalid value `%s`, falling back to %ld\n",
cp, val); cp, val);
} }
DBG (3, "init: setting global option red-gain to %ld\n", val); DBG (3, "init: setting global option red-gain to %ld\n", val);
red_gain = val; red_gain = val;
} }
else if (parse_int_option(cp, "green-gain", &val, 6)) else if (parse_int_option (cp, "green-gain", &val, 6))
{ {
if((val<0)||(val>15)) if ((val < 0) || (val > 15))
{ {
val=6; val = 6;
DBG (2, "init: invalid value `%s`, falling back to %ld\n", DBG (2, "init: invalid value `%s`, falling back to %ld\n",
cp, val); cp, val);
} }
DBG (3, "init: setting global option green-gain to %ld\n", val); DBG (3, "init: setting global option green-gain to %ld\n", val);
green_gain = val; green_gain = val;
} }
else if (parse_int_option(cp, "blue-gain", &val,12)) else if (parse_int_option (cp, "blue-gain", &val, 12))
{ {
if((val<0)||(val>15)) if ((val < 0) || (val > 15))
{ {
val=12; val = 12;
DBG (2, "init: invalid value `%s`, falling back to %ld\n", DBG (2, "init: invalid value `%s`, falling back to %ld\n",
cp, val); cp, val);
} }
DBG (3, "init: setting global option blue-gain to %ld\n", val); DBG (3, "init: setting global option blue-gain to %ld\n", val);
blue_gain = val; blue_gain = val;
} }
else if (parse_int_option(cp, "red-offset", &val, 10)) else if (parse_int_option (cp, "red-offset", &val, 10))
{ {
if((val<0)||(val>15)) if ((val < 0) || (val > 15))
{ {
val=10; val = 10;
DBG (2, "init: invalid value `%s`, falling back to %ld\n", DBG (2, "init: invalid value `%s`, falling back to %ld\n",
cp, val); cp, val);
} }
DBG (3, "init: setting global option red-offset to %ld\n", val); DBG (3, "init: setting global option red-offset to %ld\n", val);
red_offset = val; red_offset = val;
} }
else if (parse_int_option(cp, "green-offset", &val, 10)) else if (parse_int_option (cp, "green-offset", &val, 10))
{ {
if((val<0)||(val>15)) if ((val < 0) || (val > 15))
{ {
val=10; val = 10;
DBG (2, "init: invalid value `%s`, falling back to %ld\n", DBG (2, "init: invalid value `%s`, falling back to %ld\n",
cp, val); cp, val);
} }
DBG (3, "init: setting global option green-offset to %ld\n", val); DBG (3, "init: setting global option green-offset to %ld\n",
val);
green_offset = val; green_offset = val;
} }
else if (parse_int_option(cp, "blue-offset", &val, 10)) else if (parse_int_option (cp, "blue-offset", &val, 10))
{ {
if((val<0)||(val>15)) if ((val < 0) || (val > 15))
{ {
val=10; val = 10;
DBG (2, "init: invalid value `%s`, falling back to %ld\n", DBG (2, "init: invalid value `%s`, falling back to %ld\n",
cp, val); cp, val);
} }
DBG (3, "init: setting global option red-offset to %ld\n", val); DBG (3, "init: setting global option red-offset to %ld\n", val);
blue_offset = val; blue_offset = val;
} }
else else
DBG (2, "init: don't know what to do with option `%s'\n", cp); DBG (2, "init: don't know what to do with option `%s'\n", cp);
} }
else if ((strncmp (cp, "port", 4) == 0) && isspace (cp[4])) else if ((strncmp (cp, "port", 4) == 0) && isspace (cp[4]))
{ {
/* protect ourself from buggy configuration tool such as /* protect ourself from buggy configuration tool such as
@ -2077,11 +2082,21 @@ sane_start (SANE_Handle handle)
DBG (2, "sane_start: checking if scanner is parking head .... \n"); DBG (2, "sane_start: checking if scanner is parking head .... \n");
rc = sanei_umax_pp_status (); rc = sanei_umax_pp_status ();
points = 0;
/* check if scanner busy parking */ /* check if scanner busy parking */
/* if so, wait parking completion */
DBG (2, "sane_start: scanner busy\n");
while ((rc == UMAX1220P_BUSY) && (points < 30))
{
sleep (1);
rc = sanei_umax_pp_status ();
points++;
}
/* timeout waiting for scanner */
if (rc == UMAX1220P_BUSY) if (rc == UMAX1220P_BUSY)
{ {
DBG (2, "sane_start: scanner busy\n"); DBG (2, "sane_start: scanner still busy\n");
return SANE_STATUS_DEVICE_BUSY; return SANE_STATUS_DEVICE_BUSY;
} }
dev->state = UMAX_PP_STATE_IDLE; dev->state = UMAX_PP_STATE_IDLE;