fx2lafw: Added command to verify firmware version
This commit is contained in:
parent
6fbe5e6081
commit
13bf7eccbb
|
@ -22,6 +22,23 @@
|
||||||
#include "sigrok.h"
|
#include "sigrok.h"
|
||||||
#include "sigrok-internal.h"
|
#include "sigrok-internal.h"
|
||||||
|
|
||||||
|
SR_PRIV int command_get_fw_version(libusb_device_handle *devhdl,
|
||||||
|
struct version_info *vi)
|
||||||
|
{
|
||||||
|
const int ret = libusb_control_transfer (devhdl,
|
||||||
|
LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_IN,
|
||||||
|
CMD_GET_FW_VERSION, 0x0000, 0x0000,
|
||||||
|
(unsigned char*)vi, sizeof(struct version_info),
|
||||||
|
100);
|
||||||
|
|
||||||
|
if(ret < 0) {
|
||||||
|
sr_err("fx2lafw: Unable to get version info: %d.", ret);
|
||||||
|
return SR_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
SR_PRIV int command_start_acquisition(libusb_device_handle *devhdl,
|
SR_PRIV int command_start_acquisition(libusb_device_handle *devhdl,
|
||||||
uint64_t samplerate)
|
uint64_t samplerate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,6 +33,11 @@
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
|
|
||||||
|
struct version_info {
|
||||||
|
uint8_t major;
|
||||||
|
uint8_t minor;
|
||||||
|
};
|
||||||
|
|
||||||
struct cmd_start_acquisition {
|
struct cmd_start_acquisition {
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
uint8_t sample_delay;
|
uint8_t sample_delay;
|
||||||
|
@ -40,6 +45,9 @@ struct cmd_start_acquisition {
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
SR_PRIV int command_get_fw_version(libusb_device_handle *devhdl,
|
||||||
|
struct version_info *vi);
|
||||||
|
|
||||||
SR_PRIV int command_start_acquisition(libusb_device_handle *devhdl,
|
SR_PRIV int command_start_acquisition(libusb_device_handle *devhdl,
|
||||||
uint64_t samplerate);
|
uint64_t samplerate);
|
||||||
|
|
||||||
|
|
|
@ -164,6 +164,7 @@ static int fx2lafw_dev_open(int dev_index)
|
||||||
struct libusb_device_descriptor des;
|
struct libusb_device_descriptor des;
|
||||||
struct sr_dev_inst *sdi;
|
struct sr_dev_inst *sdi;
|
||||||
struct context *ctx;
|
struct context *ctx;
|
||||||
|
struct version_info vi;
|
||||||
int ret, skip, i;
|
int ret, skip, i;
|
||||||
|
|
||||||
if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
|
if (!(sdi = sr_dev_inst_get(dev_insts, dev_index)))
|
||||||
|
@ -217,16 +218,31 @@ static int fx2lafw_dev_open(int dev_index)
|
||||||
* so we don't know the address yet.
|
* so we don't know the address yet.
|
||||||
*/
|
*/
|
||||||
ctx->usb->address = libusb_get_device_address(devlist[i]);
|
ctx->usb->address = libusb_get_device_address(devlist[i]);
|
||||||
|
|
||||||
sdi->status = SR_ST_ACTIVE;
|
|
||||||
sr_info("fx2lafw: Opened device %d on %d.%d "
|
|
||||||
"interface %d.", sdi->index, ctx->usb->bus,
|
|
||||||
ctx->usb->address, USB_INTERFACE);
|
|
||||||
} else {
|
} else {
|
||||||
sr_err("fx2lafw: Failed to open device: %d.", ret);
|
sr_err("fx2lafw: Failed to open device: %d.", ret);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we made it here, we handled the device one way or another */
|
if((ret = command_get_fw_version(ctx->usb->devhdl, &vi)) != SR_OK) {
|
||||||
|
sr_err("fx2lafw: Failed to retrieve "
|
||||||
|
"firmware version information");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(vi.major != FX2LAFW_VERSION_MAJOR ||
|
||||||
|
vi.minor != FX2LAFW_VERSION_MINOR) {
|
||||||
|
sr_err("fx2lafw: Expected firmware version %d.%02d "
|
||||||
|
"got %d.%02d", FX2LAFW_VERSION_MAJOR,
|
||||||
|
FX2LAFW_VERSION_MINOR, vi.major, vi.minor);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sdi->status = SR_ST_ACTIVE;
|
||||||
|
sr_info("fx2lafw: Opened device %d on %d.%d "
|
||||||
|
"interface %d, firmware version %d.%02d",
|
||||||
|
sdi->index, ctx->usb->bus, ctx->usb->address,
|
||||||
|
USB_INTERFACE, vi.major, vi.minor);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
libusb_free_device_list(devlist, 1);
|
libusb_free_device_list(devlist, 1);
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
#define NUM_SIMUL_TRANSFERS 32
|
#define NUM_SIMUL_TRANSFERS 32
|
||||||
#define MAX_EMPTY_TRANSFERS (NUM_SIMUL_TRANSFERS * 2)
|
#define MAX_EMPTY_TRANSFERS (NUM_SIMUL_TRANSFERS * 2)
|
||||||
|
|
||||||
|
#define FX2LAFW_VERSION_MAJOR 1
|
||||||
|
#define FX2LAFW_VERSION_MINOR 0
|
||||||
|
|
||||||
|
|
||||||
/* Software trigger implementation: positive values indicate trigger stage. */
|
/* Software trigger implementation: positive values indicate trigger stage. */
|
||||||
#define TRIGGER_FIRED -1
|
#define TRIGGER_FIRED -1
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue