cmsis: Only cmsis internal use must differentiate between HID and Bulk access
Missing DAP_SWD_SEQUENCE may eventually need a distinction visible from outside later.
This commit is contained in:
parent
7b1eb6e6e3
commit
397fbd5749
|
@ -91,13 +91,9 @@ static bmp_type_t find_cmsis_dap_interface(libusb_device *dev,bmp_info_t *info)
|
|||
if (!strstr(interface_string, "CMSIS")) {
|
||||
continue;
|
||||
}
|
||||
type = BMP_TYPE_CMSIS_DAP;
|
||||
|
||||
if (interface->bInterfaceClass == 0x03) {
|
||||
type = BMP_TYPE_CMSIS_DAP_V1;
|
||||
|
||||
} else if (interface->bInterfaceClass == 0xff && interface->bNumEndpoints == 2) {
|
||||
type = BMP_TYPE_CMSIS_DAP_V2;
|
||||
|
||||
if (interface->bInterfaceClass == 0xff && interface->bNumEndpoints == 2) {
|
||||
info->interface_num = interface->bInterfaceNumber;
|
||||
|
||||
for (int j = 0; j < interface->bNumEndpoints; j++) {
|
||||
|
@ -228,7 +224,7 @@ int find_debuggers(BMP_CL_OPTIONS_t *cl_opts,bmp_info_t *info)
|
|||
((type = find_cmsis_dap_interface(dev, info)) != BMP_TYPE_NONE)) {
|
||||
/* find_cmsis_dap_interface has set valid type*/
|
||||
} else if ((strstr(manufacturer, "CMSIS")) || (strstr(product, "CMSIS"))) {
|
||||
type = BMP_TYPE_CMSIS_DAP_V1;
|
||||
type = BMP_TYPE_CMSIS_DAP;
|
||||
} else if (desc.idVendor == VENDOR_ID_STLINK) {
|
||||
if ((desc.idProduct == PRODUCT_ID_STLINKV2) ||
|
||||
(desc.idProduct == PRODUCT_ID_STLINKV21) ||
|
||||
|
|
|
@ -45,8 +45,13 @@
|
|||
uint8_t dap_caps;
|
||||
uint8_t mode;
|
||||
|
||||
typedef enum cmsis_type_s {
|
||||
CMSIS_TYPE_NONE = 0,
|
||||
CMSIS_TYPE_HID,
|
||||
CMSIS_TYPE_BULK
|
||||
} cmsis_type_t;
|
||||
/*- Variables ---------------------------------------------------------------*/
|
||||
static bmp_type_t type;
|
||||
static cmsis_type_t type;
|
||||
static libusb_device_handle *usb_handle = NULL;
|
||||
static uint8_t in_ep;
|
||||
static uint8_t out_ep;
|
||||
|
@ -58,10 +63,11 @@ static bool has_swd_sequence = false;
|
|||
/* LPC845 Breakout Board Rev. 0 report invalid response with > 65 bytes */
|
||||
int dap_init(bmp_info_t *info)
|
||||
{
|
||||
type = info->bmp_type;
|
||||
type = (info->in_ep && info->out_ep) ? CMSIS_TYPE_BULK : CMSIS_TYPE_HID;
|
||||
int size;
|
||||
|
||||
if (type == BMP_TYPE_CMSIS_DAP_V1) {
|
||||
if (type == CMSIS_TYPE_HID) {
|
||||
DEBUG_INFO("Using hid transfer\n");
|
||||
if (hid_init())
|
||||
return -1;
|
||||
size = strlen(info->serial);
|
||||
|
@ -79,7 +85,8 @@ int dap_init(bmp_info_t *info)
|
|||
handle = hid_open(info->vid, info->pid, (serial[0]) ? serial : NULL);
|
||||
if (!handle)
|
||||
return -1;
|
||||
} else if (type == BMP_TYPE_CMSIS_DAP_V2) {
|
||||
} else if (type == CMSIS_TYPE_BULK) {
|
||||
DEBUG_INFO("Using bulk transfer\n");
|
||||
usb_handle = libusb_open_device_with_vid_pid(info->libusb_ctx, info->vid, info->pid);
|
||||
if (!usb_handle) {
|
||||
DEBUG_WARN("WARN: libusb_open_device_with_vid_pid() failed\n");
|
||||
|
@ -175,12 +182,12 @@ static uint32_t dap_dp_read_reg(ADIv5_DP_t *dp, uint16_t addr)
|
|||
|
||||
void dap_exit_function(void)
|
||||
{
|
||||
if (type == BMP_TYPE_CMSIS_DAP_V1) {
|
||||
if (type == CMSIS_TYPE_HID) {
|
||||
if (handle) {
|
||||
dap_disconnect();
|
||||
hid_close(handle);
|
||||
}
|
||||
} else if (type == BMP_TYPE_CMSIS_DAP_V2) {
|
||||
} else if (type == CMSIS_TYPE_BULK) {
|
||||
if (usb_handle) {
|
||||
dap_disconnect();
|
||||
libusb_close(usb_handle);
|
||||
|
@ -208,7 +215,7 @@ int dbg_dap_cmd(uint8_t *data, int size, int rsize)
|
|||
for(int i = 0; (i < 32) && (i < rsize + 1); i++)
|
||||
DEBUG_WIRE("%02x.", buffer[i]);
|
||||
DEBUG_WIRE("\n");
|
||||
if (type == BMP_TYPE_CMSIS_DAP_V1) {
|
||||
if (type == CMSIS_TYPE_HID) {
|
||||
res = hid_write(handle, buffer, rsize + 1);
|
||||
if (res < 0) {
|
||||
DEBUG_WARN( "Error: %ls\n", hid_error(handle));
|
||||
|
@ -219,7 +226,7 @@ int dbg_dap_cmd(uint8_t *data, int size, int rsize)
|
|||
DEBUG_WARN( "debugger read(): %ls\n", hid_error(handle));
|
||||
exit(-1);
|
||||
}
|
||||
} else if (type == BMP_TYPE_CMSIS_DAP_V2) {
|
||||
} else if (type == CMSIS_TYPE_BULK) {
|
||||
int transferred = 0;
|
||||
|
||||
res = libusb_bulk_transfer(usb_handle, out_ep, buffer + 1, rsize, &transferred, 0);
|
||||
|
|
|
@ -52,8 +52,7 @@ static void exit_function(void)
|
|||
{
|
||||
libusb_exit_function(&info);
|
||||
switch (info.bmp_type) {
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
dap_exit_function();
|
||||
break;
|
||||
default:
|
||||
|
@ -93,8 +92,7 @@ void platform_init(int argc, char **argv)
|
|||
if (stlink_init( &info))
|
||||
exit(-1);
|
||||
break;
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
if (dap_init( &info))
|
||||
exit(-1);
|
||||
break;
|
||||
|
@ -126,8 +124,7 @@ int platform_adiv5_swdp_scan(uint32_t targetid)
|
|||
switch (info.bmp_type) {
|
||||
case BMP_TYPE_BMP:
|
||||
case BMP_TYPE_LIBFTDI:
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return adiv5_swdp_scan(targetid);
|
||||
break;
|
||||
case BMP_TYPE_STLINKV2:
|
||||
|
@ -156,8 +153,7 @@ int swdptap_init(ADIv5_DP_t *dp)
|
|||
switch (info.bmp_type) {
|
||||
case BMP_TYPE_BMP:
|
||||
return remote_swdptap_init(dp);
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return dap_swdptap_init(dp);
|
||||
case BMP_TYPE_STLINKV2:
|
||||
case BMP_TYPE_JLINK:
|
||||
|
@ -184,8 +180,7 @@ int platform_jtag_scan(const uint8_t *lrlens)
|
|||
case BMP_TYPE_BMP:
|
||||
case BMP_TYPE_LIBFTDI:
|
||||
case BMP_TYPE_JLINK:
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return jtag_scan(lrlens);
|
||||
case BMP_TYPE_STLINKV2:
|
||||
return jtag_scan_stlinkv2(&info, lrlens);
|
||||
|
@ -206,8 +201,7 @@ int platform_jtagtap_init(void)
|
|||
return libftdi_jtagtap_init(&jtag_proc);
|
||||
case BMP_TYPE_JLINK:
|
||||
return jlink_jtagtap_init(&info, &jtag_proc);
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return cmsis_dap_jtagtap_init(&jtag_proc);
|
||||
default:
|
||||
return -1;
|
||||
|
@ -226,8 +220,7 @@ void platform_adiv5_dp_defaults(ADIv5_DP_t *dp)
|
|||
return remote_adiv5_dp_defaults(dp);
|
||||
case BMP_TYPE_STLINKV2:
|
||||
return stlink_adiv5_dp_defaults(dp);
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return dap_adiv5_dp_defaults(dp);
|
||||
default:
|
||||
break;
|
||||
|
@ -243,8 +236,7 @@ int platform_jtag_dp_init(ADIv5_DP_t *dp)
|
|||
return 0;
|
||||
case BMP_TYPE_STLINKV2:
|
||||
return stlink_jtag_dp_init(dp);
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return dap_jtag_dp_init(dp);
|
||||
default:
|
||||
return 0;
|
||||
|
@ -263,10 +255,8 @@ char *platform_ident(void)
|
|||
return "STLINKV2";
|
||||
case BMP_TYPE_LIBFTDI:
|
||||
return "LIBFTDI";
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
return "CMSIS_DAP_V1";
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
return "CMSIS_DAP_V2";
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return "CMSIS_DAP";
|
||||
case BMP_TYPE_JLINK:
|
||||
return "JLINK";
|
||||
}
|
||||
|
@ -331,8 +321,7 @@ void platform_max_frequency_set(uint32_t freq)
|
|||
case BMP_TYPE_BMP:
|
||||
remote_max_frequency_set(freq);
|
||||
break;
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
dap_swj_clock(freq);
|
||||
break;
|
||||
case BMP_TYPE_LIBFTDI:
|
||||
|
@ -363,8 +352,7 @@ uint32_t platform_max_frequency_get(void)
|
|||
switch (info.bmp_type) {
|
||||
case BMP_TYPE_BMP:
|
||||
return remote_max_frequency_get();
|
||||
case BMP_TYPE_CMSIS_DAP_V1:
|
||||
case BMP_TYPE_CMSIS_DAP_V2:
|
||||
case BMP_TYPE_CMSIS_DAP:
|
||||
return dap_swj_clock(0);
|
||||
break;
|
||||
case BMP_TYPE_LIBFTDI:
|
||||
|
|
|
@ -35,8 +35,7 @@ typedef enum bmp_type_s {
|
|||
BMP_TYPE_BMP,
|
||||
BMP_TYPE_STLINKV2,
|
||||
BMP_TYPE_LIBFTDI,
|
||||
BMP_TYPE_CMSIS_DAP_V1,
|
||||
BMP_TYPE_CMSIS_DAP_V2,
|
||||
BMP_TYPE_CMSIS_DAP,
|
||||
BMP_TYPE_JLINK
|
||||
} bmp_type_t;
|
||||
|
||||
|
|
Loading…
Reference in New Issue