*/
#include <string.h>
+#include <strings.h>
#include "protocol.h"
SR_PRIV struct sr_dev_driver scpi_pps_driver_info;
-extern unsigned int num_pps_profiles;
-extern const struct scpi_pps pps_profiles[];
static const uint32_t scanopts[] = {
SR_CONF_CONN,
SR_CONF_POWER_SUPPLY,
};
-static struct pps_channel_instance pci[] = {
+static const struct pps_channel_instance pci[] = {
{ SR_MQ_VOLTAGE, SCPI_CMD_GET_MEAS_VOLTAGE, "V" },
{ SR_MQ_CURRENT, SCPI_CMD_GET_MEAS_CURRENT, "I" },
{ SR_MQ_POWER, SCPI_CMD_GET_MEAS_POWER, "P" },
+ { SR_MQ_FREQUENCY, SCPI_CMD_GET_MEAS_FREQUENCY, "F" },
};
static int init(struct sr_dev_driver *di, struct sr_context *sr_ctx)
if (device->num_channels) {
/* Static channels and groups. */
- channels = device->channels;
+ channels = (struct channel_spec *)device->channels;
num_channels = device->num_channels;
- channel_groups = device->channel_groups;
+ channel_groups = (struct channel_group_spec *)device->channel_groups;
num_channel_groups = device->num_channel_groups;
} else {
/* Channels and groups need to be probed. */
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
- return sr_scpi_scan(di->priv, options, probe_device);
+ return sr_scpi_scan(di->context, options, probe_device);
}
static GSList *dev_list(const struct sr_dev_driver *di)
{
- return ((struct drv_context *)(di->priv))->instances;
+ return ((struct drv_context *)(di->context))->instances;
}
static int dev_clear(const struct sr_dev_driver *di)
gvtype = NULL;
cmd = -1;
switch (key) {
- case SR_CONF_OUTPUT_ENABLED:
+ case SR_CONF_ENABLED:
gvtype = G_VARIANT_TYPE_BOOLEAN;
cmd = SCPI_CMD_GET_OUTPUT_ENABLED;
break;
- case SR_CONF_OUTPUT_VOLTAGE:
+ case SR_CONF_VOLTAGE:
gvtype = G_VARIANT_TYPE_DOUBLE;
cmd = SCPI_CMD_GET_MEAS_VOLTAGE;
break;
- case SR_CONF_OUTPUT_VOLTAGE_TARGET:
+ case SR_CONF_VOLTAGE_TARGET:
gvtype = G_VARIANT_TYPE_DOUBLE;
cmd = SCPI_CMD_GET_VOLTAGE_TARGET;
break;
- case SR_CONF_OUTPUT_CURRENT:
+ 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_OUTPUT_CURRENT_LIMIT:
+ case SR_CONF_CURRENT_LIMIT:
gvtype = G_VARIANT_TYPE_DOUBLE;
cmd = SCPI_CMD_GET_CURRENT_LIMIT;
break;
gvtype = G_VARIANT_TYPE_BOOLEAN;
cmd = SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION;
break;
- case SR_CONF_OUTPUT_REGULATION:
+ case SR_CONF_REGULATION:
gvtype = G_VARIANT_TYPE_STRING;
cmd = SCPI_CMD_GET_OUTPUT_REGULATION;
}
ret = SR_OK;
switch (key) {
- case SR_CONF_OUTPUT_ENABLED:
+ case SR_CONF_ENABLED:
if (g_variant_get_boolean(data))
ret = scpi_cmd(sdi, SCPI_CMD_SET_OUTPUT_ENABLE);
else
ret = scpi_cmd(sdi, SCPI_CMD_SET_OUTPUT_DISABLE);
break;
- case SR_CONF_OUTPUT_VOLTAGE_TARGET:
+ case SR_CONF_VOLTAGE_TARGET:
d = g_variant_get_double(data);
ret = scpi_cmd(sdi, SCPI_CMD_SET_VOLTAGE_TARGET, d);
break;
- case SR_CONF_OUTPUT_CURRENT_LIMIT:
+ case SR_CONF_OUTPUT_FREQUENCY_TARGET:
+ d = g_variant_get_double(data);
+ ret = scpi_cmd(sdi, SCPI_CMD_SET_FREQUENCY_TARGET, d);
+ break;
+ case SR_CONF_CURRENT_LIMIT:
d = g_variant_get_double(data);
ret = scpi_cmd(sdi, SCPI_CMD_SET_CURRENT_LIMIT, d);
break;
{
struct dev_context *devc;
struct sr_channel *ch;
- struct channel_spec *ch_spec;
+ const struct channel_spec *ch_spec;
GVariant *gvar;
GVariantBuilder gvb;
int ret, i;
devc->device->devopts, devc->device->num_devopts,
sizeof(uint32_t));
break;
- case SR_CONF_OUTPUT_CHANNEL_CONFIG:
+ case SR_CONF_CHANNEL_CONFIG:
/* Not used. */
i = 0;
if (devc->device->features & PPS_INDEPENDENT)
devc->device->devopts_cg, devc->device->num_devopts_cg,
sizeof(uint32_t));
break;
- case SR_CONF_OUTPUT_VOLTAGE_TARGET:
+ case SR_CONF_VOLTAGE_TARGET:
ch_spec = &(devc->device->channels[ch->index]);
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
/* Min, max, write resolution. */
}
*data = g_variant_builder_end(&gvb);
break;
- case SR_CONF_OUTPUT_CURRENT_LIMIT:
+ case SR_CONF_OUTPUT_FREQUENCY_TARGET:
+ ch_spec = &(devc->device->channels[ch->index]);
+ g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
+ /* Min, max, write resolution. */
+ for (i = 0; i < 3; i++) {
+ gvar = g_variant_new_double(ch_spec->frequency[i]);
+ g_variant_builder_add_value(&gvb, gvar);
+ }
+ *data = g_variant_builder_end(&gvb);
+ break;
+ case SR_CONF_CURRENT_LIMIT:
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
/* Min, max, step. */
for (i = 0; i < 3; i++) {
/* Prime the pipe with the first channel's fetch. */
ch = next_enabled_channel(sdi, NULL);
pch = ch->priv;
- if ((ret = select_channel(sdi, ch)) != SR_OK)
+ if ((ret = select_channel(sdi, ch)) < 0)
return ret;
if (pch->mq == SR_MQ_VOLTAGE)
cmd = SCPI_CMD_GET_MEAS_VOLTAGE;
+ else if (pch->mq == SR_MQ_FREQUENCY)
+ cmd = SCPI_CMD_GET_MEAS_FREQUENCY;
else if (pch->mq == SR_MQ_CURRENT)
cmd = SCPI_CMD_GET_MEAS_CURRENT;
else if (pch->mq == SR_MQ_POWER)
.dev_close = dev_close,
.dev_acquisition_start = dev_acquisition_start,
.dev_acquisition_stop = dev_acquisition_stop,
- .priv = NULL,
+ .context = NULL,
};