Don't enforce even number of URB packages on 1212u_2. Fixes bug #300753.

merge-requests/1/head
Oliver Schwartz 2004-06-16 19:52:27 +00:00
rodzic f493221fc6
commit 2035924143
4 zmienionych plików z 79 dodań i 33 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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
*

Wyświetl plik

@ -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

Wyświetl plik

@ -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
*