aboutsummaryrefslogtreecommitdiff
path: root/src/jtag/drivers/cmsis_dap_usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jtag/drivers/cmsis_dap_usb.c')
-rw-r--r--src/jtag/drivers/cmsis_dap_usb.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/jtag/drivers/cmsis_dap_usb.c b/src/jtag/drivers/cmsis_dap_usb.c
index 035cc446..9d6bf7fc 100644
--- a/src/jtag/drivers/cmsis_dap_usb.c
+++ b/src/jtag/drivers/cmsis_dap_usb.c
@@ -1670,6 +1670,30 @@ COMMAND_HANDLER(cmsis_dap_handle_info_command)
return ERROR_OK;
}
+COMMAND_HANDLER(cmsis_dap_handle_cmd_command)
+{
+ int retval;
+ unsigned i;
+ uint8_t *buffer = cmsis_dap_handle->packet_buffer;
+
+ buffer[0] = 0; /* report number */
+
+ for (i = 0; i < CMD_ARGC; i++)
+ buffer[i + 1] = strtoul(CMD_ARGV[i], NULL, 16);
+
+ retval = cmsis_dap_usb_xfer(cmsis_dap_handle, CMD_ARGC + 1);
+
+ if (retval != ERROR_OK) {
+ LOG_ERROR("CMSIS-DAP command failed.");
+ return ERROR_JTAG_DEVICE_ERROR;
+ }
+
+ LOG_INFO("Returned data %02" PRIx8 " %02" PRIx8 " %02" PRIx8 " %02" PRIx8,
+ buffer[1], buffer[2], buffer[3], buffer[4]);
+
+ return ERROR_OK;
+}
+
COMMAND_HANDLER(cmsis_dap_handle_vid_pid_command)
{
if (CMD_ARGC > MAX_USB_IDS * 2) {
@@ -1729,6 +1753,13 @@ static const struct command_registration cmsis_dap_subcommand_handlers[] = {
.usage = "",
.help = "show cmsis-dap info",
},
+ {
+ .name = "cmd",
+ .handler = &cmsis_dap_handle_cmd_command,
+ .mode = COMMAND_EXEC,
+ .usage = "",
+ .help = "issue cmsis-dap command",
+ },
COMMAND_REGISTRATION_DONE
};