X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fscpi-pps%2Fapi.c;h=9158933dedf5e9bc44c95780ddabe34a3f251409;hb=2003be8cecbb516119b61b845ed5b0a87321f2e0;hp=5a847eb2257c81e342701589f57446f13e414543;hpb=105df67463b84683a35f3474eccc871e5aa4ed0e;p=libsigrok.git diff --git a/src/hardware/scpi-pps/api.c b/src/hardware/scpi-pps/api.c index 5a847eb2..9158933d 100644 --- a/src/hardware/scpi-pps/api.c +++ b/src/hardware/scpi-pps/api.c @@ -299,8 +299,8 @@ static int dev_clear(const struct sr_dev_driver *di) return std_dev_clear_with_callback(di, (std_dev_clear_callback)clear_helper); } -static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, - const struct sr_channel_group *cg) +static int config_get(uint32_t key, GVariant **data, + const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { struct dev_context *devc; const GVariantType *gvtype; @@ -428,12 +428,11 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s return ret; } -static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, - const struct sr_channel_group *cg) +static int config_set(uint32_t key, GVariant *data, + const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { struct dev_context *devc; double d; - int ret; if (!sdi) return SR_ERR_ARG; @@ -446,70 +445,70 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd switch (key) { case SR_CONF_ENABLED: if (g_variant_get_boolean(data)) - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OUTPUT_ENABLE); else - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OUTPUT_DISABLE); break; case SR_CONF_VOLTAGE_TARGET: d = g_variant_get_double(data); - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_VOLTAGE_TARGET, d); break; case SR_CONF_OUTPUT_FREQUENCY_TARGET: d = g_variant_get_double(data); - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_FREQUENCY_TARGET, d); break; case SR_CONF_CURRENT_LIMIT: d = g_variant_get_double(data); - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_CURRENT_LIMIT, d); break; case SR_CONF_OVER_VOLTAGE_PROTECTION_ENABLED: if (g_variant_get_boolean(data)) - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_VOLTAGE_PROTECTION_ENABLE); else - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_VOLTAGE_PROTECTION_DISABLE); break; case SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD: d = g_variant_get_double(data); - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_VOLTAGE_PROTECTION_THRESHOLD, d); break; case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED: if (g_variant_get_boolean(data)) - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_CURRENT_PROTECTION_ENABLE); else - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_CURRENT_PROTECTION_DISABLE); break; case SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD: d = g_variant_get_double(data); - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_CURRENT_PROTECTION_THRESHOLD, d); break; case SR_CONF_OVER_TEMPERATURE_PROTECTION: if (g_variant_get_boolean(data)) - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_TEMPERATURE_PROTECTION_ENABLE); else - ret = scpi_cmd(sdi, devc->device->commands, + return scpi_cmd(sdi, devc->device->commands, SCPI_CMD_SET_OVER_TEMPERATURE_PROTECTION_DISABLE); break; default: - ret = SR_ERR_NA; + return SR_ERR_NA; } - return ret; + return SR_OK; } -static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, - const struct sr_channel_group *cg) +static int config_list(uint32_t key, GVariant **data, + const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { struct dev_context *devc; struct sr_channel *ch; @@ -524,12 +523,14 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * case SR_CONF_SCAN_OPTIONS: case SR_CONF_DEVICE_OPTIONS: return std_opts_config_list(key, data, sdi, cg, - scanopts, ARRAY_SIZE(scanopts), - drvopts, ARRAY_SIZE(drvopts), - (devc) ? devc->device->devopts : NULL, - (devc) ? devc->device->num_devopts : 0); + ARRAY_AND_SIZE(scanopts), + ARRAY_AND_SIZE(drvopts), + (devc && devc->device) ? devc->device->devopts : NULL, + (devc && devc->device) ? devc->device->num_devopts : 0); break; case SR_CONF_CHANNEL_CONFIG: + if (!devc || !devc->device) + return SR_ERR_ARG; /* Not used. */ i = 0; if (devc->device->features & PPS_INDEPENDENT) @@ -558,6 +559,8 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * * specification for use in series or parallel mode. */ ch = cg->channels->data; + if (!devc || !devc->device) + return SR_ERR_ARG; ch_spec = &(devc->device->channels[ch->index]); switch (key) {