]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/siglent-sds/protocol.c
siglent-sds: Added trigger position to device config code
[libsigrok.git] / src / hardware / siglent-sds / protocol.c
index 523b93f4bd056a9b0b0398c5ed3c7c064f146915..64d26ce378e1be47a85535b99623e239071a329a 100644 (file)
@@ -25,8 +25,6 @@
 #include <config.h>
 #include <errno.h>
 #include <glib.h>
-#include <glib-2.0/glib/gmacros.h>
-#include <glib-2.0/glib/gmain.h>
 #include <math.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -252,7 +250,7 @@ SR_PRIV int siglent_sds_channel_start(const struct sr_dev_inst *sdi)
 }
 
 /* Read the header of a data block. */
-static int siglent_sds_read_header(struct sr_dev_inst *sdi, int channelIndex)
+static int siglent_sds_read_header(struct sr_dev_inst *sdi)
 {
        struct sr_scpi_dev_inst *scpi = sdi->conn;
        struct dev_context *devc = sdi->priv;
@@ -276,8 +274,6 @@ static int siglent_sds_read_header(struct sr_dev_inst *sdi, int channelIndex)
        memcpy(&desc_length, buf + 36, 4); /* Descriptor block length */
        memcpy(&dataLength, buf + 60, 4); /* Data block length */
 
-       devc->vdiv[channelIndex] = 2;
-       devc->vert_offset[channelIndex] = 0;
        devc->block_header_size = desc_length + 15;
        ret = dataLength;
 
@@ -352,7 +348,7 @@ SR_PRIV int siglent_sds_receive(int fd, int revents, void *cb_data)
                        g_usleep(4900000); /* Sleep for large memory set. */
                }
                sr_dbg("New block header expected.");
-               len = siglent_sds_read_header(sdi, ch->index);
+               len = siglent_sds_read_header(sdi);
                expected_data_bytes = len;
                if (len == 0)
                        /* Still reading the header. */
@@ -491,6 +487,8 @@ SR_PRIV int siglent_sds_get_dev_cfg(const struct sr_dev_inst *sdi)
        unsigned int i;
        int res, num_tokens;
        gchar **tokens;
+        int len;
+        float trigger_pos;
 
        devc = sdi->priv;
 
@@ -594,9 +592,27 @@ SR_PRIV int siglent_sds_get_dev_cfg(const struct sr_dev_inst *sdi)
        sr_dbg("Current trigger source: %s.", devc->trigger_source);
 
        /* TODO: Horizontal trigger position. */
-
-       devc->horiz_triggerpos = 0;
-       sr_dbg("Current horizontal trigger position: %g.", devc->horiz_triggerpos);
+       response = "";
+       trigger_pos = 0;
+       if (sr_scpi_get_string(sdi->conn, g_strdup_printf("%s:TRDL?", devc->trigger_source), &response) != SR_OK)
+               return SR_ERR;
+       len = strlen(response);
+       if (!g_ascii_strcasecmp(response + (len - 2), "us")) {
+               trigger_pos = atof(response) / SR_GHZ(1);
+               sr_dbg("Current trigger position us %s.", response);
+       } else if (!g_ascii_strcasecmp(response + (len - 2), "ns")) {
+               trigger_pos = atof(response) / SR_MHZ(1);
+               sr_dbg("Current trigger position ms %s.", response);
+       } else if (!g_ascii_strcasecmp(response + (len - 2), "ms")) {
+               trigger_pos = atof(response) / SR_KHZ(1);
+               sr_dbg("Current trigger position ns %s.", response);
+       } else if (!g_ascii_strcasecmp(response + (len - 2), "s")) {
+               trigger_pos = atof(response);
+               sr_dbg("Current trigger position s %s.", response);
+       };
+       devc->horiz_triggerpos = trigger_pos;
+
+       sr_dbg("Current horizontal trigger position %.10f", devc->horiz_triggerpos);
 
        /* Trigger slope. */
        cmd = g_strdup_printf("%s:TRSL?", devc->trigger_source);