]> sigrok.org Git - libsigrok.git/commitdiff
scpi: Add more functions (getting int/bool/float/double).
authorpoljar (Damir Jelić) <redacted>
Fri, 1 Nov 2013 18:27:44 +0000 (19:27 +0100)
committerUwe Hermann <redacted>
Tue, 3 Dec 2013 14:10:01 +0000 (15:10 +0100)
This patch adds helper functions to read an SCPI response and parse the response
as an integer, boolean, floating-point or double-precision floating-point number.

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

index f932854fe9dd29602445de47928e2489d8af3681..03eea3eea747a6b1c16a7c99c4e6b923b6e1399e 100644 (file)
@@ -179,6 +179,134 @@ SR_PRIV int sr_scpi_get_string(struct sr_serial_dev_inst *serial,
        return ret;
 }
 
+/**
+ * Send a SCPI command, read the reply, parse it as a bool value and store the
+ * result in scpi_response.
+ *
+ * @param serial Previously initialized serial port structure.
+ * @param command The SCPI command to send to the device (can be NULL).
+ * @param scpi_response Pointer where to store the parsed result.
+ *
+ * @return SR_OK on success, SR_ERR on failure.
+ */
+SR_PRIV int sr_scpi_get_bool(struct sr_serial_dev_inst *serial,
+                            const char *command, gboolean *scpi_response)
+{
+       int ret;
+       char *response;
+
+       response = NULL;
+
+       if (sr_scpi_get_string(serial, command, &response) != SR_OK)
+               if (!response)
+                       return SR_ERR;
+
+       if (sr_parse_strict_bool(response, scpi_response) == SR_OK)
+               ret = SR_OK;
+       else
+               ret = SR_ERR;
+
+       g_free(response);
+
+       return ret;
+}
+
+/**
+ * Send a SCPI command, read the reply, parse it as an integer and store the
+ * result in scpi_response.
+ *
+ * @param serial Previously initialized serial port structure.
+ * @param command The SCPI command to send to the device (can be NULL).
+ * @param scpi_response Pointer where to store the parsed result.
+ *
+ * @return SR_OK on success, SR_ERR on failure.
+ */
+SR_PRIV int sr_scpi_get_int(struct sr_serial_dev_inst *serial,
+                                 const char *command, int *scpi_response)
+{
+       int ret;
+       char *response;
+
+       response = NULL;
+
+       if (sr_scpi_get_string(serial, command, &response) != SR_OK)
+               if (!response)
+                       return SR_ERR;
+
+       if (sr_atoi(response, scpi_response) == SR_OK)
+               ret = SR_OK;
+       else
+               ret = SR_ERR;
+
+       g_free(response);
+
+       return ret;
+}
+
+/**
+ * Send a SCPI command, read the reply, parse it as a float and store the
+ * result in scpi_response.
+ *
+ * @param serial Previously initialized serial port structure.
+ * @param command The SCPI command to send to the device (can be NULL).
+ * @param scpi_response Pointer where to store the parsed result.
+ *
+ * @return SR_OK on success, SR_ERR on failure.
+ */
+SR_PRIV int sr_scpi_get_float(struct sr_serial_dev_inst *serial,
+                             const char *command, float *scpi_response)
+{
+       int ret;
+       char *response;
+
+       response = NULL;
+
+       if (sr_scpi_get_string(serial, command, &response) != SR_OK)
+               if (!response)
+                       return SR_ERR;
+
+       if (sr_atof(response, scpi_response) == SR_OK)
+               ret = SR_OK;
+       else
+               ret = SR_ERR;
+
+       g_free(response);
+
+       return ret;
+}
+
+/**
+ * Send a SCPI command, read the reply, parse it as a double and store the
+ * result in scpi_response.
+ *
+ * @param serial Previously initialized serial port structure.
+ * @param command The SCPI command to send to the device (can be NULL).
+ * @param scpi_response Pointer where to store the parsed result.
+ *
+ * @return SR_OK on success, SR_ERR on failure.
+ */
+SR_PRIV int sr_scpi_get_double(struct sr_serial_dev_inst *serial,
+                             const char *command, double *scpi_response)
+{
+       int ret;
+       char *response;
+
+       response = NULL;
+
+       if (sr_scpi_get_string(serial, command, &response) != SR_OK)
+               if (!response)
+                       return SR_ERR;
+
+       if (sr_atod(response, scpi_response) == SR_OK)
+               ret = SR_OK;
+       else
+               ret = SR_ERR;
+
+       g_free(response);
+
+       return ret;
+}
+
 /**
  * Send the *IDN? SCPI command, receive the reply, parse it and store the
  * reply as a sr_scpi_hw_info structure in the supplied scpi_response pointer.
index be0114d68dab81d5ae84955fbf857abab7ccb753..fa270b4e477e3bd158394b4ff1032cfbb5a1e424 100644 (file)
@@ -280,6 +280,14 @@ SR_PRIV int sr_scpi_send(struct sr_serial_dev_inst *serial,
                         const char *command);
 SR_PRIV int sr_scpi_get_string(struct sr_serial_dev_inst *serial,
                               const char *command, char **scpi_response);
+SR_PRIV int sr_scpi_get_bool(struct sr_serial_dev_inst *serial,
+                            const char *command, gboolean *scpi_response);
+SR_PRIV int sr_scpi_get_int(struct sr_serial_dev_inst *serial,
+                                 const char *command, int *scpi_response);
+SR_PRIV int sr_scpi_get_float(struct sr_serial_dev_inst *serial,
+                             const char *command, float *scpi_response);
+SR_PRIV int sr_scpi_get_double(struct sr_serial_dev_inst *serial,
+                             const char *command, double *scpi_response);
 SR_PRIV int sr_scpi_get_hw_id(struct sr_serial_dev_inst *serial,
                              struct sr_scpi_hw_info **scpi_reponse);
 SR_PRIV void sr_scpi_hw_info_free(struct sr_scpi_hw_info *hw_info);