📄 ft2232.c
字号:
params->last_tdo_valid = last_tdo_valid_finish = 0; } case CABLE_GET_TRST: { int m = cable_add_queue_item( cable, &(cable->done) ); cable->done.data[m].action = CABLE_GET_TRST; cable->done.data[m].arg.value.trst = 1; break; } case CABLE_TRANSFER: { int r = ft2232_transfer_finish( cable, cable->todo.data[j].arg.transfer.len, cable->todo.data[j].arg.transfer.out ); last_tdo_valid_finish = params->last_tdo_valid; free( cable->todo.data[j].arg.transfer.in ); if (cable->todo.data[j].arg.transfer.out) { int m = cable_add_queue_item( cable, &(cable->done) ); if (m < 0) printf("out of memory!\n"); cable->done.data[m].action = CABLE_TRANSFER; cable->done.data[m].arg.xferred.len = cable->todo.data[j].arg.transfer.len; cable->done.data[m].arg.xferred.res = r; cable->done.data[m].arg.xferred.out = cable->todo.data[j].arg.transfer.out; } } default: break; } j++; if (j >= cable->todo.max_items) j = 0; cable->todo.num_items--; } cable->todo.next_item = i; }}static intft2232_connect( char *params[], cable_t *cable ){ params_t *cable_params; int result; /* perform generic_usbconn_connect */ if ( ( result = generic_usbconn_connect( params, cable ) ) != 0 ) return result; cable_params = (params_t *)malloc( sizeof(params_t) ); if (!cable_params) { printf( _("%s(%d) malloc failed!\n"), __FILE__, __LINE__); /* NOTE: * Call the underlying usbport driver (*free) routine directly * not generic_usbconn_free() since it also free's cable->params * (which is not established) and cable (which the caller will do) */ cable->link.usb->driver->free( cable->link.usb ); return 4; } cable_params->mpsse_frequency = 0; cable_params->last_tdo_valid = 0; cx_cmd_init( &(cable_params->cmd_root) ); /* exchange generic cable parameters with our private parameter set */ free( cable->params ); cable->params = cable_params; return 0;}static voidft2232_cable_free( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_deinit( &(params->cmd_root) ); generic_usbconn_free( cable );}usbconn_cable_t usbconn_cable_ft2232_ftdi;usbconn_cable_t usbconn_cable_armusbocd_ftdi;usbconn_cable_t usbconn_cable_gnice_ftdi;usbconn_cable_t usbconn_cable_jtagkey_ftdi;usbconn_cable_t usbconn_cable_oocdlinks_ftdi;usbconn_cable_t usbconn_cable_turtelizer2_ftdi;usbconn_cable_t usbconn_cable_usbtojtagif_ftdi;usbconn_cable_t usbconn_cable_signalyzer_ftdi;static voidft2232_usbcable_help( const char *cablename ){ usbconn_cable_t *conn; conn = &usbconn_cable_armusbocd_ftdi; if (strcasecmp( conn->name, cablename ) == 0) goto found; conn = &usbconn_cable_gnice_ftdi; if (strcasecmp( conn->name, cablename ) == 0) goto found; conn = &usbconn_cable_jtagkey_ftdi; if (strcasecmp( conn->name, cablename ) == 0) goto found; conn = &usbconn_cable_oocdlinks_ftdi; if (strcasecmp( conn->name, cablename ) == 0) goto found; conn = &usbconn_cable_turtelizer2_ftdi; if (strcasecmp( conn->name, cablename ) == 0) goto found; conn = &usbconn_cable_usbtojtagif_ftdi; if (strcasecmp( conn->name, cablename ) == 0) goto found; conn = &usbconn_cable_signalyzer_ftdi; if (strcasecmp( conn->name, cablename ) == 0) goto found; conn = &usbconn_cable_ft2232_ftdi;found: printf( _( "Usage: cable %s [vid=VID] [pid=PID] [desc=DESC] [driver=DRIVER]\n" "\n" "VID vendor ID (hex), defaults to %04X\n" "PID product ID (hex), defaults to %04X\n" "DESC Some string to match in description or serial no.\n" "DRIVER usbconn driver, either ftdi-mpsse or ftd2xx-mpsse\n" " defaults to %s if not specified\n" "\n" ), cablename, conn->vid, conn->pid, DEFAULT_DRIVER );}cable_driver_t ft2232_cable_driver = { "FT2232", N_("Generic FTDI FT2232 Cable"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_generic_init, ft2232_generic_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_ft2232_ftdi = { "FT2232", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x0000, /* VID */ 0x0000 /* PID */};usbconn_cable_t usbconn_cable_ft2232_ftd2xx = { "FT2232", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x0000, /* VID */ 0x0000 /* PID */};cable_driver_t ft2232_armusbocd_cable_driver = { "ARM-USB-OCD", N_("Olimex ARM-USB-OCD (FT2232) Cable"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_armusbocd_init, ft2232_armusbocd_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_armusbocd_ftdi = { "ARM-USB-OCD", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x15BA, /* VID */ 0x0003 /* PID */};usbconn_cable_t usbconn_cable_armusbocd_ftd2xx = { "ARM-USB-OCD", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x15BA, /* VID */ 0x0003 /* PID */};cable_driver_t ft2232_gnice_cable_driver = { "gnICE", N_("Analog Devices Blackfin gnICE (FT2232) Cable (EXPERIMENTAL)"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_gnice_init, ft2232_gnice_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_gnice_ftdi = { "gnICE", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x0456, /* VID */ 0xF000 /* PID */};usbconn_cable_t usbconn_cable_gnice_ftd2xx = { "gnICE", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x0456, /* VID */ 0xF000 /* PID */};cable_driver_t ft2232_jtagkey_cable_driver = { "JTAGkey", N_("Amontec JTAGkey (FT2232) Cable"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_jtagkey_init, ft2232_jtagkey_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_jtagkey_ftdi = { "JTAGkey", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x0403, /* VID */ 0xCFF8 /* PID */};usbconn_cable_t usbconn_cable_jtagkey_ftd2xx = { "JTAGkey", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x0403, /* VID */ 0xCFF8 /* PID */};cable_driver_t ft2232_oocdlinks_cable_driver = { "OOCDLink-s", N_("OOCDLink-s (FT2232) Cable (EXPERIMENTAL)"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_oocdlinks_init, ft2232_oocdlinks_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_oocdlinks_ftdi = { "OOCDLink-s", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x0403, /* VID */ 0xbaf8 /* PID */};usbconn_cable_t usbconn_cable_oocdlinks_ftd2xx = { "OOCDLink-s", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x0403, /* VID */ 0xbaf8 /* PID */};cable_driver_t ft2232_turtelizer2_cable_driver = { "Turtelizer2", N_("Turtelizer 2 Rev. B (FT2232) Cable (EXPERIMENTAL)"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_turtelizer2_init, ft2232_turtelizer2_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_turtelizer2_ftdi = { "Turtelizer2", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x0403, /* VID */ 0xBDC8 /* PID */};usbconn_cable_t usbconn_cable_turtelizer2_ftd2xx = { "Turtelizer2", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x0403, /* VID */ 0xBDC8 /* PID */};cable_driver_t ft2232_usbtojtagif_cable_driver = { "USB-to-JTAG-IF", N_("USB to JTAG Interface (FT2232) Cable (EXPERIMENTAL)"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_usbtojtagif_init, ft2232_usbtojtagif_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_usbtojtagif_ftdi = { "USB-to-JTAG-IF", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x0000, /* VID */ 0x0000 /* PID */};usbconn_cable_t usbconn_cable_usbtojtagif_ftd2xx = { "USB-to-JTAG-IF", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x0000, /* VID */ 0x0000 /* PID */};cable_driver_t ft2232_signalyzer_cable_driver = { "Signalyzer", N_("Xverve DT-USB-ST Signalyzer Tool (FT2232) Cable (EXPERIMENTAL)"), ft2232_connect, generic_disconnect, ft2232_cable_free, ft2232_signalyzer_init, ft2232_signalyzer_done, ft2232_set_frequency, ft2232_clock, ft2232_get_tdo, ft2232_transfer, ft2232_set_trst, generic_get_trst, ft2232_flush, ft2232_usbcable_help};usbconn_cable_t usbconn_cable_signalyzer_ftdi = { "Signalyzer", /* cable name */ NULL, /* string pattern, not used */ "ftdi-mpsse", /* default usbconn driver */ 0x0000, /* VID */ 0x0000 /* PID */};usbconn_cable_t usbconn_cable_signalyzer_ftd2xx = { "Signalyzer", /* cable name */ NULL, /* string pattern, not used */ "ftd2xx-mpsse", /* default usbconn driver */ 0x0000, /* VID */ 0x0000 /* PID */};/* Local Variables: mode:C c-default-style:gnu indent-tabs-mode:nil End:*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -