+ if (!cg) {
+ switch (key) {
+ /* No channel group: global options. */
+ case SR_CONF_OUTPUT_ENABLED:
+ s = g_variant_get_boolean(data) ? "ON" : "OFF";
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_OUTPUT_ENABLED, s);
+ break;
+ case SR_CONF_OUTPUT_VOLTAGE_MAX:
+ d = g_variant_get_double(data);
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_VOLTAGE_MAX, d);
+ break;
+ case SR_CONF_OUTPUT_CURRENT_MAX:
+ d = g_variant_get_double(data);
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_CURRENT_MAX, d);
+ break;
+ case SR_CONF_OVER_TEMPERATURE_PROTECTION:
+ s = g_variant_get_boolean(data) ? "ON" : "OFF";
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_OVER_TEMPERATURE_PROTECTION, s);
+ break;
+ default:
+ ret = SR_ERR_NA;
+ }
+ } else {
+ /* Channel group specified. */
+ if (!sdi)
+ return SR_ERR_ARG;
+ if (g_slist_length(cg->channels) > 1)
+ return SR_ERR_NA;
+ ch = cg->channels->data;
+ pch = ch->priv;
+ switch (key) {
+ case SR_CONF_OUTPUT_ENABLED:
+ s = g_variant_get_boolean(data) ? "ON" : "OFF";
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_OUTPUT_ENABLED, pch->hwname, s);
+ break;
+ case SR_CONF_OUTPUT_VOLTAGE_MAX:
+ d = g_variant_get_double(data);
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_VOLTAGE_MAX, pch->hwname, d);
+ break;
+ case SR_CONF_OUTPUT_CURRENT_MAX:
+ d = g_variant_get_double(data);
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_CURRENT_MAX, pch->hwname, d);
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_ENABLED:
+ s = g_variant_get_boolean(data) ? "ON" : "OFF";
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_OVER_VOLTAGE_PROTECTION_ENABLED,
+ pch->hwname, s);
+ break;
+ case SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD:
+ d = g_variant_get_double(data);
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_OVER_VOLTAGE_PROTECTION_THRESHOLD,
+ pch->hwname, d);
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED:
+ s = g_variant_get_boolean(data) ? "ON" : "OFF";
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_OVER_CURRENT_PROTECTION_ENABLED,
+ pch->hwname, s);
+ break;
+ case SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD:
+ d = g_variant_get_double(data);
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_OVER_CURRENT_PROTECTION_THRESHOLD,
+ pch->hwname, d);
+ break;
+ default:
+ ret = SR_ERR_NA;
+ }