+ case SR_CONF_ENABLED:
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
+ cmd = SCPI_CMD_GET_OUTPUT_ENABLED;
+ break;
+ case SR_CONF_VOLTAGE:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_MEAS_VOLTAGE;
+ break;
+ case SR_CONF_VOLTAGE_TARGET:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_VOLTAGE_TARGET;
+ break;
+ case SR_CONF_OUTPUT_FREQUENCY:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_MEAS_FREQUENCY;
+ break;
+ case SR_CONF_OUTPUT_FREQUENCY_TARGET:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_FREQUENCY_TARGET;
+ break;
+ case SR_CONF_CURRENT:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_MEAS_CURRENT;
+ break;
+ case SR_CONF_CURRENT_LIMIT:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_CURRENT_LIMIT;
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_ENABLED:
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
+ cmd = SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ENABLED;
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE:
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
+ cmd = SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ACTIVE;
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_THRESHOLD;
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED:
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
+ cmd = SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ENABLED;
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE:
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
+ cmd = SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ACTIVE;
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD:
+ gvtype = G_VARIANT_TYPE_DOUBLE;
+ cmd = SCPI_CMD_GET_OVER_CURRENT_PROTECTION_THRESHOLD;
+ break;
+ case SR_CONF_OVER_TEMPERATURE_PROTECTION:
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
+ cmd = SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION;
+ break;
+ case SR_CONF_REGULATION:
+ gvtype = G_VARIANT_TYPE_STRING;
+ cmd = SCPI_CMD_GET_OUTPUT_REGULATION;
+ }
+ if (!gvtype)
+ return SR_ERR_NA;
+
+ if (cg)
+ select_channel(sdi, cg->channels->data);
+ ret = scpi_cmd_resp(sdi, devc->device->commands, data, gvtype, cmd);
+
+ if (cmd == SCPI_CMD_GET_OUTPUT_REGULATION) {
+ /*
+ * The Rigol DP800 series return CV/CC/UR, Philips PM2800
+ * return VOLT/CURR. We always return a GVariant string in
+ * the Rigol notation.
+ */
+ s = g_variant_get_string(*data, NULL);
+ if (!strcmp(s, "VOLT")) {
+ g_variant_unref(*data);
+ *data = g_variant_new_string("CV");
+ } else if (!strcmp(s, "CURR")) {
+ g_variant_unref(*data);
+ *data = g_variant_new_string("CC");
+ }
+
+ s = g_variant_get_string(*data, NULL);
+ if (strcmp(s, "CV") && strcmp(s, "CC") && strcmp(s, "UR")) {
+ sr_dbg("Unknown response to SCPI_CMD_GET_OUTPUT_REGULATION: %s", s);
+ ret = SR_ERR_DATA;
+ }