+ case SR_CONF_LIMIT_FRAMES:
+ devc->frame_limit = g_variant_get_uint64(data);
+ ret = SR_OK;
+ break;
+ case SR_CONF_TRIGGER_SOURCE:
+ tmp = g_variant_get_string(data, NULL);
+ for (i = 0; (*model->trigger_sources)[i]; i++) {
+ if (g_strcmp0(tmp, (*model->trigger_sources)[i]) != 0)
+ continue;
+ state->trigger_source = i;
+ g_snprintf(command, sizeof(command),
+ "SET TRIGGER SOURCE %s",
+ (*model->trigger_sources)[i]);
+
+ ret = sr_scpi_send(sdi->conn, command);
+ break;
+ }
+ break;
+ case SR_CONF_VDIV:
+ g_variant_get(data, "(tt)", &p, &q);
+
+ for (i = 0; i < model->num_vdivs; i++) {
+ if (p != model->vdivs[i].p || q != model->vdivs[i].q)
+ continue;
+ for (j = 1; j <= model->analog_channels; j++) {
+ if (cg != devc->analog_groups[j - 1])
+ continue;
+ state->analog_channels[j - 1].vdiv = i;
+ g_snprintf(command, sizeof(command),
+ "C%d:VDIV %E", j, (float)p/q);
+
+ if (sr_scpi_send(sdi->conn, command) != SR_OK ||
+ sr_scpi_get_opc(sdi->conn) != SR_OK)
+ return SR_ERR;
+
+ break;
+ }
+
+ ret = SR_OK;
+ break;
+ }
+ break;
+ case SR_CONF_TIMEBASE:
+ g_variant_get(data, "(tt)", &p, &q);
+
+ for (i = 0; i < model->num_timebases; i++) {
+ if (p != model->timebases[i].p ||
+ q != model->timebases[i].q)
+ continue;
+ state->timebase = i;
+ g_snprintf(command, sizeof(command),
+ "TIME_DIV %E", (float)p/q);
+
+ ret = sr_scpi_send(sdi->conn, command);
+ update_sample_rate = TRUE;
+ break;
+ }
+ break;
+ case SR_CONF_HORIZ_TRIGGERPOS:
+ tmp_d = g_variant_get_double(data);
+
+ if (tmp_d < 0.0 || tmp_d > 1.0)
+ return SR_ERR;
+
+ state->horiz_triggerpos = tmp_d;
+ tmp_d = -(tmp_d - 0.5) *
+ ((double)model->timebases[state->timebase].p /
+ model->timebases[state->timebase].q)
+ * model->num_xdivs;
+
+ g_snprintf(command, sizeof(command), "TRIG POS %e S", tmp_d);
+
+ ret = sr_scpi_send(sdi->conn, command);
+ break;
+ case SR_CONF_TRIGGER_SLOPE:
+ tmp = g_variant_get_string(data, NULL);
+ for (i = 0; (*model->trigger_slopes)[i]; i++) {
+ if (g_strcmp0(tmp, (*model->trigger_slopes)[i]) != 0)
+ continue;
+ state->trigger_slope = i;
+ g_snprintf(command, sizeof(command),
+ "SET TRIGGER SLOPE %s",
+ (*model->trigger_slopes)[i]);
+
+ ret = sr_scpi_send(sdi->conn, command);
+ break;
+ }
+ break;
+ case SR_CONF_COUPLING:
+ tmp = g_variant_get_string(data, NULL);
+
+ for (i = 0; (*model->coupling_options)[i]; i++) {
+ if (strcmp(tmp, (*model->coupling_options)[i]) != 0)
+ continue;
+ for (j = 1; j <= model->analog_channels; j++) {
+ if (cg != devc->analog_groups[j - 1])
+ continue;
+ state->analog_channels[j - 1].coupling = i;
+
+ g_snprintf(command, sizeof(command),
+ "C%d:COUPLING %s", j, tmp);
+
+ if (sr_scpi_send(sdi->conn, command) != SR_OK ||
+ sr_scpi_get_opc(sdi->conn) != SR_OK)
+ return SR_ERR;
+ break;
+ }
+
+ ret = SR_OK;
+ break;
+ }
+ break;