ftdi: make ftdi_location command depend on libusb1 version 96/3396/5
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;
 }
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)