From 6d1c51d0a4d4e807956ef88b94f16e034fc5c00b Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Thu, 25 Feb 2021 13:36:28 +0100 Subject: [PATCH] fix purge buffer fix libftdi >= 1.5 Signed-off-by: Gwenhael Goavec-Merou --- CMakeLists.txt | 12 +++++++----- src/ftdipp_mpsse.cpp | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2373ad..a753d6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,11 +168,13 @@ endif() # libftdi < 1.4 as no usb_addr -if (${LIBFTDI_VERSION} VERSION_LESS 1.4) - set(CMAKE_CXX_FLAGS "-DOLD_FTDI_VERSION=1 ${CMAKE_CXX_FLAGS}") -else() - set(CMAKE_CXX_FLAGS "-DOLD_FTDI_VERSION=0 ${CMAKE_CXX_FLAGS}") -endif() +# libftdi >= 1.5 as purge_buffer obsolete +string(REPLACE "." ";" VERSION_LIST ${LIBFTDI_VERSION}) +list(GET VERSION_LIST 0 LIBFTDI_VERSION_MAJOR) +list(GET VERSION_LIST 1 LIBFTDI_VERSION_MINOR) +math(EXPR FTDI_VAL "${LIBFTDI_VERSION_MAJOR} * 100 + ${LIBFTDI_VERSION_MINOR}") + +add_definitions(-DFTDI_VERSION=${FTDI_VAL}) install(TARGETS openFPGALoader DESTINATION bin) install(FILES diff --git a/src/ftdipp_mpsse.cpp b/src/ftdipp_mpsse.cpp index 3fa0880..41a6db5 100644 --- a/src/ftdipp_mpsse.cpp +++ b/src/ftdipp_mpsse.cpp @@ -73,7 +73,7 @@ void FTDIpp_MPSSE::open_device(const std::string &serial, unsigned int baudrate) if (_bus == -1 || _addr == -1) ret = ftdi_usb_open_desc(_ftdi, _vid, _pid, NULL, serial.empty() ? NULL : serial.c_str()); else -#if (OLD_FTDI_VERSION == 1) +#if (FTDI_VERSION < 104) ret = ftdi_usb_open_desc(_ftdi, _vid, _pid, _product, NULL); #else ret = ftdi_usb_open_bus_addr(_ftdi, _bus, _addr); @@ -105,8 +105,13 @@ int FTDIpp_MPSSE::close_device() return EXIT_FAILURE; /* purge FTDI */ +#if (FTDI_VERSION < 105) ftdi_usb_purge_rx_buffer(_ftdi); ftdi_usb_purge_tx_buffer(_ftdi); +#else + ftdi_tciflush(_ftdi); + ftdi_tcoflush(_ftdi); +#endif /* * repompe de la fonction et des suivantes @@ -151,7 +156,11 @@ int FTDIpp_MPSSE::init(unsigned char latency, unsigned char bitmask_mode, return -1; } +#if (FTDI_VERSION < 105) if (ftdi_usb_purge_buffers(_ftdi) != 0) { +#else + if (ftdi_tcioflush(_ftdi) != 0) { +#endif cout << "reset error" << endl; return -1; } @@ -279,7 +288,11 @@ int FTDIpp_MPSSE::setClkFreq(uint32_t clkHZ) return -1; } ret = ftdi_read_data(_ftdi, buffer, 4); +#if (FTDI_VERSION < 105) ftdi_usb_purge_buffers(_ftdi); +#else + ftdi_tcioflush(_ftdi); +#endif return real_freq; }