]> sigrok.org Git - libsigrok.git/commitdiff
serial: Add function to extract serial options.
authorpoljar (Damir Jelić) <redacted>
Fri, 25 Oct 2013 16:13:20 +0000 (18:13 +0200)
committerUwe Hermann <redacted>
Tue, 3 Dec 2013 14:10:01 +0000 (15:10 +0100)
This patch adds a function for a common operation of all serial based drivers.
It extracts the serial options from the options linked list that is passed down
to every hardware driver.

hardware/common/serial.c
libsigrok-internal.h

index c131b38a24a6b46fe73d5bcfbe62ab6b51cf00de..e181f2338562386327bc1e18e71c8a44b2cf651b 100644 (file)
@@ -596,3 +596,45 @@ SR_PRIV int serial_stream_detect(struct sr_serial_dev_inst *serial,
 
        return SR_ERR;
 }
+
+/**
+ * Extract the serial device and options from the options linked list.
+ *
+ * @param options List of options passed from the command line.
+ * @param serial_device Pointer where to store the exctracted serial device.
+ * @param serial_options Pointer where to store the optional extracted serial
+ * options.
+ *
+ * @return SR_OK if a serial_device is found, SR_ERR if no device is found. The
+ * returned string should not be freed by the caller.
+ */
+SR_PRIV int sr_serial_extract_options(GSList *options, const char **serial_device,
+                                     const char **serial_options)
+{
+       GSList *l;
+       struct sr_config *src;
+
+       *serial_device = NULL;
+
+       for (l = options; l; l = l->next) {
+               src = l->data;
+               switch (src->key) {
+               case SR_CONF_CONN:
+                       *serial_device = g_variant_get_string(src->data, NULL);
+                       sr_dbg("Parsed serial device: %s", *serial_device);
+                       break;
+
+               case SR_CONF_SERIALCOMM:
+                       *serial_options = g_variant_get_string(src->data, NULL);
+                       sr_dbg("Parsed serial options: %s", *serial_options);
+                       break;
+               }
+       }
+
+       if (!*serial_device) {
+               sr_dbg("No serial device specified");
+               return SR_ERR;
+       }
+
+       return SR_OK;
+}
index e36f3165ee577bfa295e3c9b7e80e7e563ed2517..970c799fe69e4debafd2e6674e701bbbd401c3b9 100644 (file)
@@ -219,6 +219,8 @@ SR_PRIV int serial_stream_detect(struct sr_serial_dev_inst *serial,
                                 uint8_t *buf, size_t *buflen,
                                 size_t packet_size, packet_valid_t is_valid,
                                 uint64_t timeout_ms, int baudrate);
+SR_PRIV int sr_serial_extract_options(GSList *options, const char **serial_device,
+                                     const char **serial_options);
 #endif
 
 /*--- hardware/common/ezusb.c -----------------------------------------------*/