From 0634e4eb92e9c4749854cccc87a9a891c1340936 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Wed, 2 Mar 2016 16:45:10 +0000
Subject: [PATCH] Support packet fragmentation and reassembly in hid_thread(),
 for mEDBG devices.

git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1385 81a1dc3b-b13d-400b-aceb-764788c761c2
---
 jtag3.c | 30 +++---------------------------
 1 file changed, 3 insertions(+), 27 deletions(-)

diff --git a/jtag3.c b/jtag3.c
index 3084c320..8349913b 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 or HIDAPI support.\n");
+  avrdude_message(MSG_INFO, "avrdude was compiled without usb / HID API support.\n");
   return -1;
 #endif
 
@@ -1325,6 +1325,7 @@ int jtag3_open_common(PROGRAMMER * pgm, char * port)
     return -1;
   }
 
+  serdev = &usb_serdev_frame;
   if (pgm->usbvid)
     pinfo.usbinfo.vid = pgm->usbvid;
   else
@@ -1334,42 +1335,17 @@ 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 = 0;
+    pgm->fd.usb.eep = USBDEV_EVT_EP_READ_3;
 
     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);