mirror of
https://github.com/mariusgreuel/avrdude.git
synced 2025-09-27 14:35:27 +00:00
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:
31
usbtiny.c
31
usbtiny.c
@@ -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 );
|
||||
|
Reference in New Issue
Block a user