Add support for different interfaces on FTDI chips.
Signed-off-by: Michal Demin <michaldemin@gmail.com>
This commit is contained in:
parent
47661cecc5
commit
6615630635
27
config.c
27
config.c
@ -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;
|
||||
}
|
||||
|
||||
|
2
config.h
2
config.h
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -4,3 +4,6 @@
|
||||
|
||||
# Amontec Jtagkey
|
||||
LPT2 = FTDI:0403:cff8
|
||||
# Dangerous Prototypes Bus Blaster v2
|
||||
LPT3 = FTDI:0403:6010:2
|
||||
|
||||
|
Reference in New Issue
Block a user