Skip to content

Commit 58d9d88

Browse files
maxd-nordicaescolar
authored andcommitted
dap: add support for DAP_INFO string elements
Add support for DAP_INFO string elements. Signed-off-by: Maximilian Deubel <[email protected]>
1 parent 6522dd7 commit 58d9d88

File tree

3 files changed

+99
-9
lines changed

3 files changed

+99
-9
lines changed

subsys/dap/Kconfig

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,30 @@ config CMSIS_DAP_PACKET_SIZE
2424
help
2525
Maximum packet size for request and response data.
2626

27+
config CMSIS_DAP_PROBE_VENDOR
28+
string "Probe vendor"
29+
default "Zephyr"
30+
31+
config CMSIS_DAP_PROBE_NAME
32+
string "Probe name"
33+
default "CMSIS-DAP"
34+
35+
config CMSIS_DAP_BOARD_VENDOR
36+
string "Target board vendor"
37+
default ""
38+
39+
config CMSIS_DAP_BOARD_NAME
40+
string "Target board name"
41+
default ""
42+
43+
config CMSIS_DAP_DEVICE_VENDOR
44+
string "Target device vendor"
45+
default ""
46+
47+
config CMSIS_DAP_DEVICE_NAME
48+
string "Target device name"
49+
default ""
50+
2751
module = DAP
2852
module-str = dap
2953
source "subsys/logging/Kconfig.template.log_config"

subsys/dap/cmsis_dap.c

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,13 @@
1818
#include <zephyr/init.h>
1919
#include <zephyr/sys/byteorder.h>
2020
#include <zephyr/drivers/swdp.h>
21+
#include <stdint.h>
2122

2223
#include <cmsis_dap.h>
2324

2425
#include <zephyr/logging/log.h>
2526
LOG_MODULE_REGISTER(dap, CONFIG_DAP_LOG_LEVEL);
2627

27-
const char dap_fw_ver[] = DAP_FW_VER;
28-
2928
#define DAP_STATE_CONNECTED 0
3029

3130
struct dap_context {
@@ -48,6 +47,25 @@ struct dap_context {
4847

4948
static struct dap_context dap_ctx[1];
5049

50+
BUILD_ASSERT(sizeof(CONFIG_CMSIS_DAP_PROBE_VENDOR) <=
51+
MIN(CONFIG_CMSIS_DAP_PACKET_SIZE - 2, UINT8_MAX - 2),
52+
"PROBE_VENDOR string is too long.");
53+
BUILD_ASSERT(sizeof(CONFIG_CMSIS_DAP_PROBE_NAME) <=
54+
MIN(CONFIG_CMSIS_DAP_PACKET_SIZE - 2, UINT8_MAX - 2),
55+
"PROBE_NAME string is too long.");
56+
BUILD_ASSERT(sizeof(CONFIG_CMSIS_DAP_BOARD_VENDOR) <=
57+
MIN(CONFIG_CMSIS_DAP_PACKET_SIZE - 2, UINT8_MAX - 2),
58+
"BOARD_VENDOR string is too long.");
59+
BUILD_ASSERT(sizeof(CONFIG_CMSIS_DAP_BOARD_NAME) <=
60+
MIN(CONFIG_CMSIS_DAP_PACKET_SIZE - 2, UINT8_MAX - 2),
61+
"BOARD_NAME string is too long.");
62+
BUILD_ASSERT(sizeof(CONFIG_CMSIS_DAP_DEVICE_VENDOR) <=
63+
MIN(CONFIG_CMSIS_DAP_PACKET_SIZE - 2, UINT8_MAX - 2),
64+
"DEVICE_VENDOR string is too long.");
65+
BUILD_ASSERT(sizeof(CONFIG_CMSIS_DAP_DEVICE_NAME) <=
66+
MIN(CONFIG_CMSIS_DAP_PACKET_SIZE - 2, UINT8_MAX - 2),
67+
"DEVICE_NAME string is too long.");
68+
5169
/* Get DAP Information */
5270
static uint16_t dap_info(struct dap_context *const ctx,
5371
const uint8_t *const request,
@@ -59,30 +77,68 @@ static uint16_t dap_info(struct dap_context *const ctx,
5977

6078
switch (id) {
6179
case DAP_ID_VENDOR:
62-
LOG_DBG("ID_VENDOR unsupported");
80+
LOG_DBG("ID_VENDOR");
81+
memcpy(info, CONFIG_CMSIS_DAP_PROBE_VENDOR,
82+
sizeof(CONFIG_CMSIS_DAP_PROBE_VENDOR));
83+
length = sizeof(CONFIG_CMSIS_DAP_PROBE_VENDOR);
6384
break;
6485
case DAP_ID_PRODUCT:
65-
LOG_DBG("ID_PRODUCT unsupported");
86+
LOG_DBG("ID_PRODUCT");
87+
memcpy(info, CONFIG_CMSIS_DAP_PROBE_NAME,
88+
sizeof(CONFIG_CMSIS_DAP_PROBE_NAME));
89+
length = sizeof(CONFIG_CMSIS_DAP_PROBE_NAME);
6690
break;
6791
case DAP_ID_SER_NUM:
92+
/* optional to implement */
6893
LOG_DBG("ID_SER_NUM unsupported");
6994
break;
7095
case DAP_ID_FW_VER:
7196
LOG_DBG("ID_FW_VER");
72-
memcpy(info, dap_fw_ver, sizeof(dap_fw_ver));
73-
length = (uint8_t)sizeof(dap_fw_ver);
97+
memcpy(info, DAP_FW_VER, sizeof(DAP_FW_VER));
98+
length = sizeof(DAP_FW_VER);
7499
break;
75100
case DAP_ID_DEVICE_VENDOR:
76-
LOG_DBG("ID_DEVICE_VENDOR unsupported");
101+
LOG_DBG("ID_DEVICE_VENDOR");
102+
memcpy(info, CONFIG_CMSIS_DAP_DEVICE_VENDOR,
103+
sizeof(CONFIG_CMSIS_DAP_DEVICE_VENDOR));
104+
length = sizeof(CONFIG_CMSIS_DAP_DEVICE_VENDOR);
77105
break;
78106
case DAP_ID_DEVICE_NAME:
79-
LOG_DBG("ID_DEVICE_NAME unsupported");
107+
LOG_DBG("ID_DEVICE_NAME");
108+
memcpy(info, CONFIG_CMSIS_DAP_DEVICE_NAME,
109+
sizeof(CONFIG_CMSIS_DAP_DEVICE_NAME));
110+
length = sizeof(CONFIG_CMSIS_DAP_DEVICE_NAME);
111+
break;
112+
case DAP_ID_BOARD_VENDOR:
113+
LOG_DBG("ID_BOARD_VENDOR");
114+
memcpy(info, CONFIG_CMSIS_DAP_BOARD_VENDOR,
115+
sizeof(CONFIG_CMSIS_DAP_BOARD_VENDOR));
116+
length = sizeof(CONFIG_CMSIS_DAP_BOARD_VENDOR);
117+
break;
118+
case DAP_ID_BOARD_NAME:
119+
memcpy(info, CONFIG_CMSIS_DAP_BOARD_NAME,
120+
sizeof(CONFIG_CMSIS_DAP_BOARD_NAME));
121+
length = sizeof(CONFIG_CMSIS_DAP_BOARD_NAME);
122+
LOG_DBG("ID_BOARD_NAME");
123+
break;
124+
case DAP_ID_PRODUCT_FW_VER:
125+
/* optional to implement */
126+
LOG_DBG("ID_PRODUCT_FW_VER unsupported");
80127
break;
81128
case DAP_ID_CAPABILITIES:
82129
info[0] = ctx->capabilities;
83130
LOG_DBG("ID_CAPABILITIES 0x%0x", info[0]);
84131
length = 1U;
85132
break;
133+
case DAP_ID_TIMESTAMP_CLOCK:
134+
LOG_DBG("ID_TIMESTAMP_CLOCK unsupported");
135+
break;
136+
case DAP_ID_UART_RX_BUFFER_SIZE:
137+
LOG_DBG("ID_UART_RX_BUFFER_SIZE unsupported");
138+
break;
139+
case DAP_ID_UART_TX_BUFFER_SIZE:
140+
LOG_DBG("ID_UART_TX_BUFFER_SIZE unsupported");
141+
break;
86142
case DAP_ID_SWO_BUFFER_SIZE:
87143
LOG_DBG("ID_SWO_BUFFER_SIZE unsupported");
88144
break;
@@ -101,7 +157,7 @@ static uint16_t dap_info(struct dap_context *const ctx,
101157
break;
102158
}
103159

104-
response[0] = (uint8_t)length;
160+
response[0] = length;
105161

106162
return length + 1U;
107163
}

subsys/dap/cmsis_dap.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,17 @@
3636
#define ID_DAP_WRITE_ABORT 0x08U
3737
#define ID_DAP_DELAY 0x09U
3838
#define ID_DAP_RESET_TARGET 0x0AU
39+
3940
#define ID_DAP_SWJ_PINS 0x10U
4041
#define ID_DAP_SWJ_CLOCK 0x11U
4142
#define ID_DAP_SWJ_SEQUENCE 0x12U
43+
4244
#define ID_DAP_SWDP_CONFIGURE 0x13U
45+
4346
#define ID_DAP_JTAG_SEQUENCE 0x14U
4447
#define ID_DAP_JTAG_CONFIGURE 0x15U
4548
#define ID_DAP_JTAG_IDCODE 0x16U
49+
4650
#define ID_DAP_SWO_TRANSPORT 0x17U
4751
#define ID_DAP_SWO_MODE 0x18U
4852
#define ID_DAP_SWO_BAUDRATE 0x19U
@@ -69,7 +73,13 @@
6973
#define DAP_ID_FW_VER 0x04U
7074
#define DAP_ID_DEVICE_VENDOR 0x05U
7175
#define DAP_ID_DEVICE_NAME 0x06U
76+
#define DAP_ID_BOARD_VENDOR 0x07U
77+
#define DAP_ID_BOARD_NAME 0x08U
78+
#define DAP_ID_PRODUCT_FW_VER 0x09U
7279
#define DAP_ID_CAPABILITIES 0xF0U
80+
#define DAP_ID_TIMESTAMP_CLOCK 0xF1U
81+
#define DAP_ID_UART_RX_BUFFER_SIZE 0xFBU
82+
#define DAP_ID_UART_TX_BUFFER_SIZE 0xFCU
7383
#define DAP_ID_SWO_BUFFER_SIZE 0xFDU
7484
#define DAP_ID_PACKET_COUNT 0xFEU
7585
#define DAP_ID_PACKET_SIZE 0xFFU

0 commit comments

Comments
 (0)