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:
parent
317351e8df
commit
4ef2350350
|
@ -1,3 +1,12 @@
|
||||||
|
2011-08-17 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
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.)
|
||||||
|
|
||||||
2011-08-16 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
2011-08-16 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
Submitted by Timon Van Overveldt:
|
Submitted by Timon Van Overveldt:
|
||||||
|
|
10
avrdude.1
10
avrdude.1
|
@ -1,6 +1,6 @@
|
||||||
.\"
|
.\"
|
||||||
.\" avrdude - A Downloader/Uploader for AVR device programmers
|
.\" avrdude - A Downloader/Uploader for AVR device programmers
|
||||||
.\" Copyright (C) 2001, 2002, 2003, 2005 - 2010 Joerg Wunsch
|
.\" Copyright (C) 2001, 2002, 2003, 2005 - 2011 Joerg Wunsch
|
||||||
.\"
|
.\"
|
||||||
.\" This program is free software; you can redistribute it and/or modify
|
.\" This program is free software; you can redistribute it and/or modify
|
||||||
.\" it under the terms of the GNU General Public License as published by
|
.\" it under the terms of the GNU General Public License as published by
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
.\"
|
.\"
|
||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.Dd DATE January 14, 2010
|
.Dd DATE August 17, 2011
|
||||||
.Os
|
.Os
|
||||||
.Dt AVRDUDE 1
|
.Dt AVRDUDE 1
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -511,6 +511,12 @@ be specified as
|
||||||
Libusb support is required on Unix but not on Windows. For more
|
Libusb support is required on Unix but not on Windows. For more
|
||||||
information about AVR-Doper see http://www.obdev.at/avrusb/avrdoper.html.
|
information about AVR-Doper see http://www.obdev.at/avrusb/avrdoper.html.
|
||||||
.Pp
|
.Pp
|
||||||
|
For the USBtinyISP, which is a simplicistic device not implementing
|
||||||
|
serial numbers, multiple devices can be distinguished by their
|
||||||
|
location in the USB hierarchy. See the the respective
|
||||||
|
.Em Troubleshooting
|
||||||
|
entry in the detailed documentation for examples.
|
||||||
|
.Pp
|
||||||
For programmers that attach to a serial port using some kind of
|
For programmers that attach to a serial port using some kind of
|
||||||
higher level protocol (as opposed to bit-bang style programmers),
|
higher level protocol (as opposed to bit-bang style programmers),
|
||||||
.Ar port
|
.Ar port
|
||||||
|
|
|
@ -30,7 +30,7 @@ For avrdude version @value{VERSION}, @value{UPDATED}.
|
||||||
|
|
||||||
Copyright @copyright{} 2003, 2005 Brian Dean
|
Copyright @copyright{} 2003, 2005 Brian Dean
|
||||||
|
|
||||||
Copyright @copyright{} 2006 - 2010 J@"org Wunsch
|
Copyright @copyright{} 2006 - 2011 J@"org Wunsch
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of
|
Permission is granted to make and distribute verbatim copies of
|
||||||
this manual provided the copyright notice and this permission notice
|
this manual provided the copyright notice and this permission notice
|
||||||
|
@ -707,6 +707,11 @@ be specified as @var{avrdoper}. Libusb support is required on Unix
|
||||||
but not on Windows. For more information about AVR-Doper see
|
but not on Windows. For more information about AVR-Doper see
|
||||||
@url{http://www.obdev.at/avrusb/avrdoper.html}.
|
@url{http://www.obdev.at/avrusb/avrdoper.html}.
|
||||||
|
|
||||||
|
For the USBtinyISP, which is a simplicistic device not implementing
|
||||||
|
serial numbers, multiple devices can be distinguished by their
|
||||||
|
location in the USB hierarchy.
|
||||||
|
@xref{Troubleshooting} for examples.
|
||||||
|
|
||||||
For programmers that attach to a serial port using some kind of
|
For programmers that attach to a serial port using some kind of
|
||||||
higher level protocol (as opposed to bit-bang style programmers),
|
higher level protocol (as opposed to bit-bang style programmers),
|
||||||
@var{port} can be specified as @code{net}:@var{host}:@var{port}.
|
@var{port} can be specified as @code{net}:@var{host}:@var{port}.
|
||||||
|
@ -2324,9 +2329,26 @@ The pin mapping for the JTAG-to-ISP adapter is:
|
||||||
Problem: Multiple USBasp or USBtinyISP programmers connected simultaneously are not
|
Problem: Multiple USBasp or USBtinyISP programmers connected simultaneously are not
|
||||||
found.
|
found.
|
||||||
|
|
||||||
Solution: none at this time. The simplicity of these programmers
|
Solution: The USBtinyISP code supports distinguishing multiple
|
||||||
doesn't offer a method to distinguish multiple programmers that are
|
programmers based on their bus:device connection tuple that describes
|
||||||
connected simultaneously, so effectively only one of them is supported.
|
their place in the USB hierarchy on a specific host. This tuple can
|
||||||
|
be added to the @var{-P usb} option, similar to adding a serial number
|
||||||
|
on other USB-based programmers.
|
||||||
|
|
||||||
|
The actual naming convention for the bus and device names is
|
||||||
|
operating-system dependant; AVRDUDE will print out what it found
|
||||||
|
on the bus when running it with (at least) one @var{-v} option.
|
||||||
|
By specifying a string that cannot match any existing device
|
||||||
|
(for example, @var{-P usb:xxx}), the scan will list all possible
|
||||||
|
candidate devices found on the bus.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
@example
|
||||||
|
avrdude -c usbtiny -p atmega8 -P usb:003:025 (Linux)
|
||||||
|
avrdude -c usbtiny -p atmega8 -P usb:/dev/usb:/dev/ugen1.3 (FreeBSD 8+)
|
||||||
|
avrdude -c usbtiny -p atmega8 \
|
||||||
|
-P usb:bus-0/\\.\libusb0-0001--0x1781-0x0c9f (Windows)
|
||||||
|
@end example
|
||||||
|
|
||||||
@item
|
@item
|
||||||
Problem: I cannot do @dots{} when the target is in debugWire mode.
|
Problem: I cannot do @dots{} when the target is in debugWire mode.
|
||||||
|
|
31
usbtiny.c
31
usbtiny.c
|
@ -36,6 +36,7 @@
|
||||||
#include "avrdude.h"
|
#include "avrdude.h"
|
||||||
#include "avr.h"
|
#include "avr.h"
|
||||||
#include "pgm.h"
|
#include "pgm.h"
|
||||||
|
#include "config.h"
|
||||||
#include "usbtiny.h"
|
#include "usbtiny.h"
|
||||||
|
|
||||||
#if defined(HAVE_LIBUSB) // we use LIBUSB to talk to the board
|
#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_bus *bus;
|
||||||
struct usb_device *dev = 0;
|
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_init(); // initialize the libusb system
|
||||||
usb_find_busses(); // have libusb scan all the usb busses available
|
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 ) {
|
for ( dev = bus->devices; dev; dev = dev->next ) {
|
||||||
if (dev->descriptor.idVendor == USBTINY_VENDOR
|
if (dev->descriptor.idVendor == USBTINY_VENDOR
|
||||||
&& dev->descriptor.idProduct == USBTINY_PRODUCT ) { // found match?
|
&& 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
|
PDATA(pgm)->usb_handle = usb_open(dev); // attempt to connect to device
|
||||||
|
|
||||||
// wrong permissions or something?
|
// 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) {
|
if (!PDATA(pgm)->usb_handle) {
|
||||||
fprintf( stderr, "%s: Error: Could not find USBtiny device (0x%x/0x%x)\n",
|
fprintf( stderr, "%s: Error: Could not find USBtiny device (0x%x/0x%x)\n",
|
||||||
progname, USBTINY_VENDOR, USBTINY_PRODUCT );
|
progname, USBTINY_VENDOR, USBTINY_PRODUCT );
|
||||||
|
|
Loading…
Reference in New Issue