+/** Try to detect GMC 1x/2x multimeter model in send mode for max. 1 second.
+ * \param serial Configured, open serial port.
+ *
+ * \retval NULL Detection failed.
+ * \retval other Model code.
+ */
+static enum model scan_model_sm(struct sr_serial_dev_inst *serial)
+{
+ int byte, bytecnt, cnt;
+ enum model model;
+ gint64 timeout_us;
+
+ model = SR_METRAHIT_NONE;
+ timeout_us = g_get_monotonic_time() + 1*1000*1000;
+
+ /* Try to find message consisting of device code and several
+ * (at least 4) data bytes. */
+ for (bytecnt = 0; bytecnt < 100; bytecnt++) {
+ byte = read_byte(serial, timeout_us);
+ if ((byte == -1) || (timeout_us < g_get_monotonic_time()))
+ break;
+ if ((byte & MSGID_MASK) == MSGID_INF) {
+ if (!(model = sr_gmc_decode_model_sm(byte & MSGC_MASK)))
+ break;
+ /* Now expect (at least) 4 data bytes */
+ for (cnt = 0; cnt < 4; cnt++) {
+ byte = read_byte(serial, timeout_us);
+ if ((byte == -1) ||
+ ((byte & MSGID_MASK) != MSGID_DATA))
+ {
+ model = SR_METRAHIT_NONE;
+ bytecnt = 100;
+ break;
+ }
+ }
+ break;
+ }
+ }
+
+ return model;
+}
+
+/** Scan for Metrahit 1x and Metrahit 2x in send mode using Gossen Metrawatt
+ * 'RS232' interface. The older 1x models use 8192 and the newer 2x 9600 baud.
+ * The DMM usually sends up to about 20 messages per second. However, depending
+ * on configuration and measurement mode the intervals can be much larger and
+ * then the detection might not work.
+ */
+static GSList *scan_1x_2x_rs232(GSList *options)
+{
+ struct sr_dev_inst *sdi;
+ struct drv_context *drvc;
+ struct dev_context *devc;
+ struct sr_config *src;
+ struct sr_probe *probe;
+ struct sr_serial_dev_inst *serial;
+ GSList *l, *devices;
+ const char *conn, *serialcomm;
+ enum model model;
+ gboolean serialcomm_given;
+ int cnt;