hameg-hmo: Try to find a valid serialcomm if none is supplied.

If no serial port option is specified on the command-line using the
"serialcomm" driver option, but the device is connected through USB
and it requires a known default serial port option, then use it in
order to avoid data corruption or even worse problems.

Note: the easiest way to reproduce data corruption on HMO3000 series
is to start an analog data acquisition (e.g. on channel CH1) after
switching from Ethernet mode to USB VCP mode (HO732 USB/Ethernet interface).

This fixes parts of bug #1321.
This commit is contained in:
Guido Trentalancia 2018-11-16 18:42:47 +01:00 committed by Uwe Hermann
parent bb0665868e
commit 232eb33c67
1 changed files with 19 additions and 0 deletions

View File

@ -74,11 +74,30 @@ static GSList *scpi_serial_scan(struct drv_context *drvc)
static int scpi_serial_dev_inst_new(void *priv, struct drv_context *drvc,
const char *resource, char **params, const char *serialcomm)
{
GSList *l, *r;
unsigned i;
struct scpi_serial *sscpi = priv;
(void)drvc;
(void)params;
/* If no serial port option is specified on the command-line using the
* "serialcomm" driver option, but the device is connected through USB
* and it requires a known default serial port option, then used it in
* order to avoid data corruption or even worse problems.
*/
if (!serialcomm) {
for (i = 0; i < ARRAY_SIZE(scpi_serial_usb_ids); i++) {
if (!(l = sr_serial_find_usb(scpi_serial_usb_ids[i].vendor_id,
scpi_serial_usb_ids[i].product_id)))
continue;
for (r = l; r; r = r->next)
if (!strcmp(resource, r->data) && scpi_serial_usb_ids[i].serialcomm)
serialcomm = scpi_serial_usb_ids[i].serialcomm;
g_slist_free_full(l, g_free);
}
}
sscpi->serial = sr_serial_dev_inst_new(resource, serialcomm);
return SR_OK;