X-Git-Url: http://developer.intra2net.com/git/?a=blobdiff_plain;f=examples%2Fbitbang_ft2232.c;h=8f10490a64ab990b8e5a4d54478444876dae3728;hb=fb56d9cf14f34dda2d7b154f16a0c08ad8b639f9;hp=17b6472724ead2e0b1ecf7ab223ab6cda633fd81;hpb=ad397a4bb9a5c258c8655e30f6856c0103d49a9e;p=libftdi diff --git a/examples/bitbang_ft2232.c b/examples/bitbang_ft2232.c index 17b6472..8f10490 100644 --- a/examples/bitbang_ft2232.c +++ b/examples/bitbang_ft2232.c @@ -1,87 +1,106 @@ -/* 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 #include int main(int argc, char **argv) { - struct ftdi_context ftdic,ftdic2; + struct ftdi_context *ftdi, *ftdi2; + unsigned char buf[1]; int f,i; - ftdi_init(&ftdic); - - 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); + // Init 1. channel + if ((ftdi = ftdi_new()) == 0) + { + fprintf(stderr, "ftdi_new failed\n"); + return EXIT_FAILURE; } - 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; - - 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)); + ftdi_set_interface(ftdi, INTERFACE_A); + f = ftdi_usb_open(ftdi, 0x0403, 0x6001); + if (f < 0 && f != -5) + { + fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(ftdi)); + ftdi_free(ftdi); exit(-1); } + printf("ftdi open succeeded(channel 1): %d\n",f); - printf("ftdi open succeeded: %d\n",f); + printf("enabling bitbang mode(channel 1)\n"); + ftdi_set_bitmode(ftdi, 0xFF, BITMODE_BITBANG); - printf("enabling bitbang mode\n"); - ftdi_enable_bitbang(&ftdic2, 0xFF); - - - 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)); + // Init 2. channel + if ((ftdi2 = ftdi_new()) == 0) + { + fprintf(stderr, "ftdi_new failed\n"); + return EXIT_FAILURE; } - - 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)); + ftdi_set_interface(ftdi2, INTERFACE_B); + f = ftdi_usb_open(ftdi2, 0x0403, 0x6001); + if (f < 0 && f != -5) + { + fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(ftdi2)); + ftdi_free(ftdi2); + exit(-1); } - - sleep(3); - - 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)); - } - sleep(1); + printf("ftdi open succeeded(channel 2): %d\n",f); + + printf("enabling bitbang mode (channel 2)\n"); + ftdi_set_bitmode(ftdi2, 0xFF, BITMODE_BITBANG); + + // 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(ftdi, 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(ftdi)); + usleep(1 * 1000000); + + buf[0] = 0x2; + printf("porta: %02i: 0x%02x \n",i,buf[0]); + f = ftdi_write_data(ftdi, 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(ftdi)); + usleep(1 * 1000000); + + buf[0] = 0x1; + printf("portb: %02i: 0x%02x \n",i,buf[0]); + f = ftdi_write_data(ftdi2, 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(ftdi2)); + usleep(1 * 1000000); + + buf[0] = 0x2; + printf("portb: %02i: 0x%02x \n",i,buf[0]); + f = ftdi_write_data(ftdi2, 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(ftdi2)); + usleep(1 * 1000000); } - printf("\n"); - printf("disabling bitbang mode\n"); - ftdi_disable_bitbang(&ftdic); + printf("disabling bitbang mode(channel 1)\n"); + ftdi_disable_bitbang(ftdi); + ftdi_usb_close(ftdi); + ftdi_free(ftdi); + + printf("disabling bitbang mode(channel 2)\n"); + ftdi_disable_bitbang(ftdi2); + ftdi_usb_close(ftdi2); + ftdi_free(ftdi2); - ftdi_usb_close(&ftdic); - ftdi_deinit(&ftdic); + return 0; }