sr: la8: Support for newer USB VID/PID of the device.

Thanks to Jerry Jacobs for the patch!
This commit is contained in:
Uwe Hermann 2012-07-15 00:34:27 +02:00
parent 43be303c84
commit 74e5f12d3d
2 changed files with 28 additions and 9 deletions

View File

@ -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. */

View File

@ -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 */