Commit | Line | Data |
---|---|---|
ad397a4b TJ |
1 | /* This program is distributed under the GPL, version 2 */ |
2 | ||
3 | #include <stdio.h> | |
579b006f | 4 | #include <stdlib.h> |
ad397a4b | 5 | #include <unistd.h> |
7b5c5624 UB |
6 | #ifdef __WIN32__ |
7 | #define sleep(x) Sleep(x) | |
8 | #endif | |
ad397a4b TJ |
9 | #include <ftdi.h> |
10 | ||
11 | int main(int argc, char **argv) | |
12 | { | |
cd2ead2f | 13 | struct ftdi_context *ftdi; |
ad397a4b | 14 | int f,i; |
579b006f | 15 | unsigned char buf[1]; |
4cc3fa8a | 16 | int retval = 0; |
ad397a4b | 17 | |
cd2ead2f | 18 | if ((ftdi = ftdi_new()) == 0) |
6ac169ea | 19 | { |
cd2ead2f | 20 | fprintf(stderr, "ftdi_new failed\n"); |
6ac169ea TJ |
21 | return EXIT_FAILURE; |
22 | } | |
ad397a4b | 23 | |
cd2ead2f | 24 | f = ftdi_usb_open(ftdi, 0x0403, 0x6001); |
ad397a4b | 25 | |
22d12cda TJ |
26 | if (f < 0 && f != -5) |
27 | { | |
cd2ead2f | 28 | fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(ftdi)); |
4cc3fa8a UB |
29 | retval = 1; |
30 | goto done; | |
ad397a4b TJ |
31 | } |
32 | ||
33 | printf("ftdi open succeeded: %d\n",f); | |
34 | ||
35 | printf("enabling bitbang mode\n"); | |
cd2ead2f | 36 | ftdi_set_bitmode(ftdi, 0xFF, BITMODE_BITBANG); |
ad397a4b | 37 | |
ad397a4b TJ |
38 | sleep(3); |
39 | ||
40 | buf[0] = 0x0; | |
41 | printf("turning everything on\n"); | |
cd2ead2f | 42 | f = ftdi_write_data(ftdi, buf, 1); |
22d12cda TJ |
43 | if (f < 0) |
44 | { | |
cd2ead2f | 45 | fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi)); |
ad397a4b TJ |
46 | } |
47 | ||
48 | sleep(3); | |
49 | ||
50 | buf[0] = 0xFF; | |
51 | printf("turning everything off\n"); | |
cd2ead2f | 52 | f = ftdi_write_data(ftdi, buf, 1); |
22d12cda TJ |
53 | if (f < 0) |
54 | { | |
cd2ead2f | 55 | fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi)); |
ad397a4b TJ |
56 | } |
57 | ||
58 | sleep(3); | |
59 | ||
22d12cda TJ |
60 | for (i = 0; i < 32; i++) |
61 | { | |
ad397a4b | 62 | buf[0] = 0 | (0xFF ^ 1 << (i % 8)); |
22d12cda TJ |
63 | if ( i > 0 && (i % 8) == 0) |
64 | { | |
ad397a4b TJ |
65 | printf("\n"); |
66 | } | |
67 | printf("%02hhx ",buf[0]); | |
68 | fflush(stdout); | |
cd2ead2f | 69 | f = ftdi_write_data(ftdi, buf, 1); |
22d12cda TJ |
70 | if (f < 0) |
71 | { | |
cd2ead2f | 72 | fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi)); |
ad397a4b TJ |
73 | } |
74 | sleep(1); | |
75 | } | |
76 | ||
77 | printf("\n"); | |
78 | ||
79 | printf("disabling bitbang mode\n"); | |
cd2ead2f | 80 | ftdi_disable_bitbang(ftdi); |
ad397a4b | 81 | |
cd2ead2f | 82 | ftdi_usb_close(ftdi); |
4cc3fa8a | 83 | done: |
cd2ead2f | 84 | ftdi_free(ftdi); |
579b006f | 85 | |
4cc3fa8a | 86 | return retval; |
ad397a4b | 87 | } |