+diff -Nur xilprg-0.5/cypress_fx2_xilprg.patch xilprg-new/cypress_fx2_xilprg.patch
+--- xilprg-0.5/cypress_fx2_xilprg.patch 1970-01-01 01:00:00.000000000 +0100
++++ xilprg-new/cypress_fx2_xilprg.patch 2007-04-10 10:33:17.000000000 +0200
+@@ -0,0 +1,208 @@
++diff -Nur xilprg-0.5/makefile xilprg-new/makefile
++--- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200
+++++ xilprg-new/makefile 2007-04-07 17:09:16.000000000 +0200
++@@ -40,6 +40,7 @@
++ $(SRC_DIR)/prgfile.cpp \\r
++ $(SRC_DIR)/chip.cpp \\r
++ $(SRC_DIR)/parport.cpp \\r
+++ $(SRC_DIR)/onbusb.cpp \\r
++ $(SRC_DIR)/cable.cpp \\r
++ $(SRC_DIR)/digilent.cpp \\r
++ $(SRC_DIR)/xilinx.cpp\r
++diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp
++--- xilprg-0.5/src/cable.cpp 2006-08-23 07:38:34.000000000 +0200
+++++ xilprg-new/src/cable.cpp 2007-04-07 17:20:55.000000000 +0200
++@@ -49,6 +49,7 @@
++ #include "chip.h"\r
++ #include "cmdline.h"\r
++ #include "digilent.h"\r
+++#include "onbusb.h"\r
++ #include "parport.h"\r
++ \r
++ cable::cable()\r
++@@ -587,6 +588,9 @@
++ if (stricmp(argv[0], "dusb") == 0)\r
++ cbl = new digilent;\r
++ else\r
+++ if (stricmp(argv[0], "ousb") ==0)\r
+++ cbl = new onbusb;\r
+++ else\r
++ {\r
++ msgf(STR_INVALID_CABLE_DEF);\r
++ return NULL;\r
++diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp
++--- xilprg-0.5/src/onbusb.cpp 1970-01-01 01:00:00.000000000 +0100
+++++ xilprg-new/src/onbusb.cpp 2007-04-07 17:15:34.000000000 +0200
++@@ -0,0 +1,113 @@
+++/*\r
+++ * onboard usb\r
+++ *\r
+++ * author: till & frank zirkelbach\r
+++ *\r
+++ */\r
+++\r
+++#include "xilprg.h"\r
+++#include "utils.h"\r
+++#include "onbusb.h"\r
+++\r
+++onbusb::onbusb()\r
+++{\r
+++ handle=NULL;\r
+++}\r
+++\r
+++onbusb::~onbusb()\r
+++{\r
+++}\r
+++\r
+++int onbusb::open()\r
+++{\r
+++ \r
+++ struct usb_bus *bus; \r
+++\r
+++ usb_init();\r
+++ usb_find_busses();\r
+++ usb_find_devices();\r
+++\r
+++ bus=usb_get_busses();\r
+++ while(bus) {\r
+++ dev=bus->devices;\r
+++ while(dev) {\r
+++ if(dev->descriptor.idVendor==USB_VENDOR_ID &&\r
+++ dev->descriptor.idProduct==USB_PRODUCT_ID)\r
+++ /* found the device */\r
+++ return 0;\r
+++ dev=dev->next;\r
+++ }\r
+++ bus=bus->next;\r
+++ }\r
+++\r
+++ return -1;\r
+++\r
+++ handle=usb_open(dev);\r
+++ if(handle==NULL)\r
+++ goto cleanup;\r
+++\r
+++ if(usb_set_configuration(handle,1)<0)\r
+++ goto cleanup;\r
+++\r
+++ if(usb_claim_interface(handle,0)<0)\r
+++ goto cleanup;\r
+++\r
+++ if(usb_set_altinterface(handle,1)<0)\r
+++ goto cleanup;\r
+++\r
+++ data = 0x10;\r
+++\r
+++ reset_tap_state();\r
+++\r
+++ return 0;\r
+++\r
+++cleanup:\r
+++\r
+++ close();\r
+++\r
+++ return 1;\r
+++\r
+++}\r
+++\r
+++int onbusb::close()\r
+++{\r
+++\r
+++ usb_close(handle);\r
+++\r
+++ return 0;\r
+++}\r
+++\r
+++int onbusb::get_description(string& desc)\r
+++{\r
+++ char s[256];\r
+++ sprintf(s, "onboard usb bitbanging");\r
+++ desc = s;\r
+++ return 0;\r
+++}\r
+++\r
+++void onbusb::set_tdi(int bit)\r
+++{\r
+++ if (bit) data |= 0x04; else data &= ~0x04;\r
+++ data|=0xa0;\r
+++ usb_bulk_write(handle,0x01,&data,1,0);\r
+++}\r
+++\r
+++void onbusb::set_tck(int bit)\r
+++{\r
+++ if (bit) data |= 0x10; else data &= ~0x10;\r
+++ data|=0xa0;\r
+++ usb_bulk_write(handle,0x01,&data,1,0);\r
+++}\r
+++\r
+++void onbusb::set_tms(int bit)\r
+++{\r
+++ if (bit) data |= 0x08; else data &= ~0x08;\r
+++ data|=0xa0;\r
+++ usb_bulk_write(handle,0x01,&data,1,0);\r
+++}\r
+++\r
+++int onbusb::get_tdo()\r
+++{\r
+++ usb_bulk_read(handle,0x81,&data,1,0);\r
+++ return data & 0x01 ? 1 : 0;\r
+++}\r
++diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h
++--- xilprg-0.5/src/onbusb.h 1970-01-01 01:00:00.000000000 +0100
+++++ xilprg-new/src/onbusb.h 2007-04-07 17:14:07.000000000 +0200
++@@ -0,0 +1,43 @@
+++/*\r
+++ * onboard usb\r
+++ *\r
+++ * author: till & frank zirkelbach\r
+++ *\r
+++ */\r
+++\r
+++#ifndef _ONBUSB_H_INCLUDED_\r
+++#define _ONBUSB_H_INCLUDED_\r
+++\r
+++#include "cable.h"\r
+++\r
+++#include <usb.h>\r
+++\r
+++class onbusb : public cable\r
+++{\r
+++public:\r
+++ onbusb();\r
+++ virtual ~onbusb();\r
+++\r
+++ enum\r
+++ {\r
+++ USB_VENDOR_ID = 0x04b4,\r
+++ USB_PRODUCT_ID = 0x8613\r
+++ };\r
+++\r
+++ virtual int open();\r
+++ virtual int close();\r
+++\r
+++ virtual int get_description(string&);\r
+++\r
+++ virtual void set_tdi(int);\r
+++ virtual void set_tck(int);\r
+++ virtual void set_tms(int);\r
+++ virtual int get_tdo();\r
+++\r
+++protected:\r
+++ char data;\r
+++ struct usb_device *dev;\r
+++ usb_dev_handle *handle;\r
+++};\r
+++\r
+++#endif\r
++diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp
++--- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200
+++++ xilprg-new/src/strtable.cpp 2007-04-07 16:56:25.000000000 +0200
++@@ -137,7 +137,7 @@
++ //STR_CMD_CABLE\r
++ "cable\0" \r
++ "Sets programmer cable\0"\r
++- "cable {xil3 [ioaddr]|dusb}\0",\r
+++ "cable {xil3 [ioaddr]|dusb|ousb}\0",\r
++ //STR_CMD_CHIPS\r
++ "chips\0"\r
++ "Prints supported devices\0" \r
diff -Nur xilprg-0.5/makefile xilprg-new/makefile
--- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200
-+++ xilprg-new/makefile 2007-04-07 17:09:16.000000000 +0200
++++ xilprg-new/makefile 2007-04-10 10:33:28.000000000 +0200
@@ -40,6 +40,7 @@
$(SRC_DIR)/prgfile.cpp \\r
$(SRC_DIR)/chip.cpp \\r
$(SRC_DIR)/xilinx.cpp\r
diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp
--- xilprg-0.5/src/cable.cpp 2006-08-23 07:38:34.000000000 +0200
-+++ xilprg-new/src/cable.cpp 2007-04-07 17:20:55.000000000 +0200
++++ xilprg-new/src/cable.cpp 2007-04-10 10:33:28.000000000 +0200
@@ -49,6 +49,7 @@
#include "chip.h"\r
#include "cmdline.h"\r
return NULL;\r
diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp
--- xilprg-0.5/src/onbusb.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ xilprg-new/src/onbusb.cpp 2007-04-07 17:15:34.000000000 +0200
-@@ -0,0 +1,113 @@
++++ xilprg-new/src/onbusb.cpp 2007-04-10 11:32:01.000000000 +0200
+@@ -0,0 +1,126 @@
+/*\r
+ * onboard usb\r
+ *\r
+ dev=bus->devices;\r
+ while(dev) {\r
+ if(dev->descriptor.idVendor==USB_VENDOR_ID &&\r
-+ dev->descriptor.idProduct==USB_PRODUCT_ID)\r
++ dev->descriptor.idProduct==USB_PRODUCT_ID) {
++
+ /* found the device */\r
++
++ printf("found matching usb device\n");
++
++ handle=usb_open(dev);\r
++ if(handle==NULL)\r
++ goto cleanup;\r
++
++ printf("got handle\n");
++\r
++ if(usb_set_configuration(handle,1)<0)\r
++ goto cleanup;\r
++
++ printf("set configuration\n");
++\r
++ if(usb_claim_interface(handle,0)<0)\r
++ goto cleanup;\r
++
++ printf("claimed interface\n");
++\r
++ if(usb_set_altinterface(handle,1)<0)\r
++ goto cleanup;\r
++
++ printf("set alt interface\n");
++\r
++ data = 0x10;\r
++\r
++ reset_tap_state();\r
++\r
+ return 0;\r
++ }
+ dev=dev->next;\r
+ }\r
+ bus=bus->next;\r
+\r
+ return -1;\r
+\r
-+ handle=usb_open(dev);\r
-+ if(handle==NULL)\r
-+ goto cleanup;\r
-+\r
-+ if(usb_set_configuration(handle,1)<0)\r
-+ goto cleanup;\r
-+\r
-+ if(usb_claim_interface(handle,0)<0)\r
-+ goto cleanup;\r
-+\r
-+ if(usb_set_altinterface(handle,1)<0)\r
-+ goto cleanup;\r
-+\r
-+ data = 0x10;\r
-+\r
-+ reset_tap_state();\r
-+\r
-+ return 0;\r
-+\r
+cleanup:\r
+\r
++ perror("device open");
++
+ close();\r
+\r
-+ return 1;\r
++ return -1;\r
+\r
+}\r
+\r
+{\r
+ if (bit) data |= 0x04; else data &= ~0x04;\r
+ data|=0xa0;\r
-+ usb_bulk_write(handle,0x01,&data,1,0);\r
++ //usb_bulk_write(handle,0x01,&data,1,0);\r
+}\r
+\r
+void onbusb::set_tck(int bit)\r
+{\r
+ if (bit) data |= 0x08; else data &= ~0x08;\r
+ data|=0xa0;\r
-+ usb_bulk_write(handle,0x01,&data,1,0);\r
++ //usb_bulk_write(handle,0x01,&data,1,0);\r
+}\r
+\r
+int onbusb::get_tdo()\r
+}\r
diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h
--- xilprg-0.5/src/onbusb.h 1970-01-01 01:00:00.000000000 +0100
-+++ xilprg-new/src/onbusb.h 2007-04-07 17:14:07.000000000 +0200
++++ xilprg-new/src/onbusb.h 2007-04-10 10:33:28.000000000 +0200
@@ -0,0 +1,43 @@
+/*\r
+ * onboard usb\r
+#endif\r
diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp
--- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200
-+++ xilprg-new/src/strtable.cpp 2007-04-07 16:56:25.000000000 +0200
++++ xilprg-new/src/strtable.cpp 2007-04-10 10:33:28.000000000 +0200
@@ -137,7 +137,7 @@
//STR_CMD_CABLE\r
"cable\0" \r