]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/serial-dmm/api.c
serial: extend stream detect for variable length packet checkers
[libsigrok.git] / src / hardware / serial-dmm / api.c
index 1f724c7118cf4b7f13b97c584da6ca71819ae814..6651e80231b408fe22fcbb5a41062958af981793 100644 (file)
@@ -85,7 +85,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        sr_info("Probing serial port %s.", conn);
 
        devices = NULL;
-       serial_flush(serial);
 
        /* Request a packet if the DMM requires this. */
        if (dmm->packet_request) {
@@ -104,7 +103,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        /* Let's get a bit of data and see if we can find a packet. */
        len = sizeof(buf);
        ret = serial_stream_detect(serial, buf, &len, dmm->packet_size,
-                                  dmm->packet_valid, 3000);
+                                  dmm->packet_valid, NULL, NULL, 3000);
        if (ret != SR_OK)
                goto scan_cleanup;
 
@@ -131,6 +130,10 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        sdi->conn = serial;
        sdi->priv = devc;
        dmm->channel_count = 1;
+       if (dmm->packet_parse == sr_brymen_bm52x_parse)
+               dmm->channel_count = BRYMEN_BM52X_DISPLAY_COUNT;
+       if (dmm->packet_parse == sr_brymen_bm86x_parse)
+               dmm->channel_count = BRYMEN_BM86X_DISPLAY_COUNT;
        if (dmm->packet_parse == sr_eev121gw_3displays_parse) {
                dmm->channel_count = EEV121GW_DISPLAY_COUNT;
                dmm->channel_formats = eev121gw_channel_formats;
@@ -254,6 +257,24 @@ SR_REGISTER_DEV_DRIVER_LIST(serial_dmm_drivers,
                NULL
        ),
        /* }}} */
+       /* bm52x based meters {{{ */
+       DMM_CONN(
+               "brymen-bm52x", brymen_bm52x, "Brymen", "BM52x",
+               "hid/bu86x", NULL, BRYMEN_BM52X_PACKET_SIZE, 4000, 500,
+               sr_brymen_bm52x_packet_request,
+               sr_brymen_bm52x_packet_valid, sr_brymen_bm52x_parse,
+               NULL
+       ),
+       /* }}} */
+       /* bm86x based meters {{{ */
+       DMM_CONN(
+               "brymen-bm86x", brymen_bm86x, "Brymen", "BM86x",
+               "hid/bu86x", NULL, BRYMEN_BM86X_PACKET_SIZE, 500, 100,
+               sr_brymen_bm86x_packet_request,
+               sr_brymen_bm86x_packet_valid, sr_brymen_bm86x_parse,
+               NULL
+       ),
+       /* }}} */
        /* dtm0660 based meters {{{ */
        DMM(
                "peaktech-3415", dtm0660,
@@ -408,6 +429,12 @@ SR_REGISTER_DEV_DRIVER_LIST(serial_dmm_drivers,
        ),
        /* }}} */
        /* fs9922 based meters {{{ */
+       DMM(
+               "gwinstek-gdm-397", fs9922,
+               "GW Instek", "GDM-397", "2400/8n1/rts=0/dtr=1",
+               FS9922_PACKET_SIZE, 0, 0, NULL,
+               sr_fs9922_packet_valid, sr_fs9922_parse, NULL
+       ),
        DMM(
                "sparkfun-70c", fs9922,
                "SparkFun", "70C", "2400/8n1/rts=0/dtr=1",
@@ -432,10 +459,9 @@ SR_REGISTER_DEV_DRIVER_LIST(serial_dmm_drivers,
                FS9922_PACKET_SIZE, 0, 0, NULL,
                sr_fs9922_packet_valid, sr_fs9922_parse, NULL
        ),
-       DMM(
-               "victor-dmm-ser", fs9922,
-               "Victor", "Victor DMMs (Mini-USB cable)", "2400/8n1",
-               FS9922_PACKET_SIZE, 0, 0, NULL,
+       DMM_CONN(
+               "victor-dmm", fs9922, "Victor", "Victor DMMs",
+               "hid/victor", "2400/8n1", FS9922_PACKET_SIZE, 0, 0, NULL,
                sr_fs9922_packet_valid, sr_fs9922_parse, NULL
        ),
        DMM(
@@ -507,6 +533,13 @@ SR_REGISTER_DEV_DRIVER_LIST(serial_dmm_drivers,
                sr_metex14_packet_valid, sr_metex14_parse,
                NULL
        ),
+       DMM(
+               "metex-me21", metex14,
+               "Metex", "ME-21", "2400/7n2/rts=0/dtr=1",
+               METEX14_PACKET_SIZE, 0, 0, sr_metex14_packet_request,
+               sr_metex14_packet_valid, sr_metex14_parse,
+               NULL
+       ),
        DMM(
                "metex-me31", metex14,
                "Metex", "ME-31", "600/7n2/rts=0/dtr=1",
@@ -636,6 +669,12 @@ SR_REGISTER_DEV_DRIVER_LIST(serial_dmm_drivers,
                UT71X_PACKET_SIZE, 0, 0, NULL,
                sr_ut71x_packet_valid, sr_ut71x_parse, NULL
        ),
+       DMM(
+               "uni-t-ut804-ser", ut71x,
+               "UNI-T", "UT804", "2400/7o1/rts=0/dtr=1",
+               UT71X_PACKET_SIZE, 0, 0, NULL,
+               sr_ut71x_packet_valid, sr_ut71x_parse, NULL
+       ),
        DMM(
                "voltcraft-vc920-ser", ut71x,
                "Voltcraft", "VC-920 (UT-D02 cable)", "2400/7o1/rts=0/dtr=1",