Hi,
The driver is tested OK.
It's really simple to implement driver for UrJTAG.
I didn't setup the USB_TO_XXX framework, because
it's just unnecessary.

Check the patch in the attachment.
Mail me if any problem or my code breaks anything.

Simple test on Mega128:
simonq...@simonqian-laptop:~/urjtag/urjtag/urjtag$ jtag

UrJTAG 0.10 #1827
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

UrJTAG is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
There is absolutely no warranty for UrJTAG.

jtag.c:518 main() Warning: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.

jtag> cable vsllink
Versaloon(0x15)by Simon(compiled on Aug 16 2010)(buffer size 12288 bytes)
Versaloon JTAG Interface ready
jtag> detect
IR length: 4
Chain length: 1
Device Id: 10001001011100000010000000111111 (0x8970203F)
  Manufacturer: Atmel (0x03F)
  Part(0):      ATmega128 (0x9702)
  Stepping:     I
  Filename:     /usr/local/share/urjtag/atmel/atmega128/atmega128
jtag> quit
simonq...@simonqian-laptop:~/urjtag/urjtag/urjtag$


-- 
Best Regards, SimonQian
http://www.SimonQian.com
diff -urN orig/urjtag/configure.ac urjtag/urjtag/configure.ac
--- orig/urjtag/configure.ac	2010-08-17 19:18:04.045399199 +0800
+++ urjtag/urjtag/configure.ac	2010-08-19 01:24:31.882555877 +0800
@@ -663,6 +663,7 @@
 	usbblaster
 	wiggler
 	xpc
+	vsllink
 ],[
 	ep9307
 	jim
@@ -673,7 +674,7 @@
 		drivers=`echo ${drivers} | $SED -e "s/ft2232//" -e "s/usbblaster//"`
 	])
 	AS_IF([test "x$HAVELIBUSB" = "xno"], [
-		drivers=`echo ${drivers} | $SED -e s/jlink// -e s/xpc// -e s/ice100//`
+		drivers=`echo ${drivers} | $SED -e s/jlink// -e s/xpc// -e s/ice100// -e s/vsllink//`
 	])
 ])
 dnl the "fake" jim cable driver is special
diff -urN orig/urjtag/src/tap/cable/generic_usbconn_list.h urjtag/urjtag/src/tap/cable/generic_usbconn_list.h
--- orig/urjtag/src/tap/cable/generic_usbconn_list.h	2010-08-17 19:17:50.065395875 +0800
+++ urjtag/urjtag/src/tap/cable/generic_usbconn_list.h	2010-08-19 01:26:07.952542913 +0800
@@ -71,6 +73,9 @@
 _URJ_USB(ezkit_20_bf518)
 _URJ_USB(ezkit_20_bf526)
 #endif
+#ifdef ENABLE_CABLE_VSLLINK
+_URJ_USB(vsllink)
+#endif
 
 #undef _URJ_USB_FTDI
 #undef _URJ_USB_FTD2XX
diff -urN orig/urjtag/src/tap/cable/vsllink.c urjtag/urjtag/src/tap/cable/vsllink.c
--- orig/urjtag/src/tap/cable/vsllink.c	1970-01-01 08:00:00.000000000 +0800
+++ urjtag/urjtag/src/tap/cable/vsllink.c	2010-08-19 01:26:28.192550029 +0800
@@ -0,0 +1,574 @@
+/*
+ * $Id: vsllink.c
+ *
+ * Versaloon cable driver
+ *
+ * Copyright (C) 2010 SimonQian
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ */
+
+
+#include <sysdep.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "generic.h"
+#include "generic_usbconn.h"
+
+#include <urjtag/usbconn.h>
+
+/* ---------------------------------------------------------------------- */
+
+
+#include <urjtag/cable.h>
+#include <urjtag/chain.h>
+
+#include "usbconn/libusb.h"
+
+#define VERSALOON_INP			0x82
+#define VERSALOON_OUTP			0x03
+#define VERSALOON_USB_TIMEOUT	1000
+
+typedef struct
+{
+	/* Global USB buffers */
+	unsigned char *usb_buffer;
+	uint32_t usb_buffer_size;
+
+	int tap_length;
+	uint8_t *tms_buffer;
+	uint8_t *tdi_buffer;
+	uint32_t tap_buffer_size;
+
+	int last_tdo;
+}
+vsllink_usbconn_data_t;
+
+/* Constants for VSLLink command */
+#define VERSALOON_GET_INFO		0x00
+#define VERSALOON_GET_TVCC		0x01
+#define VERSALOON_USB_TO_XXX_CMD_START		0x20
+#define USB_TO_GPIO				(VERSALOON_USB_TO_XXX_CMD_START + 0x03)
+#define USB_TO_JTAG_RAW			(VERSALOON_USB_TO_XXX_CMD_START + 0x27)
+#define USB_TO_DELAY				(VERSALOON_USB_TO_XXX_CMD_START + 0x41)
+#define USB_TO_ALL				(VERSALOON_USB_TO_XXX_CMD_START + 0x5F)
+
+#define USB_TO_XXX_CMDSHIFT		3
+#define USB_TO_XXX_INIT			(0x00 << USB_TO_XXX_CMDSHIFT)
+#define USB_TO_XXX_FINI			(0x01 << USB_TO_XXX_CMDSHIFT)
+#define USB_TO_XXX_CONFIG		(0x02 << USB_TO_XXX_CMDSHIFT)
+#define USB_TO_XXX_IN_OUT		(0x05 << USB_TO_XXX_CMDSHIFT)
+#define USB_TO_XXX_IN			(0x06 << USB_TO_XXX_CMDSHIFT)
+#define USB_TO_XXX_OUT			(0x07 << USB_TO_XXX_CMDSHIFT)
+
+#define GPIO_SRST					(1 << 0)
+#define GPIO_TRST					(1 << 1)
+
+/* VSLlink lowlevel functions */
+static int vsllink_usb_message(urj_usbconn_libusb_param_t *params, int, int, int);
+
+/***************************************************************************/
+
+static void
+vsllink_tap_append_step(vsllink_usbconn_data_t *data, int tms, int tdi)
+{
+	int index = data->tap_length >> 3;
+
+	if (index < data->tap_buffer_size)
+	{
+		int bit_index = data->tap_length & 7;
+		uint8_t bit = 1 << bit_index;
+
+		if(bit_index == 0)
+		{
+			data->tms_buffer[index] = 0;
+			data->tdi_buffer[index] = 0;
+		}
+
+		if(tms)
+			data->tms_buffer[index] |= bit;
+		if(tdi)
+			data->tdi_buffer[index] |= bit;
+
+		data->tap_length++;
+	}
+	else
+	{
+		urj_log(URJ_LOG_LEVEL_ERROR, "vsllink_tap_append_step, overflow\n");
+	}
+}
+
+/* Send a tap sequence to the device, and receive the answer */
+
+static int
+vsllink_tap_execute(urj_usbconn_libusb_param_t *params )
+{
+	vsllink_usbconn_data_t *data = params->data;
+	int byte_length;
+	int in_length, out_length;
+	int result;
+
+	if (data->tap_length > 0)
+	{
+		byte_length = (data->tap_length + 7) >> 3;
+
+		out_length = 0;
+		data->usb_buffer[out_length++] = USB_TO_JTAG_RAW;
+		data->usb_buffer[out_length++] = ((10 + 2 * byte_length) >> 0) & 0xFF;
+		data->usb_buffer[out_length++] = ((10 + 2 * byte_length) >> 8) & 0xFF;
+			data->usb_buffer[out_length++] = USB_TO_XXX_IN_OUT;
+			data->usb_buffer[out_length++] = ((4 + 2 * byte_length) >> 0) & 0xFF;
+			data->usb_buffer[out_length++] = ((4 + 2 * byte_length) >> 8) & 0xFF;
+			data->usb_buffer[out_length++] = (data->tap_length >>  0) & 0xFF;
+			data->usb_buffer[out_length++] = (data->tap_length >>  8) & 0xFF;
+			data->usb_buffer[out_length++] = (data->tap_length >> 16) & 0xFF;
+			data->usb_buffer[out_length++] = (data->tap_length >> 24) & 0xFF;
+			memcpy(&data->usb_buffer[out_length], data->tdi_buffer, byte_length);
+			out_length += byte_length;
+			memcpy(&data->usb_buffer[out_length], data->tms_buffer,
+				byte_length);
+			out_length += byte_length;
+		in_length = 1 + byte_length;
+		result = vsllink_usb_message(
+			params, out_length, in_length, VERSALOON_USB_TIMEOUT);
+
+		if (result == (1 + byte_length))
+		{
+			if (data->usb_buffer[0] == 0)
+			{
+				int bit_index = (data->tap_length - 1) & 7;
+				uint8_t bit = 1 << bit_index;
+
+				data->last_tdo = 
+					((data->usb_buffer[byte_length]) & bit ) ? 1 : 0;
+			}
+			else
+			{
+				urj_log(URJ_LOG_LEVEL_ERROR, 
+					"%s: tap execute failure (%d)\n",
+					__FUNCTION__, data->usb_buffer[0]);
+
+				return -2;
+			}
+		}
+		else
+		{
+			urj_log(URJ_LOG_LEVEL_ERROR, 
+				"%s: wrong result %d, expected %d\n",
+				__FUNCTION__, result, 1 + byte_length);
+
+			return -2;
+		}
+
+		data->tap_length = 0;
+	}
+	return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/* Send a message and receive the reply. */
+
+static int
+vsllink_usb_message(urj_usbconn_libusb_param_t *params,
+	int out_length, int in_length, int timeout)
+{
+	vsllink_usbconn_data_t *data = params->data;
+	int result, actual;
+
+	result = libusb_bulk_transfer (params->handle,
+										VERSALOON_OUTP,
+										data->usb_buffer,
+										out_length,
+										&actual,
+										timeout);
+	if (actual == out_length)
+	{
+		result = libusb_bulk_transfer (params->handle,
+										VERSALOON_INP,
+										data->usb_buffer,
+										data->usb_buffer_size,
+										&actual,
+										timeout);
+
+		if ((in_length == 0) || (actual == in_length))
+		{
+			return actual;
+		}
+		else
+		{
+			urj_log (URJ_LOG_LEVEL_ERROR, 
+				"usb read failure (requested=%d, result=%d)\n",
+				in_length, result);
+
+			return -1;
+		}
+	}
+	else
+	{
+		urj_log (URJ_LOG_LEVEL_ERROR, 
+			"usb write failure (requested=%d, result=%d)\n",
+			out_length, result);
+
+		return -1;
+	}
+}
+
+/* ---------------------------------------------------------------------- */
+
+static int 
+vsllink_init(urj_cable_t *cable )
+{
+	int result, in_length, out_length;
+	int retry;
+	urj_usbconn_libusb_param_t *params;
+	vsllink_usbconn_data_t *data;
+
+	params = cable->link.usb->params;
+	params->data = malloc(sizeof(vsllink_usbconn_data_t));
+	if(params->data == NULL)
+	{
+		urj_error_set (URJ_ERROR_OUT_OF_MEMORY, "malloc(%zd) fails",
+							sizeof (vsllink_usbconn_data_t));
+		return URJ_STATUS_FAIL;
+	}
+	data = params->data;
+
+	if (urj_tap_usbconn_open (cable->link.usb) != URJ_STATUS_OK)
+		return URJ_STATUS_FAIL;
+
+	// malloc temporary buffer
+	data->usb_buffer = (unsigned char *)malloc(256);
+	if (data->usb_buffer == NULL)// ack to USB_TO_JTAG_RAW | UB_TO_XXX_INIT
+	{
+		free(data);
+		data = NULL;
+		params->data = NULL;
+		urj_error_set (URJ_ERROR_OUT_OF_MEMORY, "malloc(%d) fails", 256);
+		return URJ_STATUS_FAIL;
+	}
+	data->usb_buffer_size = 256;
+
+	// disable cdc device
+	if (0 > usb_control_msg(params->handle, 
+			USB_TYPE_VENDOR | USB_RECIP_INTERFACE, 0, 0, 0, NULL, 0, 
+			VERSALOON_USB_TIMEOUT))
+	{
+		urj_log (URJ_LOG_LEVEL_ERROR, "fail to disable cdc in Versaloon\n");
+		return URJ_STATUS_FAIL;
+	}
+
+	// connect to versaloon
+	for (retry = 0; retry < 3; retry++)
+	{
+		data->usb_buffer[0] = VERSALOON_GET_INFO;
+		in_length = 0;
+		result = vsllink_usb_message(params, 1, in_length, 100);
+		if (result >= 3)
+			break;
+	}
+	if (retry == 3)
+		return URJ_STATUS_FAIL;
+
+	data->usb_buffer[in_length] = '\0';
+	data->usb_buffer_size = data->usb_buffer[0] + (data->usb_buffer[1] << 8);
+	if (data->usb_buffer_size < 64)
+		return URJ_STATUS_FAIL;
+	urj_log (URJ_LOG_LEVEL_NORMAL,"%s(buffer size %d bytes)\n",
+		&data->usb_buffer[2],data->usb_buffer_size);
+
+	// free temporary buffer and malloc new buffer
+	free(data->usb_buffer);
+	data->usb_buffer = NULL;
+	data->tap_buffer_size = data->usb_buffer_size - 32;
+	data->usb_buffer = (unsigned char *)malloc(data->usb_buffer_size);
+	data->tms_buffer = (uint8_t *)malloc(data->tap_buffer_size);
+	data->tdi_buffer = (uint8_t *)malloc(data->tap_buffer_size);
+	if ((data->usb_buffer == NULL) || (data->tms_buffer == NULL)
+		|| (data->tdi_buffer == NULL))
+	{
+		urj_error_set (URJ_ERROR_OUT_OF_MEMORY, "malloc(%d) fails", 
+			data->usb_buffer_size);
+		return URJ_STATUS_FAIL;
+	}
+
+	data->usb_buffer[0] = VERSALOON_GET_TVCC;
+	in_length = 2;
+	result = vsllink_usb_message(params, 1, in_length, 100);
+	if (result < 0)
+		return URJ_STATUS_FAIL;
+
+	out_length = 0;
+	data->usb_buffer[out_length++] = USB_TO_ALL;
+	data->usb_buffer[out_length++] = 0x24;	// cmd size = 36
+	data->usb_buffer[out_length++] = 0x00;
+		data->usb_buffer[out_length++] = USB_TO_DELAY;
+		data->usb_buffer[out_length++] = 0x05;	// cmd size = 5
+		data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x64;	// delay 100ms
+			data->usb_buffer[out_length++] = 0x80;
+		data->usb_buffer[out_length++] = USB_TO_JTAG_RAW;
+		data->usb_buffer[out_length++] = 0x0C;	// cmd size = 12
+		data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = USB_TO_XXX_INIT;
+			data->usb_buffer[out_length++] = 0x01;	// cmd size = 1
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x00;	// param = 0
+			data->usb_buffer[out_length++] = USB_TO_XXX_CONFIG;
+			data->usb_buffer[out_length++] = 0x02;	// cmd size = 2
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x01;	// default kHz = 1
+			data->usb_buffer[out_length++] = 0x00;
+		data->usb_buffer[out_length++] = USB_TO_GPIO;
+		data->usb_buffer[out_length++] = 0x10;	// cmd size = 16
+		data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = USB_TO_XXX_INIT;
+			data->usb_buffer[out_length++] = 0x01;	// cmd size = 1
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x00;	// param = 0
+			data->usb_buffer[out_length++] = USB_TO_XXX_CONFIG;
+			data->usb_buffer[out_length++] = 0x06;	// cmd size = 6
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x03;	// mask = SRST | TRST
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x02;	// TRST(o), SRST(i)
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x03;	// value = SRST | TRST
+			data->usb_buffer[out_length++] = 0x00;
+	in_length = 7;
+	result = vsllink_usb_message(params, out_length, in_length, 500);
+	if ((result < 0)
+			// ack to USB_TO_DELAY
+		|| (data->usb_buffer[0] != 0)
+			// ack to USB_TO_JTAG_RAW->UB_TO_XXX_INIT
+		|| (data->usb_buffer[1] != 0) || (data->usb_buffer[2] < 1)
+			// ack to USB_TO_JTAG_RAW->UB_TO_XXX_CONFIG
+		|| (data->usb_buffer[3] != 0)
+			// ack to USB_TO_GPIO->UB_TO_XXX_INIT
+		|| (data->usb_buffer[4] != 0) || (data->usb_buffer[5] < 1)
+			// ack to USB_TO_GPIO->UB_TO_XXX_CONFIG
+		|| (data->usb_buffer[6] != 0))
+	{
+		return URJ_STATUS_FAIL;
+	}
+
+	data->tap_length = 0;
+	urj_log (URJ_LOG_LEVEL_NORMAL, "Versaloon JTAG Interface ready\n");
+
+	return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+static void
+vsllink_done(urj_cable_t *cable)
+{
+	int result;
+	int in_length, out_length;
+	urj_usbconn_libusb_param_t *params = cable->link.usb->params;
+	vsllink_usbconn_data_t *data = params->data;
+
+	out_length = 0;
+	data->usb_buffer[out_length++] = USB_TO_ALL;
+	data->usb_buffer[out_length++] = 0x11;
+	data->usb_buffer[out_length++] = 0x00;
+		data->usb_buffer[out_length++] = USB_TO_JTAG_RAW;
+		data->usb_buffer[out_length++] = 0x07;
+		data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = USB_TO_XXX_FINI;
+			data->usb_buffer[out_length++] = 0x01;
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x00;
+		data->usb_buffer[out_length++] = USB_TO_GPIO;
+		data->usb_buffer[out_length++] = 0x07;
+		data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = USB_TO_XXX_FINI;
+			data->usb_buffer[out_length++] = 0x01;
+			data->usb_buffer[out_length++] = 0x00;
+			data->usb_buffer[out_length++] = 0x00;
+	in_length = 2;
+	result = vsllink_usb_message(params, out_length, in_length, 100);
+	if ((result < 0)
+		|| (data->usb_buffer[0] != 0) || (data->usb_buffer[1] != 0))
+	{
+		// failure, go on anyway
+	}
+
+	urj_tap_cable_generic_usbconn_done(cable);
+}
+
+static void
+vsllink_free(urj_cable_t *cable )
+{
+	urj_usbconn_libusb_param_t *params = cable->link.usb->params;
+	vsllink_usbconn_data_t *data = params->data;
+
+	if (data != NULL)
+	{
+		if (data->usb_buffer != NULL)
+		{
+			free(data->usb_buffer);
+			data->usb_buffer = NULL;
+		}
+		if (data->tms_buffer != NULL)
+		{
+			free(data->tms_buffer);
+			data->tms_buffer = NULL;
+		}
+		if (data->tdi_buffer != NULL)
+		{
+			free(data->tdi_buffer);
+			data->tdi_buffer = NULL;
+		}
+
+		free(data);
+	}
+
+	urj_tap_cable_generic_usbconn_free (cable);
+}
+
+/* ---------------------------------------------------------------------- */
+
+static void
+urj_tap_cable_vsllink_set_frequency (urj_cable_t *cable, uint32_t frequency)
+{
+	int result;
+	int in_length, out_length;
+	uint16_t kHz = frequency / 1E3;
+	urj_usbconn_libusb_param_t *params = cable->link.usb->params;
+	vsllink_usbconn_data_t *data = params->data;
+
+	out_length = 0;
+	data->usb_buffer[out_length++] = USB_TO_JTAG_RAW;
+	data->usb_buffer[out_length++] = 0x08;
+	data->usb_buffer[out_length++] = 0x00;
+		data->usb_buffer[out_length++] = USB_TO_XXX_CONFIG;
+		data->usb_buffer[out_length++] = 0x02;
+		data->usb_buffer[out_length++] = 0x00;
+		data->usb_buffer[out_length++] = (kHz >> 0) & 0xFF;
+		data->usb_buffer[out_length++] = (kHz >> 8) & 0xFF;
+	in_length = 1;
+	result = vsllink_usb_message(params, out_length, in_length, 100);
+	if ((result < 0)
+			// ack to USB_TO_JTAG_RAW->UB_TO_XXX_CONFIG
+		|| (data->usb_buffer[0] != 0))
+	{
+		urj_log(URJ_LOG_LEVEL_ERROR,
+				"Versaloon setting JTAG speed failed (%d)\n", result);
+	}
+}
+
+/* ---------------------------------------------------------------------- */
+
+static void
+vsllink_clock (urj_cable_t *cable, int tms, int tdi, int n)
+{
+	int i;
+	urj_usbconn_libusb_param_t *params = cable->link.usb->params;
+	vsllink_usbconn_data_t *data = params->data;
+
+	for (i = 0; i < n; i++)
+	{
+		vsllink_tap_append_step (data, tms, tdi);
+	}
+	vsllink_tap_execute (params);
+}
+
+/* ---------------------------------------------------------------------- */
+
+static int
+vsllink_get_tdo (urj_cable_t *cable)
+{
+	urj_usbconn_libusb_param_t *params = cable->link.usb->params;
+	vsllink_usbconn_data_t *data = params->data;
+
+	return data->last_tdo;
+}
+
+/* ---------------------------------------------------------------------- */
+
+static void
+vsllink_copy_out_data (vsllink_usbconn_data_t *data, int len, int offset,
+							char *buf)
+{
+	int i;
+	for (i = 0; i < len; i++)
+	{
+		int bit = (1 << (i & 7));
+		int byte = i >> 3;
+		buf[offset + i] = (data->usb_buffer[1 + byte] & bit) ? 1 : 0;
+	}
+}
+
+static int
+vsllink_transfer (urj_cable_t *cable, int len, const char *in, char *out)
+{
+	int i,j;
+	urj_usbconn_libusb_param_t *params = cable->link.usb->params;
+	vsllink_usbconn_data_t *data = params->data;
+
+	for(j=0, i=0; i<len; i++)
+	{
+		vsllink_tap_append_step(data, 0, in[i]);
+
+		if(data->tap_length >= 8 * data->tap_buffer_size)
+		{
+			vsllink_tap_execute(params);
+			if(out)
+				vsllink_copy_out_data(data, i - j, j, out);
+			j = i;
+		}
+	}
+	if(data->tap_length > 0)
+	{
+		vsllink_tap_execute(params);
+		if(out)
+			vsllink_copy_out_data(data, i - j, j, out);
+	}
+	
+	return i;
+}
+
+/* ---------------------------------------------------------------------- */
+
+static int
+vsllink_set_signal (urj_cable_t *cable, int mask, int val)
+{
+	return 1;
+}
+
+const urj_cable_driver_t urj_tap_cable_vsllink_driver = {
+	"vsllink",
+	N_("Versaloon Link -- http://www.versaloon.com.";),
+	URJ_CABLE_DEVICE_USB,
+	{ .usb = urj_tap_cable_generic_usbconn_connect, },
+	urj_tap_cable_generic_disconnect,
+	vsllink_free,
+	vsllink_init,
+	vsllink_done,
+	urj_tap_cable_vsllink_set_frequency,
+	vsllink_clock,
+	vsllink_get_tdo,
+	vsllink_transfer,
+	vsllink_set_signal,
+	urj_tap_cable_generic_get_signal,
+	urj_tap_cable_generic_flush_using_transfer,
+	urj_tap_cable_generic_usbconn_help
+};
+URJ_DECLARE_USBCONN_CABLE(0x0483, 0x5740, "libusb", "vsllink", vsllink)
diff -urN orig/urjtag/src/tap/cable_list.h urjtag/urjtag/src/tap/cable_list.h
--- orig/urjtag/src/tap/cable_list.h	2010-08-17 19:17:50.315413549 +0800
+++ urjtag/urjtag/src/tap/cable_list.h	2010-08-19 01:25:26.572542247 +0800
@@ -105,5 +105,8 @@
 _URJ_CABLE(xpc_ext)
 _URJ_CABLE(xpc_int)
 #endif
+#ifdef ENABLE_CABLE_VSLLINK
+_URJ_CABLE(vsllink)
+#endif
 
 #undef _URJ_CABLE
diff -urN orig/urjtag/src/tap/Makefile.am urjtag/urjtag/src/tap/Makefile.am
--- orig/urjtag/src/tap/Makefile.am	2010-08-17 19:17:50.325397220 +0800
+++ urjtag/urjtag/src/tap/Makefile.am	2010-08-19 01:23:52.192541438 +0800
@@ -139,6 +139,11 @@
 	cable/ice100.c
 endif
 
+if ENABLE_CABLE_VSLLINK
+libtap_la_SOURCES += \
+	cable/vsllink.c
+endif
+
 if HAVE_LIBUSB
 libtap_la_SOURCES += \
 	usbconn/libusb.c \
------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
UrJTAG-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/urjtag-development

Reply via email to