ret = jtag_libusb_control_transfer(usbh, CY7C65215_JTAG_REQUEST,
CY7C65215_JTAG_WRITE, size, 0,
- NULL, 0, CY7C65215_USB_TIMEOUT);
- if (ret < 0) {
- LOG_ERROR("vendor command failed, error %d", ret);
- return ERROR_JTAG_DEVICE_ERROR;
+ NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+ if (ret != ERROR_OK) {
+ LOG_ERROR("vendor command failed");
+ return ret;
}
if (jtag_libusb_bulk_write(usbh, ep_out, (char *)buf, size,
ret = jtag_libusb_control_transfer(usbh, CY7C65215_JTAG_REQUEST,
CY7C65215_JTAG_READ, qty, 0,
- NULL, 0, CY7C65215_USB_TIMEOUT);
- if (ret < 0) {
- LOG_ERROR("vendor command failed, error %d", ret);
- return ERROR_JTAG_DEVICE_ERROR;
+ NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+ if (ret != ERROR_OK) {
+ LOG_ERROR("vendor command failed");
+ return ret;
}
if (jtag_libusb_bulk_read(usbh, ep_in, (char *)buf, qty,
int ret;
usbh = NULL;
- ret = jtag_libusb_open(cy7c65215_vids, cy7c65215_pids, &usbh, NULL);
+ ret = jtag_libusb_open(cy7c65215_vids, cy7c65215_pids, NULL, &usbh, NULL);
if (ret != ERROR_OK) {
LOG_ERROR("unable to open cy7c65215 device");
goto err;
ret = jtag_libusb_control_transfer(usbh,
CY7C65215_JTAG_REQUEST,
CY7C65215_JTAG_ENABLE,
- 0, 0, NULL, 0, CY7C65215_USB_TIMEOUT);
- if (ret < 0) {
+ 0, 0, NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+ if (ret != ERROR_OK) {
LOG_ERROR("could not enable JTAG module");
goto err;
}
err:
if (usbh)
jtag_libusb_close(usbh);
- return ERROR_JTAG_INIT_FAILED;
+ return ret;
}
static int openjtag_init(void)
ret = jtag_libusb_control_transfer(usbh,
CY7C65215_JTAG_REQUEST,
CY7C65215_JTAG_DISABLE,
- 0, 0, NULL, 0, CY7C65215_USB_TIMEOUT);
- if (ret < 0)
+ 0, 0, NULL, 0, CY7C65215_USB_TIMEOUT, NULL);
+ if (ret != ERROR_OK)
LOG_WARNING("could not disable JTAG module");
jtag_libusb_close(usbh);
tap_set_state(TAP_IDLE);
}
- if (cmd->cmd.runtest->num_cycles > 16)
- LOG_WARNING("num_cycles > 16 on run test");
-
if (openjtag_variant != OPENJTAG_VARIANT_CY7C65215 ||
cmd->cmd.runtest->num_cycles) {
uint8_t command;
- command = 7;
- command |= ((cmd->cmd.runtest->num_cycles - 1) & 0x0F) << 4;
+ int cycles = cmd->cmd.runtest->num_cycles;
- openjtag_add_byte(command);
+ do {
+ command = 7;
+ command |= (((cycles > 16 ? 16 : cycles) - 1) & 0x0F) << 4;
+
+ openjtag_add_byte(command);
+ cycles -= 16;
+ } while (cycles > 0);
}
tap_set_end_state(end_state);
return ERROR_OK;
}
+COMMAND_HANDLER(openjtag_handle_vid_pid_command)
+{
+ if (CMD_ARGC != 2)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ COMMAND_PARSE_NUMBER(u16, CMD_ARGV[0], openjtag_vid);
+ COMMAND_PARSE_NUMBER(u16, CMD_ARGV[1], openjtag_pid);
+
+ return ERROR_OK;
+}
+
static const struct command_registration openjtag_subcommand_handlers[] = {
{
.name = "device_desc",
.help = "set the OpenJTAG variant",
.usage = "variant-string",
},
+ {
+ .name = "vid_pid",
+ .handler = openjtag_handle_vid_pid_command,
+ .mode = COMMAND_CONFIG,
+ .help = "USB VID and PID of the adapter",
+ .usage = "vid pid",
+ },
COMMAND_REGISTRATION_DONE
};