add jtag/usb_common.[ch] files
authorZachary T Welch <zw@superlucidity.net>
Thu, 19 Nov 2009 20:02:07 +0000 (12:02 -0800)
committerZachary T Welch <zw@superlucidity.net>
Tue, 24 Nov 2009 15:30:19 +0000 (07:30 -0800)
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.

configure.in
src/jtag/Makefile.am
src/jtag/usb_common.c [new file with mode: 0644]
src/jtag/usb_common.h [new file with mode: 0644]

index 8ba8951234a00821789d0aa9a8f18fe138cc4c54..81e4326278daad9bbbf191923599dd0e27fa9d12 100644 (file)
@@ -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)])])
 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)
 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(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)
 AM_CONDITIONAL(IS_CYGWIN, test $is_cygwin = yes)
 AM_CONDITIONAL(IS_MINGW, test $is_mingw = yes)
 AM_CONDITIONAL(IS_WIN32, test $is_win32 = yes)
index 85d98c074e5ec52cb40dd42d5ec21e931a4776c0..5254a2b544698e0b28efd4a8e5f22fbd99b5e988 100644 (file)
@@ -23,6 +23,10 @@ else
 # Standard Driver: common files
 DRIVERFILES += driver.c commands.c
 
 # Standard Driver: common files
 DRIVERFILES += driver.c commands.c
 
+if USB
+DRIVERFILES += usb_common.c
+endif
+
 if BITBANG
 DRIVERFILES += bitbang.c
 endif
 if BITBANG
 DRIVERFILES += bitbang.c
 endif
@@ -92,7 +96,8 @@ noinst_HEADERS = \
        rlink/ep1_cmd.h \
        rlink/rlink.h \
        rlink/st7.h \
        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
 
 
 EXTRA_DIST = startup.tcl
 
diff --git a/src/jtag/usb_common.c b/src/jtag/usb_common.c
new file mode 100644 (file)
index 0000000..463f1af
--- /dev/null
@@ -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;
+}
diff --git a/src/jtag/usb_common.h b/src/jtag/usb_common.h
new file mode 100644 (file)
index 0000000..da395ad
--- /dev/null
@@ -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

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)