kopia lustrzana https://gitlab.com/sane-project/backends
Don't enforce even number of URB packages on 1212u_2. Fixes bug #300753.
rodzic
f493221fc6
commit
2035924143
|
@ -1,3 +1,9 @@
|
|||
2004-06-06 Oliver Schwartz <Oliver.Schwartz@gmx.de>
|
||||
|
||||
* backend/snapscan.h backend/snapscan.c backend/snapscan-usb.c:
|
||||
Don't enforce even number of URB packages on 1212u_2 since
|
||||
it causes problems. See bug #300753.
|
||||
|
||||
2004-06-15 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
||||
|
||||
* backend/snapscan.c: Only use __attribute__ if gcc is used for
|
||||
|
|
|
@ -173,36 +173,54 @@ static SANE_Status snapscani_usb_open(const char *dev, int *fdp,
|
|||
|
||||
static void snapscani_usb_close(int fd) {
|
||||
static const char me[] = "snapscani_usb_close";
|
||||
|
||||
SANE_Word vendor_id, product_id;
|
||||
|
||||
DBG (DL_CALL_TRACE, "%s(%d)\n", me, fd);
|
||||
DBG (DL_DATA_TRACE,"1st read %ld write %ld\n", urb_counters->read_urbs, urb_counters->write_urbs);
|
||||
if ((urb_counters->read_urbs & 0x01) && (urb_counters->write_urbs & 0x01))
|
||||
|
||||
/* Check if URB counting is needed. If yes, ensure the number of sent and
|
||||
received URBs is even.
|
||||
Odd number of URBs only cause problems with libusb and certain
|
||||
scanner models. On other scanner models, sending additional commands
|
||||
seems to cause problems (e.g. 1212u_2).
|
||||
If sanei_usb_get_vendor_product returns an error there's probably no
|
||||
libusb, so everything's fine.
|
||||
*/
|
||||
if (sanei_usb_get_vendor_product(fd, &vendor_id, &product_id) == SANE_STATUS_GOOD)
|
||||
{
|
||||
char cmd[] = {TEST_UNIT_READY, 0, 0, 0, 0, 0};
|
||||
|
||||
usb_cmd (fd, cmd, sizeof (cmd), NULL, 0);
|
||||
/* Exclude 1212u_2 */
|
||||
if (!((vendor_id == USB_VENDOR_AGFA) && (product_id == USB_PRODUCT_1212U2)))
|
||||
{
|
||||
if ((urb_counters->read_urbs & 0x01) && (urb_counters->write_urbs & 0x01))
|
||||
{
|
||||
char cmd[] = {TEST_UNIT_READY, 0, 0, 0, 0, 0};
|
||||
|
||||
snapscani_usb_cmd (fd, cmd, sizeof (cmd), NULL, 0);
|
||||
}
|
||||
else if (urb_counters->read_urbs & 0x01)
|
||||
{
|
||||
size_t read_bytes;
|
||||
char cmd[] = {TEST_UNIT_READY, 0, 0, 0, 0, 0};
|
||||
char cmd2[] = {INQUIRY, 0, 0, 0, 120, 0};
|
||||
char data[120];
|
||||
|
||||
read_bytes = 120;
|
||||
snapscani_usb_cmd (fd, cmd2, sizeof (cmd2), data, &read_bytes);
|
||||
snapscani_usb_cmd (fd, cmd, sizeof (cmd), NULL, 0);
|
||||
}
|
||||
else if (urb_counters->write_urbs & 0x01)
|
||||
{
|
||||
size_t read_bytes;
|
||||
char cmd[] = {INQUIRY, 0, 0, 0, 120, 0};
|
||||
char data[120];
|
||||
|
||||
read_bytes = 120;
|
||||
snapscani_usb_cmd (fd, cmd, sizeof (cmd), data, &read_bytes);
|
||||
}
|
||||
DBG (DL_DATA_TRACE,"2nd read %ld write %ld\n", urb_counters->read_urbs,
|
||||
urb_counters->write_urbs);
|
||||
}
|
||||
}
|
||||
else if (urb_counters->read_urbs & 0x01)
|
||||
{
|
||||
size_t read_bytes;
|
||||
char cmd[] = {TEST_UNIT_READY, 0, 0, 0, 0, 0};
|
||||
char cmd2[] = {INQUIRY, 0, 0, 0, 120, 0};
|
||||
char data[120];
|
||||
|
||||
read_bytes = 120;
|
||||
snapscani_usb_cmd (fd, cmd2, sizeof (cmd2), data, &read_bytes);
|
||||
usb_cmd (fd, cmd, sizeof (cmd), NULL, 0);
|
||||
}
|
||||
else if (urb_counters->write_urbs & 0x01)
|
||||
{
|
||||
size_t read_bytes;
|
||||
char cmd[] = {INQUIRY, 0, 0, 0, 120, 0};
|
||||
char data[120];
|
||||
|
||||
read_bytes = 120;
|
||||
usb_cmd (fd, cmd, sizeof (cmd), data, &read_bytes);
|
||||
}
|
||||
DBG (DL_DATA_TRACE,"2nd read %ld write %ld\n", urb_counters->read_urbs, urb_counters->write_urbs);
|
||||
urb_counters->read_urbs = 0;
|
||||
urb_counters->write_urbs = 0;
|
||||
snapscani_mutex_close(&sem_id);
|
||||
|
@ -546,6 +564,9 @@ static void snapscani_usb_shm_exit(void)
|
|||
#endif
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.18 2004/06/16 19:52:26 oliver-guest
|
||||
* Don't enforce even number of URB packages on 1212u_2. Fixes bug #300753.
|
||||
*
|
||||
* Revision 1.17 2004/06/06 14:50:36 oliver-guest
|
||||
* Use shared memory functions only when needed
|
||||
*
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
|
||||
#define EXPECTED_MAJOR 1
|
||||
#define MINOR_VERSION 4
|
||||
#define BUILD 38
|
||||
#define BUILD 39
|
||||
|
||||
#define BACKEND_NAME snapscan
|
||||
|
||||
|
@ -1834,6 +1834,9 @@ SANE_Status sane_get_select_fd (SANE_Handle h, SANE_Int * fd)
|
|||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.43 2004/06/16 19:52:26 oliver-guest
|
||||
* Don't enforce even number of URB packages on 1212u_2. Fixes bug #300753.
|
||||
*
|
||||
* Revision 1.42 2004/06/15 12:17:37 hmg-guest
|
||||
* Only use __attribute__ if gcc is used for compilation. Some other compilers
|
||||
* don't know __attribute__ and therefore can't compile sane-backends without this
|
||||
|
|
|
@ -198,12 +198,25 @@ static char *vendors[] =
|
|||
};
|
||||
#define known_vendors ((int) (sizeof(vendors)/sizeof(vendors[0])))
|
||||
|
||||
/* Known vendor IDs */
|
||||
#define USB_VENDOR_AGFA 0x06bd
|
||||
#define USB_VENDOR_ACER 0x04a5
|
||||
#define USB_VENDOR_EPSON 0x04b8
|
||||
|
||||
/* Agfa product IDs */
|
||||
#define USB_PRODUCT_1212U2 0x2061
|
||||
/* Acer product IDs */
|
||||
#define USB_PRODUCT_PRISA310 0x12a0
|
||||
#define USB_PRODUCT_PRISA320 0x2022
|
||||
/* Epson product IDs */
|
||||
#define USB_PRODUCT_PERFECTION660 0x0114
|
||||
|
||||
static SANE_Word usb_vendor_ids[] =
|
||||
{
|
||||
/* USB Vendor IDs */
|
||||
0x06bd, /* Agfa */
|
||||
0x04a5, /* Acer */
|
||||
0x04b8 /* Epson */
|
||||
USB_VENDOR_AGFA, /* Agfa */
|
||||
USB_VENDOR_ACER, /* Acer */
|
||||
USB_VENDOR_EPSON /* Epson */
|
||||
};
|
||||
#define known_usb_vendor_ids ((int) (sizeof(usb_vendor_ids)/sizeof(usb_vendor_ids[0])))
|
||||
|
||||
|
@ -216,9 +229,9 @@ struct SnapScan_USB_Model_desc
|
|||
|
||||
static struct SnapScan_USB_Model_desc usb_scanners[] =
|
||||
{
|
||||
{0x04a5, 0x1a20, PRISA310}, /* Acer 310U */
|
||||
{0x04a5, 0x2022, PRISA310}, /* Acer 320U */
|
||||
{0x04b8, 0x0114, PERFECTION660} /* Epson Perfection 660 */
|
||||
{USB_VENDOR_ACER, USB_PRODUCT_PRISA310, PRISA310}, /* Acer 310U */
|
||||
{USB_VENDOR_ACER, USB_PRODUCT_PRISA320, PRISA310}, /* Acer 320U */
|
||||
{USB_VENDOR_EPSON, USB_PRODUCT_PERFECTION660, PERFECTION660} /* Epson Perfection 660 */
|
||||
};
|
||||
#define known_usb_scanners ((int) (sizeof(usb_scanners)/sizeof(usb_scanners[0])))
|
||||
|
||||
|
@ -379,6 +392,9 @@ struct snapscan_scanner
|
|||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.29 2004/06/16 19:52:27 oliver-guest
|
||||
* Don't enforce even number of URB packages on 1212u_2. Fixes bug #300753.
|
||||
*
|
||||
* Revision 1.28 2004/04/08 21:53:10 oliver-guest
|
||||
* Use sanei_thread in snapscan backend
|
||||
*
|
||||
|
|
Ładowanie…
Reference in New Issue