- serial_flush(fd);
- if (serial_write(fd, "ID\r", 3) == -1) {
- sr_err("fluke-dmm: unable to send identification string: %s",
- strerror(errno));
- return NULL;
- }
-
- len = 128;
- buf = g_try_malloc(len);
- serial_readline(fd, &buf, &len, 150);
- if (!len)
- return NULL;
-
- if (len < 2 || buf[0] != '0' || buf[1] != '\r') {
- sr_err("fluke-dmm: invalid response to identification string");
- return NULL;
- }
-
- tokens = g_strsplit(buf + 2, ",", 3);
- if (!strncmp("FLUKE", tokens[0], 5)
- && tokens[1] && tokens[2]) {
- for (i = 0; supported_flukedmm[i].model; i++) {
- if (strcmp(supported_flukedmm[i].modelname, tokens[0]))
- continue;
- if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, "Fluke",
- tokens[0] + 6, tokens[1])))
- return NULL;
- if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) {
- sr_dbg("fluke-dmm: failed to malloc devc");
- return NULL;
- }
- devc->profile = &supported_flukedmm[i];
- devc->serial = sr_serial_dev_inst_new(conn, -1);
- sdi->priv = devc;
- sdi->driver = di;
- if (!(probe = sr_probe_new(0, SR_PROBE_ANALOG, TRUE, "P1")))
- return NULL;
- sdi->probes = g_slist_append(sdi->probes, probe);
- drvc->instances = g_slist_append(drvc->instances, sdi);
- devices = g_slist_append(devices, sdi);
- break;
+ if (serialcomm) {
+ /* Use the provided comm specs. */
+ devices = fluke_scan(conn, serialcomm);
+ } else {
+ for (i = 0; scan_conn[i]; i++) {
+ if ((devices = fluke_scan(conn, scan_conn[i])))
+ break;
+ /* The Scopemeter 199B, at least, requires this
+ * after all the 115k/9.6k confusion. */
+ g_usleep(5000);