X-Git-Url: http://developer.intra2net.com/git/?a=blobdiff_plain;f=examples%2Fbaud_test.c;h=eb50e2f6c2dd23b2bb7ad87325f68c15e2bd3185;hb=95f682877fca2fe3c0271272b07f3fffeda4281e;hp=d8d4886154c05907962d3a1375abac8796c92465;hpb=05c2e40a3c720c63a75d36a33d0d5de0677f8f57;p=libftdi diff --git a/examples/baud_test.c b/examples/baud_test.c index d8d4886..eb50e2f 100644 --- a/examples/baud_test.c +++ b/examples/baud_test.c @@ -50,11 +50,12 @@ double get_prec_time() int main(int argc, char **argv) { - struct ftdi_context ftdic; + struct ftdi_context *ftdi; int i, t; unsigned char *txbuf; unsigned char *rxbuf; double start, duration, plan; + int retval= 0; // default values int baud=9600; @@ -110,16 +111,18 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - if (ftdi_init(&ftdic) < 0) + if ((ftdi = ftdi_new()) == 0) { - fprintf(stderr, "ftdi_init failed\n"); - return EXIT_FAILURE; + fprintf(stderr, "ftdi_new failed\n"); + retval = EXIT_FAILURE; + goto done; } - if (ftdi_usb_open_string(&ftdic, devicedesc) < 0) + if (ftdi_usb_open_string(ftdi, devicedesc) < 0) { - fprintf(stderr,"Can't open ftdi device: %s\n",ftdi_get_error_string(&ftdic)); - return EXIT_FAILURE; + fprintf(stderr,"Can't open ftdi device: %s\n",ftdi_get_error_string(ftdi)); + retval = EXIT_FAILURE; + goto do_deinit; } set_baud=baud; @@ -129,13 +132,14 @@ int main(int argc, char **argv) set_baud=baud/16; } - ftdi_set_baudrate(&ftdic,set_baud); - printf("real baudrate used: %d\n",(test_mode==BITMODE_RESET) ? ftdic.baudrate : ftdic.baudrate*16); + ftdi_set_baudrate(ftdi,set_baud); + printf("real baudrate used: %d\n",(test_mode==BITMODE_RESET) ? ftdi->baudrate : ftdi->baudrate*16); - if (ftdi_set_bitmode(&ftdic, 0xFF,test_mode) < 0) + if (ftdi_set_bitmode(ftdi, 0xFF,test_mode) < 0) { - fprintf(stderr,"Can't set mode: %s\n",ftdi_get_error_string(&ftdic)); - return EXIT_FAILURE; + fprintf(stderr,"Can't set mode: %s\n",ftdi_get_error_string(ftdi)); + retval = EXIT_FAILURE; + goto do_close; } if (test_mode==BITMODE_RESET) @@ -161,24 +165,25 @@ int main(int argc, char **argv) txbuf[i]=(i%2) ? 0xff : 0; } - if (ftdi_write_data_set_chunksize(&ftdic, txchunksize) < 0 || - ftdi_read_data_set_chunksize(&ftdic, txchunksize) < 0) + if (ftdi_write_data_set_chunksize(ftdi, txchunksize) < 0 || + ftdi_read_data_set_chunksize(ftdi, txchunksize) < 0) { - fprintf(stderr,"Can't set chunksize: %s\n",ftdi_get_error_string(&ftdic)); - return EXIT_FAILURE; + fprintf(stderr,"Can't set chunksize: %s\n",ftdi_get_error_string(ftdi)); + retval = EXIT_FAILURE; + goto do_close; } if (test_mode==BITMODE_SYNCBB) { // completely clear the receive buffer before beginning - while (ftdi_read_data(&ftdic, rxbuf, txchunksize)>0); + while (ftdi_read_data(ftdi, rxbuf, txchunksize)>0); } start=get_prec_time(); // don't wait for more data to arrive, take what we get and keep on sending // yes, we really would like to have libusb 1.0+ with async read/write... - ftdic.usb_read_timeout=1; + ftdi->usb_read_timeout=1; i=0; while (i < datasize) @@ -187,11 +192,12 @@ int main(int argc, char **argv) if (i+sendsize > datasize) sendsize=datasize-i; - if ((sendsize=ftdi_write_data(&ftdic, txbuf, sendsize)) < 0) + if ((sendsize=ftdi_write_data(ftdi, txbuf, sendsize)) < 0) { fprintf(stderr,"write failed at %d: %s\n", - i, ftdi_get_error_string(&ftdic)); - return EXIT_FAILURE; + i, ftdi_get_error_string(ftdi)); + retval = EXIT_FAILURE; + goto do_close; } i+=sendsize; @@ -199,14 +205,20 @@ int main(int argc, char **argv) if (test_mode==BITMODE_SYNCBB) { // read the same amount of data as sent - ftdi_read_data(&ftdic, rxbuf, sendsize); + ftdi_read_data(ftdi, rxbuf, sendsize); } } duration=get_prec_time()-start; printf("and took %.4f seconds, this is %.0f baud or factor %.3f\n",duration,(plan*baud)/duration,plan/duration); - - ftdi_usb_close(&ftdic); - ftdi_deinit(&ftdic); - exit (0); +do_close: + ftdi_usb_close(ftdi); +do_deinit: + ftdi_free(ftdi); +done: + if(rxbuf) + free(rxbuf); + if(txbuf) + free(txbuf); + exit (retval); }