From: Shawn Hoffman <godisgovernm...@gmail.com> --- examples/purge_test.c | 175 ++++++++++++++++-------------------------- ftdipp/ftdi.cpp | 27 ------- ftdipp/ftdi.hpp | 1 - src/ftdi.c | 91 ---------------------- src/ftdi.h | 56 +------------- 5 files changed, 69 insertions(+), 281 deletions(-)
diff --git a/examples/purge_test.c b/examples/purge_test.c index 2d42aa4..f705814 100644 --- a/examples/purge_test.c +++ b/examples/purge_test.c @@ -23,15 +23,13 @@ #include <getopt.h> #include <signal.h> #include <errno.h> -/* Prevent deprecated messages when building library */ -#define _FTDI_DISABLE_DEPRECATED #include <ftdi.h> -#include <termios.h> // For baudcodes & linux UARTs -#include <sys/types.h> -#include <sys/stat.h> #include <fcntl.h> - +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/types.h> +#include <termios.h> // For baudcodes & linux UARTs static struct ftdi_context *ftdi = NULL; static int dev_fd = -1; @@ -42,7 +40,6 @@ static int baud = 9600; static int baud_code = -1; static enum ftdi_interface interface = INTERFACE_A; static int msg_size = 80; -static int broken_purge_test = 0; static const int latency_min = 2; static const int latency_max = 255; @@ -91,34 +88,33 @@ static const char * chip_types[] = { static void usage(const char *argv0) { - fprintf(stderr, - "Usage: %s [options...] device-specifier\n" - "Flush test for UARTS.\n" - " with loopback connector\n" - " [-b baud] baud rate (e.g., 300, 600, 1200, ...230400)\n" - " [-i {a|b|c|d}] FTDI interface for chips which have multiple UARTS\n" - " [-l latency] Latency (%d..%d)\n" - " [-n msg-size] Number of bytes in test message\n" - " [-N note] Note for the output\n" - " [-P] Use broken libftdi1 purge methods (over new flush)\n" - "\n" - " device-specifier String specifying the UART. If the first character\n" - " is the '/' character, the program assumes a Linux UART\n" - " is to be tested and the string would be something like\n" - " '/dev/ttyS0' or '/dev/ttyUSB0'. Otherwise, the program\n" - " assumes an FTDI device is being tested with the FTDI1\n" - " library. The device-specifier must be a string\n" - " accepted by the ftdi_usb_open_string function. An\n" - " example would be 'i:0x0403:0x6011[:index]'.\n" - "\n" - "NOTE: To function correctly, this program requires a loopback connector\n" - " attached to the UART under test.\n" - "\n" - "Adapted from stream_test.c 2018. Eric Schott <e...@psu.edu>\n" - "Copyright (C) 2009 Micah Dowty <mi...@navi.cx>\n" - "Adapted for use with libftdi (C) 2010 Uwe Bonnes <b...@elektron.ikp.physik.tu-darmstadt.de>\n", - argv0, latency_min, latency_max); - exit(1); + fprintf(stderr, + "Usage: %s [options...] device-specifier\n" + "Flush test for UARTS.\n" + " with loopback connector\n" + " [-b baud] baud rate (e.g., 300, 600, 1200, ...230400)\n" + " [-i {a|b|c|d}] FTDI interface for chips which have multiple UARTS\n" + " [-l latency] Latency (%d..%d)\n" + " [-n msg-size] Number of bytes in test message\n" + " [-N note] Note for the output\n" + "\n" + " device-specifier String specifying the UART. If the first character\n" + " is the '/' character, the program assumes a Linux UART\n" + " is to be tested and the string would be something like\n" + " '/dev/ttyS0' or '/dev/ttyUSB0'. Otherwise, the program\n" + " assumes an FTDI device is being tested with the FTDI1\n" + " library. The device-specifier must be a string\n" + " accepted by the ftdi_usb_open_string function. An\n" + " example would be 'i:0x0403:0x6011[:index]'.\n" + "\n" + "NOTE: To function correctly, this program requires a loopback connector\n" + " attached to the UART under test.\n" + "\n" + "Adapted from stream_test.c 2018. Eric Schott <e...@psu.edu>\n" + "Copyright (C) 2009 Micah Dowty <mi...@navi.cx>\n" + "Adapted for use with libftdi (C) 2010 Uwe Bonnes <b...@elektron.ikp.physik.tu-darmstadt.de>\n", + argv0, latency_min, latency_max); + exit(1); } @@ -137,7 +133,7 @@ int main(int argc, char **argv) long int msg_xmit_time_us; static struct option long_options[] = {{NULL},}; - while ((c = getopt_long(argc, argv, "n:b:i:l:N:P", long_options, &option_index)) !=- 1) + while ((c = getopt_long(argc, argv, "n:b:i:l:N", long_options, &option_index)) != -1) switch (c) { case -1: @@ -178,11 +174,11 @@ int main(int argc, char **argv) latency = ascii2int(optarg, argv[0]); if (latency < latency_min || latency > latency_max) { - fprintf(stderr, "latency [-l] must be an integer in the range %d..%d\n", - latency_min, latency_max); + fprintf(stderr, "latency [-l] must be an integer in the range %d..%d\n", + latency_min, latency_max); usage(argv[0]); } - latency_specified = 1; + latency_specified = 1; break; case 'n': msg_size = ascii2int(optarg, argv[0]); @@ -195,9 +191,6 @@ int main(int argc, char **argv) case 'N': note = optarg; break; - case 'P': - broken_purge_test = 1; - break; default: usage(argv[0]); } @@ -227,14 +220,9 @@ int main(int argc, char **argv) { struct termios termios; - if (latency_specified) { - fprintf(stderr, "Latency (-l) option not support on this device; ignored\n"); - } - - if (broken_purge_test) { - fprintf(stderr, "Broken-purge (-P) option not support with Linux kernel driver\n"); - return EXIT_FAILURE; - } + if (latency_specified) { + fprintf(stderr, "Latency (-l) option not support on this device; ignored\n"); + } dev_fd = open(dev_string, O_NOCTTY | O_RDWR); if (dev_fd < 0) @@ -257,7 +245,7 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - note_default = "Linux kernel driver"; + note_default = "Linux kernel driver"; cfmakeraw(&termios); @@ -305,18 +293,18 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - if(ftdi_set_latency_timer(ftdi, (unsigned char) latency)) - { - if (latency_specified && + if (ftdi_set_latency_timer(ftdi, (unsigned char) latency)) + { + if (latency_specified && (ftdi->type == TYPE_AM || ftdi->type == TYPE_232H)) { - fprintf(stderr, "Latency (-l) option not support on this device; ignored\n"); - } else if (ftdi->type != TYPE_AM && ftdi->type != TYPE_232H) { + fprintf(stderr, "Latency (-l) option not support on this device; ignored\n"); + } else if (ftdi->type != TYPE_AM && ftdi->type != TYPE_232H) { fprintf(stderr,"Error setting latency for ftdi device \"%s\" (%d): %s\n", dev_string, ftdi->type, ftdi_get_error_string(ftdi)); ftdi_free(ftdi); return EXIT_FAILURE; } - } + } if (ftdi_set_line_property2(ftdi, BITS_8, STOP_BIT_1, NONE, BREAK_OFF) < 0) { @@ -341,11 +329,6 @@ int main(int argc, char **argv) ftdi_free(ftdi); return EXIT_FAILURE; } - - if (broken_purge_test) - note_default = "libftdi w/ deprecated purge"; - else - note_default = "libftdi w/ new flush methods"; } printf("Purge (tcflush) test for device %s\n", dev_string); @@ -426,7 +409,7 @@ int main(int argc, char **argv) int rc; printf("\n******** Test purge %s; expect %s ********\n" - " -- Flushing UART\n", + " -- Flushing UART\n", flushTestName[test], expected[test]); flush(TCIOFLUSH); usleep(msg_xmit_time_us); @@ -478,7 +461,7 @@ int main(int argc, char **argv) usleep(usec_delay); } else - { + { printf(" -- %9.1f ms Drain() reports completed; timing OK; delaying for 4 bytes\n", (get_time_usec() - usec_test_start) * .001); usleep(char_cnt_2_usec(4)); @@ -539,28 +522,28 @@ static int ascii2int(const char * str, const char * pgm_name) /********************************************************************** */ static struct Baud_Table { - int32_t baud, baud_code; + int32_t baud, baud_code; } baud_table [] = { - { 50, B50 }, - { 75, B75 }, - { 110, B110 }, - { 134, B134 }, - { 150, B150 }, - { 200, B200 }, - { 300, B300 }, - { 600, B600 }, - { 1200, B1200 }, - { 1800, B1800 }, - { 2400, B2400 }, - { 4800, B4800 }, - { 9600, B9600 }, - { 19200, B19200 }, - { 38400, B38400 }, - { 57600, B57600 }, - { 115200, B115200 }, - { 230400, B230400 }, - { -1, -1, } + { 50, B50 }, + { 75, B75 }, + { 110, B110 }, + { 134, B134 }, + { 150, B150 }, + { 200, B200 }, + { 300, B300 }, + { 600, B600 }, + { 1200, B1200 }, + { 1800, B1800 }, + { 2400, B2400 }, + { 4800, B4800 }, + { 9600, B9600 }, + { 19200, B19200 }, + { 38400, B38400 }, + { 57600, B57600 }, + { 115200, B115200 }, + { 230400, B230400 }, + { -1, -1, } }; /********************************************************************** @@ -619,7 +602,7 @@ static int flush(int queue_selector) int rc; if (dev_fd >= 0) rc = tcflush(dev_fd, queue_selector); - else if (! broken_purge_test) + else { switch (queue_selector) { @@ -640,28 +623,6 @@ static int flush(int queue_selector) return -1; } } - else - { - switch (queue_selector) { - - case TCIOFLUSH: - rc = ftdi_usb_purge_buffers(ftdi); - break; - - case TCIFLUSH: - rc = ftdi_usb_purge_rx_buffer(ftdi); - break; - - case TCOFLUSH: - rc = ftdi_usb_purge_tx_buffer(ftdi); - break; - - default: - errno = EINVAL; - return -1; - } - } - return rc; } diff --git a/ftdipp/ftdi.cpp b/ftdipp/ftdi.cpp index afb84fb..d81c4b3 100644 --- a/ftdipp/ftdi.cpp +++ b/ftdipp/ftdi.cpp @@ -27,7 +27,6 @@ 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" @@ -143,32 +142,6 @@ int Context::reset() return ftdi_usb_reset(d->ftdi); } -int Context::flush(int mask) -{ - int ret; - - 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; diff --git a/ftdipp/ftdi.hpp b/ftdipp/ftdi.hpp index f569cce..481c44c 100644 --- a/ftdipp/ftdi.hpp +++ b/ftdipp/ftdi.hpp @@ -85,7 +85,6 @@ public: int open(const std::string& description); int close(); int reset(); - int DEPRECATED(flush)(int mask = Input|Output); int tcflush(int mask = Input|Output); int set_interface(enum ftdi_interface interface); void set_usb_device(struct libusb_device_handle *dev); diff --git a/src/ftdi.c b/src/ftdi.c index 7c2e693..610fe3e 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -36,8 +36,6 @@ #include <stdlib.h> #include "ftdi_i.h" -/* Prevent deprecated messages when building library */ -#define _FTDI_DISABLE_DEPRECATED #include "ftdi.h" #include "ftdi_version_i.h" @@ -1056,36 +1054,6 @@ int ftdi_tciflush(struct ftdi_context *ftdi) return 0; } - -/** - Clears the write buffer on the chip and the internal read buffer. - This is incorrect behavior for an RX flush. - - \param ftdi pointer to ftdi_context - - \retval 0: all fine - \retval -1: write buffer purge failed - \retval -2: USB device unavailable - - \deprecated Use \ref ftdi_tciflush(struct ftdi_context *ftdi) -*/ -int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi) -{ - if (ftdi == NULL || ftdi->usb_dev == NULL) - ftdi_error_return(-2, "USB device unavailable"); - - if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, - SIO_RESET_REQUEST, SIO_RESET_PURGE_RX, - ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0) - ftdi_error_return(-1, "FTDI purge of RX buffer failed"); - - // Invalidate data in the readbuffer - ftdi->readbuffer_offset = 0; - ftdi->readbuffer_remaining = 0; - - return 0; -} - /** Clears the write buffer on the chip. This is correct behavior for a TX flush. @@ -1109,32 +1077,6 @@ int ftdi_tcoflush(struct ftdi_context *ftdi) return 0; } - -/** - Clears the read buffer on the chip. - This is incorrect behavior for a TX flush. - - \param ftdi pointer to ftdi_context - - \retval 0: all fine - \retval -1: read buffer purge failed - \retval -2: USB device unavailable - - \deprecated Use \ref ftdi_tcoflush(struct ftdi_context *ftdi) -*/ -int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi) -{ - if (ftdi == NULL || ftdi->usb_dev == NULL) - ftdi_error_return(-2, "USB device unavailable"); - - if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, - SIO_RESET_REQUEST, SIO_RESET_PURGE_TX, - ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0) - ftdi_error_return(-1, "FTDI purge of TX buffer failed"); - - return 0; -} - /** Clears the RX and TX FIFOs on the chip and the internal read buffer. This is correct behavior for both RX and TX flush. @@ -1164,39 +1106,6 @@ int ftdi_tcioflush(struct ftdi_context *ftdi) return 0; } -/** - Clears the buffers on the chip and the internal read buffer. - While coded incorrectly, the result is satisfactory. - - \param ftdi pointer to ftdi_context - - \retval 0: all fine - \retval -1: read buffer purge failed - \retval -2: write buffer purge failed - \retval -3: USB device unavailable - - \deprecated Use \ref ftdi_tcioflush(struct ftdi_context *ftdi) -*/ -int ftdi_usb_purge_buffers(struct ftdi_context *ftdi) -{ - int result; - - if (ftdi == NULL || ftdi->usb_dev == NULL) - ftdi_error_return(-3, "USB device unavailable"); - - result = ftdi_usb_purge_rx_buffer(ftdi); - if (result < 0) - return -1; - - result = ftdi_usb_purge_tx_buffer(ftdi); - if (result < 0) - return -2; - - return 0; -} - - - /** Closes the ftdi device. Call ftdi_deinit() if you're cleaning up. diff --git a/src/ftdi.h b/src/ftdi.h index ffeb452..186cf9e 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -180,47 +180,9 @@ enum ftdi_module_detach_mode #define SIO_WRITE_EEPROM_REQUEST 0x91 #define SIO_ERASE_EEPROM_REQUEST 0x92 - #define SIO_RESET_SIO 0 - -/* ** WARNING ** SIO_RESET_PURGE_RX or SIO_RESET_PURGE_TX are values used - * internally by libftdi to purge the RX and/or TX FIFOs (buffers). - * APPLICATION PROGRAMS SHOULD NOT BE USING THESE VALUES. Application - * programs should use one of the ftdi_tciflush, ftdi_tcoflush, or - * ftdi_tcioflush functions which emulate the Linux serial port tcflush(3) - * function. - * - * History: - * - * The definitions for these values are with respect to the FTDI chip, not the - * CPU. That is, when the FTDI chip receives a USB control transfer request - * with the command SIO_RESET_PURGE_RX, the FTDI chip empties the FIFO - * containing data received from the CPU awaiting transfer out the serial - * port to the connected serial device (e.g., a modem). Likewise, upon - * reception of the SIO_RESET_PURGE_TX command, the FTDI chip empties the - * FIFO of data received from the attached serial device destined to be - * transmitted to the CPU. - * - * Unfortunately the coding of the previous releases of libfti assumed these - * commands had the opposite effect. This resulted in the function - * ftdi_usb_purge_tx_buffer clearing data received from the attached serial - * device. Similarly, the function ftdi_usb_purge_rx_buffer cleared the - * FTDI FIFO containing data to be transmitted to the attached serial - * device. More seriously, this latter function clear the libftid's - * internal buffer of data received from the serial device, destined - * to the application program. - */ -#ifdef __GNUC__ -#define SIO_RESET_PURGE_RX _Ftdi_Pragma("GCC warning \"SIO_RESET_PURGE_RX\" deprecated: - use tciflush() method") 1 -#define SIO_RESET_PURGE_TX _Ftdi_Pragma("GCC warning \"SIO_RESET_PURGE_RX\" deprecated: - use tcoflush() method") 2 -#else -#pragma message("WARNING: You need to implement deprecated #define for this compiler") -#define SIO_RESET_PURGE_RX 1 -#define SIO_RESET_PURGE_TX 2 -#endif -/* New names for the values used internally to flush (purge). */ -#define SIO_TCIFLUSH 2 #define SIO_TCOFLUSH 1 +#define SIO_TCIFLUSH 2 #define SIO_DISABLE_FLOW_CTRL 0x0 #define SIO_RTS_CTS_HS (0x1 << 8) @@ -240,19 +202,6 @@ enum ftdi_module_detach_mode (taken from libusb) */ #define FTDI_URB_USERCONTEXT_COOKIE ((void *)0x1) -#ifdef _FTDI_DISABLE_DEPRECATED -#define DEPRECATED(func) func -#else -#ifdef __GNUC__ -#define DEPRECATED(func) __attribute__ ((deprecated)) func -#elif defined(_MSC_VER) -#define DEPRECATED(func) __declspec(deprecated) func -#else -#pragma message("WARNING: You need to implement DEPRECATED for this compiler") -#define DEPRECATED(func) func -#endif -#endif - struct ftdi_transfer_control { int completed; @@ -562,9 +511,6 @@ extern "C" int ftdi_tciflush(struct ftdi_context *ftdi); int ftdi_tcoflush(struct ftdi_context *ftdi); int ftdi_tcioflush(struct ftdi_context *ftdi); - int DEPRECATED(ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi)); - int DEPRECATED(ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi)); - int DEPRECATED(ftdi_usb_purge_buffers(struct ftdi_context *ftdi)); int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate); int ftdi_set_line_property(struct ftdi_context *ftdi, enum ftdi_bits_type bits, -- 2.44.0.windows.1 -- libftdi - see http://www.intra2net.com/en/developer/libftdi for details. To unsubscribe send a mail to libftdi+unsubscr...@developer.intra2net.com