⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generic_usbconn.c

📁 UrJTAG package is free software, covered by the GNU General Public License, and you are welcome to
💻 C
字号:
/* * $Id: generic_usbconn.c 1287 2008-06-24 08:16:51Z jiez $ * * Copyright (C) 2003 ETC s.r.o. * * 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. * * Written by Marcel Telka <marcel@telka.sk>, 2003. * */#include "sysdep.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include "cable.h"#include "chain.h"#include "generic.h"#include "generic_usbconn.h"#include <cmd.h>#undef VERBOSE#ifdef ENABLE_CABLE_XPCextern usbconn_cable_t usbconn_cable_xpc_int;extern usbconn_cable_t usbconn_cable_xpc_ext;#endif#ifdef ENABLE_CABLE_JLINKextern usbconn_cable_t usbconn_cable_jlink;#endif#ifdef ENABLE_CABLE_FT2232#ifdef ENABLE_LOWLEVEL_FTD2XXextern usbconn_cable_t usbconn_cable_ft2232_ftd2xx;extern usbconn_cable_t usbconn_cable_armusbocd_ftd2xx;extern usbconn_cable_t usbconn_cable_gnice_ftd2xx;extern usbconn_cable_t usbconn_cable_jtagkey_ftd2xx;extern usbconn_cable_t usbconn_cable_oocdlinks_ftd2xx;extern usbconn_cable_t usbconn_cable_turtelizer2_ftd2xx;extern usbconn_cable_t usbconn_cable_usbtojtagif_ftd2xx;extern usbconn_cable_t usbconn_cable_signalyzer_ftd2xx;#endif#ifdef ENABLE_LOWLEVEL_FTDIextern usbconn_cable_t usbconn_cable_ft2232_ftdi;extern usbconn_cable_t usbconn_cable_armusbocd_ftdi;extern usbconn_cable_t usbconn_cable_gnice_ftdi;extern usbconn_cable_t usbconn_cable_jtagkey_ftdi;extern usbconn_cable_t usbconn_cable_oocdlinks_ftdi;extern usbconn_cable_t usbconn_cable_turtelizer2_ftdi;extern usbconn_cable_t usbconn_cable_usbtojtagif_ftdi;extern usbconn_cable_t usbconn_cable_signalyzer_ftdi;#endif#endif#ifdef ENABLE_CABLE_USBBLASTER#ifdef ENABLE_LOWLEVEL_FTD2XXextern usbconn_cable_t usbconn_cable_usbblaster_ftd2xx;extern usbconn_cable_t usbconn_cable_cubic_cyclonium_ftd2xx;extern usbconn_cable_t usbconn_cable_nios_eval_ftd2xx;extern usbconn_cable_t usbconn_cable_usb_jtag_ftd2xx;#endif#ifdef ENABLE_LOWLEVEL_FTDIextern usbconn_cable_t usbconn_cable_usbblaster_ftdi;extern usbconn_cable_t usbconn_cable_cubic_cyclonium_ftdi;extern usbconn_cable_t usbconn_cable_nios_eval_ftdi;extern usbconn_cable_t usbconn_cable_usb_jtag_ftdi;#endif#endifusbconn_cable_t *usbconn_cables[] ={#ifdef ENABLE_CABLE_XPC	&usbconn_cable_xpc_int,	&usbconn_cable_xpc_ext,#endif#ifdef ENABLE_CABLE_JLINK	&usbconn_cable_jlink,#endif#ifdef ENABLE_CABLE_FT2232#ifdef ENABLE_LOWLEVEL_FTD2XX	&usbconn_cable_ft2232_ftd2xx,	&usbconn_cable_armusbocd_ftd2xx,	&usbconn_cable_gnice_ftd2xx,	&usbconn_cable_jtagkey_ftd2xx,	&usbconn_cable_oocdlinks_ftd2xx,	&usbconn_cable_turtelizer2_ftd2xx,	&usbconn_cable_usbtojtagif_ftd2xx,	&usbconn_cable_signalyzer_ftd2xx,#endif#ifdef ENABLE_LOWLEVEL_FTDI	&usbconn_cable_ft2232_ftdi,	&usbconn_cable_armusbocd_ftdi,	&usbconn_cable_gnice_ftdi,	&usbconn_cable_jtagkey_ftdi,	&usbconn_cable_oocdlinks_ftdi,	&usbconn_cable_turtelizer2_ftdi,	&usbconn_cable_usbtojtagif_ftdi,	&usbconn_cable_signalyzer_ftdi,#endif#endif#ifdef ENABLE_CABLE_USBBLASTER#ifdef ENABLE_LOWLEVEL_FTD2XX	&usbconn_cable_usbblaster_ftd2xx,	&usbconn_cable_cubic_cyclonium_ftd2xx,	&usbconn_cable_nios_eval_ftd2xx,	&usbconn_cable_usb_jtag_ftd2xx,#endif#ifdef ENABLE_LOWLEVEL_FTDI	&usbconn_cable_usbblaster_ftdi,	&usbconn_cable_cubic_cyclonium_ftdi,	&usbconn_cable_nios_eval_ftdi,	&usbconn_cable_usb_jtag_ftdi,#endif#endif	NULL};intgeneric_usbconn_connect( char *params[], cable_t *cable ){	usbconn_cable_t user_specified = {		NULL,	/* no name */		NULL,	/* no string pattern */		NULL,	/* no specific driver */		-1,		/* no VID */		-1,		/* no PID */	};	int paramc = cmd_params( params );	generic_params_t *cable_params;	usbconn_t *conn = NULL;	int i;	if(strcasecmp(params[0], "usb") != 0)	{		user_specified.name = params[0];	}	/* parse arguments beyond the cable name */	for (i = 1; i < paramc; i++)	{		if(strncasecmp("pid=", params[i], 4) == 0)		{			user_specified.pid = strtol( params[i] + 4, NULL, 16 );		}		else if(strncasecmp("vid=", params[i], 4) == 0)		{			user_specified.vid = strtol( params[i] + 4, NULL, 16 );		}		else if(strncasecmp("desc=", params[i], 5) == 0)		{			user_specified.desc = params[i] + 5;		}		else if(strncasecmp("driver=", params[i], 7) == 0)		{			user_specified.driver = params[i] + 7;		}	}	/* search usbconn driver list */	for (i = 0; usbconn_drivers[i] && !conn; i++)	{		if ((user_specified.driver == NULL)			|| (strcasecmp(user_specified.driver, usbconn_drivers[i]->type) == 0))		{			int j;			/* search cable list */			for (j = 0; usbconn_cables[j] && !conn; j++)			{				if((user_specified.name == NULL)					|| (strcasecmp(user_specified.name, usbconn_cables[j]->name) == 0))				{					if(strcasecmp(usbconn_cables[j]->driver, usbconn_drivers[i]->type) == 0)					{						usbconn_cable_t cable_try = *(usbconn_cables[j]);						if(user_specified.vid >= 0)  cable_try.vid  = user_specified.vid;						if(user_specified.pid >= 0)  cable_try.pid  = user_specified.pid;						if(user_specified.desc != 0) cable_try.desc = user_specified.desc;						conn = usbconn_drivers[i]->connect( (const char **) &params[1],							paramc - 1, &cable_try );					}				}			}		}	}	if (!conn) {		printf( _("Couldn't connect to suitable USB device.\n") );		return 2;	}	cable_params = malloc( sizeof(generic_params_t) );	if (!cable_params) {		printf( _("%s(%d) malloc failed!\n"), __FILE__, __LINE__);		usbconn_drivers[i]->free( conn );		return 4;	}	cable->link.usb = conn;	cable->params = cable_params;	cable->chain = NULL;	return 0;}voidgeneric_usbconn_free( cable_t *cable ){	cable->link.usb->driver->free( cable->link.usb );	free( cable->params );	free( cable );}voidgeneric_usbconn_done( cable_t *cable ){	usbconn_close( cable->link.usb );}voidgeneric_usbconn_help( const char *cablename ){	printf( _(		"Usage: cable %s [vid=VID] [pid=PID] [desc=DESC] [...]\n"		"\n"		"VID        USB Device Vendor ID (hex, e.g. 0abc)\n"		"PID        USB Device Product ID (hex, e.g. 0abc)\n"		"DESC       Some string to match in description or serial no.\n"		"\n"	),    cablename     );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -