])
done
-PKG_CHECK_MODULES([LIBFTDI], [libftdi1], [use_libftdi=yes], [
+PKG_CHECK_MODULES([LIBFTDI], [libftdi1], [
+ use_libftdi=yes
+ PKG_CHECK_EXISTS([libftdi1 >= 1.5],
+ [AC_DEFINE([HAVE_LIBFTDI_TCIOFLUSH], [1], [Define if your libftdi has ftdi_tcioflush()])])
+ ], [
PKG_CHECK_MODULES([LIBFTDI], [libftdi], [use_libftdi=yes], [use_libftdi=no])
])
%D%/bitbang.h \
%D%/bitq.h \
%D%/jtag_usb_common.h \
+ %D%/libftdi_helper.h \
%D%/libusb_helper.h \
%D%/minidriver_imp.h \
%D%/mpsse.h \
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef OPENOCD_JTAG_DRIVERS_LIBFTDI_HELPER_H
+#define OPENOCD_JTAG_DRIVERS_LIBFTDI_HELPER_H
+
+#include <ftdi.h>
+
+#ifndef HAVE_LIBFTDI_TCIOFLUSH
+/* Backward compatibility with libftdi pre 1.5 */
+
+static inline int ftdi_tciflush(struct ftdi_context *ftdi)
+{
+ return ftdi_usb_purge_rx_buffer(ftdi);
+}
+
+static inline int ftdi_tcoflush(struct ftdi_context *ftdi)
+{
+ return ftdi_usb_purge_tx_buffer(ftdi);
+}
+
+static inline int ftdi_tcioflush(struct ftdi_context *ftdi)
+{
+ return ftdi_usb_purge_buffers(ftdi);
+}
+#endif
+
+#endif /* OPENOCD_JTAG_DRIVERS_LIBFTDI_HELPER_H */
} openjtag_tap_state_t;
/* OPENJTAG access library includes */
-#include <ftdi.h>
+#include "libftdi_helper.h"
/* OpenJTAG vid/pid */
static uint16_t openjtag_vid = 0x0403;
return ERROR_JTAG_DEVICE_ERROR;
}
- if (ftdi_usb_purge_buffers(&ftdic) < 0) {
- LOG_ERROR("ftdi_purge_buffers: %s", ftdic.error_str);
+ if (ftdi_tcioflush(&ftdic) < 0) {
+ LOG_ERROR("ftdi flush: %s", ftdic.error_str);
return ERROR_JTAG_INIT_FAILED;
}
#include "bitq.h"
/* PRESTO access library includes */
-#include <ftdi.h>
+#include "libftdi_helper.h"
/* -------------------------------------------------------------------------- */
return ERROR_JTAG_DEVICE_ERROR;
}
- if (ftdi_usb_purge_buffers(&presto->ftdic) < 0) {
- LOG_ERROR("unable to purge PRESTO buffers");
+ if (ftdi_tcioflush(&presto->ftdic) < 0) {
+ LOG_ERROR("unable to flush PRESTO buffers");
return ERROR_JTAG_DEVICE_ERROR;
}
if (presto_read(&presto_data, 1) != ERROR_OK) {
LOG_DEBUG("no response from PRESTO, retrying");
- if (ftdi_usb_purge_buffers(&presto->ftdic) < 0)
+ if (ftdi_tcioflush(&presto->ftdic) < 0)
return ERROR_JTAG_DEVICE_ERROR;
presto_data = 0xD0;