helper/command: change prototype of command_print/command_print_sameline
[fw/openocd] / src / jtag / adapter.c
index 16d90fb7572ca063680a91c130b126ac52113b12..0a887ef20d40c2edfaa5114c86cc5cdab2b414bc 100644 (file)
@@ -23,9 +23,7 @@
  *   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.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -37,6 +35,7 @@
 #include "interface.h"
 #include "interfaces.h"
 #include <transport/transport.h>
+#include <jtag/drivers/jtag_usb_common.h>
 
 #ifdef HAVE_STRINGS_H
 #include <strings.h>
@@ -48,7 +47,7 @@
  */
 
 extern struct jtag_interface *jtag_interface;
-const char *jtag_only[] = { "jtag", NULL };
+const char * const jtag_only[] = { "jtag", NULL };
 
 static int jim_adapter_name(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
 {
@@ -115,10 +114,10 @@ COMMAND_HANDLER(handle_interface_list_command)
        if (strcmp(CMD_NAME, "interface_list") == 0 && CMD_ARGC > 0)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
-       command_print(CMD_CTX, "The following debug interfaces are available:");
+       command_print(CMD, "The following debug interfaces are available:");
        for (unsigned i = 0; NULL != jtag_interfaces[i]; i++) {
                const char *name = jtag_interfaces[i]->name;
-               command_print(CMD_CTX, "%u: %s", i + 1, name);
+               command_print(CMD, "%u: %s", i + 1, name);
        }
 
        return ERROR_OK;
@@ -151,14 +150,14 @@ COMMAND_HANDLER(handle_interface_command)
 
                jtag_interface = jtag_interfaces[i];
 
-       /* LEGACY SUPPORT ... adapter drivers  must declare what
-        * transports they allow.  Until they all do so, assume
-        * the legacy drivers are JTAG-only
-        */
-       if (!jtag_interface->transports)
-               LOG_WARNING("Adapter driver '%s' did not declare "
-                       "which transports it allows; assuming "
-                       "legacy JTAG-only", jtag_interface->name);
+               /* LEGACY SUPPORT ... adapter drivers  must declare what
+                * transports they allow.  Until they all do so, assume
+                * the legacy drivers are JTAG-only
+                */
+               if (!jtag_interface->transports)
+                       LOG_WARNING("Adapter driver '%s' did not declare "
+                               "which transports it allows; assuming "
+                               "legacy JTAG-only", jtag_interface->name);
                retval = allow_transports(CMD_CTX, jtag_interface->transports
                                                ? jtag_interface->transports : jtag_only);
                        if (ERROR_OK != retval)
@@ -395,7 +394,7 @@ next:
                modes[5] = "";
        }
 
-       command_print(CMD_CTX, "%s %s%s%s%s%s",
+       command_print(CMD, "%s %s%s%s%s%s",
                        modes[0], modes[1],
                        modes[2], modes[3], modes[4], modes[5]);
 
@@ -412,7 +411,7 @@ COMMAND_HANDLER(handle_adapter_nsrst_delay_command)
 
                jtag_set_nsrst_delay(delay);
        }
-       command_print(CMD_CTX, "adapter_nsrst_delay: %u", jtag_get_nsrst_delay());
+       command_print(CMD, "adapter_nsrst_delay: %u", jtag_get_nsrst_delay());
        return ERROR_OK;
 }
 
@@ -426,7 +425,7 @@ COMMAND_HANDLER(handle_adapter_nsrst_assert_width_command)
 
                jtag_set_nsrst_assert_width(width);
        }
-       command_print(CMD_CTX, "adapter_nsrst_assert_width: %u", jtag_get_nsrst_assert_width());
+       command_print(CMD, "adapter_nsrst_assert_width: %u", jtag_get_nsrst_assert_width());
        return ERROR_OK;
 }
 
@@ -451,14 +450,61 @@ COMMAND_HANDLER(handle_adapter_khz_command)
                return retval;
 
        if (cur_speed)
-               command_print(CMD_CTX, "adapter speed: %d kHz", cur_speed);
+               command_print(CMD, "adapter speed: %d kHz", cur_speed);
        else
-               command_print(CMD_CTX, "adapter speed: RCLK - adaptive");
+               command_print(CMD, "adapter speed: RCLK - adaptive");
 
        return retval;
 }
 
+#ifndef HAVE_JTAG_MINIDRIVER_H
+#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS
+COMMAND_HANDLER(handle_usb_location_command)
+{
+       if (CMD_ARGC == 1)
+               jtag_usb_set_location(CMD_ARGV[0]);
+
+       command_print(CMD, "adapter usb location: %s", jtag_usb_get_location());
+
+       return ERROR_OK;
+}
+#endif /* HAVE_LIBUSB_GET_PORT_NUMBERS */
+
+static const struct command_registration adapter_usb_command_handlers[] = {
+#ifdef HAVE_LIBUSB_GET_PORT_NUMBERS
+       {
+               .name = "location",
+               .handler = &handle_usb_location_command,
+               .mode = COMMAND_CONFIG,
+               .help = "set the USB bus location of the USB device",
+               .usage = "<bus>-port[.port]...",
+       },
+#endif /* HAVE_LIBUSB_GET_PORT_NUMBERS */
+       COMMAND_REGISTRATION_DONE
+};
+#endif /* MINIDRIVER */
+
+static const struct command_registration adapter_command_handlers[] = {
+#ifndef HAVE_JTAG_MINIDRIVER_H
+       {
+               .name = "usb",
+               .mode = COMMAND_ANY,
+               .help = "usb adapter command group",
+               .usage = "",
+               .chain = adapter_usb_command_handlers,
+       },
+#endif /* MINIDRIVER */
+       COMMAND_REGISTRATION_DONE
+};
+
 static const struct command_registration interface_command_handlers[] = {
+       {
+               .name = "adapter",
+               .mode = COMMAND_ANY,
+               .help = "adapter command group",
+               .usage = "",
+               .chain = adapter_command_handlers,
+       },
        {
                .name = "adapter_khz",
                .handler = handle_adapter_khz_command,
@@ -509,6 +555,7 @@ static const struct command_registration interface_command_handlers[] = {
                .handler = handle_interface_list_command,
                .mode = COMMAND_ANY,
                .help = "List all built-in debug adapter interfaces (drivers)",
+               .usage = "",
        },
        {
                .name = "reset_config",