Add Tincantools Flyswatter2 support
[openocd.git] / src / jtag / drivers / ft2232.c
index 8c2382a15ebb3b5251a1710ea52f31ca811242ae..73aea01f673a0830bf6792f6e64ccee86696b3a8 100644 (file)
@@ -81,7 +81,7 @@
 
 /* project specific includes */
 #include <jtag/interface.h>
-#include <jtag/transport.h>
+#include <transport/transport.h>
 #include <helper/time_support.h>
 
 #if IS_CYGWIN == 1
@@ -99,6 +99,7 @@
 /* FT2232 access library includes */
 #if BUILD_FT2232_FTD2XX == 1
 #include <ftd2xx.h>
+#include "ftd2xx_common.h"
 
 enum ftdi_interface
 {
@@ -176,7 +177,9 @@ static int jtagkey_init(void);
 static int lm3s811_jtag_init(void);
 static int icdi_jtag_init(void);
 static int olimex_jtag_init(void);
-static int flyswatter_init(void);
+static int flyswatter1_init(void);
+static int flyswatter2_init(void);
+static int minimodule_init(void);
 static int turtle_init(void);
 static int comstick_init(void);
 static int stm32stick_init(void);
@@ -196,7 +199,9 @@ static int xds100v2_init(void);
 static void ftx23_reset(int trst, int srst);
 static void jtagkey_reset(int trst, int srst);
 static void olimex_jtag_reset(int trst, int srst);
-static void flyswatter_reset(int trst, int srst);
+static void flyswatter1_reset(int trst, int srst);
+static void flyswatter2_reset(int trst, int srst);
+static void minimodule_reset(int trst, int srst);
 static void turtle_reset(int trst, int srst);
 static void comstick_reset(int trst, int srst);
 static void stm32stick_reset(int trst, int srst);
@@ -210,7 +215,8 @@ static void xds100v2_reset(int trst, int srst);
 
 /* blink procedures for layouts that support a blinking led */
 static void olimex_jtag_blink(void);
-static void flyswatter_jtag_blink(void);
+static void flyswatter1_jtag_blink(void);
+static void flyswatter2_jtag_blink(void);
 static void turtle_jtag_blink(void);
 static void signalyzer_h_blink(void);
 static void ktlink_blink(void);
@@ -257,9 +263,18 @@ static const struct ft2232_layout  ft2232_layouts[] =
                .blink = olimex_jtag_blink
        },
        { .name = "flyswatter",
-               .init = flyswatter_init,
-               .reset = flyswatter_reset,
-               .blink = flyswatter_jtag_blink
+               .init = flyswatter1_init,
+               .reset = flyswatter1_reset,
+               .blink = flyswatter1_jtag_blink
+       },
+       { .name = "flyswatter2",
+               .init = flyswatter2_init,
+               .reset = flyswatter2_reset,
+               .blink = flyswatter2_jtag_blink
+       },
+       { .name = "minimodule",
+               .init = minimodule_init,
+               .reset = minimodule_reset,
        },
        { .name = "turtelizer2",
                .init = turtle_init,
@@ -509,7 +524,7 @@ static int ft2232_write(uint8_t* buf, int size, uint32_t* bytes_written)
        if ((status = FT_Write(ftdih, buf, size, &dw_bytes_written)) != FT_OK)
        {
                *bytes_written = dw_bytes_written;
-               LOG_ERROR("FT_Write returned: %lu", status);
+               LOG_ERROR("FT_Write returned: %s", ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
        else
@@ -552,7 +567,7 @@ static int ft2232_read(uint8_t* buf, uint32_t size, uint32_t* bytes_read)
                                          *bytes_read, &dw_bytes_read)) != FT_OK)
                {
                        *bytes_read = 0;
-                       LOG_ERROR("FT_Read returned: %lu", status);
+                       LOG_ERROR("FT_Read returned: %s", ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
                *bytes_read += dw_bytes_read;
@@ -1338,7 +1353,6 @@ static int ft2232_large_scan(struct scan_command* cmd, enum scan_type type, uint
                LOG_DEBUG("thisrun_read: %i, bytes_read: %i",
                          thisrun_read,
                          (int)bytes_read);
-               receive_pointer += bytes_read;
        }
 
        return ERROR_OK;
@@ -1565,6 +1579,34 @@ static void flyswatter_reset(int trst, int srst)
        LOG_DEBUG("trst: %i, srst: %i, low_output: 0x%2.2x, low_direction: 0x%2.2x", trst, srst, low_output, low_direction);
 }
 
+static void flyswatter1_reset(int trst, int srst)
+{
+       flyswatter_reset(trst, srst);
+}
+
+static void flyswatter2_reset(int trst, int srst)
+{
+       flyswatter_reset(trst, !srst);
+}
+
+static void minimodule_reset(int trst, int srst)
+{
+       if (srst == 1)
+       {
+               low_output &= ~nSRST;
+       }
+       else if (srst == 0)
+       {
+               low_output |= nSRST;
+       }
+
+       /* command "set data bits low byte" */
+       buffer_write(0x80);
+       buffer_write(low_output);
+       buffer_write(low_direction);
+       LOG_DEBUG("trst: %i, srst: %i, low_output: 0x%2.2x, low_direction: 0x%2.2x", trst, srst, low_output, low_direction);
+}
+
 static void turtle_reset(int trst, int srst)
 {
        trst = trst;
@@ -2191,11 +2233,13 @@ static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_mor
 
                if (more)
                {
-                       LOG_WARNING("unable to open ftdi device (trying more): %lu", status);
+                       LOG_WARNING("unable to open ftdi device (trying more): %s",
+                                       ftd2xx_status_string(status));
                        *try_more = 1;
                        return ERROR_JTAG_INIT_FAILED;
                }
-               LOG_ERROR("unable to open ftdi device: %lu", status);
+               LOG_ERROR("unable to open ftdi device: %s",
+                               ftd2xx_status_string(status));
                status = FT_ListDevices(&num_devices, NULL, FT_LIST_NUMBER_ONLY);
                if (status == FT_OK)
                {
@@ -2211,7 +2255,7 @@ static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_mor
 
                        if (status == FT_OK)
                        {
-                               LOG_ERROR("ListDevices: %lu", num_devices);
+                               LOG_ERROR("ListDevices: %" PRIu32, (uint32_t)num_devices);
                                for (i = 0; i < num_devices; i++)
                                        LOG_ERROR("%" PRIu32 ": \"%s\"", i, desc_array[i]);
                        }
@@ -2230,14 +2274,28 @@ static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_mor
 
        if ((status = FT_SetLatencyTimer(ftdih, ft2232_latency)) != FT_OK)
        {
-               LOG_ERROR("unable to set latency timer: %lu", status);
+               LOG_ERROR("unable to set latency timer: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_INIT_FAILED;
        }
 
        if ((status = FT_GetLatencyTimer(ftdih, &latency_timer)) != FT_OK)
        {
-               LOG_ERROR("unable to get latency timer: %lu", status);
-               return ERROR_JTAG_INIT_FAILED;
+               /* ftd2xx 1.04 (linux) has a bug when calling FT_GetLatencyTimer
+                * so ignore errors if using this driver version */
+               DWORD dw_version;
+
+               status = FT_GetDriverVersion(ftdih, &dw_version);
+               LOG_ERROR("unable to get latency timer: %s",
+                               ftd2xx_status_string(status));
+
+               if ((status == FT_OK) && (dw_version == 0x10004)) {
+                       LOG_ERROR("ftd2xx 1.04 detected - this has known issues " \
+                                       "with FT_GetLatencyTimer, upgrade to a newer version");
+               }
+               else {
+                       return ERROR_JTAG_INIT_FAILED;
+               }
        }
        else
        {
@@ -2246,19 +2304,22 @@ static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_mor
 
        if ((status = FT_SetTimeouts(ftdih, 5000, 5000)) != FT_OK)
        {
-               LOG_ERROR("unable to set timeouts: %lu", status);
+               LOG_ERROR("unable to set timeouts: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_INIT_FAILED;
        }
 
        if ((status = FT_SetBitMode(ftdih, 0x0b, 2)) != FT_OK)
        {
-               LOG_ERROR("unable to enable bit i/o mode: %lu", status);
+               LOG_ERROR("unable to enable bit i/o mode: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_INIT_FAILED;
        }
 
        if ((status = FT_GetDeviceInfo(ftdih, &ftdi_device, &deviceID, SerialNumber, Description, NULL)) != FT_OK)
        {
-               LOG_ERROR("unable to get FT_GetDeviceInfo: %lu", status);
+               LOG_ERROR("unable to get FT_GetDeviceInfo: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_INIT_FAILED;
        }
        else
@@ -2268,8 +2329,8 @@ static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_mor
                unsigned no_of_known_types = ARRAY_SIZE(type_str) - 1;
                unsigned type_index = ((unsigned)ftdi_device <= no_of_known_types)
                        ? ftdi_device : FT_DEVICE_UNKNOWN;
-               LOG_INFO("device: %lu \"%s\"", ftdi_device, type_str[type_index]);
-               LOG_INFO("deviceID: %lu", deviceID);
+               LOG_INFO("device: %" PRIu32 " \"%s\"", (uint32_t)ftdi_device, type_str[type_index]);
+               LOG_INFO("deviceID: %" PRIu32, (uint32_t)deviceID);
                LOG_INFO("SerialNumber: %s", SerialNumber);
                LOG_INFO("Description: %s", Description);
        }
@@ -2283,7 +2344,8 @@ static int ft2232_purge_ftd2xx(void)
 
        if ((status = FT_Purge(ftdih, FT_PURGE_RX | FT_PURGE_TX)) != FT_OK)
        {
-               LOG_ERROR("error purging ftd2xx device: %lu", status);
+               LOG_ERROR("error purging ftd2xx device: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -2867,10 +2929,18 @@ static int olimex_jtag_init(void)
        return ERROR_OK;
 }
 
-static int flyswatter_init(void)
+static int flyswatter_init(int rev)
 {
        low_output    = 0x18;
-       low_direction = 0xfb;
+       low_direction = 0x7b;
+
+       if ((rev < 0) || (rev > 3)) {
+               LOG_ERROR("bogus 'flyswatter' revision supplied (%i)", rev);
+               return ERROR_JTAG_INIT_FAILED;
+       }
+
+       if (rev == 1)
+               low_direction |= 1 << 7;
 
        /* initialize low byte for jtag */
        if (ft2232_set_data_bits_low_byte(low_output,low_direction) != ERROR_OK)
@@ -2885,7 +2955,11 @@ static int flyswatter_init(void)
        nSRSTnOE = 0x00;    /* no output enable for nSRST */
 
        high_output    = 0x00;
-       high_direction = 0x0c;
+
+       if (rev == 1)
+               high_direction = 0x0c;
+       else
+               high_direction = 0x01;
 
        /* turn red LED3 on, LED2 off */
        high_output |= 0x08;
@@ -2900,6 +2974,47 @@ static int flyswatter_init(void)
        return ERROR_OK;
 }
 
+static int flyswatter1_init(void)
+{
+       return flyswatter_init(1);
+}
+
+static int flyswatter2_init(void)
+{
+       return flyswatter_init(2);
+}
+
+static int minimodule_init(void)
+{
+       low_output    = 0x18;//check if srst should be 1 or 0 initially. (0x08) (flyswatter was 0x18)
+       low_direction = 0xfb;//0xfb;
+
+       /* initialize low byte for jtag */
+       if (ft2232_set_data_bits_low_byte(low_output,low_direction) != ERROR_OK)
+       {
+               LOG_ERROR("couldn't initialize FT2232 with 'minimodule' layout");
+               return ERROR_JTAG_INIT_FAILED;
+       }
+
+
+       nSRST    = 0x20;
+
+       high_output    = 0x00;
+       high_direction = 0x05;
+
+       /* turn red LED3 on, LED2 off */
+       //high_output |= 0x08;
+
+       /* initialize high byte for jtag */
+       if (ft2232_set_data_bits_high_byte(high_output,high_direction) != ERROR_OK)
+       {
+               LOG_ERROR("couldn't initialize FT2232 with 'minimodule' layout");
+               return ERROR_JTAG_INIT_FAILED;
+       }
+
+       return ERROR_OK;
+}
+
 static int turtle_init(void)
 {
        low_output    = 0x08;
@@ -3099,40 +3214,65 @@ static int flossjtag_init(void)
        return ftx232_dbus_write();
 }
 
+/*
+ * The reference schematic from TI for the XDS100v2 has a CPLD on which opens
+ * the door for a number of different configurations
+ *
+ * Known Implementations:
+ * http://processors.wiki.ti.com/images/9/93/TMS570LS20216_USB_STICK_Schematic.pdf
+ *
+ * http://processors.wiki.ti.com/index.php/XDS100 (rev2)
+ *     * CLPD logic: Rising edge to enable outputs (XDS100_PWR_RST)
+ *             * ACBUS3 to transition 0->1 (OE rising edge)
+ *     * CPLD logic: Put the EMU0/1 pins in Hi-Z:
+ *             * ADBUS5/GPIOL1 = EMU_EN = 1
+ *             * ADBUS6/GPIOL2 = EMU0 = 0
+ *             * ACBUS4/SPARE0 = EMU1 = 0
+ *     * CPLD logic: Disable loopback
+ *             * ACBUS6/SPARE2 = LOOPBACK = 0
+ */
+#define XDS100_nEMU_EN (1<<5)
+#define XDS100_nEMU0   (1<<6)
+
+#define XDS100_PWR_RST (1<<3)
+#define XDS100_nEMU1   (1<<4)
+#define XDS100_LOOPBACK        (1<<6)
 static int xds100v2_init(void)
 {
-       low_output    = 0x3A;
-       low_direction = 0x7B;
+       /* These are in the lower byte */
+       nTRST    = 0x10;
+       nTRSTnOE = 0x10;
+
+       /* These aren't actually used on 14 pin connectors */
+       /* These are in the upper byte */
+       nSRST    = 0x01;
+       nSRSTnOE = 0x01;
+
+       low_output    = 0x08 | nTRST | XDS100_nEMU_EN;
+       low_direction = 0x0b | nTRSTnOE | XDS100_nEMU_EN | XDS100_nEMU0;
 
-       /* initialize low byte for jtag */
        if (ft2232_set_data_bits_low_byte(low_output,low_direction) != ERROR_OK)
        {
                LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       nTRST    = 0x10;
-       nTRSTnOE = 0x0;     /* not output enable for nTRST */
-       nSRST    = 0x00;    /* TODO: SRST is not supported yet */
-       nSRSTnOE = 0x00;    /* no output enable for nSRST */
-
-       high_output    = 0x00;
-       high_direction = 0x59;
+       high_output = 0;
+       high_direction = nSRSTnOE | XDS100_LOOPBACK | XDS100_PWR_RST | XDS100_nEMU1;
 
        /* initialize high byte for jtag */
        if (ft2232_set_data_bits_high_byte(high_output,high_direction) != ERROR_OK)
        {
-               LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
+               LOG_ERROR("couldn't put CPLD in to reset with 'xds100v2' layout");
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       high_output    = 0x86;
-       high_direction = 0x59;
+       high_output |= XDS100_PWR_RST;
 
        /* initialize high byte for jtag */
        if (ft2232_set_data_bits_high_byte(high_output,high_direction) != ERROR_OK)
        {
-               LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
+               LOG_ERROR("couldn't bring CPLD out of reset with 'xds100v2' layout");
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -3151,16 +3291,27 @@ static void olimex_jtag_blink(void)
        buffer_write(high_direction);
 }
 
-static void flyswatter_jtag_blink(void)
+static void flyswatter_jtag_blink(unsigned char led)
+{
+       buffer_write(0x82);
+       buffer_write(high_output ^ led);
+       buffer_write(high_direction);
+}
+
+static void flyswatter1_jtag_blink(void)
 {
        /*
         * Flyswatter has two LEDs connected to ACBUS2 and ACBUS3
         */
-       high_output ^= 0x0c;
+       flyswatter_jtag_blink(0xc);
+}
 
-       buffer_write(0x82);
-       buffer_write(high_output);
-       buffer_write(high_direction);
+static void flyswatter2_jtag_blink(void)
+{
+       /*
+        * Flyswatter2 only has one LED connected to ACBUS2
+        */
+       flyswatter_jtag_blink(0x4);
 }
 
 static void turtle_jtag_blink(void)
@@ -3573,7 +3724,8 @@ static int signalyzer_h_led_set(unsigned char channel, unsigned char led,
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_DATA_BUFFER_ADDR,
                        ((uint32_t)(channel << 8) | led))) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write  returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write  returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -3581,7 +3733,8 @@ static int signalyzer_h_led_set(unsigned char channel, unsigned char led,
                        (SIGNALYZER_DATA_BUFFER_ADDR + 1),
                        ((uint32_t)(on_time << 8) | off_time))) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write  returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write  returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -3589,14 +3742,16 @@ static int signalyzer_h_led_set(unsigned char channel, unsigned char led,
                        (SIGNALYZER_DATA_BUFFER_ADDR + 2),
                        ((uint32_t)cycles))) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write  returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write  returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_COMMAND_ADDR,
                        SIGNALYZER_COMMAND_LED_SET)) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write  returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write  returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -3685,7 +3840,8 @@ static int signalyzer_h_init(void)
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_COMMAND_ADDR,
                        SIGNALYZER_COMMAND_VERSION)) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -3695,8 +3851,8 @@ static int signalyzer_h_init(void)
                        (SIGNALYZER_DATA_BUFFER_ADDR + i),
                        &read_buf[i])) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_read returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_read returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
        }
@@ -3709,21 +3865,24 @@ static int signalyzer_h_init(void)
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_DATA_BUFFER_ADDR,
                        (uint32_t)(signalyzer_h_side << 8))) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_DATA_BUFFER_ADDR + 1,
                        0x0404)) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_COMMAND_ADDR,
                        SIGNALYZER_COMMAND_GPIO_STATE)) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -3731,28 +3890,32 @@ static int signalyzer_h_init(void)
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_DATA_BUFFER_ADDR,
                        ((uint32_t)(signalyzer_h_side << 8) | 0x01))) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
        if ((status = signalyzer_h_ctrl_write(
                        (SIGNALYZER_DATA_BUFFER_ADDR + 1), 0xA000)) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
        if ((status = signalyzer_h_ctrl_write(
                        (SIGNALYZER_DATA_BUFFER_ADDR + 2), 0x0008)) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
        if ((status = signalyzer_h_ctrl_write(SIGNALYZER_COMMAND_ADDR,
                        SIGNALYZER_COMMAND_I2C)) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_write returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -3761,7 +3924,8 @@ static int signalyzer_h_init(void)
        if ((status = signalyzer_h_ctrl_read(SIGNALYZER_COMMAND_ADDR,
                        &read_buf[0])) != FT_OK)
        {
-               LOG_ERROR("signalyzer_h_ctrl_read returned: %lu", status);
+               LOG_ERROR("signalyzer_h_ctrl_read returned: %s",
+                               ftd2xx_status_string(status));
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -3775,8 +3939,8 @@ static int signalyzer_h_init(void)
                                        (SIGNALYZER_DATA_BUFFER_ADDR + i),
                                        &read_buf[i])) != FT_OK)
                        {
-                               LOG_ERROR("signalyzer_h_ctrl_read returned: %lu",
-                                       status);
+                               LOG_ERROR("signalyzer_h_ctrl_read returned: %s",
+                                               ftd2xx_status_string(status));
                                return ERROR_JTAG_DEVICE_ERROR;
                        }
                }
@@ -3840,16 +4004,16 @@ static int signalyzer_h_init(void)
                                ((uint32_t)(signalyzer_h_side << 8) | 0x01)))
                        != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                               status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
                if ((status = signalyzer_h_ctrl_write(SIGNALYZER_COMMAND_ADDR,
                                SIGNALYZER_COMMAND_POWERCONTROL_SET)) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -3858,8 +4022,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR,
                                (uint32_t)(signalyzer_h_side << 8))) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -3867,16 +4031,16 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR + 1, 0x0000))
                        != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
                if ((status = signalyzer_h_ctrl_write(SIGNALYZER_COMMAND_ADDR,
                                SIGNALYZER_COMMAND_GPIO_MODE)) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -3885,8 +4049,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR,
                                (uint32_t)(signalyzer_h_side << 8))) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -3894,8 +4058,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR + 1, 0x4040))
                        != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -3903,8 +4067,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_COMMAND_ADDR,
                                SIGNALYZER_COMMAND_GPIO_STATE)) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 #endif
@@ -3975,8 +4139,8 @@ static int signalyzer_h_init(void)
                                ((uint32_t)(signalyzer_h_side << 8) | 0x01)))
                        != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -3984,8 +4148,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_COMMAND_ADDR,
                                SIGNALYZER_COMMAND_POWERCONTROL_SET)) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -3996,8 +4160,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR,
                                (uint32_t)(signalyzer_h_side << 8))) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -4005,8 +4169,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR + 1, 0x0060))
                        != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -4014,8 +4178,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_COMMAND_ADDR,
                                SIGNALYZER_COMMAND_GPIO_MODE)) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -4026,8 +4190,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR,
                                (uint32_t)(signalyzer_h_side << 8))) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -4035,8 +4199,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_DATA_BUFFER_ADDR + 1, 0x0000))
                        != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 
@@ -4044,8 +4208,8 @@ static int signalyzer_h_init(void)
                                SIGNALYZER_COMMAND_ADDR,
                                SIGNALYZER_COMMAND_GPIO_STATE)) != FT_OK)
                {
-                       LOG_ERROR("signalyzer_h_ctrl_write returned: %lu",
-                                       status);
+                       LOG_ERROR("signalyzer_h_ctrl_write returned: %s",
+                                       ftd2xx_status_string(status));
                        return ERROR_JTAG_DEVICE_ERROR;
                }
 #endif

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)