summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
18a6fdc)
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>
[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"])
[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])
], [
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])
@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}.
@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
@end deffn
@deffn {Config Command} {ftdi_channel} channel
+#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS
COMMAND_HANDLER(ftdi_handle_location_command)
{
if (CMD_ARGC == 1) {
COMMAND_HANDLER(ftdi_handle_location_command)
{
if (CMD_ARGC == 1) {
COMMAND_HANDLER(ftdi_handle_channel_command)
{
COMMAND_HANDLER(ftdi_handle_channel_command)
{
.help = "set the serial number of the FTDI device",
.usage = "serial_string",
},
.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,
{
.name = "ftdi_location",
.handler = &ftdi_handle_location_command,
.help = "set the USB bus location of the FTDI device",
.usage = "<bus>:port[,port]...",
},
.help = "set the USB bus location of the FTDI device",
.usage = "<bus>:port[,port]...",
},
{
.name = "ftdi_channel",
.handler = &ftdi_handle_channel_command,
{
.name = "ftdi_channel",
.handler = &ftdi_handle_channel_command,
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);
uint8_t port_path[7];
int path_step, path_len;
uint8_t dev_bus = libusb_get_bus_number(device);
char *ptr;
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;
path_len = libusb_get_port_numbers(device, port_path, 7);
if (path_len == LIBUSB_ERROR_OVERFLOW) {
path_len = libusb_get_port_numbers(device, port_path, 7);
if (path_len == LIBUSB_ERROR_OVERFLOW) {