jtag/xds110: switch to command 'adapter serial'

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
This commit is contained in:
Antonio Borneo 2021-10-07 23:03:23 +02:00
parent 271e5416af
commit 61a2f3284b
4 changed files with 16 additions and 55 deletions

View 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

View File

@ -20,15 +20,13 @@
#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,

View 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

View 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