jtag/hla, jtag/stlink: switch to command 'adapter serial'

The driver hla defines the command 'hla_serial' to specify the
serial string of the adapter.
The driver st-link defines the command 'st-link serial' to specify
the serial string of the adapter.

Remove and deprecate the driver commands and use 'adapter serial'.

Change-Id: I9505c398a77125b1ebf4ba71da7baf4d663b75be
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/6657
Tested-by: jenkins
This commit is contained in:
Antonio Borneo
2021-10-08 12:37:19 +02:00
parent ad18c1a47f
commit c6460ea36d
10 changed files with 36 additions and 81 deletions

View File

@@ -22,6 +22,7 @@
/* project specific includes */
#include <helper/binarybuffer.h>
#include <jtag/adapter.h>
#include <jtag/interface.h>
#include <jtag/hla/hla_layout.h>
#include <jtag/hla/hla_transport.h>
@@ -1054,8 +1055,9 @@ static int nulink_usb_open(struct hl_interface_param_s *param, void **fd)
goto error_open;
}
if (param->serial) {
size_t len = mbstowcs(NULL, param->serial, 0);
const char *serial = adapter_get_required_serial();
if (serial) {
size_t len = mbstowcs(NULL, serial, 0);
target_serial = calloc(len + 1, sizeof(wchar_t));
if (!target_serial) {
@@ -1063,7 +1065,7 @@ static int nulink_usb_open(struct hl_interface_param_s *param, void **fd)
goto error_open;
}
if (mbstowcs(target_serial, param->serial, len + 1) == (size_t)(-1)) {
if (mbstowcs(target_serial, serial, len + 1) == (size_t)(-1)) {
LOG_WARNING("unable to convert serial");
free(target_serial);
target_serial = NULL;

View File

@@ -38,6 +38,7 @@
#include <helper/bits.h>
#include <helper/system.h>
#include <helper/time_support.h>
#include <jtag/adapter.h>
#include <jtag/interface.h>
#include <jtag/hla/hla_layout.h>
#include <jtag/hla/hla_transport.h>
@@ -3363,7 +3364,7 @@ static int stlink_usb_usb_open(void *handle, struct hl_interface_param_s *param)
in order to become operational.
*/
do {
if (jtag_libusb_open(param->vid, param->pid, param->serial,
if (jtag_libusb_open(param->vid, param->pid, adapter_get_required_serial(),
&h->usb_backend_priv.fd, stlink_usb_get_alternate_serial) != ERROR_OK) {
LOG_ERROR("open failed");
return ERROR_FAIL;
@@ -3574,7 +3575,8 @@ static int stlink_tcp_open(void *handle, struct hl_interface_param_s *param)
char serial[STLINK_TCP_SERIAL_SIZE + 1] = {0};
uint8_t stlink_used;
bool stlink_id_matched = false;
bool stlink_serial_matched = (!param->serial);
const char *adapter_serial = adapter_get_required_serial();
bool stlink_serial_matched = !adapter_serial;
for (uint32_t stlink_id = 0; stlink_id < connected_stlinks; stlink_id++) {
/* get the stlink info */
@@ -3604,27 +3606,28 @@ static int stlink_tcp_open(void *handle, struct hl_interface_param_s *param)
continue;
/* check the serial if specified */
if (param->serial) {
if (adapter_serial) {
/* ST-Link server fixes the buggy serial returned by old ST-Link DFU
* for further details refer to stlink_usb_get_alternate_serial
* so if the user passes the buggy serial, we need to fix it before
* comparing with the serial returned by ST-Link server */
if (strlen(param->serial) == STLINK_SERIAL_LEN / 2) {
if (strlen(adapter_serial) == STLINK_SERIAL_LEN / 2) {
char fixed_serial[STLINK_SERIAL_LEN + 1];
for (unsigned int i = 0; i < STLINK_SERIAL_LEN; i += 2)
sprintf(fixed_serial + i, "%02X", param->serial[i / 2]);
sprintf(fixed_serial + i, "%02X", adapter_serial[i / 2]);
fixed_serial[STLINK_SERIAL_LEN] = '\0';
stlink_serial_matched = strcmp(fixed_serial, serial) == 0;
} else
stlink_serial_matched = strcmp(param->serial, serial) == 0;
} else {
stlink_serial_matched = strcmp(adapter_serial, serial) == 0;
}
}
if (!stlink_serial_matched)
LOG_DEBUG("Device serial number '%s' doesn't match requested serial '%s'",
serial, param->serial);
serial, adapter_serial);
else /* exit the search loop if there is match */
break;
}
@@ -3693,7 +3696,7 @@ static int stlink_open(struct hl_interface_param_s *param, enum stlink_mode mode
for (unsigned i = 0; param->vid[i]; i++) {
LOG_DEBUG("transport: %d vid: 0x%04x pid: 0x%04x serial: %s",
h->st_mode, param->vid[i], param->pid[i],
param->serial ? param->serial : "");
adapter_get_required_serial() ? adapter_get_required_serial() : "");
}
if (param->use_stlink_tcp)
@@ -4916,25 +4919,6 @@ static int stlink_dap_trace_read(uint8_t *buf, size_t *size)
return stlink_usb_trace_read(stlink_dap_handle, buf, size);
}
/** */
COMMAND_HANDLER(stlink_dap_serial_command)
{
LOG_DEBUG("stlink_dap_serial_command");
if (CMD_ARGC != 1) {
LOG_ERROR("Expected exactly one argument for \"st-link serial <serial-number>\".");
return ERROR_COMMAND_SYNTAX_ERROR;
}
if (stlink_dap_param.serial) {
LOG_WARNING("Command \"st-link serial\" already used. Replacing previous value");
free((void *)stlink_dap_param.serial);
}
stlink_dap_param.serial = strdup(CMD_ARGV[0]);
return ERROR_OK;
}
/** */
COMMAND_HANDLER(stlink_dap_vid_pid)
{
@@ -5025,13 +5009,6 @@ COMMAND_HANDLER(stlink_dap_cmd_command)
/** */
static const struct command_registration stlink_dap_subcommand_handlers[] = {
{
.name = "serial",
.handler = stlink_dap_serial_command,
.mode = COMMAND_CONFIG,
.help = "set the serial number of the adapter",
.usage = "<serial_number>",
},
{
.name = "vid_pid",
.handler = stlink_dap_vid_pid,
@@ -5112,9 +5089,6 @@ static int stlink_dap_quit(void)
{
LOG_DEBUG("stlink_dap_quit()");
free((void *)stlink_dap_param.serial);
stlink_dap_param.serial = NULL;
return stlink_close(stlink_dap_handle);
}

View File

@@ -23,6 +23,7 @@
/* project specific includes */
#include <helper/binarybuffer.h>
#include <jtag/adapter.h>
#include <jtag/interface.h>
#include <jtag/hla/hla_layout.h>
#include <jtag/hla/hla_transport.h>
@@ -681,11 +682,11 @@ static int icdi_usb_open(struct hl_interface_param_s *param, void **fd)
for (uint8_t i = 0; param->vid[i] && param->pid[i]; ++i)
LOG_DEBUG("transport: %d vid: 0x%04x pid: 0x%04x serial: %s", param->transport,
param->vid[i], param->pid[i], param->serial ? param->serial : "");
param->vid[i], param->pid[i], adapter_get_required_serial() ? adapter_get_required_serial() : "");
/* TI (Stellaris) ICDI provides its serial number in the USB descriptor;
no need to provide a callback here. */
jtag_libusb_open(param->vid, param->pid, param->serial, &h->usb_dev, NULL);
jtag_libusb_open(param->vid, param->pid, adapter_get_required_serial(), &h->usb_dev, NULL);
if (!h->usb_dev) {
LOG_ERROR("open failed");