96d9eab1032bc7886914ce1d31f3b2367ee0ecfa
[my-code/fpga.git] / fx2 / cypress_fx2_xilprg.patch
1 diff -Nur xilprg-0.5/makefile xilprg-new/makefile
2 --- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200
3 +++ xilprg-new/makefile 2007-04-07 17:09:16.000000000 +0200
4 @@ -40,6 +40,7 @@
5         $(SRC_DIR)/prgfile.cpp \\r
6         $(SRC_DIR)/chip.cpp \\r
7         $(SRC_DIR)/parport.cpp \\r
8 +       $(SRC_DIR)/onbusb.cpp \\r
9         $(SRC_DIR)/cable.cpp \\r
10         $(SRC_DIR)/digilent.cpp \\r
11         $(SRC_DIR)/xilinx.cpp\r
12 diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp
13 --- xilprg-0.5/src/cable.cpp    2006-08-23 07:38:34.000000000 +0200
14 +++ xilprg-new/src/cable.cpp    2007-04-07 17:20:55.000000000 +0200
15 @@ -49,6 +49,7 @@
16  #include "chip.h"\r
17  #include "cmdline.h"\r
18  #include "digilent.h"\r
19 +#include "onbusb.h"\r
20  #include "parport.h"\r
21  \r
22  cable::cable()\r
23 @@ -587,6 +588,9 @@
24      if (stricmp(argv[0], "dusb") == 0)\r
25          cbl = new digilent;\r
26      else\r
27 +    if (stricmp(argv[0], "ousb") ==0)\r
28 +       cbl = new onbusb;\r
29 +    else\r
30      {\r
31          msgf(STR_INVALID_CABLE_DEF);\r
32          return NULL;\r
33 diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp
34 --- xilprg-0.5/src/onbusb.cpp   1970-01-01 01:00:00.000000000 +0100
35 +++ xilprg-new/src/onbusb.cpp   2007-04-07 17:15:34.000000000 +0200
36 @@ -0,0 +1,113 @@
37 +/*\r
38 + * onboard usb\r
39 + *\r
40 + * author: till & frank zirkelbach\r
41 + *\r
42 + */\r
43 +\r
44 +#include "xilprg.h"\r
45 +#include "utils.h"\r
46 +#include "onbusb.h"\r
47 +\r
48 +onbusb::onbusb()\r
49 +{\r
50 +   handle=NULL;\r
51 +}\r
52 +\r
53 +onbusb::~onbusb()\r
54 +{\r
55 +}\r
56 +\r
57 +int onbusb::open()\r
58 +{\r
59 +   \r
60 +    struct usb_bus *bus; \r
61 +\r
62 +    usb_init();\r
63 +    usb_find_busses();\r
64 +    usb_find_devices();\r
65 +\r
66 +    bus=usb_get_busses();\r
67 +    while(bus) {\r
68 +       dev=bus->devices;\r
69 +       while(dev) {\r
70 +               if(dev->descriptor.idVendor==USB_VENDOR_ID &&\r
71 +                  dev->descriptor.idProduct==USB_PRODUCT_ID)\r
72 +                       /* found the device */\r
73 +                       return 0;\r
74 +               dev=dev->next;\r
75 +       }\r
76 +       bus=bus->next;\r
77 +    }\r
78 +\r
79 +    return -1;\r
80 +\r
81 +    handle=usb_open(dev);\r
82 +    if(handle==NULL)\r
83 +       goto cleanup;\r
84 +\r
85 +    if(usb_set_configuration(handle,1)<0)\r
86 +       goto cleanup;\r
87 +\r
88 +    if(usb_claim_interface(handle,0)<0)\r
89 +       goto cleanup;\r
90 +\r
91 +    if(usb_set_altinterface(handle,1)<0)\r
92 +       goto cleanup;\r
93 +\r
94 +    data = 0x10;\r
95 +\r
96 +    reset_tap_state();\r
97 +\r
98 +    return 0;\r
99 +\r
100 +cleanup:\r
101 +\r
102 +    close();\r
103 +\r
104 +    return 1;\r
105 +\r
106 +}\r
107 +\r
108 +int onbusb::close()\r
109 +{\r
110 +\r
111 +    usb_close(handle);\r
112 +\r
113 +    return 0;\r
114 +}\r
115 +\r
116 +int onbusb::get_description(string& desc)\r
117 +{\r
118 +    char s[256];\r
119 +    sprintf(s, "onboard usb bitbanging");\r
120 +    desc = s;\r
121 +    return 0;\r
122 +}\r
123 +\r
124 +void onbusb::set_tdi(int bit)\r
125 +{\r
126 +    if (bit) data |= 0x04; else data &= ~0x04;\r
127 +    data|=0xa0;\r
128 +    usb_bulk_write(handle,0x01,&data,1,0);\r
129 +}\r
130 +\r
131 +void onbusb::set_tck(int bit)\r
132 +{\r
133 +    if (bit) data |= 0x10; else data &= ~0x10;\r
134 +    data|=0xa0;\r
135 +    usb_bulk_write(handle,0x01,&data,1,0);\r
136 +}\r
137 +\r
138 +void onbusb::set_tms(int bit)\r
139 +{\r
140 +    if (bit) data |= 0x08; else data &= ~0x08;\r
141 +    data|=0xa0;\r
142 +    usb_bulk_write(handle,0x01,&data,1,0);\r
143 +}\r
144 +\r
145 +int onbusb::get_tdo()\r
146 +{\r
147 +    usb_bulk_read(handle,0x81,&data,1,0);\r
148 +    return data & 0x01 ? 1 : 0;\r
149 +}\r
150 diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h
151 --- xilprg-0.5/src/onbusb.h     1970-01-01 01:00:00.000000000 +0100
152 +++ xilprg-new/src/onbusb.h     2007-04-07 17:14:07.000000000 +0200
153 @@ -0,0 +1,43 @@
154 +/*\r
155 + * onboard usb\r
156 + *\r
157 + * author: till & frank zirkelbach\r
158 + *\r
159 + */\r
160 +\r
161 +#ifndef _ONBUSB_H_INCLUDED_\r
162 +#define _ONBUSB_H_INCLUDED_\r
163 +\r
164 +#include "cable.h"\r
165 +\r
166 +#include <usb.h>\r
167 +\r
168 +class onbusb : public cable\r
169 +{\r
170 +public:\r
171 +       onbusb();\r
172 +       virtual ~onbusb();\r
173 +\r
174 +    enum\r
175 +    {\r
176 +       USB_VENDOR_ID   = 0x04b4,\r
177 +       USB_PRODUCT_ID  = 0x8613\r
178 +    };\r
179 +\r
180 +    virtual int open();\r
181 +    virtual int close();\r
182 +\r
183 +    virtual int get_description(string&);\r
184 +\r
185 +    virtual void set_tdi(int);\r
186 +    virtual void set_tck(int);\r
187 +    virtual void set_tms(int);\r
188 +    virtual int get_tdo();\r
189 +\r
190 +protected:\r
191 +    char data;\r
192 +    struct usb_device *dev;\r
193 +    usb_dev_handle *handle;\r
194 +};\r
195 +\r
196 +#endif\r
197 diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp
198 --- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200
199 +++ xilprg-new/src/strtable.cpp 2007-04-07 16:56:25.000000000 +0200
200 @@ -137,7 +137,7 @@
201      //STR_CMD_CABLE\r
202      "cable\0" \r
203      "Sets programmer cable\0"\r
204 -    "cable {xil3 [ioaddr]|dusb}\0",\r
205 +    "cable {xil3 [ioaddr]|dusb|ousb}\0",\r
206      //STR_CMD_CHIPS\r
207      "chips\0"\r
208      "Prints supported devices\0" \r