This is an automated email from Gerrit.

"Vitaly Cheptsov <vit9...@protonmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8886

-- gerrit

commit d0ae4b24ed2f85cdb6cacaafcbebde4eca8523c4
Author: Vitaly Cheptsov <vit9...@protonmail.com>
Date:   Sun May 18 08:49:30 2025 +0300

    jlink: add nickname support
    
    Using nicknames provides a human-readable alternative to serial
    numbers for convenience purposes. Allow matching adapter serial
    with device nickname.
    
    Change-Id: I03b8d28a6c89412a825d42f4f66b3b528f217d9c
    Signed-off-by: Vitaly Cheptsov <vit9...@protonmail.com>

diff --git a/src/jtag/drivers/jlink.c b/src/jtag/drivers/jlink.c
index 9caf37f6f0..e8e7c949fa 100644
--- a/src/jtag/drivers/jlink.c
+++ b/src/jtag/drivers/jlink.c
@@ -23,6 +23,7 @@
 
 #include <stdint.h>
 #include <math.h>
+#include <string.h>
 
 #include <jtag/interface.h>
 #include <jtag/swd.h>
@@ -40,8 +41,6 @@ static struct jaylink_connection 
connlist[JAYLINK_MAX_CONNECTIONS];
 static enum jaylink_jtag_version jtag_command_version;
 static uint8_t caps[JAYLINK_DEV_EXT_CAPS_SIZE];
 
-static uint32_t serial_number;
-static bool use_serial_number;
 static bool use_usb_location;
 static enum jaylink_usb_address usb_address;
 static bool use_usb_address;
@@ -561,8 +560,14 @@ static int jlink_open_device(uint32_t ifaces, bool 
*found_device)
        }
 
        use_usb_location = !!adapter_usb_get_location();
+       const char *adapter_serial = adapter_get_required_serial();
 
-       if (!use_serial_number && !use_usb_address && !use_usb_location && 
num_devices > 1) {
+       uint32_t serial_number;
+       ret = jaylink_parse_serial_number(adapter_serial, &serial_number);
+       if (ret != JAYLINK_OK)
+               serial_number = 0;
+
+       if (!adapter_serial && !use_usb_address && !use_usb_location && 
num_devices > 1) {
                LOG_ERROR("Multiple devices found, specify the desired device");
                LOG_INFO("Found devices:");
                for (size_t i = 0; devs[i]; i++) {
@@ -575,7 +580,12 @@ static int jlink_open_device(uint32_t ifaces, bool 
*found_device)
                                        jaylink_strerror(ret));
                                continue;
                        }
-                       LOG_INFO("Device %zu serial: %" PRIu32, i, serial);
+                       char name[JAYLINK_NICKNAME_MAX_LENGTH];
+                       int name_ret = jaylink_device_get_nickname(devs[i], 
name);
+                       if (name_ret == JAYLINK_OK)
+                               LOG_INFO("Device %zu serial: %" PRIu32 ", 
nickname %s", i, serial, name);
+                       else
+                               LOG_INFO("Device %zu serial: %" PRIu32, i, 
serial);
                }
 
                jaylink_free_devices(devs, true);
@@ -588,20 +598,31 @@ static int jlink_open_device(uint32_t ifaces, bool 
*found_device)
        for (size_t i = 0; devs[i]; i++) {
                struct jaylink_device *dev = devs[i];
 
-               if (use_serial_number) {
-                       uint32_t tmp;
-                       ret = jaylink_device_get_serial_number(dev, &tmp);
-
-                       if (ret == JAYLINK_ERR_NOT_AVAILABLE) {
-                               continue;
-                       } else if (ret != JAYLINK_OK) {
-                               LOG_WARNING("jaylink_device_get_serial_number() 
failed: %s",
-                                       jaylink_strerror(ret));
-                               continue;
+               if (adapter_serial) {
+                       /*
+                        * Treat adapter serial as a nickname first as it can 
also be numeric.
+                        * If it fails to match (optional) device nickname try 
to compare
+                        * adapter serial with the actual device serial number.
+                        */
+                       char nickname[JAYLINK_NICKNAME_MAX_LENGTH];
+                       ret = jaylink_device_get_nickname(dev, nickname);
+                       if (ret != JAYLINK_OK || strcmp(nickname, 
adapter_serial) != 0) {
+                               if (!serial_number)
+                                       continue;
+
+                               uint32_t tmp;
+                               ret = jaylink_device_get_serial_number(dev, 
&tmp);
+                               if (ret == JAYLINK_ERR_NOT_AVAILABLE) {
+                                       continue;
+                               } else if (ret != JAYLINK_OK) {
+                                       
LOG_WARNING("jaylink_device_get_serial_number() failed: %s",
+                                               jaylink_strerror(ret));
+                                       continue;
+                               }
+
+                               if (serial_number != tmp)
+                                       continue;
                        }
-
-                       if (serial_number != tmp)
-                               continue;
                }
 
                if (use_usb_address) {
@@ -670,29 +691,12 @@ 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)
                return ret;
 
-       if (!found_device && use_serial_number) {
+       if (!found_device && adapter_get_required_serial()) {
                ret = jlink_open_device(JAYLINK_HIF_TCP, &found_device);
                if (ret != ERROR_OK)
                        return ret;

-- 

Reply via email to