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;
|
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. */
|
/* Function prototypes. */
|
||||||
static int hw_dev_acquisition_stop(int dev_index, void *cb_data);
|
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;
|
int ret;
|
||||||
struct sr_dev_inst *sdi;
|
struct sr_dev_inst *sdi;
|
||||||
struct context *ctx;
|
struct context *ctx;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
/* Avoid compiler errors. */
|
/* Avoid compiler errors. */
|
||||||
(void)devinfo;
|
(void)devinfo;
|
||||||
|
@ -74,13 +84,20 @@ static int hw_init(const char *devinfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for the device and temporarily open it. */
|
/* Check for the device and temporarily open it. */
|
||||||
if ((ret = ftdi_usb_open_desc(ctx->ftdic, USB_VENDOR_ID,
|
for (i = 0; i < ARRAY_SIZE(usb_pids); i++) {
|
||||||
USB_PRODUCT_ID, USB_DESCRIPTION, NULL)) < 0) {
|
sr_dbg("la8: Probing for VID/PID %04x:%04x.", USB_VENDOR_ID,
|
||||||
(void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
|
usb_pids[i]);
|
||||||
goto err_free_ftdic;
|
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. */
|
/* Register the device with libsigrok. */
|
||||||
sdi = sr_dev_inst_new(0, SR_ST_INITIALIZING,
|
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,
|
sr_dbg("la8: Opening LA8 device (%04x:%04x).", USB_VENDOR_ID,
|
||||||
USB_PRODUCT_ID);
|
ctx->usb_pid);
|
||||||
|
|
||||||
/* Open the device. */
|
/* Open the device. */
|
||||||
if ((ret = ftdi_usb_open_desc(ctx->ftdic, USB_VENDOR_ID,
|
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",
|
sr_err("la8: %s: ftdi_usb_open_desc: (%d) %s",
|
||||||
__func__, ret, ftdi_get_error_string(ctx->ftdic));
|
__func__, ret, ftdi_get_error_string(ctx->ftdic));
|
||||||
(void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
|
(void) la8_close_usb_reset_sequencer(ctx); /* Ignore errors. */
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
#include "libsigrok-internal.h"
|
#include "libsigrok-internal.h"
|
||||||
|
|
||||||
#define USB_VENDOR_ID 0x0403
|
#define USB_VENDOR_ID 0x0403
|
||||||
#define USB_PRODUCT_ID 0x6001
|
|
||||||
#define USB_DESCRIPTION "ChronoVu LA8"
|
#define USB_DESCRIPTION "ChronoVu LA8"
|
||||||
#define USB_VENDOR_NAME "ChronoVu"
|
#define USB_VENDOR_NAME "ChronoVu"
|
||||||
#define USB_MODEL_NAME "LA8"
|
#define USB_MODEL_NAME "LA8"
|
||||||
|
@ -98,6 +97,9 @@ struct context {
|
||||||
|
|
||||||
/** The divcount value (determines the sample period) for the LA8. */
|
/** The divcount value (determines the sample period) for the LA8. */
|
||||||
uint8_t divcount;
|
uint8_t divcount;
|
||||||
|
|
||||||
|
/** This ChronoVu LA8's USB PID (multiple versions exist). */
|
||||||
|
uint16_t usb_pid;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* driver.c */
|
/* driver.c */
|
||||||
|
|
Loading…
Reference in New Issue