cmsis-dap: add serial number support
Change-Id: I66926d1013e2b3a43ce0d18d3599771428706b6a Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/2329 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
parent
ef02315de3
commit
885f438814
|
@ -2585,6 +2585,11 @@ cmsis_dap_vid_pid 0xc251 0xf001 0x0d28 0x0204
|
||||||
@end example
|
@end example
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Config Command} {cmsis_dap_serial} [serial]
|
||||||
|
Specifies the @var{serial} of the CMSIS-DAP device to use.
|
||||||
|
If not specified, serial numbers are not considered.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
@deffn {Command} {cmsis-dap info}
|
@deffn {Command} {cmsis-dap info}
|
||||||
Display various device information, like hardware version, firmware version, current bus status.
|
Display various device information, like hardware version, firmware version, current bus status.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
/* vid = pid = 0 marks the end of the list */
|
/* vid = pid = 0 marks the end of the list */
|
||||||
static uint16_t cmsis_dap_vid[MAX_USB_IDS + 1] = { 0 };
|
static uint16_t cmsis_dap_vid[MAX_USB_IDS + 1] = { 0 };
|
||||||
static uint16_t cmsis_dap_pid[MAX_USB_IDS + 1] = { 0 };
|
static uint16_t cmsis_dap_pid[MAX_USB_IDS + 1] = { 0 };
|
||||||
|
static wchar_t *cmsis_dap_serial;
|
||||||
static bool swd_mode;
|
static bool swd_mode;
|
||||||
|
|
||||||
#define PACKET_SIZE (64 + 1) /* 64 bytes plus report id */
|
#define PACKET_SIZE (64 + 1) /* 64 bytes plus report id */
|
||||||
|
@ -201,6 +202,11 @@ static int cmsis_dap_usb_open(void)
|
||||||
|
|
||||||
if (found) {
|
if (found) {
|
||||||
/* we have found an adapter, so exit further checks */
|
/* we have found an adapter, so exit further checks */
|
||||||
|
/* check serial number matches if given */
|
||||||
|
if (cmsis_dap_serial != NULL) {
|
||||||
|
if (wcscmp(cmsis_dap_serial, cur_dev->serial_number) == 0)
|
||||||
|
break;
|
||||||
|
} else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,6 +284,11 @@ static void cmsis_dap_usb_close(struct cmsis_dap *dap)
|
||||||
cmsis_dap_handle = NULL;
|
cmsis_dap_handle = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cmsis_dap_serial) {
|
||||||
|
free(cmsis_dap_serial);
|
||||||
|
cmsis_dap_serial = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1006,6 +1017,27 @@ COMMAND_HANDLER(cmsis_dap_handle_vid_pid_command)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
COMMAND_HANDLER(cmsis_dap_handle_serial_command)
|
||||||
|
{
|
||||||
|
if (CMD_ARGC == 1) {
|
||||||
|
size_t len = mbstowcs(NULL, CMD_ARGV[0], 0);
|
||||||
|
cmsis_dap_serial = calloc(len + 1, sizeof(wchar_t));
|
||||||
|
if (cmsis_dap_serial == NULL) {
|
||||||
|
LOG_ERROR("unable to allocate memory");
|
||||||
|
return ERROR_OK;
|
||||||
|
}
|
||||||
|
if (mbstowcs(cmsis_dap_serial, CMD_ARGV[0], len + 1) == (size_t)-1) {
|
||||||
|
free(cmsis_dap_serial);
|
||||||
|
cmsis_dap_serial = NULL;
|
||||||
|
LOG_ERROR("unable to convert serial");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOG_ERROR("expected exactly one argument to cmsis_dap_serial <serial-number>");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct command_registration cmsis_dap_subcommand_handlers[] = {
|
static const struct command_registration cmsis_dap_subcommand_handlers[] = {
|
||||||
{
|
{
|
||||||
.name = "info",
|
.name = "info",
|
||||||
|
@ -1032,6 +1064,13 @@ static const struct command_registration cmsis_dap_command_handlers[] = {
|
||||||
.help = "the vendor ID and product ID of the CMSIS-DAP device",
|
.help = "the vendor ID and product ID of the CMSIS-DAP device",
|
||||||
.usage = "(vid pid)* ",
|
.usage = "(vid pid)* ",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "cmsis_dap_serial",
|
||||||
|
.handler = &cmsis_dap_handle_serial_command,
|
||||||
|
.mode = COMMAND_CONFIG,
|
||||||
|
.help = "set the serial number of the adapter",
|
||||||
|
.usage = "serial_string",
|
||||||
|
},
|
||||||
COMMAND_REGISTRATION_DONE
|
COMMAND_REGISTRATION_DONE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -5,3 +5,6 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
interface cmsis-dap
|
interface cmsis-dap
|
||||||
|
|
||||||
|
# Optionally specify the serial number of CMSIS-DAP usb device.
|
||||||
|
#cmsis_dap_serial 02200201E6661E601B98E3B9
|
||||||
|
|
Loading…
Reference in New Issue