From: Daniel Elstner Date: Wed, 15 Jan 2014 00:12:39 +0000 (+0100) Subject: sysclk-lwla: Utility functions clean-up and semantic fixes. X-Git-Tag: libsigrok-0.3.0~279 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=313c7a7da20cb6d8e5e962844ed47d57460ff978 sysclk-lwla: Utility functions clean-up and semantic fixes. (lwla_send_bitstream): Unref the mapped file earlier in order to simplify the error handling. (lwla_receive_reply): Do not treat a reply buffer length of zero as silent no-op. That logic was left over from an earlier iteration, before the distinction between reply buffer size and expected read length was introduced. --- diff --git a/hardware/sysclk-lwla/lwla.c b/hardware/sysclk-lwla/lwla.c index 82dc90d4..ad0bf5a1 100644 --- a/hardware/sysclk-lwla/lwla.c +++ b/hardware/sysclk-lwla/lwla.c @@ -58,19 +58,18 @@ SR_PRIV int lwla_send_bitstream(const struct sr_usb_dev_inst *usb, ret = libusb_bulk_transfer(usb->devhdl, EP_BITSTREAM, (unsigned char *)stream, length, &xfer_len, USB_TIMEOUT); + g_mapped_file_unref(file); + if (ret != 0) { sr_err("Failed to transfer bitstream: %s.", libusb_error_name(ret)); - g_mapped_file_unref(file); return SR_ERR; } if (xfer_len != (int)length) { sr_err("Failed to transfer bitstream: incorrect length " "%d != %d.", xfer_len, (int)length); - g_mapped_file_unref(file); return SR_ERR; } - g_mapped_file_unref(file); sr_info("FPGA bitstream download of %d bytes done.", xfer_len); /* This delay appears to be necessary for reliable operation. */ @@ -83,11 +82,12 @@ SR_PRIV int lwla_send_command(const struct sr_usb_dev_inst *usb, const uint16_t *command, int cmd_len) { int ret; - int xfer_len = 0; + int xfer_len; - if (usb == NULL || command == NULL || cmd_len < 1) + if (usb == NULL || command == NULL || cmd_len <= 0) return SR_ERR_ARG; + xfer_len = 0; ret = libusb_bulk_transfer(usb->devhdl, EP_COMMAND, (unsigned char *)command, cmd_len * 2, &xfer_len, USB_TIMEOUT); @@ -108,14 +108,12 @@ SR_PRIV int lwla_receive_reply(const struct sr_usb_dev_inst *usb, uint16_t *reply, int reply_len, int expect_len) { int ret; - int xfer_len = 0; - - if (reply_len == 0) - return SR_OK; + int xfer_len; - if (usb == NULL || reply == NULL || reply_len < 0) + if (usb == NULL || reply == NULL || reply_len <= 0) return SR_ERR_ARG; + xfer_len = 0; ret = libusb_bulk_transfer(usb->devhdl, EP_REPLY, (unsigned char *)reply, reply_len * 2, &xfer_len, USB_TIMEOUT); @@ -136,7 +134,7 @@ SR_PRIV int lwla_read_reg(const struct sr_usb_dev_inst *usb, { int ret; uint16_t command[2]; - uint16_t reply[256]; + uint16_t reply[256]; /* full EP buffer to avoid overflows */ command[0] = LWLA_WORD(CMD_READ_REG); command[1] = LWLA_WORD(reg);