aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Pham <jhnphm@gmail.com>2015-02-02 05:23:32 -0500
committerAntonio Borneo <borneo.antonio@gmail.com>2020-10-24 23:24:38 +0100
commite8f483139d15d824cfae48d950ec761184d89510 (patch)
tree0e16d8fbdd20764beee41833ef886cad4fd32e68 /src
parent5829646343d78a6779794f67cde2f7c779969afc (diff)
downloadriscv-openocd-e8f483139d15d824cfae48d950ec761184d89510.zip
riscv-openocd-e8f483139d15d824cfae48d950ec761184d89510.tar.gz
riscv-openocd-e8f483139d15d824cfae48d950ec761184d89510.tar.bz2
Enable hla_serial for TI ICDI devices
Used jtag_libusb_open from libusb_helper.h instead of libusb_open_device_with_vid_pid to get device handle, as well as managing context, i.e. similar to stlink_usb. Direct calls to libusb1 are left in for the moment. (When this Gerrit revision was originally created, the jtag_libusb_ wrappers did not return error conditions.) Tested w/ a TM4C123GXL board Change-Id: I71e9a366356c125444d4813e58ddd9b6c6498bf0 Signed-off-by: John Pham <jhnphm@gmail.com> Signed-off-by: Matthew Trescott <matthewtrescott@gmail.com> Reviewed-on: http://openocd.zylin.com/2527 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/drivers/ti_icdi_usb.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/jtag/drivers/ti_icdi_usb.c b/src/jtag/drivers/ti_icdi_usb.c
index d276e58..920be77 100644
--- a/src/jtag/drivers/ti_icdi_usb.c
+++ b/src/jtag/drivers/ti_icdi_usb.c
@@ -31,7 +31,7 @@
#include <target/cortex_m.h>
-#include <libusb.h>
+#include "libusb_helper.h"
#define ICDI_WRITE_ENDPOINT 0x02
#define ICDI_READ_ENDPOINT 0x83
@@ -44,8 +44,7 @@
#define PACKET_END "#"
struct icdi_usb_handle_s {
- libusb_context *usb_ctx;
- libusb_device_handle *usb_dev;
+ struct libusb_device_handle *usb_dev;
char *read_buffer;
char *write_buffer;
@@ -657,10 +656,7 @@ static int icdi_usb_close(void *handle)
return ERROR_OK;
if (h->usb_dev)
- libusb_close(h->usb_dev);
-
- if (h->usb_ctx)
- libusb_exit(h->usb_ctx);
+ jtag_libusb_close(h->usb_dev);
free(h->read_buffer);
free(h->write_buffer);
@@ -670,6 +666,7 @@ static int icdi_usb_close(void *handle)
static int icdi_usb_open(struct hl_interface_param_s *param, void **fd)
{
+ /* TODO: Convert remaining libusb_ calls to jtag_libusb_ */
int retval;
struct icdi_usb_handle_s *h;
@@ -682,19 +679,14 @@ static int icdi_usb_open(struct hl_interface_param_s *param, void **fd)
return ERROR_FAIL;
}
- LOG_DEBUG("transport: %d vid: 0x%04x pid: 0x%04x", param->transport,
- param->vid[0], param->pid[0]);
-
- /* TODO: convert libusb_ calls to jtag_libusb_ */
- if (param->vid[1])
- LOG_WARNING("Bad configuration: 'hla_vid_pid' command does not accept more than one VID PID pair on ti-icdi!");
+ for (uint8_t i = 0; param->vid[i] && param->pid[i]; ++i)
+ LOG_DEBUG("transport: %d vid: 0x%04x pid: 0x%04x serial: %s", param->transport,
+ param->vid[i], param->pid[i], param->serial ? param->serial : "");
- if (libusb_init(&h->usb_ctx) != 0) {
- LOG_ERROR("libusb init failed");
- goto error_open;
- }
+ /* TI (Stellaris) ICDI provides its serial number in the USB descriptor;
+ no need to provide a callback here. */
+ jtag_libusb_open(param->vid, param->pid, param->serial, &h->usb_dev, NULL);
- h->usb_dev = libusb_open_device_with_vid_pid(h->usb_ctx, param->vid[0], param->pid[0]);
if (!h->usb_dev) {
LOG_ERROR("open failed");
goto error_open;