From a6dc66fb9ecadd7d28a6cd191799775a2b9e208a Mon Sep 17 00:00:00 2001 From: Joerg Wunsch Date: Wed, 2 Mar 2016 16:49:01 +0000 Subject: [PATCH] Back out rev 1385, it was committed accidentally. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1386 81a1dc3b-b13d-400b-aceb-764788c761c2 --- jtag3.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/jtag3.c b/jtag3.c index 8349913b..3084c320 100644 --- a/jtag3.c +++ b/jtag3.c @@ -1315,7 +1315,7 @@ int jtag3_open_common(PROGRAMMER * pgm, char * port) int rv = -1; #if !defined(HAVE_LIBUSB) && !defined(HAVE_LIBHIDAPI) - avrdude_message(MSG_INFO, "avrdude was compiled without usb / HID API support.\n"); + avrdude_message(MSG_INFO, "avrdude was compiled without USB or HIDAPI support.\n"); return -1; #endif @@ -1325,7 +1325,6 @@ int jtag3_open_common(PROGRAMMER * pgm, char * port) return -1; } - serdev = &usb_serdev_frame; if (pgm->usbvid) pinfo.usbinfo.vid = pgm->usbvid; else @@ -1335,17 +1334,42 @@ int jtag3_open_common(PROGRAMMER * pgm, char * port) if (lfirst(pgm->usbpid) == NULL) ladd(pgm->usbpid, (void *)USB_DEVICE_JTAGICE3); +#if defined(HAVE_LIBHIDAPI) + /* + * Try HIDAPI first. LibUSB is more generic, but might then cause + * troubles for HID-class devices in some OSes (like Windows). + */ + serdev = &usbhid_serdev; for (usbpid = lfirst(pgm->usbpid); rv < 0 && usbpid != NULL; usbpid = lnext(usbpid)) { pinfo.usbinfo.flags = PINFO_FL_SILENT; pinfo.usbinfo.pid = *(int *)(ldata(usbpid)); pgm->fd.usb.max_xfer = USBDEV_MAX_XFER_3; pgm->fd.usb.rep = USBDEV_BULK_EP_READ_3; pgm->fd.usb.wep = USBDEV_BULK_EP_WRITE_3; - pgm->fd.usb.eep = USBDEV_EVT_EP_READ_3; + pgm->fd.usb.eep = 0; strcpy(pgm->port, port); rv = serial_open(port, pinfo, &pgm->fd); } + if (rv < 0) { +#endif /* HAVE_LIBHIDAPI */ +#if defined(HAVE_LIBUSB) + serdev = &usb_serdev_frame; + for (usbpid = lfirst(pgm->usbpid); rv < 0 && usbpid != NULL; usbpid = lnext(usbpid)) { + pinfo.usbinfo.flags = PINFO_FL_SILENT; + pinfo.usbinfo.pid = *(int *)(ldata(usbpid)); + pgm->fd.usb.max_xfer = USBDEV_MAX_XFER_3; + pgm->fd.usb.rep = USBDEV_BULK_EP_READ_3; + pgm->fd.usb.wep = USBDEV_BULK_EP_WRITE_3; + pgm->fd.usb.eep = USBDEV_EVT_EP_READ_3; + + strcpy(pgm->port, port); + rv = serial_open(port, pinfo, &pgm->fd); + } +#endif /* HAVE_LIBUSB */ +#if defined(HAVE_LIBHIDAPI) + } +#endif if (rv < 0) { avrdude_message(MSG_INFO, "%s: jtag3_open_common(): Did not find any device matching VID 0x%04x and PID list: ", progname, (unsigned)pinfo.usbinfo.vid);