1
0

Add support for different interfaces on FTDI chips.

Signed-off-by: Michal Demin <michaldemin@gmail.com>
This commit is contained in:
Michal Demin 2011-01-10 14:54:10 +01:00 committed by Michael Gernoth
parent 47661cecc5
commit 6615630635
4 changed files with 34 additions and 4 deletions

View File

@ -23,6 +23,7 @@ static void read_config() {
#ifdef JTAGKEY
char *pbuf;
unsigned short vid, pid;
unsigned short iface;
int line, len, num;
#endif
@ -152,7 +153,7 @@ static void read_config() {
pbuf = buf + i;
for (; i < len; i++) {
if (buf[i] == ' ' || buf[i] == '\t')
if (buf[i] == ' ' || buf[i] == '\t' || buf[i] == ':')
break;
}
@ -163,9 +164,16 @@ static void read_config() {
continue;
}
iface = 0;
pbuf = buf + i;
if (pbuf[0] == ':') {
iface = atoi(pbuf + 1);
}
pp_config[num].real = 0;
pp_config[num].usb_vid = vid;
pp_config[num].usb_pid = pid;
pp_config[num].usb_iface = iface;
pp_config[num].open = jtagkey_open;
pp_config[num].close = jtagkey_close;
pp_config[num].transfer = jtagkey_transfer;
@ -243,3 +251,20 @@ unsigned short config_usb_pid(int num) {
return ret;
}
unsigned short config_usb_iface(int num) {
unsigned short ret = 0x00;
int i;
read_config();
for (i=0; i<sizeof(pp_config)/sizeof(struct parport_config); i++) {
if (pp_config[i].num == num) {
ret = pp_config[i].usb_iface;
break;
}
}
return ret;
}

View File

@ -4,6 +4,7 @@ struct parport_config {
unsigned char real;
unsigned short usb_vid;
unsigned short usb_pid;
unsigned short usb_iface;
int (*open) (int num);
void (*close) (int handle);
int (*transfer) (WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, int ecpbase, int num);
@ -13,3 +14,4 @@ struct parport_config __attribute__ ((visibility ("hidden"))) *config_get(int nu
unsigned char __attribute__ ((visibility ("hidden"))) config_is_real_pport(int num);
unsigned short __attribute__ ((visibility ("hidden"))) config_usb_vid(int num);
unsigned short __attribute__ ((visibility ("hidden"))) config_usb_pid(int num);
unsigned short __attribute__ ((visibility ("hidden"))) config_usb_iface(int num);

View File

@ -32,7 +32,7 @@ static int jtagkey_latency(int latency) {
return ret;
}
static int jtagkey_init(unsigned short vid, unsigned short pid) {
static int jtagkey_init(unsigned short vid, unsigned short pid, unsigned short iface) {
int ret = 0;
unsigned char c;
@ -51,7 +51,7 @@ static int jtagkey_init(unsigned short vid, unsigned short pid) {
return ret;
}
if ((ret = ftdi_set_interface(&ftdic, INTERFACE_A)) != 0) {
if ((ret = ftdi_set_interface(&ftdic, iface)) != 0) {
fprintf(stderr, "unable to set interface: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));
return ret;
}
@ -93,7 +93,7 @@ static int jtagkey_init(unsigned short vid, unsigned short pid) {
int jtagkey_open(int num) {
int ret;
ret = jtagkey_init(config_usb_vid(num), config_usb_pid(num));
ret = jtagkey_init(config_usb_vid(num), config_usb_pid(num), config_usb_iface(num));
if (ret >= 0)
ret = 0xff;

View File

@ -4,3 +4,6 @@
# Amontec Jtagkey
LPT2 = FTDI:0403:cff8
# Dangerous Prototypes Bus Blaster v2
LPT3 = FTDI:0403:6010:2