X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=examples%2Fbitbang_ft2232.c;h=c99e6878ac08ddeec3b21ffe810bac5776d997dc;hp=17b6472724ead2e0b1ecf7ab223ab6cda633fd81;hb=579b006f4873fa72c73d372660d158061497bcc9;hpb=ad397a4bb9a5c258c8655e30f6856c0103d49a9e diff --git a/examples/bitbang_ft2232.c b/examples/bitbang_ft2232.c index 17b6472..c99e687 100644 --- a/examples/bitbang_ft2232.c +++ b/examples/bitbang_ft2232.c @@ -1,87 +1,107 @@ -/* This program is distributed under the GPL, version 2 */ +/* bitbang_ft2232.c + + Output some flickering in bitbang mode to the FT2232 + + Thanks to max@koeln.ccc.de for fixing and extending + the example for the second channel. + + This program is distributed under the GPL, version 2 +*/ #include +#include #include +#ifdef __WIN32__ +#define sleep(x) _sleep(x) +#endif #include int main(int argc, char **argv) { - struct ftdi_context ftdic,ftdic2; + struct ftdi_context ftdic, ftdic2; + unsigned char buf[1]; int f,i; - ftdi_init(&ftdic); + // Init 1. channel + if (ftdi_init(&ftdic) < 0) + { + fprintf(stderr, "ftdi_init failed\n"); + return EXIT_FAILURE; + } + ftdi_set_interface(&ftdic, INTERFACE_A); f = ftdi_usb_open(&ftdic, 0x0403, 0x6001); - - if(f < 0 && f != -5) { + if (f < 0 && f != -5) + { fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic)); exit(-1); } + printf("ftdi open succeeded(channel 1): %d\n",f); - printf("ftdi open succeeded: %d\n",f); - - printf("enabling bitbang mode\n"); - ftdi_enable_bitbang(&ftdic, 0xFF); - - ftdic2.interface=1; - ftdic2.index=1; - ftdic2.out_ep=0x83; - ftdic2.in_ep=0x4; + printf("enabling bitbang mode(channel 1)\n"); + ftdi_set_bitmode(&ftdic, 0xFF, BITMODE_BITBANG); + // Init 2. channel + if (ftdi_init(&ftdic2) < 0) + { + fprintf(stderr, "ftdi_init failed\n"); + return EXIT_FAILURE; + } + ftdi_set_interface(&ftdic2, INTERFACE_B); f = ftdi_usb_open(&ftdic2, 0x0403, 0x6001); - - if(f < 0 && f != -5) { - fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic)); + if (f < 0 && f != -5) + { + fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic2)); exit(-1); } + printf("ftdi open succeeded(channel 2): %d\n",f); - printf("ftdi open succeeded: %d\n",f); - - printf("enabling bitbang mode\n"); - ftdi_enable_bitbang(&ftdic2, 0xFF); - - - char buf[1]; - - sleep(3); + printf("enabling bitbang mode (channel 2)\n"); + ftdi_set_bitmode(&ftdic2, 0xFF, BITMODE_BITBANG); - buf[0] = 0x0; - printf("turning everything on\n"); - f = ftdi_write_data(&ftdic, buf, 1); - if(f < 0) { - fprintf(stderr,"write failed for 0x%x, error %d (%s)\n", buf[0], f, ftdi_get_error_string(&ftdic)); - } - - sleep(3); + // Write data + printf("startloop\n"); + for (i = 0; i < 23; i++) + { + buf[0] = 0x1; + printf("porta: %02i: 0x%02x \n",i,buf[0]); + f = ftdi_write_data(&ftdic, buf, 1); + if (f < 0) + fprintf(stderr,"write failed on channel 1 for 0x%x, error %d (%s)\n", buf[0], f, ftdi_get_error_string(&ftdic)); + sleep(1); - buf[0] = 0xFF; - printf("turning everything off\n"); - f = ftdi_write_data(&ftdic, buf, 1); - if(f < 0) { - fprintf(stderr,"write failed for 0x%x, error %d (%s)\n", buf[0], f, ftdi_get_error_string(&ftdic)); - } + buf[0] = 0x2; + printf("porta: %02i: 0x%02x \n",i,buf[0]); + f = ftdi_write_data(&ftdic, buf, 1); + if (f < 0) + fprintf(stderr,"write failed on channel 1 for 0x%x, error %d (%s)\n", buf[0], f, ftdi_get_error_string(&ftdic)); + sleep(1); - sleep(3); + buf[0] = 0x1; + printf("portb: %02i: 0x%02x \n",i,buf[0]); + f = ftdi_write_data(&ftdic2, buf, 1); + if (f < 0) + fprintf(stderr,"write failed on channel 2 for 0x%x, error %d (%s)\n", buf[0], f, ftdi_get_error_string(&ftdic2)); + sleep(1); - for(i = 0; i < 32; i++) { - buf[0] = 0 | (0xFF ^ 1 << (i % 8)); - if( i > 0 && (i % 8) == 0) { - printf("\n"); - } - printf("%02hhx ",buf[0]); - fflush(stdout); - f = ftdi_write_data(&ftdic, buf, 1); - if(f < 0) { - fprintf(stderr,"write failed for 0x%x, error %d (%s)\n", buf[0], f, ftdi_get_error_string(&ftdic)); - } + buf[0] = 0x2; + printf("portb: %02i: 0x%02x \n",i,buf[0]); + f = ftdi_write_data(&ftdic2, buf, 1); + if (f < 0) + fprintf(stderr,"write failed on channel 2 for 0x%x, error %d (%s)\n", buf[0], f, ftdi_get_error_string(&ftdic2)); sleep(1); } - printf("\n"); - printf("disabling bitbang mode\n"); + printf("disabling bitbang mode(channel 1)\n"); ftdi_disable_bitbang(&ftdic); - ftdi_usb_close(&ftdic); ftdi_deinit(&ftdic); + + printf("disabling bitbang mode(channel 2)\n"); + ftdi_disable_bitbang(&ftdic2); + ftdi_usb_close(&ftdic2); + ftdi_deinit(&ftdic2); + + return 0; }