USB composite device example program, drag-and-drop flash writer.

Dependencies:   SWD USBDevice mbed BaseDAP

Revision:
0:2385683c867a
Child:
1:ea8e179320d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/mydebug.cpp	Tue Sep 17 04:33:44 2013 +0000
@@ -0,0 +1,180 @@
+// mydebug.cpp 2013/4/22
+#include "mydebug.h"
+#ifdef MY_DEBUG
+#include <string.h>
+void debug_hex(uint8_t* buf, int len)
+{
+    for(int i = 0; i < len; i++) {
+        if ((i%16) == 0) {
+            debug("+%04x:", i);
+        }
+        debug(" %02x", buf[i]);
+        if ((i%16) == 15) {
+            debug("\n");
+        }
+    }
+    debug("\n");
+}
+
+void debug_dap_request(uint8_t* buf, int len)
+{
+    printf("uint8_t req[] = ");
+    for(int i = 0; i < len; i++) {
+        printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]);
+    }
+    printf("};\n");
+    char* cmd;
+    char* param = "";
+    char tmp[128];
+    uint32_t count;
+    int disp_hex = 0;
+    switch(buf[0]) {
+        case 0x00:
+            cmd = "Info";
+            switch(buf[1]) {
+                case 1:    param = "VENDOR"; break;
+                case 2:    param = "PRODUCT"; break;
+                case 3:    param = "SER_NUM"; break;
+                case 4:    param = "FW_VER"; break;
+                case 0xfe: param = "PACKET_COUNT"; break;
+                case 0xff: param = "PACKET_SIZE"; break;
+                default:   param = "???"; break;
+            }
+            break;
+        case 0x01:
+            cmd = "LED";
+            param = tmp;
+            switch(buf[1]) {
+                case 0: strcpy(tmp, "DEBUGGER_CONNECTED"); break;
+                case 1: strcpy(tmp, "TARGET_RUNNING"); break;
+                default: strcpy(tmp, "???"); break;
+            }
+            strcat(tmp, (buf[2]&0x01) ? " ON" : " OFF"); 
+            break;
+        case 0x02:
+            cmd = "Connect";
+            switch(buf[1]) {
+                case 0: param = "AUTODETECT"; break;
+                case 1: param = "SWD"; break;
+                case 2: param = "JTAG"; break;
+                default: param = "???"; break;
+            }
+            break;
+        case 0x03: cmd = "Disconnect"; break;
+        case 0x04: cmd = "TransferConfigure"; break;
+        case 0x05:
+            cmd = "Transfer";
+            disp_hex = 16;
+            break;
+        case 0x06:
+            cmd = "TransferBlock";
+            disp_hex = 16;
+            break;
+        case 0x07: cmd = "TransferAbort"; break;
+        case 0x08: cmd = "WriteABORT"; break;
+        case 0x09: cmd = "Delay"; break;
+        case 0x0a: cmd = "ResetTarget"; break;
+        case 0x10:
+            cmd = "SWJ_Pins";
+            snprintf(tmp, sizeof(tmp), "wait: %d us", buf[3]|buf[4]<<8|buf[5]<<16|buf[6]<<24);
+            if (buf[2] & 0x01) {
+                strcat(tmp, " SWCLK_TCK ");
+                strcat(tmp, (buf[1] & 0x01) ? "ON" : "OFF");
+            }
+            if (buf[2] & 0x02) {
+                strcat(tmp, " SWDIO_TMS ");
+                strcat(tmp, (buf[1] & 0x02) ? "ON" : "OFF");
+            }
+            if (buf[2] & 0x04) {
+                strcat(tmp, " TDI ");
+                strcat(tmp, (buf[1] & 0x04) ? "ON" : "OFF");
+            }
+            if (buf[2] & 0x08) {
+                strcat(tmp, " TDO ");
+                strcat(tmp, (buf[1] & 0x08) ? "ON" : "OFF");
+            }
+            if (buf[2] & 0x20) {
+                strcat(tmp, " nTRST ");
+                strcat(tmp, (buf[1] & 0x20) ? "ON" : "OFF");
+            }
+            if (buf[2] & 0x80) {
+                strcat(tmp, " nRESET ");
+                strcat(tmp, (buf[1] & 0x80) ? "ON" : "OFF");
+            }
+            param = tmp;
+            break;
+        case 0x11: 
+            cmd = "SWJ_Clock";
+            snprintf(tmp, sizeof(tmp), "%d Hz", buf[1]|buf[2]<<8|buf[3]<<16|buf[4]<<24);
+            param = tmp;
+            break;
+        case 0x12:
+            cmd = "SWJ_Sequence";
+            count = buf[1];
+            snprintf(tmp, sizeof(tmp), "count: %d", count);
+            param = tmp;
+            break;
+        case 0x13:
+            cmd = "SWD_Configure";
+            snprintf(tmp, sizeof(tmp), "turnaround: %d, data_phase: %d", (buf[1]&0x03)+1, (buf[1]&0x04) ? 1 : 0); 
+            param = tmp;
+            break;
+        case 0x14:
+            cmd = "JTAG_Sequence";
+            disp_hex = 16;
+            break;
+        default:
+            cmd = "???";
+            disp_hex = 16;
+            break;
+    }
+    debug("DAP: %s %s ", cmd, param);
+    for(int i = 0; i < disp_hex; i++) {
+        debug("%02x ", buf[i]);
+    }
+    debug("\n");
+}
+
+void debug_dap_response(uint8_t* buf, int len)
+{
+    printf("uint8_t res[] = ");
+    for(int i = 0; i < len; i++) {
+        printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]);
+    }
+    printf("};\n");
+}
+
+void debug_swd_transfer(uint8_t request, uint32_t wdata, uint32_t rdata, uint8_t ack)
+{
+    debug("SWD: ");
+    if (ack != 0x01) {
+        debug("ERR req=%02x wdata=%08x rdata=%08x ack=%02x\n", request, wdata, rdata, ack); 
+        return;
+    }
+    switch(request) {
+        case 0x00: debug("DP_ABORT %08x",       wdata); break;
+        case 0x01: debug("AP_CSW W %08x",       wdata); break;
+        case 0x02: debug("DP_IDCODE %08x",      rdata); break;
+        case 0x03: debug("AP_CSW R %08x",       rdata); break;
+        case 0x04: debug("DP_CTRL_STAT W %08x", wdata); break;
+        case 0x05: debug("AP_TAR W %08x",       wdata); break;
+        case 0x06: debug("DP_CTRL_STAT R %08x", rdata); break;
+        case 0x07: debug("AP_TAR R %08x",       rdata); break;
+        case 0x08: debug("DP_SELECT %08x",      wdata); break;
+        case 0x0a: debug("DP_RESEND %08x",      rdata); break;
+        //case 0x0b: debug("DP_RDBUFF W %08x",    wdata); break;
+        case 0x0d: debug("AP_DRW W %08x",       wdata); break;
+        case 0x0e: debug("DP_RDBUFF %08x",      rdata); break;
+        case 0x0f: debug("AP_DRW R %08x",       rdata); break;
+        default:
+            debug("request=%02x wdata=%08x rdata=%08x ack=%02x", request, wdata, rdata, ack); 
+            break; 
+    }
+    debug(" request=%02x(%s %s %x) wdata=%08x rdata=%08x ack=%02x", request, 
+                                                                 request&1?"AP":"DP", request&2?"R":"nW",
+                                                                        request&0xfc,
+                                                                        wdata, rdata, ack); 
+    debug("\n");
+}
+
+#endif