+ if (!cg) {
+ /* No channel group: global options. */
+ switch (key) {
+ case SR_CONF_OVER_TEMPERATURE_PROTECTION:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ *data = g_variant_new_boolean(!strcmp(s, "ON"));
+ ret = SR_OK;
+ }
+ }
+ break;
+ return SR_ERR_NA;
+ break;
+ case SR_CONF_OUTPUT_CHANNEL_CONFIG:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OUTPUT_CHANNEL_CONFIG) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ *data = g_variant_new_string(s);
+ g_free(s);
+ ret = SR_OK;
+ }
+ }
+ break;
+ default:
+ return SR_ERR_NA;
+ }
+ } else {
+ /*
+ * These options only apply to channel groups with a single
+ * channel -- they're per-channel settings for the device.
+ */
+ if (g_slist_length(cg->channels) > 1)
+ return SR_ERR_NA;
+ ch = cg->channels->data;
+
+ switch (key) {
+ case SR_CONF_OUTPUT_REGULATION:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OUTPUT_REGULATION, ch->name) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ if (strcmp(s, "CC") && strcmp(s, "CV") && strcmp(s, "UR")) {
+ sr_dbg("Unknown response to SCPI_CMD_GET_OUTPUT_REGULATION: %s", s);
+ } else {
+ *data = g_variant_new_string(s);
+ g_free(s);
+ ret = SR_OK;
+ }
+ }
+ }
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_ENABLED:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ENABLED,
+ ch->name) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ *data = g_variant_new_boolean(!strcmp(s, "ON"));
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ACTIVE,
+ ch->name) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ *data = g_variant_new_boolean(!strcmp(s, "YES"));
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_THRESHOLD,
+ ch->name) == SR_OK) {
+ if (sr_scpi_get_double(scpi, NULL, &d) == SR_OK) {
+ *data = g_variant_new_double(d);
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ENABLED,
+ ch->name) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ *data = g_variant_new_boolean(!strcmp(s, "ON"));
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ACTIVE,
+ ch->name) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ *data = g_variant_new_boolean(!strcmp(s, "YES"));
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OVER_CURRENT_PROTECTION_THRESHOLD,
+ ch->name) == SR_OK) {
+ if (sr_scpi_get_double(scpi, NULL, &d) == SR_OK) {
+ *data = g_variant_new_double(d);
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OUTPUT_VOLTAGE:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_MEAS_VOLTAGE, ch->name) == SR_OK) {
+ if (sr_scpi_get_double(scpi, NULL, &d) == SR_OK) {
+ *data = g_variant_new_double(d);
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OUTPUT_VOLTAGE_MAX:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_VOLTAGE_MAX, ch->name) == SR_OK) {
+ if (sr_scpi_get_double(scpi, NULL, &d) == SR_OK) {
+ *data = g_variant_new_double(d);
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OUTPUT_CURRENT:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_MEAS_CURRENT, ch->name) == SR_OK) {
+ if (sr_scpi_get_double(scpi, NULL, &d) == SR_OK) {
+ *data = g_variant_new_double(d);
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OUTPUT_CURRENT_MAX:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_CURRENT_MAX, ch->name) == SR_OK) {
+ if (sr_scpi_get_double(scpi, NULL, &d) == SR_OK) {
+ *data = g_variant_new_double(d);
+ ret = SR_OK;
+ }
+ }
+ break;
+ case SR_CONF_OUTPUT_ENABLED:
+ ret = SR_ERR;
+ if (scpi_cmd(sdi, SCPI_CMD_GET_OUTPUT_ENABLED, ch->name) == SR_OK) {
+ if (sr_scpi_get_string(scpi, NULL, &s) == SR_OK) {
+ *data = g_variant_new_boolean(!strcmp(s, "ON"));
+ ret = SR_OK;
+ }
+ }
+ break;
+ default:
+ return SR_ERR_NA;
+ }