This is an automated email from Gerrit. Paul Fertser ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/2275
-- gerrit commit e658decb447a2cd112e129e7a3ef48d860cff1a6 Author: Abdel Benamrouche <[email protected]> Date: Thu Aug 28 17:29:28 2014 +0400 jtag/drivers/cmsis: add serial number filter This adds serial number filtering to cmsis_dap driver. Tested with sam4l xplained pro device. Change-Id: Ib2072f7fac0c6fb3f2d6714c368128c7636632c7 Signed-off-by: Abdel Benamrouche <[email protected]> Signed-off-by: Paul Fertser <[email protected]> diff --git a/src/jtag/drivers/cmsis_dap_usb.c b/src/jtag/drivers/cmsis_dap_usb.c index b8f004c..29c18f4 100644 --- a/src/jtag/drivers/cmsis_dap_usb.c +++ b/src/jtag/drivers/cmsis_dap_usb.c @@ -61,6 +61,7 @@ static uint16_t cmsis_dap_vid[MAX_USB_IDS + 1] = { 0 }; static uint16_t cmsis_dap_pid[MAX_USB_IDS + 1] = { 0 }; static bool swd_mode; +static wchar_t *cmsis_dap_serial; #define PACKET_SIZE (64 + 1) /* 64 bytes plus report id */ #define USB_TIMEOUT 1000 @@ -174,6 +175,11 @@ static int cmsis_dap_usb_open(void) devs = hid_enumerate(0x0, 0x0); cur_dev = devs; while (NULL != cur_dev) { + /* filter by serial number if specified */ + if (cmsis_dap_serial && wcscmp(cmsis_dap_serial, cur_dev->serial_number)) { + cur_dev = cur_dev->next; + continue; + } if (0 == cmsis_dap_vid[0]) { if (NULL == cur_dev->product_string) { LOG_DEBUG("Cannot read product string of device 0x%x:0x%x", @@ -272,6 +278,11 @@ static void cmsis_dap_usb_close(struct cmsis_dap *dap) cmsis_dap_handle = NULL; } + if (cmsis_dap_serial) { + free(cmsis_dap_serial); + cmsis_dap_serial = NULL; + } + return; } @@ -1000,6 +1011,25 @@ COMMAND_HANDLER(cmsis_dap_handle_vid_pid_command) return ERROR_OK; } +COMMAND_HANDLER(cmsis_dap_handle_serial_command) +{ + wchar_t buf[256]; + size_t size; + + if (CMD_ARGC != 1) + return ERROR_COMMAND_SYNTAX_ERROR; + + size = mbstowcs(buf, CMD_ARGV[0], sizeof(buf)); + if (size == (size_t)(-1)) + return ERROR_COMMAND_SYNTAX_ERROR; + + cmsis_dap_serial = wcsdup(buf); + if (cmsis_dap_serial == NULL) + return ERROR_COMMAND_SYNTAX_ERROR; + + return ERROR_OK; +} + static const struct command_registration cmsis_dap_subcommand_handlers[] = { { .name = "info", @@ -1020,6 +1050,13 @@ static const struct command_registration cmsis_dap_command_handlers[] = { .chain = cmsis_dap_subcommand_handlers, }, { + .name = "cmsis_dap_serial", + .handler = &cmsis_dap_handle_serial_command, + .mode = COMMAND_CONFIG, + .help = "set the serial number", + .usage = "serial_string", + }, + { .name = "cmsis_dap_vid_pid", .handler = &cmsis_dap_handle_vid_pid_command, .mode = COMMAND_CONFIG, -- ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
