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>
2526LOG_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
3130struct dap_context {
@@ -48,6 +47,25 @@ struct dap_context {
4847
4948static 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 */
5270static 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}
0 commit comments