X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fsiglent-sds%2Fprotocol.c;h=64d26ce378e1be47a85535b99623e239071a329a;hb=cdb134eb19e23528ec9c9dd89805087ea3edb9b6;hp=5bf4d3721af02478601beca99e36be20562fbf5a;hpb=d6d87fa2a28edbfa0f1c66ef4b03c9cd8bda095e;p=libsigrok.git diff --git a/src/hardware/siglent-sds/protocol.c b/src/hardware/siglent-sds/protocol.c index 5bf4d372..64d26ce3 100644 --- a/src/hardware/siglent-sds/protocol.c +++ b/src/hardware/siglent-sds/protocol.c @@ -250,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; @@ -274,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; @@ -350,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. */ @@ -489,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; @@ -592,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);