]> sigrok.org Git - libsigrok.git/commitdiff
hameg-hmo: Fix the logic for the horizontal trigger position in config_set()
authorpoljar (Damir Jelić) <redacted>
Tue, 25 Mar 2014 16:44:36 +0000 (17:44 +0100)
committerUwe Hermann <redacted>
Tue, 25 Mar 2014 19:48:58 +0000 (20:48 +0100)
This patch fixes the logic calculating the trigger position as well as the
(hopefully) last remaining locale issue.

hardware/hameg-hmo/api.c
hardware/hameg-hmo/protocol.c

index b82d2a3ffe628d37f5efc0374cc018c07de0bc6b..eeccf7cfbf7f5dfc5adeea235f165ee40e275250 100644 (file)
@@ -400,10 +400,16 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
                if (tmp_d < 0.0 || tmp_d > 1.0)
                        return SR_ERR;
 
-               state->horiz_triggerpos = -(tmp_d - 0.5) * state->timebase * model->num_xdivs;
+               state->horiz_triggerpos = tmp_d;
+               tmp_d = -(tmp_d - 0.5) *
+                       ((double) (*model->timebases)[state->timebase][0] /
+                       (*model->timebases)[state->timebase][1])
+                        * model->num_xdivs;
+
+               g_ascii_formatd(float_str, sizeof(float_str), "%E", tmp_d);
                g_snprintf(command, sizeof(command),
                           (*model->scpi_dialect)[SCPI_CMD_SET_HORIZ_TRIGGERPOS],
-                          state->horiz_triggerpos);
+                          float_str);
 
                ret = sr_scpi_send(sdi->conn, command);
                break;
index ff9cf29ff2b84407499f21f8f52df2df890b5aa5..60443b86b7504d15c1dedab857dac178b216cc89 100644 (file)
@@ -40,7 +40,7 @@ static const char *hameg_scpi_dialect[] = {
        [SCPI_CMD_SET_DIG_CHAN_STATE]       = ":LOG%d:STAT %d",
        [SCPI_CMD_GET_VERTICAL_OFFSET]      = ":CHAN%d:POS?",
        [SCPI_CMD_GET_HORIZ_TRIGGERPOS]     = ":TIM:POS?",
-       [SCPI_CMD_SET_HORIZ_TRIGGERPOS]     = ":TIM:POS %E",
+       [SCPI_CMD_SET_HORIZ_TRIGGERPOS]     = ":TIM:POS %s",
        [SCPI_CMD_GET_ANALOG_CHAN_STATE]    = ":CHAN%d:STAT?",
        [SCPI_CMD_SET_ANALOG_CHAN_STATE]    = ":CHAN%d:STAT %d",
 };
@@ -291,7 +291,7 @@ static void scope_state_dump(struct scope_config *config,
        sr_info("Current samplerate: %s", tmp);
        g_free(tmp);
 
-       sr_info("Current trigger: %s (source), %s (slope) %2.2e (offset)",
+       sr_info("Current trigger: %s (source), %s (slope) %.2f (offset)",
                (*config->trigger_sources)[state->trigger_source],
                (*config->trigger_slopes)[state->trigger_slope],
                state->horiz_triggerpos);
@@ -507,8 +507,13 @@ SR_PRIV int hmo_scope_state_get(struct sr_dev_inst *sdi)
 
        if (sr_scpi_get_float(sdi->conn,
                        (*config->scpi_dialect)[SCPI_CMD_GET_HORIZ_TRIGGERPOS],
-                       &state->horiz_triggerpos) != SR_OK)
+                       &tmp_float) != SR_OK)
                return SR_ERR;
+       state->horiz_triggerpos = tmp_float /
+               (((double) (*config->timebases)[state->timebase][0] /
+                 (*config->timebases)[state->timebase][1]) * config->num_xdivs);
+       state->horiz_triggerpos -= 0.5;
+       state->horiz_triggerpos *= -1;
 
        if (scope_state_get_array_option(sdi->conn,
                        (*config->scpi_dialect)[SCPI_CMD_GET_TRIGGER_SOURCE],