libftdi Archives

Subject: libftdi-0: Use serial_test from 1.0 with 0

From: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Date: Thu, 29 Sep 2011 14:37:24 +0200
-- 
Uwe Bonnes                bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
>From ddbf62ed04743bc2a562563b7630e21bb322c3fc Mon Sep 17 00:00:00 2001
From: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 29 Sep 2011 13:30:25 +0200
Subject: Remove examples/serial_read.c and use examples/serial_test.c from 
libftdi-1

---
 examples/CMakeLists.txt |    4 +-
 examples/serial_read.c  |   81 ---------------------
 examples/serial_test.c  |  179 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 181 insertions(+), 83 deletions(-)
 delete mode 100644 examples/serial_read.c
 create mode 100644 examples/serial_test.c

diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index d2aeecb..e80872c 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -18,7 +18,7 @@ if (EXAMPLES)
     add_executable(bitbang_cbus bitbang_cbus.c)
     add_executable(bitbang_ft2232 bitbang_ft2232.c)
     add_executable(find_all find_all.c)
-    add_executable(serial_read serial_read.c)
+    add_executable(serial_test serial_test.c)
     add_executable(baud_test baud_test.c)
 
     # Linkage
@@ -28,7 +28,7 @@ if (EXAMPLES)
     target_link_libraries(bitbang_cbus ftdi)
     target_link_libraries(bitbang_ft2232 ftdi)
     target_link_libraries(find_all ftdi)
-    target_link_libraries(serial_read ftdi)
+    target_link_libraries(serial_test ftdi)
     target_link_libraries(baud_test ftdi)
 
     # libftdi++ examples
diff --git a/examples/serial_read.c b/examples/serial_read.c
deleted file mode 100644
index 754ca4a..0000000
--- a/examples/serial_read.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* serial_read.c
-
-   Read data via serial I/O
-
-   This program is distributed under the GPL, version 2
-*/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <ftdi.h>
-
-int main(int argc, char **argv)
-{
-    struct ftdi_context ftdic;
-    char buf[1024];
-    int f, i;
-    int vid = 0x0403;
-    int pid = 0x6001;
-    int baudrate = 115200;
-    int interface = INTERFACE_ANY;
-
-    while ((i = getopt(argc, argv, "i:v:p:b:")) != -1)
-    {
-        switch (i)
-        {
-       case 'i': // 0=ANY, 1=A, 2=B, 3=C, 4=D
-               interface = strtoul(optarg, NULL, 0);
-               break;
-       case 'v':
-               vid = strtoul(optarg, NULL, 0);
-               break;
-       case 'p':
-               pid = strtoul(optarg, NULL, 0);
-               break;
-       case 'b':
-               baudrate = strtoul(optarg, NULL, 0);
-               break;
-       default:
-               fprintf(stderr, "usage: %s [-i interface] [-v vid] [-p pid] [-b 
baudrate]\n", *argv);
-               exit(-1);
-        }
-    }
-
-    // Init
-    if (ftdi_init(&ftdic) < 0)
-    {
-        fprintf(stderr, "ftdi_init failed\n");
-        return EXIT_FAILURE;
-    }
-
-    // Select first interface
-    ftdi_set_interface(&ftdic, interface);
-
-    // Open device
-    f = ftdi_usb_open(&ftdic, vid, pid);
-    if (f < 0)
-    {
-        fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, 
ftdi_get_error_string(&ftdic));
-        exit(-1);
-    }
-
-    // Set baudrate
-    f = ftdi_set_baudrate(&ftdic, 115200);
-    if (f < 0)
-    {
-        fprintf(stderr, "unable to set baudrate: %d (%s)\n", f, 
ftdi_get_error_string(&ftdic));
-        exit(-1);
-    }
-
-    // Read data forever
-    while ((f = ftdi_read_data(&ftdic, buf, sizeof(buf))) >= 0) {
-           fprintf(stderr, "read %d bytes\n", f);
-           fwrite(buf, f, 1, stdout);
-           fflush(stderr);
-           fflush(stdout);
-    }
-
-    ftdi_usb_close(&ftdic);
-    ftdi_deinit(&ftdic);
-}
diff --git a/examples/serial_test.c b/examples/serial_test.c
new file mode 100644
index 0000000..20fc772
--- /dev/null
+++ b/examples/serial_test.c
@@ -0,0 +1,179 @@
+/* serial_test.c
+
+   Read/write data via serial I/O
+
+   This program is distributed under the GPL, version 2
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <signal.h>
+#include <ftdi.h>
+
+static int exitRequested = 0;
+/*
+ * sigintHandler --
+ *
+ *    SIGINT handler, so we can gracefully exit when the user hits ctrl-C.
+ */
+static void
+sigintHandler(int signum)
+{
+    exitRequested = 1;
+}
+
+int main(int argc, char **argv)
+{
+    struct ftdi_context *ftdi;
+    unsigned char buf[1024];
+    int f = 0, i;
+    int vid = 0x403;
+    int pid = 0;
+    int baudrate = 115200;
+    int interface = INTERFACE_ANY;
+    int do_write = 0;
+    unsigned int pattern = 0xffff;
+    int retval = EXIT_FAILURE;
+
+    while ((i = getopt(argc, argv, "i:v:p:b:w::")) != -1)
+    {
+        switch (i)
+        {
+            case 'i': // 0=ANY, 1=A, 2=B, 3=C, 4=D
+                interface = strtoul(optarg, NULL, 0);
+                break;
+            case 'v':
+                vid = strtoul(optarg, NULL, 0);
+                break;
+            case 'p':
+                pid = strtoul(optarg, NULL, 0);
+                break;
+            case 'b':
+                baudrate = strtoul(optarg, NULL, 0);
+                break;
+            case 'w':
+                do_write = 1;
+                if (optarg)
+                    pattern = strtoul(optarg, NULL, 0);
+                if (pattern > 0xff)
+                {
+                    fprintf(stderr, "Please provide a 8 bit pattern\n");
+                    exit(-1);
+                }
+                break;
+            default:
+                fprintf(stderr, "usage: %s [-i interface] [-v vid] [-p pid] 
[-b baudrate] [-w [pattern]]\n", *argv);
+                exit(-1);
+        }
+    }
+
+    // Init
+    if ((ftdi = ftdi_new()) == 0)
+    {
+        fprintf(stderr, "ftdi_new failed\n");
+        return EXIT_FAILURE;
+    }
+
+    if (!vid && !pid && (interface == INTERFACE_ANY))
+    {
+        ftdi_set_interface(ftdi, INTERFACE_ANY);
+        struct ftdi_device_list *devlist;
+        int res;
+        if ((res = ftdi_usb_find_all(ftdi, &devlist, 0, 0)) < 0)
+        {
+            fprintf(stderr, "No FTDI with default VID/PID found\n");
+            goto do_deinit;
+        }
+        if (res == 1)
+        {
+            f = ftdi_usb_open_dev(ftdi,  devlist[0].dev);
+            if (f<0)
+            {
+                fprintf(stderr, "Unable to open device %d: (%s)",
+                        i, ftdi_get_error_string(ftdi));
+            }
+        }
+        ftdi_list_free(&devlist);
+        if (res > 1)
+        {
+            fprintf(stderr, "%d Devices found, please select Device with 
VID/PID\n", res);
+            /* TODO: List Devices*/
+            goto do_deinit;
+        }
+        if (res == 0)
+        {
+            fprintf(stderr, "No Devices found with default VID/PID\n");
+            goto do_deinit;
+        }
+    }
+    else
+    {
+        // Select interface
+        ftdi_set_interface(ftdi, interface);
+        
+        // Open device
+        f = ftdi_usb_open(ftdi, vid, pid);
+    }
+    if (f < 0)
+    {
+        fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, 
ftdi_get_error_string(ftdi));
+        exit(-1);
+    }
+
+    // Set baudrate
+    f = ftdi_set_baudrate(ftdi, baudrate);
+    if (f < 0)
+    {
+        fprintf(stderr, "unable to set baudrate: %d (%s)\n", f, 
ftdi_get_error_string(ftdi));
+        exit(-1);
+    }
+    
+    /* Set line parameters
+     *
+     * TODO: Make these parameters settable from the command line
+     *
+     * Parameters are choosen that sending a continous stream of 0x55 
+     * should give a square wave
+     *
+     */
+    f = ftdi_set_line_property(ftdi, 8, STOP_BIT_1, NONE);
+    if (f < 0)
+    {
+        fprintf(stderr, "unable to set line parameters: %d (%s)\n", f, 
ftdi_get_error_string(ftdi));
+        exit(-1);
+    }
+    
+    if (do_write)
+        for(i=0; i<1024; i++)
+            buf[i] = pattern;
+
+    signal(SIGINT, sigintHandler);
+    while (!exitRequested)
+    {
+        if (do_write)
+            f = ftdi_write_data(ftdi, buf, 
+                                (baudrate/512 >sizeof(buf))?sizeof(buf):
+                                (baudrate/512)?baudrate/512:1);
+        else
+            f = ftdi_read_data(ftdi, buf, sizeof(buf));
+        if (f<0)
+            sleep(1);
+        else if(f> 0 && !do_write)
+        {
+            fprintf(stderr, "read %d bytes\n", f);
+            fwrite(buf, f, 1, stdout);
+            fflush(stderr);
+            fflush(stdout);
+        }
+    }
+    signal(SIGINT, SIG_DFL);
+    retval =  EXIT_SUCCESS;
+            
+    ftdi_usb_close(ftdi);
+    do_deinit:
+    ftdi_free(ftdi);
+
+    return retval;
+}
-- 
1.7.3.4


--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread