X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=ftdipp%2Fftdi.cpp;h=7bf4ca669a90137bacc9ae6e921671361e4cdc4f;hp=aca686a3c08028a768b2084639ef25b2fc8e19de;hb=f1b4c09a8409b0706a4b25c38e5215b8fe28c64c;hpb=5a7f320ddb926d0919ebfac20a9fc4a327dfc762 diff --git a/ftdipp/ftdi.cpp b/ftdipp/ftdi.cpp index aca686a..7bf4ca6 100644 --- a/ftdipp/ftdi.cpp +++ b/ftdipp/ftdi.cpp @@ -106,7 +106,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 +144,26 @@ 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; } @@ -219,7 +233,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); }