jtag/xds110: switch to command 'adapter serial' 55/6655/3
authorAntonio Borneo <borneo.antonio@gmail.com>
Thu, 7 Oct 2021 21:03:23 +0000 (23:03 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 28 Nov 2021 10:59:23 +0000 (10:59 +0000)
The driver xds110 defines the command 'xds110 serial' to specify
the serial string of the adapter.

Remove and deprecate the driver command, and use 'adapter serial'.

Note: the original command 'xds110 serial' used a complex and
undocumented conversion of the serial number through multibyte
string, wide-character string and C cast. The XDS110 I can access
and the lsusb dumps available through Google don't show any
exotic USB serial that require such conversion. The original
developer doesn't remember any constraint that mandates such
conversion (see comments in https://review.openocd.org/4322/).
The conversion is removed by this patch.

Change-Id: I38909918079b2c1797ad85ebec2fea1b33743606
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/6655
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Tested-by: jenkins
doc/openocd.texi
src/jtag/drivers/xds110.c
src/jtag/startup.tcl
tcl/interface/xds110.cfg

index c76fc076c5e53788ab4a68f5ee6fb44215788c76..78451c71c07fa05e436bd9641fc2d5771c8fad73 100644 (file)
@@ -2371,9 +2371,9 @@ This command is only available if your libusb1 is at least version 1.0.16.
 Specifies the @var{serial_string} of the adapter to use.
 If this command is not specified, serial strings are not checked.
 Only the following adapter drivers use the serial string from this command:
-cmsis_dap, ft232r, ftdi, kitprog, presto, vsllink.
+cmsis_dap, ft232r, ftdi, kitprog, presto, vsllink, xds110.
 The following adapters have their own command to specify the serial string:
-hla, jlink, st-link, xds110.
+hla, jlink, st-link.
 @end deffn
 
 @section Interface Drivers
@@ -3141,11 +3141,6 @@ LaunchPad evaluation boards. The XDS110 is also available as a stand-alone USB
 debug probe with the added capability to supply power to the target board. The
 following commands are supported by the XDS110 driver:
 
-@deffn {Config Command} {xds110 serial} serial_string
-Specifies the serial number of which XDS110 probe to use. Otherwise, the first
-XDS110 found will be used.
-@end deffn
-
 @deffn {Config Command} {xds110 supply} voltage_in_millivolts
 Available only on the XDS110 stand-alone probe. Sets the voltage level of the
 XDS110 power supply. A value of 0 leaves the supply off. Otherwise, the supply
index 243577d7c93e98f7df300d4df2885eae03664923..c5249b2966db55460e898e6185c08f018d8db910 100644 (file)
 #endif
 
 #include <transport/transport.h>
+#include <jtag/adapter.h>
 #include <jtag/swd.h>
 #include <jtag/interface.h>
 #include <jtag/commands.h>
 #include <jtag/tcl.h>
 #include <libusb.h>
 
-/* XDS110 USB serial number length */
-#define XDS110_SERIAL_LEN 8
-
 /* XDS110 stand-alone probe voltage supply limits */
 #define XDS110_MIN_VOLTAGE 1800
 #define XDS110_MAX_VOLTAGE 3600
@@ -238,8 +236,6 @@ struct xds110_info {
        /* TCK speed and delay count*/
        uint32_t speed;
        uint32_t delay_count;
-       /* XDS110 serial number */
-       char serial[XDS110_SERIAL_LEN + 1];
        /* XDS110 voltage supply setting */
        uint32_t voltage;
        /* XDS110 firmware and hardware version */
@@ -269,7 +265,6 @@ static struct xds110_info xds110 = {
        .is_ap_dirty = false,
        .speed = XDS110_DEFAULT_TCK_SPEED,
        .delay_count = 0,
-       .serial = {0},
        .voltage = 0,
        .firmware = 0,
        .hardware = 0,
@@ -371,7 +366,7 @@ static bool usb_connect(void)
                                        *data = '\0';
 
                                        /* May be the requested device if serial number matches */
-                                       if (xds110.serial[0] == 0) {
+                                       if (!adapter_get_required_serial()) {
                                                /* No serial number given; match first XDS110 found */
                                                found = true;
                                                break;
@@ -380,7 +375,7 @@ static bool usb_connect(void)
                                                result = libusb_get_string_descriptor_ascii(dev,
                                                                        desc.iSerialNumber, data, max_data);
                                                if (result > 0 &&
-                                                       strcmp((char *)data, (char *)xds110.serial) == 0) {
+                                                       strcmp((char *)data, adapter_get_required_serial()) == 0) {
                                                        found = true;
                                                        break;
                                                }
@@ -1395,8 +1390,8 @@ static void xds110_show_info(void)
                (((firmware >> 12) & 0xf) * 10) + ((firmware >>  8) & 0xf),
                (((firmware >>  4) & 0xf) * 10) + ((firmware >>  0) & 0xf));
        LOG_INFO("XDS110: hardware version = 0x%04x", xds110.hardware);
-       if (xds110.serial[0] != 0)
-               LOG_INFO("XDS110: serial number = %s", xds110.serial);
+       if (adapter_get_required_serial())
+               LOG_INFO("XDS110: serial number = %s", adapter_get_required_serial());
        if (xds110.is_swd_mode) {
                LOG_INFO("XDS110: connected to target via SWD");
                LOG_INFO("XDS110: SWCLK set to %" PRIu32 " kHz", xds110.speed);
@@ -2024,34 +2019,6 @@ COMMAND_HANDLER(xds110_handle_info_command)
        return ERROR_OK;
 }
 
-COMMAND_HANDLER(xds110_handle_serial_command)
-{
-       wchar_t serial[XDS110_SERIAL_LEN + 1];
-
-       xds110.serial[0] = 0;
-
-       if (CMD_ARGC == 1) {
-               size_t len = mbstowcs(0, CMD_ARGV[0], 0);
-               if (len > XDS110_SERIAL_LEN) {
-                       LOG_ERROR("XDS110: serial number is limited to %d characters",
-                               XDS110_SERIAL_LEN);
-                       return ERROR_FAIL;
-               }
-               if ((size_t)-1 == mbstowcs(serial, CMD_ARGV[0], len + 1)) {
-                       LOG_ERROR("XDS110: unable to convert serial number");
-                       return ERROR_FAIL;
-               }
-
-               for (uint32_t i = 0; i < len; i++)
-                       xds110.serial[i] = (char)serial[i];
-
-               xds110.serial[len] = 0;
-       } else
-               return ERROR_COMMAND_SYNTAX_ERROR;
-
-       return ERROR_OK;
-}
-
 COMMAND_HANDLER(xds110_handle_supply_voltage_command)
 {
        uint32_t voltage = 0;
@@ -2082,13 +2049,6 @@ static const struct command_registration xds110_subcommand_handlers[] = {
                .help = "show XDS110 info",
                .usage = "",
        },
-       {
-               .name = "serial",
-               .handler = &xds110_handle_serial_command,
-               .mode = COMMAND_CONFIG,
-               .help = "set the XDS110 probe serial number",
-               .usage = "serial_string",
-       },
        {
                .name = "supply",
                .handler = &xds110_handle_supply_voltage_command,
index 95fe55ca72382d77686fa0d80fc15190e264fa1b..d6c3b85b42f2f0f5f360e4e7a5a977304fc27bef 100644 (file)
@@ -187,8 +187,8 @@ proc ftdi_location args {
 
 lappend _telnet_autocomplete_skip xds110_serial
 proc xds110_serial args {
-       echo "DEPRECATED! use 'xds110 serial' not 'xds110_serial'"
-       eval xds110 serial $args
+       echo "DEPRECATED! use 'adapter serial' not 'xds110_serial'"
+       eval adapter serial $args
 }
 
 lappend _telnet_autocomplete_skip xds110_supply_voltage
@@ -777,4 +777,10 @@ proc "vsllink usb_serial" {args} {
        eval adapter serial $args
 }
 
+lappend _telnet_autocomplete_skip "xds110 serial"
+proc "xds110 serial" {args} {
+       echo "DEPRECATED! use 'adapter serial' not 'xds110 serial'"
+       eval adapter serial $args
+}
+
 # END MIGRATION AIDS
index 51f4e28d3948a5675da4030c1e8aaeabbf533732..74122c3e6f0a662f427498e5aef4a70463e92c0f 100644 (file)
@@ -9,4 +9,4 @@ adapter driver xds110
 
 # Use serial number option to use a specific XDS110
 # when more than one are connected to the host.
-#xds110 serial 00000000
+# adapter serial 00000000

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)