+// SPDX-License-Identifier: GPL-2.0-or-later
+
/***************************************************************************
* *
* Copyright (C) 2009 by Cahya Wirawan <cahya@gmx.at> *
* *
* Copyright (C) 2008 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 <http://www.gnu.org/licenses/>. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
static int opendous_usb_read(struct opendous_jtag *opendous_jtag);
/* helper functions */
-int opendous_get_version_info(void);
+static int opendous_get_version_info(void);
#ifdef _DEBUG_USB_COMMS_
static void opendous_debug_buffer(uint8_t *buffer, int length);
return ERROR_OK;
/* only if the cable name wasn't overwritten by cmdline */
- if (opendous_type == NULL) {
+ if (!opendous_type) {
/* REVISIT first verify that it's listed in cables[] ... */
opendous_type = strdup(CMD_ARGV[0]);
}
enum scan_type type;
uint8_t *buffer;
- while (cmd != NULL) {
+ while (cmd) {
switch (cmd->type) {
case JTAG_RUNTEST:
LOG_DEBUG_IO("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles,
break;
case JTAG_SLEEP:
- LOG_DEBUG_IO("sleep %" PRIi32, cmd->cmd.sleep->us);
+ LOG_DEBUG_IO("sleep %" PRIu32, cmd->cmd.sleep->us);
opendous_tap_execute();
jtag_sleep(cmd->cmd.sleep->us);
break;
cur_opendous_probe = opendous_probes;
- if (opendous_type == NULL) {
+ if (!opendous_type) {
opendous_type = strdup("opendous");
LOG_WARNING("No opendous_type specified, using default 'opendous'");
}
opendous_jtag_handle = opendous_usb_open();
- if (opendous_jtag_handle == 0) {
+ if (!opendous_jtag_handle) {
LOG_ERROR("Cannot find opendous Interface! Please check connection and permissions.");
return ERROR_JTAG_INIT_FAILED;
}
{
opendous_usb_close(opendous_jtag_handle);
- if (usb_out_buffer) {
- free(usb_out_buffer);
- usb_out_buffer = NULL;
- }
+ free(usb_out_buffer);
+ usb_out_buffer = NULL;
- if (usb_in_buffer) {
- free(usb_in_buffer);
- usb_in_buffer = NULL;
- }
+ free(usb_in_buffer);
+ usb_in_buffer = NULL;
- if (pending_scan_results_buffer) {
- free(pending_scan_results_buffer);
- pending_scan_results_buffer = NULL;
- }
+ free(pending_scan_results_buffer);
+ pending_scan_results_buffer = NULL;
- if (opendous_type) {
- free(opendous_type);
- opendous_type = NULL;
- }
+ free(opendous_type);
+ opendous_type = NULL;
return ERROR_OK;
}
return ERROR_OK;
}
-int opendous_get_version_info(void)
+static int opendous_get_version_info(void)
{
return ERROR_OK;
}
return ERROR_JTAG_QUEUE_FAILED;
}
- if (pending_scan_result->buffer != NULL)
- free(pending_scan_result->buffer);
+ free(pending_scan_result->buffer);
}
opendous_tap_init();
/* Write data from out_buffer to USB. */
int opendous_usb_write(struct opendous_jtag *opendous_jtag, int out_length)
{
- int result;
+ int result, transferred;
if (out_length > OPENDOUS_OUT_BUFFER_SIZE) {
LOG_ERROR("opendous_jtag_write illegal out_length=%d (max=%d)", out_length, OPENDOUS_OUT_BUFFER_SIZE);
if (opendous_probe->CONTROL_TRANSFER) {
result = jtag_libusb_control_transfer(opendous_jtag->usb_handle,
LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT,
- FUNC_WRITE_DATA, 0, 0, (char *) usb_out_buffer, out_length, OPENDOUS_USB_TIMEOUT);
+ FUNC_WRITE_DATA, 0, 0, (char *)usb_out_buffer, out_length, OPENDOUS_USB_TIMEOUT,
+ &transferred);
+ /* FIXME: propagate error separately from transferred */
+ if (result == ERROR_OK)
+ result = transferred;
} else {
jtag_libusb_bulk_write(opendous_jtag->usb_handle, OPENDOUS_WRITE_ENDPOINT,
(char *)usb_out_buffer, out_length, OPENDOUS_USB_TIMEOUT, &result);
/* Read data from USB into in_buffer. */
int opendous_usb_read(struct opendous_jtag *opendous_jtag)
{
+ int transferred;
+
#ifdef _DEBUG_USB_COMMS_
LOG_DEBUG("USB read begin");
#endif
if (opendous_probe->CONTROL_TRANSFER) {
result = jtag_libusb_control_transfer(opendous_jtag->usb_handle,
LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN,
- FUNC_READ_DATA, 0, 0, (char *) usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, OPENDOUS_USB_TIMEOUT);
+ FUNC_READ_DATA, 0, 0, (char *)usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, OPENDOUS_USB_TIMEOUT,
+ &transferred);
+ /* FIXME: propagate error separately from transferred */
+ if (result == ERROR_OK)
+ result = transferred;
} else {
jtag_libusb_bulk_read(opendous_jtag->usb_handle, OPENDOUS_READ_ENDPOINT,
(char *)usb_in_buffer, OPENDOUS_IN_BUFFER_SIZE, OPENDOUS_USB_TIMEOUT, &result);
void opendous_debug_buffer(uint8_t *buffer, int length)
{
- char line[81];
- char s[4];
- int i;
- int j;
+ char line[8 + 3 * BYTES_PER_LINE + 1];
- for (i = 0; i < length; i += BYTES_PER_LINE) {
- snprintf(line, 5, "%04x", i);
- for (j = i; j < i + BYTES_PER_LINE && j < length; j++) {
- snprintf(s, 4, " %02x", buffer[j]);
- strcat(line, s);
- }
+ for (int i = 0; i < length; i += BYTES_PER_LINE) {
+ int n = snprintf(line, 9, "%04x", i);
+ for (int j = i; j < i + BYTES_PER_LINE && j < length; j++)
+ n += snprintf(line + n, 4, " %02x", buffer[j]);
LOG_DEBUG("%s", line);
}
}