ftdi: make ftdi_location command depend on libusb1 version
The function libusb_get_port_numbers(), required for the command ftdi_location, is only available in recent version of libusb1. Compilation will break if the function is not available. This patch enables the command only if libusb1 contains the necessary function. Change-Id: I091e72dafa4ed22eea51692751d43246a8152987 Signed-off-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com> Reviewed-on: http://openocd.zylin.com/3396 Tested-by: jenkins Reviewed-by: Andreas Färber <afaerber@suse.de> Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>__archive__
parent
18a6fdc154
commit
414e4eb40e
|
@ -1142,6 +1142,8 @@ PKG_CHECK_MODULES([LIBUSB1], [libusb-1.0], [
|
||||||
[AC_MSG_WARN([libusb-1.x older than 1.0.9 detected, consider updating])])
|
[AC_MSG_WARN([libusb-1.x older than 1.0.9 detected, consider updating])])
|
||||||
LIBUSB1_CFLAGS=`echo $LIBUSB1_CFLAGS | sed 's/-I/-isystem /'`
|
LIBUSB1_CFLAGS=`echo $LIBUSB1_CFLAGS | sed 's/-I/-isystem /'`
|
||||||
AC_MSG_NOTICE([libusb-1.0 header bug workaround: LIBUSB1_CFLAGS changed to "$LIBUSB1_CFLAGS"])
|
AC_MSG_NOTICE([libusb-1.0 header bug workaround: LIBUSB1_CFLAGS changed to "$LIBUSB1_CFLAGS"])
|
||||||
|
PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.16],
|
||||||
|
[AC_DEFINE([HAVE_LIBUSB_GET_PORT_NUMBERS], [1], [Define if your libusb has libusb_get_port_numbers()])])
|
||||||
], [
|
], [
|
||||||
use_libusb1=no
|
use_libusb1=no
|
||||||
AC_MSG_WARN([libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x instead])
|
AC_MSG_WARN([libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x instead])
|
||||||
|
|
|
@ -2564,6 +2564,8 @@ roots at @var{bus} and walks down the physical ports, with each
|
||||||
@var{port} option specifying a deeper level in the bus topology, the last
|
@var{port} option specifying a deeper level in the bus topology, the last
|
||||||
@var{port} denoting where the target adapter is actually plugged.
|
@var{port} denoting where the target adapter is actually plugged.
|
||||||
The USB bus topology can be queried with the command @emph{lsusb -t}.
|
The USB bus topology can be queried with the command @emph{lsusb -t}.
|
||||||
|
|
||||||
|
This command is only available if your libusb1 is at least version 1.0.16.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Config Command} {ftdi_channel} channel
|
@deffn {Config Command} {ftdi_channel} channel
|
||||||
|
|
|
@ -699,6 +699,7 @@ COMMAND_HANDLER(ftdi_handle_serial_command)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS
|
||||||
COMMAND_HANDLER(ftdi_handle_location_command)
|
COMMAND_HANDLER(ftdi_handle_location_command)
|
||||||
{
|
{
|
||||||
if (CMD_ARGC == 1) {
|
if (CMD_ARGC == 1) {
|
||||||
|
@ -711,6 +712,7 @@ COMMAND_HANDLER(ftdi_handle_location_command)
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
COMMAND_HANDLER(ftdi_handle_channel_command)
|
COMMAND_HANDLER(ftdi_handle_channel_command)
|
||||||
{
|
{
|
||||||
|
@ -889,6 +891,7 @@ static const struct command_registration ftdi_command_handlers[] = {
|
||||||
.help = "set the serial number of the FTDI device",
|
.help = "set the serial number of the FTDI device",
|
||||||
.usage = "serial_string",
|
.usage = "serial_string",
|
||||||
},
|
},
|
||||||
|
#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS
|
||||||
{
|
{
|
||||||
.name = "ftdi_location",
|
.name = "ftdi_location",
|
||||||
.handler = &ftdi_handle_location_command,
|
.handler = &ftdi_handle_location_command,
|
||||||
|
@ -896,6 +899,7 @@ static const struct command_registration ftdi_command_handlers[] = {
|
||||||
.help = "set the USB bus location of the FTDI device",
|
.help = "set the USB bus location of the FTDI device",
|
||||||
.usage = "<bus>:port[,port]...",
|
.usage = "<bus>:port[,port]...",
|
||||||
},
|
},
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
.name = "ftdi_channel",
|
.name = "ftdi_channel",
|
||||||
.handler = &ftdi_handle_channel_command,
|
.handler = &ftdi_handle_channel_command,
|
||||||
|
|
|
@ -106,12 +106,13 @@ static bool string_descriptor_equal(libusb_device_handle *device, uint8_t str_in
|
||||||
|
|
||||||
static bool device_location_equal(libusb_device *device, const char *location)
|
static bool device_location_equal(libusb_device *device, const char *location)
|
||||||
{
|
{
|
||||||
|
bool result = false;
|
||||||
|
#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS
|
||||||
char *loc = strdup(location);
|
char *loc = strdup(location);
|
||||||
uint8_t port_path[7];
|
uint8_t port_path[7];
|
||||||
int path_step, path_len;
|
int path_step, path_len;
|
||||||
uint8_t dev_bus = libusb_get_bus_number(device);
|
uint8_t dev_bus = libusb_get_bus_number(device);
|
||||||
char *ptr;
|
char *ptr;
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
path_len = libusb_get_port_numbers(device, port_path, 7);
|
path_len = libusb_get_port_numbers(device, port_path, 7);
|
||||||
if (path_len == LIBUSB_ERROR_OVERFLOW) {
|
if (path_len == LIBUSB_ERROR_OVERFLOW) {
|
||||||
|
@ -154,6 +155,7 @@ static bool device_location_equal(libusb_device *device, const char *location)
|
||||||
|
|
||||||
done:
|
done:
|
||||||
free(loc);
|
free(loc);
|
||||||
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue