st-info: Add support for OpenOCD hla_serial printing
authorJerry Jacobs <jerry.jacobs@dualinventive.com>
Fri, 29 Apr 2016 07:44:22 +0000 (09:44 +0200)
committerJerry Jacobs <jerry.jacobs@dualinventive.com>
Fri, 29 Apr 2016 08:19:03 +0000 (10:19 +0200)
README
src/st-info.c
src/stlink-usb.c

diff --git a/README b/README
index d85fda7eb2e8632e6edb418cf8f0764362e0dc55..e5a51cf5e155c6401b552dc579ea410fdbe83198 100644 (file)
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
 STMicroelectronics Stlink Tools
 ===============================
 
-[![Build Status](https://travis-ci.org/xor-gate/stlink.svg?branch=travis)](https://travis-ci.org/xor-gate/stlink)
+[![Build Status](https://travis-ci.org/texane/stlink.svg?branch=travis)](https://travis-ci.org/texane/stlink)
 
 ## HOWTO
 
index 2cea40e5c2b602a45aabde482d48f646e68df085..cf61bccbf2c1b57ea0aff4c6e537397824b5176e 100644 (file)
@@ -13,9 +13,30 @@ static void usage(void)
     puts("st-info --pagesize");
     puts("st-info --chipid");
     puts("st-info --serial");
+    puts("st-info --hla-serial");
     puts("st-info --probe");
 }
 
+/* Print normal or OpenOCD hla_serial with newline */
+static void stlink_print_serial(stlink_t *sl, bool openocd)
+{
+    const char *fmt;
+
+    if (openocd) {
+       printf("\"");
+       fmt = "\\x%02x";
+    } else {
+       fmt = "%02x";
+    }
+
+    for (int n = 0; n < sl->serial_size; n++)
+        printf(fmt, sl->serial[n]);
+
+    if (openocd)
+       printf("\"");
+    printf("\n");
+}
+
 static void stlink_print_info(stlink_t *sl)
 {
     const chip_params_t *params = NULL;
@@ -23,13 +44,14 @@ static void stlink_print_info(stlink_t *sl)
     if (!sl)
         return;
 
-    for (int n = 0; n < sl->serial_size; n++)
-        printf("%02x", sl->serial[n]);
-    printf("\n");
+    printf(" serial: ");
+    stlink_print_serial(sl, false);
+    printf("openocd: ");
+    stlink_print_serial(sl, true);
 
-    printf("\t flash: %zu (pagesize: %zu)\n", sl->flash_size, sl->flash_pgsz);
-    printf("\t  sram: %zu\n",       sl->sram_size);
-    printf("\tchipid: 0x%.4x\n",    sl->chip_id);
+    printf("  flash: %zu (pagesize: %zu)\n", sl->flash_size, sl->flash_pgsz);
+    printf("   sram: %zu\n",       sl->sram_size);
+    printf(" chipid: 0x%.4x\n",    sl->chip_id);
 
     for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
         if (devices[i].chip_id == sl->chip_id) {
@@ -39,7 +61,7 @@ static void stlink_print_info(stlink_t *sl)
     }
 
     if (params)
-        printf("\t descr: %s\n", params->description);
+        printf(" descr: %s\n", params->description);
 }
 
 static void stlink_probe(void)
@@ -59,7 +81,6 @@ static void stlink_probe(void)
 
 static int print_data(stlink_t *sl, char **av)
 {
-    int ret = 0;
     if (strcmp(av[1], "--flash") == 0)
         printf("0x%zx\n", sl->flash_size);
     else if (strcmp(av[1], "--sram") == 0)
@@ -70,11 +91,11 @@ static int print_data(stlink_t *sl, char **av)
         printf("0x%.4x\n", sl->chip_id);
     else if (strcmp(av[1], "--probe") == 0)
         stlink_probe();
-    else if (strcmp(av[1], "--serial") == 0) {
-        for (int n = 0; n < sl->serial_size; n++)
-            printf("%02x", sl->serial[n]);
-        printf("\n");
-    else if (strcmp(av[1], "--descr") == 0) {
+    else if (strcmp(av[1], "--serial") == 0)
+        stlink_print_serial(sl, false);
+    else if (strcmp(av[1], "--hla-serial") == 0)
+        stlink_print_serial(sl, true);
+    else if (strcmp(av[1], "--descr") == 0) {
         const chip_params_t *params = NULL;
         for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
             if(devices[i].chip_id == sl->chip_id) {
@@ -87,7 +108,8 @@ static int print_data(stlink_t *sl, char **av)
         }
         printf("%s\n", params->description);
     }
-    return ret;
+
+    return 0;
 }
 
 
@@ -115,7 +137,9 @@ int main(int ac, char** av)
     if (sl == NULL) {
         return -1;
     }
-    sl->verbose=0;
+
+    sl->verbose = 0;
+
     if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE)
         stlink_exit_dfu_mode(sl);
 
index 24f9769880fc9f3303fd0350db2b02d6e28b99ba..e7e029880814c4ff553fe27c4cdbeff436986ad7 100644 (file)
@@ -940,8 +940,10 @@ static size_t stlink_probe_usb_devs(libusb_device **devs, stlink_t **sldevs[]) {
             WLOG("failed to get libusb device descriptor\n");
             break;
         }
+
         ret = libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, (unsigned char *)&serial, sizeof(serial));
-       if (ret < 0) *serial = 0;
+        if (ret < 0)
+          *serial = NULL;
 
         libusb_close(handle);