+ }
+
+ if (!sdi)
+ return SR_ERR_ARG;
+
+ devc = sdi->priv;
+ if (!cg) {
+ switch (key) {
+ case SR_CONF_CONN:
+ if (!sdi->conn)
+ return SR_ERR_ARG;
+ usb = sdi->conn;
+ if (usb->address == 255)
+ /* Device still needs to re-enumerate after firmware
+ * upload, so we don't know its (future) address. */
+ return SR_ERR;
+ snprintf(str, 128, "%d.%d", usb->bus, usb->address);
+ *data = g_variant_new_string(str);
+ break;
+ case SR_CONF_TIMEBASE:
+ *data = g_variant_new("(tt)", timebases[devc->timebase][0],
+ timebases[devc->timebase][1]);
+ break;
+ case SR_CONF_BUFFERSIZE:
+ *data = g_variant_new_uint64(devc->framesize);
+ break;
+ case SR_CONF_TRIGGER_SOURCE:
+ *data = g_variant_new_string(devc->triggersource);
+ break;
+ case SR_CONF_TRIGGER_SLOPE:
+ s = (devc->triggerslope == SLOPE_POSITIVE) ? "r" : "f";
+ *data = g_variant_new_string(s);
+ break;
+ case SR_CONF_HORIZ_TRIGGERPOS:
+ *data = g_variant_new_double(devc->triggerposition);
+ break;
+ default:
+ return SR_ERR_NA;
+ }
+ } else {
+ if (sdi->channel_groups->data == cg)
+ ch_idx = 0;
+ else if (sdi->channel_groups->next->data == cg)
+ ch_idx = 1;
+ else
+ return SR_ERR_ARG;
+ switch (key) {
+ case SR_CONF_FILTER:
+ *data = g_variant_new_boolean(devc->filter[ch_idx]);
+ break;
+ case SR_CONF_VDIV:
+ vdiv = vdivs[devc->voltage[ch_idx]];
+ *data = g_variant_new("(tt)", vdiv[0], vdiv[1]);
+ break;
+ case SR_CONF_COUPLING:
+ *data = g_variant_new_string(coupling[devc->coupling[ch_idx]]);
+ break;
+ }