+// SPDX-License-Identifier: GPL-2.0-or-later
+
/***************************************************************************
* Copyright (C) 2009-2010 by Simon Qian <SimonQian@SimonQian.com> *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
/* Versaloon is a programming tool for multiple MCUs.
#include "config.h"
#endif
+#include <jtag/adapter.h>
#include <jtag/interface.h>
#include <jtag/commands.h>
#include <jtag/swd.h>
vsllink_free_buffer();
vsllink_usb_close(vsllink_handle);
+ libusb_exit(vsllink_handle->libusb_ctx);
free(vsllink_handle);
return ERROR_OK;
versaloon_interface.adaptors.gpio.config(0, GPIO_TRST, 0,
GPIO_TRST, GPIO_TRST);
versaloon_interface.adaptors.swd.init(0);
- vsllink_swd_frequency(jtag_get_speed_khz() * 1000);
+ vsllink_swd_frequency(adapter_get_speed_khz() * 1000);
vsllink_swd_switch_seq(JTAG_TO_SWD);
} else {
}
versaloon_interface.adaptors.jtag_raw.init(0);
- versaloon_interface.adaptors.jtag_raw.config(0, jtag_get_speed_khz());
+ versaloon_interface.adaptors.jtag_raw.config(0, adapter_get_speed_khz());
versaloon_interface.adaptors.gpio.config(0, GPIO_SRST | GPIO_TRST,
GPIO_TRST, GPIO_SRST, GPIO_SRST);
}
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)
char desc_string[256];
int retval;
- if (versaloon_interface.usb_setting.serialstring) {
+ if (adapter_get_required_serial()) {
retval = libusb_get_string_descriptor_ascii(usb_device_handle,
usb_desc->iSerialNumber, (unsigned char *)desc_string,
sizeof(desc_string));
if (retval < 0)
return ERROR_FAIL;
- if (strncmp(desc_string, versaloon_interface.usb_setting.serialstring,
+ if (strncmp(desc_string, adapter_get_required_serial(),
sizeof(desc_string)))
return ERROR_FAIL;
}
}
}
-static const struct command_registration vsllink_command_handlers[] = {
+static const struct command_registration vsllink_subcommand_handlers[] = {
{
- .name = "vsllink_usb_vid",
+ .name = "usb_vid",
.handler = &vsllink_handle_usb_vid_command,
.mode = COMMAND_CONFIG,
.help = "Set USB VID",
.usage = "<vid>",
},
{
- .name = "vsllink_usb_pid",
+ .name = "usb_pid",
.handler = &vsllink_handle_usb_pid_command,
.mode = COMMAND_CONFIG,
.help = "Set USB PID",
.usage = "<pid>",
},
{
- .name = "vsllink_usb_serial",
- .handler = &vsllink_handle_usb_serial_command,
- .mode = COMMAND_CONFIG,
- .help = "Set or disable check for USB serial",
- .usage = "[<serial>]",
- },
- {
- .name = "vsllink_usb_bulkin",
+ .name = "usb_bulkin",
.handler = &vsllink_handle_usb_bulkin_command,
.mode = COMMAND_CONFIG,
.help = "Set USB input endpoint",
.usage = "<ep_in>",
},
{
- .name = "vsllink_usb_bulkout",
+ .name = "usb_bulkout",
.handler = &vsllink_handle_usb_bulkout_command,
.mode = COMMAND_CONFIG,
.help = "Set USB output endpoint",
.usage = "<ep_out>",
},
{
- .name = "vsllink_usb_interface",
+ .name = "usb_interface",
.handler = &vsllink_handle_usb_interface_command,
.mode = COMMAND_CONFIG,
.help = "Set USB output interface",
COMMAND_REGISTRATION_DONE
};
+static const struct command_registration vsllink_command_handlers[] = {
+ {
+ .name = "vsllink",
+ .mode = COMMAND_ANY,
+ .help = "perform vsllink management",
+ .chain = vsllink_subcommand_handlers,
+ .usage = "",
+ },
+ COMMAND_REGISTRATION_DONE
+};
+
static const char * const vsllink_transports[] = {"jtag", "swd", NULL};
static const struct swd_driver vsllink_swd_driver = {