]> git.sur5r.net Git - openocd/commitdiff
ftdi: make ftdi_location command depend on libusb1 version
authorMatthias Welwarsky <matthias.welwarsky@sysgo.com>
Wed, 6 Apr 2016 08:35:13 +0000 (10:35 +0200)
committerFreddie Chopin <freddie.chopin@gmail.com>
Thu, 5 May 2016 21:33:41 +0000 (22:33 +0100)
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>
configure.ac
doc/openocd.texi
src/jtag/drivers/ftdi.c
src/jtag/drivers/mpsse.c

index fb01e1bfc7902ef9c68f15531ff23de7bf2e71bb..aed8bce5faae1e086a8da9bcc98987036cc64c68 100644 (file)
@@ -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])
index e839191b23ca1b3501077a04e8a074996d6cd167..7e51c470ad44970adce4409b5762cab9b90b058e 100644 (file)
@@ -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
index b32fa6cb2338b545a3214998e6529cd9f608d8de..3f74f1cae202c7c8bbb5e9b7fc3bdb017f489274 100644 (file)
@@ -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 = "<bus>:port[,port]...",
        },
+#endif
        {
                .name = "ftdi_channel",
                .handler = &ftdi_handle_channel_command,
index a3820a2266890dd279d0cc04bfbc3232958d9c74..0d19f388c634e98e44cf966b9202c1459d151c81 100644 (file)
@@ -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;
 }