Skip to content

Commit

Permalink
jtag/jlink: switch to command 'adapter serial'
Browse files Browse the repository at this point in the history
The driver jlink defines the command 'jlink serial' to specify the
serial string of the adapter.

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

Note: in former code the commands 'jlink serial' and 'jlink usb'
were mutually exclusive; running one of them would invalidate the
effect of a previous execution of the other. The new code gives
priority to 'adapter serial', even if executed before 'jlink usb'.

Change-Id: I920b0c136716f459b6fd6f7da8a01a7fa1ed389f
Signed-off-by: Antonio Borneo <[email protected]>
Reviewed-on: https://review.openocd.org/c/openocd/+/6656
Reviewed-by: zapb <[email protected]>
Tested-by: jenkins
  • Loading branch information
borneoa committed Nov 28, 2021
1 parent 61a2f32 commit ad18c1a
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 43 deletions.
10 changes: 2 additions & 8 deletions doc/openocd.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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, xds110.
cmsis_dap, ft232r, ftdi, jlink, kitprog, presto, vsllink, xds110.
The following adapters have their own command to specify the serial string:
hla, jlink, st-link.
hla, st-link.
@end deffn

@section Interface Drivers
Expand Down Expand Up @@ -2848,12 +2848,6 @@ to the host. If not specified, USB addresses are not considered. Device
selection via USB address is not always unambiguous. It is recommended to use
the serial number instead, if possible.

As a configuration command, it can be used only before 'init'.
@end deffn
@deffn {Config Command} {jlink serial} <serial number>
Set the serial number of the interface, in case more than one adapter is
connected to the host. If not specified, serial numbers are not considered.

As a configuration command, it can be used only before 'init'.
@end deffn
@end deffn
Expand Down
51 changes: 17 additions & 34 deletions src/jtag/drivers/jlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,23 @@ static int jlink_init(void)
return ERROR_JTAG_INIT_FAILED;
}

const char *serial = adapter_get_required_serial();
if (serial) {
ret = jaylink_parse_serial_number(serial, &serial_number);
if (ret == JAYLINK_ERR) {
LOG_ERROR("Invalid serial number: %s", serial);
jaylink_exit(jayctx);
return ERROR_JTAG_INIT_FAILED;
}
if (ret != JAYLINK_OK) {
LOG_ERROR("jaylink_parse_serial_number() failed: %s", jaylink_strerror(ret));
jaylink_exit(jayctx);
return ERROR_JTAG_INIT_FAILED;
}
use_serial_number = true;
use_usb_address = false;
}

bool found_device;
ret = jlink_open_device(JAYLINK_HIF_USB, &found_device);
if (ret != ERROR_OK)
Expand Down Expand Up @@ -979,38 +996,11 @@ COMMAND_HANDLER(jlink_usb_command)

usb_address = tmp;

use_serial_number = false;
use_usb_address = true;

return ERROR_OK;
}

COMMAND_HANDLER(jlink_serial_command)
{
int ret;

if (CMD_ARGC != 1) {
command_print(CMD, "Need exactly one argument for jlink serial");
return ERROR_COMMAND_SYNTAX_ERROR;
}

ret = jaylink_parse_serial_number(CMD_ARGV[0], &serial_number);

if (ret == JAYLINK_ERR) {
command_print(CMD, "Invalid serial number: %s", CMD_ARGV[0]);
return ERROR_FAIL;
} else if (ret != JAYLINK_OK) {
command_print(CMD, "jaylink_parse_serial_number() failed: %s",
jaylink_strerror(ret));
return ERROR_FAIL;
}

use_serial_number = true;
use_usb_address = false;

return ERROR_OK;
}

COMMAND_HANDLER(jlink_handle_hwstatus_command)
{
int ret;
Expand Down Expand Up @@ -1932,13 +1922,6 @@ static const struct command_registration jlink_subcommand_handlers[] = {
.help = "set the USB address of the device that should be used",
.usage = "<0-3>"
},
{
.name = "serial",
.handler = &jlink_serial_command,
.mode = COMMAND_CONFIG,
.help = "set the serial number of the device that should be used",
.usage = "<serial number>"
},
{
.name = "config",
.handler = &jlink_handle_config_command,
Expand Down
6 changes: 6 additions & 0 deletions src/jtag/startup.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,12 @@ proc "ftdi serial" {args} {
eval adapter serial $args
}
lappend _telnet_autocomplete_skip "jlink serial"
proc "jlink serial" {args} {
echo "DEPRECATED! use 'adapter serial' not 'jlink serial'"
eval adapter serial $args
}
lappend _telnet_autocomplete_skip kitprog_serial
proc kitprog_serial args {
echo "DEPRECATED! use 'adapter serial' not 'kitprog_serial'"
Expand Down
2 changes: 1 addition & 1 deletion tcl/interface/jlink.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ adapter driver jlink
#
# Example: Select J-Link with serial number 123456789
#
# jlink serial 123456789
# adapter serial 123456789

0 comments on commit ad18c1a

Please sign in to comment.