X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=examples%2Fbitbang_ft2232.c;h=cb626649c55761631987583b89194b8dce573c44;hp=17b6472724ead2e0b1ecf7ab223ab6cda633fd81;hb=8144d21177a6ce82cb1d1786a643d91397b5addb;hpb=ad397a4bb9a5c258c8655e30f6856c0103d49a9e diff --git a/examples/bitbang_ft2232.c b/examples/bitbang_ft2232.c index 17b6472..cb62664 100644 --- a/examples/bitbang_ft2232.c +++ b/examples/bitbang_ft2232.c @@ -1,4 +1,12 @@ -/* 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 @@ -6,82 +14,76 @@ int main(int argc, char **argv) { - struct ftdi_context ftdic,ftdic2; + struct ftdi_context ftdic, ftdic2; + char buf[1]; int f,i; + // Init 1. channel ftdi_init(&ftdic); - + ftdi_set_interface(&ftdic, INTERFACE_A); f = ftdi_usb_open(&ftdic, 0x0403, 0x6001); - 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"); + printf("enabling bitbang mode(channel 1)\n"); ftdi_enable_bitbang(&ftdic, 0xFF); - ftdic2.interface=1; - ftdic2.index=1; - ftdic2.out_ep=0x83; - ftdic2.in_ep=0x4; - + // Init 2. channel + ftdi_init(&ftdic2); + 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)); + 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"); + printf("enabling bitbang mode (channel 2)\n"); ftdi_enable_bitbang(&ftdic2, 0xFF); + // 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); - char buf[1]; - - sleep(3); - - 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); - - 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); }