X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fvsllink.c;h=958067266e005712df849a3ba07821ff3ed3583b;hp=b9bda5d1e14e1ea574a52e12e105a18bd625c48b;hb=255301fb507519b5cd022cfdb465d4963d186c5a;hpb=80f78acf7350ca9f812b520ec80f9bc6159d7f0c diff --git a/src/jtag/drivers/vsllink.c b/src/jtag/drivers/vsllink.c index b9bda5d1e1..958067266e 100644 --- a/src/jtag/drivers/vsllink.c +++ b/src/jtag/drivers/vsllink.c @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * ***************************************************************************/ /* Versaloon is a programming tool for multiple MCUs. @@ -304,9 +304,9 @@ static int vsllink_init(void) /* malloc buffer size for tap */ tap_buffer_size = versaloon_interface.usb_setting.buf_size / 2 - 32; vsllink_free_buffer(); - tdi_buffer = (uint8_t *)malloc(tap_buffer_size); - tdo_buffer = (uint8_t *)malloc(tap_buffer_size); - tms_buffer = (uint8_t *)malloc(tap_buffer_size); + tdi_buffer = malloc(tap_buffer_size); + tdo_buffer = malloc(tap_buffer_size); + tms_buffer = malloc(tap_buffer_size); if ((NULL == tdi_buffer) || (NULL == tdo_buffer) || (NULL == tms_buffer)) { vsllink_quit(); return ERROR_FAIL; @@ -468,6 +468,21 @@ COMMAND_HANDLER(vsllink_handle_usb_pid_command) return ERROR_OK; } +COMMAND_HANDLER(vsllink_handle_usb_serial_command) +{ + if (CMD_ARGC > 1) + return ERROR_COMMAND_SYNTAX_ERROR; + + free(versaloon_interface.usb_setting.serialstring); + + if (CMD_ARGC == 1) + versaloon_interface.usb_setting.serialstring = strdup(CMD_ARGV[0]); + else + versaloon_interface.usb_setting.serialstring = NULL; + + return ERROR_OK; +} + COMMAND_HANDLER(vsllink_handle_usb_bulkin_command) { if (CMD_ARGC != 1) @@ -660,7 +675,7 @@ static uint8_t usb_check_string(usb_dev_handle *usb, uint8_t stringidx, if (NULL == buff) { buf_size = 256; - buff = (char *)malloc(buf_size); + buff = malloc(buf_size); if (NULL == buff) { ret = 0; goto free_and_return; @@ -669,14 +684,14 @@ static uint8_t usb_check_string(usb_dev_handle *usb, uint8_t stringidx, } strcpy(buff, ""); - len = usb_get_string_simple(usb, stringidx, (char *)buff, buf_size); - if ((len < 0) || (len != ((int)strlen((const char *)buff)))) { + len = usb_get_string_simple(usb, stringidx, buff, buf_size); + if ((len < 0) || ((size_t)len != strlen(buff))) { ret = 0; goto free_and_return; } buff[len] = '\0'; - if ((string != NULL) && strcmp((const char *)buff, string)) { + if ((string != NULL) && strcmp(buff, string)) { ret = 0; goto free_and_return; } @@ -689,9 +704,8 @@ free_and_return: return ret; } -static usb_dev_handle *find_usb_device(uint16_t VID, uint16_t PID, - uint8_t interface, int8_t serialindex, char *serialstring, - int8_t productindex, char *productstring) +static usb_dev_handle *find_usb_device(uint16_t VID, uint16_t PID, uint8_t interface, + char *serialstring, char *productstring) { usb_dev_handle *dev_handle = NULL; struct usb_bus *busses; @@ -715,12 +729,10 @@ static usb_dev_handle *find_usb_device(uint16_t VID, uint16_t PID, } /* check description string */ - if (((productstring != NULL) && (productindex >= 0) - && !usb_check_string(dev_handle, productindex, - productstring, NULL, 0)) - || ((serialstring != NULL) && (serialindex >= 0) - && !usb_check_string(dev_handle, serialindex, - serialstring, NULL, 0))) { + if ((productstring != NULL && !usb_check_string(dev_handle, + dev->descriptor.iProduct, productstring, NULL, 0)) + || (serialstring != NULL && !usb_check_string(dev_handle, + dev->descriptor.iSerialNumber, serialstring, NULL, 0))) { usb_close(dev_handle); dev_handle = NULL; continue; @@ -752,7 +764,7 @@ static struct vsllink *vsllink_usb_open(void) dev = find_usb_device(versaloon_interface.usb_setting.vid, versaloon_interface.usb_setting.pid, versaloon_interface.usb_setting.interface, - 0, NULL, 2, "Versaloon"); + versaloon_interface.usb_setting.serialstring, "Versaloon"); if (NULL == dev) return NULL; @@ -814,6 +826,11 @@ static const struct command_registration vsllink_command_handlers[] = { .handler = &vsllink_handle_usb_pid_command, .mode = COMMAND_CONFIG, }, + { + .name = "vsllink_usb_serial", + .handler = &vsllink_handle_usb_serial_command, + .mode = COMMAND_CONFIG, + }, { .name = "vsllink_usb_bulkin", .handler = &vsllink_handle_usb_bulkin_command,