diff --git a/CMSIS_5 b/CMSIS_5 index aa59348..a75f017 160000 --- a/CMSIS_5 +++ b/CMSIS_5 @@ -1 +1 @@ -Subproject commit aa59348ad1dda9333de68c0e114e9a5252dc63a8 +Subproject commit a75f01746df18bb5b929dfb8dc6c9407fac3a0f3 diff --git a/src/cmsis-dap/dap_util.c b/src/cmsis-dap/dap_util.c index 4cc16d2..16feea4 100755 --- a/src/cmsis-dap/dap_util.c +++ b/src/cmsis-dap/dap_util.c @@ -407,7 +407,7 @@ daptool_t DAP_FingerprintTool(const uint8_t *request, uint32_t request_len) cnt = 0; tool = E_DAPTOOL_UNKNOWN; } - else if (request_len >= 2) { + else if (request_len >= 2 && cnt < 3) { ++cnt; if (cnt == 1) { @@ -419,21 +419,33 @@ daptool_t DAP_FingerprintTool(const uint8_t *request, uint32_t request_len) } } else if (cnt == 2) { - if (request[0] != ID_DAP_Info || request[1] != DAP_ID_FW_VER) + if (request[0] != ID_DAP_Info || request[1] != DAP_ID_DAP_FW_VER) { tool = E_DAPTOOL_UNKNOWN; } } else if (cnt == 3) { - if (tool == E_DAPTOOL_PYOCD && (request[0] != ID_DAP_Info || request[1] != DAP_ID_PACKET_SIZE)) { - tool = E_DAPTOOL_UNKNOWN; + if (tool == E_DAPTOOL_PYOCD && request[0] == ID_DAP_Info && request[1] == DAP_ID_PACKET_SIZE) { + // ok (not sure if still used) } - else if (tool == E_DAPTOOL_OPENOCD && (request[0] != ID_DAP_Info || request[1] != DAP_ID_SER_NUM)) { + else if (tool == E_DAPTOOL_PYOCD && request[0] == ID_DAP_Info && request[1] == DAP_ID_PRODUCT_FW_VER) { + // ok (with DAP 2.1.2 & pyOCD 0.35) + } + else if (tool == E_DAPTOOL_OPENOCD && request[0] == ID_DAP_Info && request[1] == DAP_ID_SER_NUM) { + // ok (with OpenOCD 0.11/0.12) + } + else { tool = E_DAPTOOL_UNKNOWN; } } } +#if 0 + if (request != NULL) { + printf("fingerprint: %d %02x %02x %d\n", cnt, request[0], request[1], tool); + } +#endif + return (cnt < 3) ? E_DAPTOOL_UNKNOWN : tool; } // DAP_FingerprintTool