jtag/xds110: switch to command 'adapter serial'
[fw/openocd] / src / jtag / drivers / xds110.c
index f62051422df52e8e7e75f75e5dc961675491d7e9..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,
@@ -341,7 +336,7 @@ static bool usb_connect(void)
        /* Initialize libusb context */
        result = libusb_init(&ctx);
 
-       if (0 == result) {
+       if (result == 0) {
                /* Get list of USB devices attached to system */
                count = libusb_get_device_list(ctx, &list);
                if (count <= 0) {
@@ -350,7 +345,7 @@ static bool usb_connect(void)
                }
        }
 
-       if (0 == result) {
+       if (result == 0) {
                /* Scan through list of devices for any XDS110s */
                for (i = 0; i < count; i++) {
                        /* Check for device vid/pid match */
@@ -365,13 +360,13 @@ static bool usb_connect(void)
                        }
                        if (match) {
                                result = libusb_open(list[i], &dev);
-                               if (0 == result) {
+                               if (result == 0) {
                                        const int max_data = 256;
                                        unsigned char data[max_data + 1];
                                        *data = '\0';
 
                                        /* May be the requested device if serial number matches */
-                                       if (0 == xds110.serial[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;
                                                }
@@ -430,7 +425,7 @@ static bool usb_connect(void)
        }
 
        /* On an error, clean up what we can */
-       if (0 != result) {
+       if (result != 0) {
                if (dev) {
                        /* Release the debug and data interface on the XDS110 */
                        (void)libusb_release_interface(dev, xds110.interface);
@@ -443,12 +438,12 @@ static bool usb_connect(void)
        }
 
        /* Log the results */
-       if (0 == result)
+       if (result == 0)
                LOG_INFO("XDS110: connected");
        else
                LOG_ERROR("XDS110: failed to connect");
 
-       return (0 == result) ? true : false;
+       return (result == 0) ? true : false;
 }
 
 static void usb_disconnect(void)
@@ -476,13 +471,13 @@ static bool usb_read(unsigned char *buffer, int size, int *bytes_read,
                return false;
 
        /* Force a non-zero timeout to prevent blocking */
-       if (0 == timeout)
+       if (timeout == 0)
                timeout = DEFAULT_TIMEOUT;
 
        result = libusb_bulk_transfer(xds110.dev, xds110.endpoint_in, buffer, size,
                                bytes_read, timeout);
 
-       return (0 == result) ? true : false;
+       return (result == 0) ? true : false;
 }
 
 static bool usb_write(unsigned char *buffer, int size, int *written)
@@ -671,7 +666,7 @@ static bool xds_execute(uint32_t out_length, uint32_t in_length,
        if (!success)
                error = SC_ERR_XDS110_FAIL;
 
-       if (0 != error)
+       if (error != 0)
                success = false;
 
        return success;
@@ -1280,7 +1275,7 @@ static int xds110_swd_run_queue(void)
        uint32_t value;
        bool success = true;
 
-       if (0 == xds110.txn_request_size)
+       if (xds110.txn_request_size == 0)
                return ERROR_OK;
 
        /* Terminate request queue */
@@ -1316,7 +1311,7 @@ static int xds110_swd_run_queue(void)
 
        /* Transfer results into caller's buffers */
        for (result = 0; result < xds110.txn_result_count; result++)
-               if (0 != xds110.txn_dap_results[result])
+               if (xds110.txn_dap_results[result] != 0)
                        *xds110.txn_dap_results[result] = dap_results[result];
 
        xds110.txn_request_size = 0;
@@ -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 (0 != xds110.serial[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);
@@ -1470,12 +1465,12 @@ static int xds110_init(void)
 
        if (success) {
                /* Set supply voltage for stand-alone probes */
-               if (XDS110_STAND_ALONE_ID == xds110.hardware) {
+               if (xds110.hardware == XDS110_STAND_ALONE_ID) {
                        success = xds_set_supply(xds110.voltage);
                        /* Allow time for target device to power up */
                        /* (CC32xx takes up to 1300 ms before debug is enabled) */
                        alive_sleep(1500);
-               } else if (0 != xds110.voltage) {
+               } else if (xds110.voltage != 0) {
                        /* Voltage supply not a feature of embedded probes */
                        LOG_WARNING(
                                "XDS110: ignoring supply voltage, not supported on this probe");
@@ -1557,7 +1552,7 @@ static void xds110_flush(void)
        uint8_t data_in[MAX_DATA_BLOCK];
        uint8_t *data_pntr;
 
-       if (0 == xds110.txn_request_size)
+       if (xds110.txn_request_size == 0)
                return;
 
        /* Terminate request queue */
@@ -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,