add jtag/usb_common.[ch] files
Begins to consolidate code used by several USB JTAG interfaces. This first patch provides the required build system changes and a common jtag_usb_open routine, which will replace the guts for probing the busses and devices for possible VID/PID matches. The following patches convert each driver to use it.
This commit is contained in:
parent
3efc99b34a
commit
3a660e2293
|
@ -996,6 +996,7 @@ if test $build_jlink = yes -o $build_vsllink = yes -o $build_usbprog = yes -o \
|
|||
then
|
||||
AC_CHECK_HEADERS([usb.h],[],
|
||||
[AC_MSG_ERROR([usb.h is required to build some OpenOCD driver(s)])])
|
||||
build_usb=yes
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(RELEASE, test $build_release = yes)
|
||||
|
@ -1021,6 +1022,7 @@ AM_CONDITIONAL(JLINK, test $build_jlink = yes)
|
|||
AM_CONDITIONAL(VSLLINK, test $build_vsllink = yes)
|
||||
AM_CONDITIONAL(RLINK, test $build_rlink = yes)
|
||||
AM_CONDITIONAL(ARMJTAGEW, test $build_armjtagew = yes)
|
||||
AM_CONDITIONAL(USB, test $build_usb = yes)
|
||||
AM_CONDITIONAL(IS_CYGWIN, test $is_cygwin = yes)
|
||||
AM_CONDITIONAL(IS_MINGW, test $is_mingw = yes)
|
||||
AM_CONDITIONAL(IS_WIN32, test $is_win32 = yes)
|
||||
|
|
|
@ -23,6 +23,10 @@ else
|
|||
# Standard Driver: common files
|
||||
DRIVERFILES += driver.c commands.c
|
||||
|
||||
if USB
|
||||
DRIVERFILES += usb_common.c
|
||||
endif
|
||||
|
||||
if BITBANG
|
||||
DRIVERFILES += bitbang.c
|
||||
endif
|
||||
|
@ -92,7 +96,8 @@ noinst_HEADERS = \
|
|||
rlink/ep1_cmd.h \
|
||||
rlink/rlink.h \
|
||||
rlink/st7.h \
|
||||
minidummy/jtag_minidriver.h
|
||||
minidummy/jtag_minidriver.h \
|
||||
usb_common.h
|
||||
|
||||
EXTRA_DIST = startup.tcl
|
||||
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2009 by Zachary T Welch <zw@superlucidity.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include "usb_common.h"
|
||||
|
||||
|
||||
static bool jtag_usb_match(struct usb_device *dev,
|
||||
const uint16_t vids[], const uint16_t pids[])
|
||||
{
|
||||
for (unsigned i = 0; vids[i] && pids[i]; i++)
|
||||
{
|
||||
if (dev->descriptor.idVendor == vids[i] &&
|
||||
dev->descriptor.idProduct == pids[i])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int jtag_usb_open(const uint16_t vids[], const uint16_t pids[],
|
||||
struct usb_dev_handle **out)
|
||||
{
|
||||
usb_find_busses();
|
||||
usb_find_devices();
|
||||
|
||||
struct usb_bus *busses = usb_get_busses();
|
||||
for (struct usb_bus *bus = busses; bus; bus = bus->next)
|
||||
{
|
||||
for (struct usb_device *dev = bus->devices; dev; dev = dev->next)
|
||||
{
|
||||
if (!jtag_usb_match(dev, vids, pids))
|
||||
continue;
|
||||
|
||||
*out = usb_open(dev);
|
||||
if (NULL == *out)
|
||||
return -errno;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2009 by Zachary T Welch <zw@superlucidity.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef JTAG_USB_COMMON_H
|
||||
#define JTAG_USB_COMMON_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#include <usb.h>
|
||||
|
||||
int jtag_usb_open(const uint16_t vids[], const uint16_t pids[],
|
||||
struct usb_dev_handle **out);
|
||||
|
||||
#endif // JTAG_USB_COMMON_H
|
Loading…
Reference in New Issue