Submitted by Grygoriy Fuchedzhy:

bug #31779: Add support for addressing usbtinyisp with -P option
* usbtiny.c (usbtiny_open): Add logic to distinguish multiple USBtinyISP
programmers by their bus:device tuple.
* doc/avrdude.texi: Document the new functionality.
* avrdude.1: (Ditto.)




git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@974 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
joerg_wunsch
2011-08-17 15:24:09 +00:00
parent 317351e8df
commit 4ef2350350
4 changed files with 73 additions and 7 deletions

View File

@@ -36,6 +36,7 @@
#include "avrdude.h"
#include "avr.h"
#include "pgm.h"
#include "config.h"
#include "usbtiny.h"
#if defined(HAVE_LIBUSB) // we use LIBUSB to talk to the board
@@ -196,6 +197,22 @@ static int usbtiny_open(PROGRAMMER* pgm, char* name)
{
struct usb_bus *bus;
struct usb_device *dev = 0;
char *bus_name;
char *dev_name = NULL;
// if no -P was given or '-P usb' was given
if(name == default_parallel || strcmp(name, "usb") == 0)
name = NULL;
else {
// calculate bus and device names from -P option
const size_t usb_len = strlen("usb");
if(strncmp(name, "usb", usb_len) == 0 && ':' == name[usb_len]) {
bus_name = name + usb_len + 1;
dev_name = strchr(bus_name, ':');
if(NULL != dev_name)
*dev_name++ = '\0';
}
}
usb_init(); // initialize the libusb system
usb_find_busses(); // have libusb scan all the usb busses available
@@ -208,7 +225,14 @@ static int usbtiny_open(PROGRAMMER* pgm, char* name)
for ( dev = bus->devices; dev; dev = dev->next ) {
if (dev->descriptor.idVendor == USBTINY_VENDOR
&& dev->descriptor.idProduct == USBTINY_PRODUCT ) { // found match?
if(verbose)
printf("avrdude: usbdev_open(): Found USBtinyISP, bus:device: %s:%s\n", bus->dirname, dev->filename);
// if -P was given, match device by device name and bus name
if(name != NULL &&
(NULL == dev_name ||
strcmp(bus->dirname, bus_name) ||
strcmp(dev->filename, dev_name)))
continue;
PDATA(pgm)->usb_handle = usb_open(dev); // attempt to connect to device
// wrong permissions or something?
@@ -221,6 +245,11 @@ static int usbtiny_open(PROGRAMMER* pgm, char* name)
}
}
if(NULL != name && NULL == dev_name) {
fprintf(stderr, "%s: Error: Invalid -P value: '%s'\n", progname, name);
fprintf(stderr, "%sUse -P usb:bus:device\n", progbuf);
return -1;
}
if (!PDATA(pgm)->usb_handle) {
fprintf( stderr, "%s: Error: Could not find USBtiny device (0x%x/0x%x)\n",
progname, USBTINY_VENDOR, USBTINY_PRODUCT );