From: poljar (Damir Jelić) Date: Fri, 25 Oct 2013 16:13:20 +0000 (+0200) Subject: serial: Add function to extract serial options. X-Git-Tag: libsigrok-0.3.0~508 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=1bd9e678ac2c00c4b6336ed2506c28cdcfe3a25c serial: Add function to extract serial options. 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. --- diff --git a/hardware/common/serial.c b/hardware/common/serial.c index c131b38a..e181f233 100644 --- a/hardware/common/serial.c +++ b/hardware/common/serial.c @@ -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; +} diff --git a/libsigrok-internal.h b/libsigrok-internal.h index e36f3165..970c799f 100644 --- a/libsigrok-internal.h +++ b/libsigrok-internal.h @@ -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 -----------------------------------------------*/