static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { double dblval; (void)cg; switch (key) { case SR_CONF_VOLTAGE_TARGET: dblval = g_variant_get_double(data); if ((dblval < 0.0) || (dblval > 35.0)) { sr_err("Voltage out of range (0 - 35.0)!"); return SR_ERR_ARG; } return send_msg1(sdi, 'V', (int) (dblval * 10 + 0.5)); case SR_CONF_CURRENT_LIMIT: dblval = g_variant_get_double(data); if ((dblval < 0.00) || (dblval > 2.55)) { sr_err("Current out of range (0 - 2.55)!"); return SR_ERR_ARG; } return send_msg1(sdi, 'C', (int) (dblval * 100 + 0.5)); case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED: if (g_variant_get_boolean(data)) return send_msg1(sdi, 'V', 900); else /* Constant current mode */ return send_msg1(sdi, 'V', 901); default: return SR_ERR_NA; } return SR_OK; }
static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { int ret; double dblval; (void)cg; if (sdi->status != SR_ST_ACTIVE) return SR_ERR_DEV_CLOSED; ret = SR_OK; switch (key) { case SR_CONF_OUTPUT_VOLTAGE: dblval = g_variant_get_double(data); if ((dblval < 0.0) || (dblval > 35.0)) { sr_err("Voltage out of range (0 - 35.0)!"); return SR_ERR_ARG; } ret = send_msg1(sdi, 'V', (int) (dblval * 10 + 0.5)); break; case SR_CONF_OUTPUT_CURRENT: dblval = g_variant_get_double(data); if ((dblval < 0.01) || (dblval > 2.55)) { sr_err("Current out of range (0 - 2.55)!"); return SR_ERR_ARG; } ret = send_msg1(sdi, 'C', (int) (dblval * 100 + 0.5)); break; /* No SR_CONF_OUTPUT_ENABLED :-( . */ case SR_CONF_OVER_CURRENT_PROTECTION: if (g_variant_get_boolean(data)) ret = send_msg1(sdi, 'V', 900); else /* Constant current mode */ ret = send_msg1(sdi, 'V', 901); break; default: ret = SR_ERR_NA; } return ret; }