X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjtag%2Fdrivers%2Fcmsis_dap_usb_hid.c;h=592eb0925a89961c407c49a87822a28bf806d2e3;hb=382148e4dd437978997d668f6ec715ddcec1c46e;hp=b290d6f81883ea3c13507e19b0eb430ffae18ef7;hpb=fed42ccfd3dff0c3dcfa7f017bbd26eff3d4f15c;p=fw%2Fopenocd
diff --git a/src/jtag/drivers/cmsis_dap_usb_hid.c b/src/jtag/drivers/cmsis_dap_usb_hid.c
index b290d6f81..592eb0925 100644
--- a/src/jtag/drivers/cmsis_dap_usb_hid.c
+++ b/src/jtag/drivers/cmsis_dap_usb_hid.c
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
/***************************************************************************
* Copyright (C) 2018 by Mickaël Thomas *
* mickael9@gmail.com *
@@ -16,25 +18,13 @@
* *
* Copyright (C) 2013 by Spencer Oliver *
* spen@spen-soft.co.uk *
- * *
- * 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 . *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+#include
#include
#include
@@ -47,7 +37,7 @@ struct cmsis_dap_backend_data {
static void cmsis_dap_hid_close(struct cmsis_dap *dap);
static int cmsis_dap_hid_alloc(struct cmsis_dap *dap, unsigned int pkt_sz);
-static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t pids[], char *serial)
+static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t pids[], const char *serial)
{
hid_device *dev = NULL;
int i;
@@ -69,11 +59,11 @@ static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
*/
devs = hid_enumerate(0x0, 0x0);
cur_dev = devs;
- while (NULL != cur_dev) {
+ while (cur_dev) {
bool found = false;
- if (0 == vids[0]) {
- if (NULL == cur_dev->product_string) {
+ if (vids[0] == 0) {
+ if (!cur_dev->product_string) {
LOG_DEBUG("Cannot read product string of device 0x%x:0x%x",
cur_dev->vendor_id, cur_dev->product_id);
} else if (wcsstr(cur_dev->product_string, L"CMSIS-DAP")) {
@@ -96,10 +86,10 @@ static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
if (found) {
/* check serial number matches if given */
- if (serial == NULL)
+ if (!serial)
break;
- if (cur_dev->serial_number != NULL) {
+ if (cur_dev->serial_number) {
size_t len = (strlen(serial) + 1) * sizeof(wchar_t);
wchar_t *wserial = malloc(len);
mbstowcs(wserial, serial, len);
@@ -117,7 +107,7 @@ static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
cur_dev = cur_dev->next;
}
- if (NULL != cur_dev) {
+ if (cur_dev) {
target_vid = cur_dev->vendor_id;
target_pid = cur_dev->product_id;
}
@@ -128,7 +118,7 @@ static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
}
dap->bdata = malloc(sizeof(struct cmsis_dap_backend_data));
- if (dap->bdata == NULL) {
+ if (!dap->bdata) {
LOG_ERROR("unable to allocate memory");
return ERROR_FAIL;
}
@@ -136,7 +126,7 @@ static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
dev = hid_open_path(cur_dev->path);
hid_free_enumeration(devs);
- if (dev == NULL) {
+ if (!dev) {
LOG_ERROR("unable to open CMSIS-DAP device 0x%x:0x%x", target_vid, target_pid);
return ERROR_FAIL;
}
@@ -164,6 +154,8 @@ static int cmsis_dap_hid_open(struct cmsis_dap *dap, uint16_t vids[], uint16_t p
return ERROR_FAIL;
}
+ dap->command = dap->packet_buffer + REPORT_ID_SIZE;
+ dap->response = dap->packet_buffer;
return ERROR_OK;
}
@@ -195,8 +187,10 @@ static int cmsis_dap_hid_write(struct cmsis_dap *dap, int txlen, int timeout_ms)
{
(void) timeout_ms;
+ dap->packet_buffer[0] = 0; /* HID report number */
+
/* Pad the rest of the TX buffer with 0's */
- memset(dap->packet_buffer + txlen, 0, dap->packet_buffer_size - txlen);
+ memset(dap->command + txlen, 0, dap->packet_size - txlen);
/* write data to device */
int retval = hid_write(dap->bdata->dev_handle, dap->packet_buffer, dap->packet_buffer_size);
@@ -212,7 +206,7 @@ static int cmsis_dap_hid_alloc(struct cmsis_dap *dap, unsigned int pkt_sz)
{
unsigned int packet_buffer_size = pkt_sz + REPORT_ID_SIZE;
uint8_t *buf = malloc(packet_buffer_size);
- if (buf == NULL) {
+ if (!buf) {
LOG_ERROR("unable to allocate CMSIS-DAP packet buffer");
return ERROR_FAIL;
}
@@ -221,6 +215,9 @@ static int cmsis_dap_hid_alloc(struct cmsis_dap *dap, unsigned int pkt_sz)
dap->packet_size = pkt_sz;
dap->packet_buffer_size = packet_buffer_size;
+ dap->command = dap->packet_buffer + REPORT_ID_SIZE;
+ dap->response = dap->packet_buffer;
+
return ERROR_OK;
}