1
0

make it possible to specify the USB bus

document the usage for multiple cables
This commit is contained in:
Michael Gernoth 2007-08-26 13:56:47 +02:00
parent d377df04c9
commit 3a2a22bc86
2 changed files with 41 additions and 10 deletions

8
README
View File

@ -74,6 +74,14 @@ these steps:
4. restart udev and re-plug the cable
If you have multiple cables connected, you can specify the cable to use
in the XILINX_USB_DEV environment-variable as "bus:device".
These identifiers are available in the output of lsusb:
Bus 001 Device 004: ID 03fd:0008 Xilinx, Inc.
^^^ ^^^
To use this cable, set the XILINX_USB_DEV variable to "001:004".
Notes for the parallel cable
============================

View File

@ -466,9 +466,8 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
{
struct event *e = (struct event*)(wdheader->data);
struct usb_bus *bus;
char* device_num;
char* remainder;
int devnum = -1;
char* devpos;
int busnum = -1, devnum = -1;
int i;
DPRINTF("handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n",
@ -480,14 +479,35 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
e->u.Usb.dwUniqueID, e->dwEventVer,
e->dwNumMatchTables);
device_num=getenv("XILINX_USB_DEVNUM");
if (device_num!=NULL) {
DPRINTF("XILINX_USB_BUS=%s\n",device_num);
devnum=strtol(device_num,&remainder,10);
if (device_num==remainder) /* no integer in env variable */
devnum=-1;
}
devpos = getenv("XILINX_USB_DEV");
if (devpos != NULL) {
int j;
char *devstr = NULL, *remainder;
DPRINTF("XILINX_USB_DEV=%s\n", devpos);
for (j = 0; j < strlen(devpos) && devpos[j] != 0; j++) {
if (devpos[j] == ':') {
devpos[j] = 0;
devstr = &(devpos[j+1]);
}
}
if (devstr && strlen(devstr) > 0) {
busnum = strtol(devpos, &remainder, 10);
if (devpos == remainder) {
busnum = -1;
} else {
devnum = strtol(devstr, &remainder, 10);
if (devstr == remainder) {
devnum = -1;
} else {
fprintf(stderr,"Using XILINX platform cable USB at %03d:%03d\n",
busnum, devnum);
}
}
}
}
for (i = 0; i < e->dwNumMatchTables; i++) {
@ -503,6 +523,9 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
for (bus = busses; bus; bus = bus->next) {
struct usb_device *dev;
if ((devnum != -1) && (strtol(bus->dirname, NULL, 10) != busnum))
continue;
for (dev = bus->devices; dev; dev = dev->next) {
struct usb_device_descriptor *desc = &(dev->descriptor);