X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Ffx2lafw%2Fdslogic.c;h=14b5decf2473859d5ef0cc5a44734abf33d77879;hb=d93c14707e1700861339d86dd8fdd5fbefa170e6;hp=489671f5a6621b53d44d48b02c7a7aef8bd46a58;hpb=b9d530920fa97ab92d5f78f6f00a1ffc73259f2f;p=libsigrok.git diff --git a/src/hardware/fx2lafw/dslogic.c b/src/hardware/fx2lafw/dslogic.c index 489671f5..14b5decf 100644 --- a/src/hardware/fx2lafw/dslogic.c +++ b/src/hardware/fx2lafw/dslogic.c @@ -28,7 +28,12 @@ #include "protocol.h" #include "dslogic.h" -#define FW_BUFSIZE 4096 +#define FW_BUFSIZE (4 * 1024) + +#define FPGA_UPLOAD_DELAY (10 * 1000) + +#define USB_TIMEOUT (3 * 1000) + int dslogic_fpga_firmware_upload(const struct sr_dev_inst *sdi, const char *filename) { @@ -38,6 +43,7 @@ int dslogic_fpga_firmware_upload(const struct sr_dev_inst *sdi, int chunksize, result, ret; unsigned char *buf; int sum, transferred; + uint8_t cmd[3]; sr_dbg("Uploading FPGA firmware at %s.", filename); @@ -48,21 +54,22 @@ int dslogic_fpga_firmware_upload(const struct sr_dev_inst *sdi, } /* Tell the device firmware is coming. */ + memset(cmd, 0, sizeof(cmd)); if ((ret = libusb_control_transfer(usb->devhdl, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT, DS_CMD_FPGA_FW, 0x0000, 0x0000, - NULL, 0, 3000)) < 0) { + (unsigned char *)&cmd, sizeof(cmd), USB_TIMEOUT)) < 0) { sr_err("Failed to upload FPGA firmware: %s.", libusb_error_name(ret)); return SR_ERR; } buf = g_malloc(FW_BUFSIZE); - if ((fw = g_fopen(filename, "rb")) == NULL) { + if (!(fw = g_fopen(filename, "rb"))) { sr_err("Unable to open %s for reading: %s.", filename, strerror(errno)); return SR_ERR; } /* Give the FX2 time to get ready for FPGA firmware upload. */ - g_usleep(10 * 1000); + g_usleep(FPGA_UPLOAD_DELAY); sum = 0; result = SR_OK; @@ -71,7 +78,7 @@ int dslogic_fpga_firmware_upload(const struct sr_dev_inst *sdi, break; if ((ret = libusb_bulk_transfer(usb->devhdl, 2 | LIBUSB_ENDPOINT_OUT, - buf, chunksize, &transferred, 1000)) < 0) { + buf, chunksize, &transferred, USB_TIMEOUT)) < 0) { sr_err("Unable to configure FPGA firmware: %s.", libusb_error_name(ret)); result = SR_ERR; @@ -110,7 +117,7 @@ int dslogic_start_acquisition(const struct sr_dev_inst *sdi) usb = sdi->conn; ret = libusb_control_transfer(usb->devhdl, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT, DS_CMD_START, 0x0000, 0x0000, - (unsigned char *)&mode, sizeof(mode), 3000); + (unsigned char *)&mode, sizeof(mode), USB_TIMEOUT); if (ret < 0) { sr_err("Failed to send start command: %s.", libusb_error_name(ret)); return SR_ERR; @@ -131,7 +138,7 @@ int dslogic_stop_acquisition(const struct sr_dev_inst *sdi) usb = sdi->conn; ret = libusb_control_transfer(usb->devhdl, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT, DS_CMD_START, 0x0000, 0x0000, - (unsigned char *)&mode, sizeof(struct dslogic_mode), 3000); + (unsigned char *)&mode, sizeof(struct dslogic_mode), USB_TIMEOUT); if (ret < 0) { sr_err("Failed to send stop command: %s.", libusb_error_name(ret)); return SR_ERR; @@ -182,7 +189,7 @@ int dslogic_fpga_configure(const struct sr_dev_inst *sdi) ret = libusb_control_transfer(usb->devhdl, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT, DS_CMD_CONFIG, 0x0000, 0x0000, - c, 3, 100); + c, 3, USB_TIMEOUT); if (ret < 0) { sr_err("Failed to send FPGA configure command: %s.", libusb_error_name(ret)); return SR_ERR; @@ -218,8 +225,7 @@ int dslogic_fpga_configure(const struct sr_dev_inst *sdi) len = sizeof(struct dslogic_fpga_config); ret = libusb_bulk_transfer(usb->devhdl, 2 | LIBUSB_ENDPOINT_OUT, - (unsigned char *)&cfg, len, - &transferred, 100); + (unsigned char *)&cfg, len, &transferred, USB_TIMEOUT); if (ret < 0 || transferred != len) { sr_err("Failed to send FPGA configuration: %s.", libusb_error_name(ret)); return SR_ERR;