From 414e4eb40e9a5decfaa2a5aef9ceac9768b7740b Mon Sep 17 00:00:00 2001 From: Matthias Welwarsky Date: Wed, 6 Apr 2016 10:35:13 +0200 Subject: [PATCH] ftdi: make ftdi_location command depend on libusb1 version MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-on: http://openocd.zylin.com/3396 Tested-by: jenkins Reviewed-by: Andreas Färber Reviewed-by: Freddie Chopin --- configure.ac | 2 ++ doc/openocd.texi | 2 ++ src/jtag/drivers/ftdi.c | 4 ++++ src/jtag/drivers/mpsse.c | 4 +++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index fb01e1bf..aed8bce5 100644 --- a/configure.ac +++ b/configure.ac @@ -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])]) LIBUSB1_CFLAGS=`echo $LIBUSB1_CFLAGS | sed 's/-I/-isystem /'` 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 AC_MSG_WARN([libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x instead]) diff --git a/doc/openocd.texi b/doc/openocd.texi index e839191b..7e51c470 100644 --- a/doc/openocd.texi +++ b/doc/openocd.texi @@ -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} denoting where the target adapter is actually plugged. 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 @deffn {Config Command} {ftdi_channel} channel diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c index b32fa6cb..3f74f1ca 100644 --- a/src/jtag/drivers/ftdi.c +++ b/src/jtag/drivers/ftdi.c @@ -699,6 +699,7 @@ COMMAND_HANDLER(ftdi_handle_serial_command) return ERROR_OK; } +#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS COMMAND_HANDLER(ftdi_handle_location_command) { if (CMD_ARGC == 1) { @@ -711,6 +712,7 @@ COMMAND_HANDLER(ftdi_handle_location_command) return ERROR_OK; } +#endif 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", .usage = "serial_string", }, +#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS { .name = "ftdi_location", .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", .usage = ":port[,port]...", }, +#endif { .name = "ftdi_channel", .handler = &ftdi_handle_channel_command, diff --git a/src/jtag/drivers/mpsse.c b/src/jtag/drivers/mpsse.c index a3820a22..0d19f388 100644 --- a/src/jtag/drivers/mpsse.c +++ b/src/jtag/drivers/mpsse.c @@ -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) { + bool result = false; +#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS char *loc = strdup(location); uint8_t port_path[7]; int path_step, path_len; uint8_t dev_bus = libusb_get_bus_number(device); char *ptr; - bool result = false; path_len = libusb_get_port_numbers(device, port_path, 7); if (path_len == LIBUSB_ERROR_OVERFLOW) { @@ -154,6 +155,7 @@ static bool device_location_equal(libusb_device *device, const char *location) done: free(loc); +#endif return result; } -- 2.39.5