sr: la8: Support for newer USB VID/PID of the device.
Thanks to Jerry Jacobs for the patch!
This commit is contained in:
parent
43be303c84
commit
74e5f12d3d
|
@ -27,6 +27,15 @@
|
|||
|
||||
static GSList *dev_insts = NULL;
|
||||
|
||||
/*
|
||||
* The ChronoVu LA8 can have multiple PIDs. Older versions shipped with
|
||||
* a standard FTDI USB VID/PID of 0403:6001, newer ones have 0403:8867.
|
||||
*/
|
||||
static const uint16_t usb_pids[] = {
|
||||
0x6001,
|
||||
0x8867,
|
||||
};
|
||||
|
||||
/* Function prototypes. */
|
||||
static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
|
||||
|
||||
|
@ -35,6 +44,7 @@ static int hw_init(const char *devinfo)
|
|||
int ret;
|
||||
struct sr_dev_inst *sdi;
|
||||
struct context *ctx;
|
||||
unsigned int i;
|
||||
|
||||
/* Avoid compiler errors. */
|
||||
(void)devinfo;
|
||||
|
@ -74,13 +84,20 @@ static int hw_init(const char *devinfo)
|
|||
}
|
||||
|
||||
/* Check for the device and temporarily open it. */
|
||||
if ((ret = ftdi_usb_open_desc(ctx->ftdic, USB_VENDOR_ID,
|
||||
USB_PRODUCT_ID, USB_DESCRIPTION, NULL)) < 0) {
|
||||
(void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
|
||||
goto err_free_ftdic;
|
||||
for (i = 0; i < ARRAY_SIZE(usb_pids); i++) {
|
||||
sr_dbg("la8: Probing for VID/PID %04x:%04x.", USB_VENDOR_ID,
|
||||
usb_pids[i]);
|
||||
ret = ftdi_usb_open_desc(ctx->ftdic, USB_VENDOR_ID,
|
||||
usb_pids[i], USB_DESCRIPTION, NULL);
|
||||
if (ret == 0) {
|
||||
sr_dbg("la8: Found LA8 device (%04x:%04x).",
|
||||
USB_VENDOR_ID, usb_pids[i]);
|
||||
ctx->usb_pid = usb_pids[i];
|
||||
}
|
||||
}
|
||||
sr_dbg("la8: Found LA8 device (%04x:%04x).", USB_VENDOR_ID,
|
||||
USB_PRODUCT_ID);
|
||||
|
||||
if (ctx->usb_pid == 0)
|
||||
goto err_free_ftdic;
|
||||
|
||||
/* Register the device with libsigrok. */
|
||||
sdi = sr_dev_inst_new(0, SR_ST_INITIALIZING,
|
||||
|
@ -131,11 +148,11 @@ static int hw_dev_open(int dev_index)
|
|||
}
|
||||
|
||||
sr_dbg("la8: Opening LA8 device (%04x:%04x).", USB_VENDOR_ID,
|
||||
USB_PRODUCT_ID);
|
||||
ctx->usb_pid);
|
||||
|
||||
/* Open the device. */
|
||||
if ((ret = ftdi_usb_open_desc(ctx->ftdic, USB_VENDOR_ID,
|
||||
USB_PRODUCT_ID, USB_DESCRIPTION, NULL)) < 0) {
|
||||
ctx->usb_pid, USB_DESCRIPTION, NULL)) < 0) {
|
||||
sr_err("la8: %s: ftdi_usb_open_desc: (%d) %s",
|
||||
__func__, ret, ftdi_get_error_string(ctx->ftdic));
|
||||
(void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#include "libsigrok-internal.h"
|
||||
|
||||
#define USB_VENDOR_ID 0x0403
|
||||
#define USB_PRODUCT_ID 0x6001
|
||||
#define USB_DESCRIPTION "ChronoVu LA8"
|
||||
#define USB_VENDOR_NAME "ChronoVu"
|
||||
#define USB_MODEL_NAME "LA8"
|
||||
|
@ -98,6 +97,9 @@ struct context {
|
|||
|
||||
/** The divcount value (determines the sample period) for the LA8. */
|
||||
uint8_t divcount;
|
||||
|
||||
/** This ChronoVu LA8's USB PID (multiple versions exist). */
|
||||
uint16_t usb_pid;
|
||||
};
|
||||
|
||||
/* driver.c */
|
||||
|
|
Loading…
Reference in New Issue