Increase copyright year to 2020
[libftdi] / ftdipp / ftdi.cpp
index aca686a..afb84fb 100644 (file)
@@ -1,8 +1,8 @@
 /***************************************************************************
-                          ftdi.cpp  -  C++ wraper for libftdi
+                          ftdi.cpp  -  C++ wrapper for libftdi
                              -------------------
     begin                : Mon Oct 13 2008
-    copyright            : (C) 2008-2017 by Marek Vavruša / libftdi developers
+    copyright            : (C) 2008-2020 by Marek Vavruša / libftdi developers
     email                : opensource@intra2net.com and marek@vavrusa.com
  ***************************************************************************/
 /*
@@ -27,6 +27,7 @@ This exception does not invalidate any other reasons why a work based
 on this file might be covered by the GNU General Public License.
 */
 #include <libusb.h>
+#define _FTDI_DISABLE_DEPRECATED
 #include "ftdi.hpp"
 #include "ftdi_i.h"
 #include "ftdi.h"
@@ -106,7 +107,7 @@ int Context::open(int vendor, int product, const std::string& description, const
     if (ret < 0)
        return ret;
 
-    return get_strings_and_reopen(false,description.empty(),serial.empty());
+    return get_strings_and_reopen(false,!description.empty(),!serial.empty());
 }
 
 int Context::open(const std::string& description)
@@ -144,12 +145,52 @@ int Context::reset()
 
 int Context::flush(int mask)
 {
-    int ret = 1;
+    int ret;
 
-    if (mask & Input)
-        ret &= ftdi_usb_purge_rx_buffer(d->ftdi);
-    if (mask & Output)
-        ret &= ftdi_usb_purge_tx_buffer(d->ftdi);
+    switch (mask & (Input | Output)) {
+    case Input:
+        ret = ftdi_usb_purge_rx_buffer(d->ftdi);
+        break;
+
+    case Output:
+        ret = ftdi_usb_purge_tx_buffer(d->ftdi);
+        break;
+
+    case Input | Output:
+        ret = ftdi_usb_purge_buffers(d->ftdi);
+        break;
+
+    default:
+        // Emulate behavior of previous version.
+        ret = 1;
+        break;
+    }
+
+    return ret;
+}
+
+int Context::tcflush(int mask)
+{
+    int ret;
+
+    switch (mask & (Input | Output)) {
+    case Input:
+        ret = ftdi_tciflush(d->ftdi);
+        break;
+
+    case Output:
+        ret = ftdi_tcoflush(d->ftdi);
+        break;
+
+    case Input | Output:
+        ret = ftdi_tcioflush(d->ftdi);
+        break;
+
+    default:
+        // Emulate behavior of previous version.
+        ret = 1;
+        break;
+    }
 
     return ret;
 }
@@ -219,7 +260,7 @@ int Context::read_chunk_size()
     return chunk;
 }
 
-int Context::write(unsigned char *buf, int size)
+int Context::write(const unsigned char *buf, int size)
 {
     return ftdi_write_data(d->ftdi, buf, size);
 }