devs = hid_enumerate(0x0, 0x0);
cur_dev = devs;
while (NULL != cur_dev) {
- if ((0 == cmsis_dap_vid[0]) && wcsstr(cur_dev->product_string, L"CMSIS-DAP")) {
- /*
- if the user hasn't specified VID:PID *and*
- product string contains "CMSIS-DAP", pick it
- */
- break;
+ if (0 == cmsis_dap_vid[0]) {
+ if (NULL == cur_dev->product_string) {
+ LOG_DEBUG("Cannot read product string of device 0x%x:0x%x",
+ cur_dev->vendor_id, cur_dev->product_id);
+ } else {
+ if (wcsstr(cur_dev->product_string, L"CMSIS-DAP"))
+ /*
+ if the user hasn't specified VID:PID *and*
+ product string contains "CMSIS-DAP", pick it
+ */
+ break;
+ }
} else {
/*
otherwise, exhaustively compare against all VID:PID in list
int packet_size = PACKET_SIZE;
/* atmel cmsis-dap uses 512 byte reports */
- if (target_vid == 0x03eb && target_pid == 0x2111)
+ if (target_vid == 0x03eb)
packet_size = 512 + 1;
cmsis_dap_handle->packet_buffer = malloc(packet_size);
return retval;
}
-static int cmsis_dap_swd_read_block(uint8_t cmd, uint32_t blocksize, uint8_t *dest_buf)
-{
- uint8_t *buffer;
- int tfer_sz;
- int retval = ERROR_OK;
- uint16_t read_count;
-
- DEBUG_IO("CMSIS-DAP: Read Block 0x%02" PRIx8 " %" PRIu32, cmd, blocksize);
-
- while (blocksize) {
-
- buffer = cmsis_dap_handle->packet_buffer;
- tfer_sz = blocksize;
- if (tfer_sz > 15)
- tfer_sz = 8;
-
- buffer[0] = 0; /* report number */
- buffer[1] = CMD_DAP_TFER_BLOCK;
- buffer[2] = 0x00;
- buffer[3] = tfer_sz;
- buffer[4] = 0x00;
- buffer[5] = cmd;
- retval = cmsis_dap_usb_xfer(cmsis_dap_handle, 6);
-
- read_count = le_to_h_u16(&buffer[1]);
- if (read_count != tfer_sz) {
- LOG_ERROR("CMSIS-DAP: Block Read Error (0x%02" PRIx8 ")", buffer[3]);
- retval = buffer[3];
- }
-
- read_count *= 4;
- memcpy(dest_buf, &buffer[4], read_count);
-
- dest_buf += read_count;
- blocksize -= tfer_sz;
- }
-
- return retval;
-}
-
static int cmsis_dap_get_version_info(void)
{
uint8_t *data;
COMMAND_REGISTRATION_DONE
};
-COMMAND_HANDLER(cmsis_dap_reset_command)
-{
- LOG_DEBUG("cmsis_dap_reset_command");
- return ERROR_OK;
-}
-
-COMMAND_HANDLER(cmsis_dap_jtag_command)
-{
- LOG_DEBUG("cmsis_dap_jtag_command");
- return ERROR_OK;
-}
-
-static const struct command_registration cmsis_dap_jtag_subcommand_handlers[] = {
- {
- .name = "init",
- .mode = COMMAND_ANY,
- .handler = cmsis_dap_jtag_command,
- .usage = ""
- },
- {
- .name = "arp_init",
- .mode = COMMAND_ANY,
- .handler = cmsis_dap_jtag_command,
- .usage = ""
- },
- {
- .name = "arp_init-reset",
- .mode = COMMAND_ANY,
- .handler = cmsis_dap_reset_command,
- .usage = ""
- },
- {
- .name = "tapisenabled",
- .mode = COMMAND_EXEC,
- .jim_handler = jim_jtag_tap_enabler,
- },
- {
- .name = "tapenable",
- .mode = COMMAND_EXEC,
- .jim_handler = jim_jtag_tap_enabler,
- },
- {
- .name = "tapdisable",
- .mode = COMMAND_EXEC,
- .handler = cmsis_dap_jtag_command,
- .usage = "",
- },
- {
- .name = "configure",
- .mode = COMMAND_EXEC,
- .handler = cmsis_dap_jtag_command,
- .usage = "",
- },
- {
- .name = "cget",
- .mode = COMMAND_EXEC,
- .jim_handler = jim_jtag_configure,
- },
- {
- .name = "names",
- .mode = COMMAND_ANY,
- .handler = cmsis_dap_jtag_command,
- .usage = "",
- },
- COMMAND_REGISTRATION_DONE
-};
-
static const struct command_registration cmsis_dap_command_handlers[] = {
{
.name = "cmsis-dap",
.help = "the vendor ID and product ID of the CMSIS-DAP device",
.usage = "(vid pid)* ",
},
- {
- /* this is currently a nasty hack so we get
- * reset working with non jtag interfaces */
- .name = "jtag",
- .mode = COMMAND_ANY,
- .usage = "",
- .chain = cmsis_dap_jtag_subcommand_handlers,
- },
COMMAND_REGISTRATION_DONE
};
.init = cmsis_dap_swd_init,
.read_reg = cmsis_dap_swd_read_reg,
.write_reg = cmsis_dap_swd_write_reg,
- .read_block = cmsis_dap_swd_read_block
};
const char *cmsis_dap_transport[] = {"cmsis-dap", NULL};