From f6582cd7bf62bc945ecadda09123fde6c3676107 Mon Sep 17 00:00:00 2001 From: Joel Holdsworth Date: Thu, 1 Mar 2012 20:34:20 +0000 Subject: [PATCH] fx2lafw: Implemented initial support for start capture --- hardware/fx2lafw/Makefile.am | 2 ++ hardware/fx2lafw/command.c | 39 ++++++++++++++++++++++++++++++++++++ hardware/fx2lafw/command.h | 26 ++++++++++++++++++++++++ hardware/fx2lafw/fx2lafw.c | 7 ++++++- 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 hardware/fx2lafw/command.c create mode 100644 hardware/fx2lafw/command.h diff --git a/hardware/fx2lafw/Makefile.am b/hardware/fx2lafw/Makefile.am index 5713fe11..fc479083 100644 --- a/hardware/fx2lafw/Makefile.am +++ b/hardware/fx2lafw/Makefile.am @@ -25,6 +25,8 @@ AM_CPPFLAGS = -DFIRMWARE_DIR='"$(FIRMWARE_DIR)"' noinst_LTLIBRARIES = libsigrokhwfx2lafw.la libsigrokhwfx2lafw_la_SOURCES = \ + command.c \ + command.h \ fx2lafw.c \ fx2lafw.h diff --git a/hardware/fx2lafw/command.c b/hardware/fx2lafw/command.c new file mode 100644 index 00000000..0e60c9aa --- /dev/null +++ b/hardware/fx2lafw/command.c @@ -0,0 +1,39 @@ +/* + * This file is part of the sigrok project. + * + * Copyright (C) 2012 Joel Holdsworth + * + * 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 3 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 . + */ + +#include + +#include "command.h" +#include "sigrok.h" +#include "sigrok-internal.h" + +int command_start_acquisition(libusb_device_handle *devhdl) +{ + const int res = libusb_control_transfer(devhdl, + LIBUSB_REQUEST_TYPE_VENDOR | + LIBUSB_ENDPOINT_OUT, CMD_START, 0x0000, + 0x0000, NULL, 0, 100); + if (res < 0) { + sr_err("fx2lafw: Unable to send start command: %d", + res); + return SR_ERR; + } + + return SR_OK; +} diff --git a/hardware/fx2lafw/command.h b/hardware/fx2lafw/command.h new file mode 100644 index 00000000..74e49283 --- /dev/null +++ b/hardware/fx2lafw/command.h @@ -0,0 +1,26 @@ +/* + * This file is part of the sigrok project. + * + * Copyright (C) 2012 Joel Holdsworth + * + * 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 3 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 . + */ + +/* Protocol commands */ +#define CMD_SET_SAMPLERATE 0xb0 +#define CMD_START 0xb1 +#define CMD_STOP 0xb2 +#define CMD_GET_FW_VERSION 0xb3 + +int command_start_acquisition(libusb_device_handle *devhdl); diff --git a/hardware/fx2lafw/fx2lafw.c b/hardware/fx2lafw/fx2lafw.c index 2bf1bda6..5a40be92 100644 --- a/hardware/fx2lafw/fx2lafw.c +++ b/hardware/fx2lafw/fx2lafw.c @@ -26,6 +26,7 @@ #include "sigrok.h" #include "sigrok-internal.h" #include "fx2lafw.h" +#include "command.h" static struct fx2lafw_profile supported_fx2[] = { /* USBee AX */ @@ -590,7 +591,7 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) struct context *ctx; struct libusb_transfer *transfer; const struct libusb_pollfd **lupfd; - int size, i; + int err, size, i; unsigned char *buf; if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) @@ -608,6 +609,10 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) return SR_ERR_MALLOC; } + if ((err = command_start_acquisition (ctx->usb->devhdl)) != SR_OK) { + return err; + } + /* Start with 2K transfer, subsequently increased to 4K. */ size = 2048; for (i = 0; i < NUM_SIMUL_TRANSFERS; i++) {