* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "lwla.h"
-#include "protocol.h"
-#include "libsigrok-internal.h"
+#include <config.h>
#include <errno.h>
+#include <sys/stat.h>
#include <glib/gstdio.h>
+#include <libsigrok/libsigrok.h>
+#include "libsigrok-internal.h"
+#include "protocol.h"
+#include "lwla.h"
-#define BITSTREAM_MAX_SIZE 262144 /* bitstream size limit for safety */
-#define BITSTREAM_HEADER_SIZE 4 /* transfer header size in bytes */
+#define BITSTREAM_MAX_SIZE (256 * 1024) /* bitstream size limit for safety */
+#define BITSTREAM_HEADER_SIZE 4 /* transfer header size in bytes */
/* Load a bitstream file into memory. Returns a newly allocated array
* consisting of a 32-bit length field followed by the bitstream data.
*/
static unsigned char *load_bitstream_file(const char *filename, int *length_p)
{
- GStatBuf statbuf;
+ struct stat statbuf;
FILE *file;
unsigned char *stream;
size_t length, count;
/* Retrieve and validate the file size. */
- if (g_stat(filename, &statbuf) < 0) {
+ if (stat(filename, &statbuf) < 0) {
sr_err("Failed to access bitstream file: %s.",
g_strerror(errno));
return NULL;
/* Transfer the entire bitstream in one URB. */
ret = libusb_bulk_transfer(usb->devhdl, EP_BITSTREAM,
- stream, length, &xfer_len, USB_TIMEOUT);
+ stream, length, &xfer_len, USB_TIMEOUT_MS);
g_free(stream);
if (ret != 0) {
sr_info("FPGA bitstream download of %d bytes done.", xfer_len);
/* This delay appears to be necessary for reliable operation. */
- g_usleep(30000);
+ g_usleep(30 * 1000);
return SR_OK;
}
xfer_len = 0;
ret = libusb_bulk_transfer(usb->devhdl, EP_COMMAND,
(unsigned char *)command, cmd_len * 2,
- &xfer_len, USB_TIMEOUT);
+ &xfer_len, USB_TIMEOUT_MS);
if (ret != 0) {
sr_dbg("Failed to send command %d: %s.",
LWLA_TO_UINT16(command[0]), libusb_error_name(ret));
xfer_len = 0;
ret = libusb_bulk_transfer(usb->devhdl, EP_REPLY,
(unsigned char *)reply, reply_len * 4,
- &xfer_len, USB_TIMEOUT);
+ &xfer_len, USB_TIMEOUT_MS);
if (ret != 0) {
sr_dbg("Failed to receive reply: %s.", libusb_error_name(ret));
return SR_ERR;
command[0] = LWLA_WORD(CMD_READ_REG);
command[1] = LWLA_WORD(reg);
- ret = lwla_send_command(usb, command, G_N_ELEMENTS(command));
+ ret = lwla_send_command(usb, command, ARRAY_SIZE(command));
if (ret != SR_OK)
return ret;
- ret = lwla_receive_reply(usb, reply, G_N_ELEMENTS(reply), 1);
+ ret = lwla_receive_reply(usb, reply, ARRAY_SIZE(reply), 1);
if (ret == SR_OK)
*value = LWLA_TO_UINT32(reply[0]);
command[2] = LWLA_WORD_0(value);
command[3] = LWLA_WORD_1(value);
- return lwla_send_command(usb, command, G_N_ELEMENTS(command));
+ return lwla_send_command(usb, command, ARRAY_SIZE(command));
}
SR_PRIV int lwla_write_regs(const struct sr_usb_dev_inst *usb,