fixed EEPROM user-area space checks for FT232R and FT245R chips in ftdi_eeprom_build()
[libftdi] / examples / serial_test.c
index 60c5a84..289dd97 100644 (file)
@@ -28,13 +28,13 @@ int main(int argc, char **argv)
 {
     struct ftdi_context *ftdi;
     unsigned char buf[1024];
-    int f, i;
-    int vid = 0;
+    int f = 0, i;
+    int vid = 0x403;
     int pid = 0;
     int baudrate = 115200;
     int interface = INTERFACE_ANY;
     int do_write = 0;
-    unsigned int pattern;
+    unsigned int pattern = 0xffff;
     int retval = EXIT_FAILURE;
 
     while ((i = getopt(argc, argv, "i:v:p:b:w::")) != -1)
@@ -55,9 +55,13 @@ int main(int argc, char **argv)
                 break;
             case 'w':
                 do_write = 1;
-                pattern = strtoul(optarg, NULL, 0);
+                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);
@@ -126,6 +130,21 @@ int main(int argc, char **argv)
         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;
@@ -134,11 +153,13 @@ int main(int argc, char **argv)
     while (!exitRequested)
     {
         if (do_write)
-            f = ftdi_write_data(ftdi, buf, sizeof(buf));
+            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);
+            usleep(1 * 1000000);
         else if(f> 0 && !do_write)
         {
             fprintf(stderr, "read %d bytes\n", f);