Revamp PPS-related config keys.

This commit is contained in:
Bert Vermeulen 2014-09-05 02:47:22 +02:00
parent ca1a7cb56f
commit a1eaa9e066
5 changed files with 122 additions and 29 deletions

View File

@ -661,29 +661,100 @@ enum sr_configkey {
/** The device supports setting the number of analog channels. */ /** The device supports setting the number of analog channels. */
SR_CONF_NUM_ANALOG_CHANNELS, SR_CONF_NUM_ANALOG_CHANNELS,
/** Output voltage. */ /**
* Output voltage.
* @arg type: double
* @arg get: get output voltage
*/
SR_CONF_OUTPUT_VOLTAGE, SR_CONF_OUTPUT_VOLTAGE,
/** Maximum output voltage. */ /**
* Maximum output voltage.
* @arg type: double
* @arg get: get maximum output voltage limit
* @arg set: change output voltage limit
*/
SR_CONF_OUTPUT_VOLTAGE_MAX, SR_CONF_OUTPUT_VOLTAGE_MAX,
/** Output current. */ /**
* Output current.
* @arg type: double
* @arg get: get output current
*/
SR_CONF_OUTPUT_CURRENT, SR_CONF_OUTPUT_CURRENT,
/** Maximum output current. */ /**
* Maximum output current.
* @arg type: double
* @arg get: get maximum output voltage limit
* @arg set: change output voltage limit
*/
SR_CONF_OUTPUT_CURRENT_MAX, SR_CONF_OUTPUT_CURRENT_MAX,
/** Enabling/disabling output. */ /**
* Enabling/disabling output.
* @arg type: boolean
* @arg get: @b true if currently enabled
* @arg set: enable/disable
*/
SR_CONF_OUTPUT_ENABLED, SR_CONF_OUTPUT_ENABLED,
/** Channel output configuration. */ /**
SR_CONF_OUTPUT_CHANNEL, * Output channel configuration.
* @arg type: string
* @arg get: get current setting
* @arg set: change current setting
* @arg list: array of possible values
*/
SR_CONF_OUTPUT_CHANNEL_CONFIG,
/** Over-voltage protection (OVP) */ /**
SR_CONF_OVER_VOLTAGE_PROTECTION, * Over-voltage protection (OVP) feature
* @arg type: boolean
* @arg get: @b true if currently enabled
* @arg set: enable/disable
*/
SR_CONF_OVER_VOLTAGE_PROTECTION_ENABLED,
/** Over-current protection (OCP) */ /**
SR_CONF_OVER_CURRENT_PROTECTION, * Over-voltage protection (OVP) active
* @arg type: boolean
* @arg get: @b true if device has activated OVP, i.e. the output voltage
* exceeds the over-voltage protection threshold.
*/
SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE,
/**
* Over-voltage protection (OVP) threshold
* @arg type: double (voltage)
* @arg get: get current threshold
* @arg set: set new threshold
*/
SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD,
/**
* Over-current protection (OCP) feature
* @arg type: boolean
* @arg get: @b true if currently enabled
* @arg set: enable/disable
*/
SR_CONF_OVER_CURRENT_PROTECTION_ENABLED,
/**
* Over-current protection (OCP) active
* @arg type: boolean
* @arg get: @b true if device has activated OCP, i.e. the output current
* exceeds the over-current protection threshold.
*/
SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE,
/**
* Over-current protection (OCP) threshold
* @arg type: double (current)
* @arg get: get current threshold
* @arg set: set new threshold
*/
SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD,
/** Choice of clock edge for external clock ("r" or "f"). */ /** Choice of clock edge for external clock ("r" or "f"). */
SR_CONF_CLOCK_EDGE, SR_CONF_CLOCK_EDGE,
@ -691,6 +762,16 @@ enum sr_configkey {
/** Amplitude of a source without strictly-defined MQ. */ /** Amplitude of a source without strictly-defined MQ. */
SR_CONF_AMPLITUDE, SR_CONF_AMPLITUDE,
/**
* Output channel regulation
* get: "CV", "CC" or "UR", denoting constant voltage, constant current
* or unregulated.
*/
SR_CONF_OUTPUT_REGULATION,
/** Over-temperature protection (OTP) */
SR_CONF_OVER_TEMPERATURE_PROTECTION,
/*--- Special stuff -------------------------------------------------*/ /*--- Special stuff -------------------------------------------------*/
/** Scan options supported by the driver. */ /** Scan options supported by the driver. */

View File

@ -39,8 +39,8 @@ static const int32_t scanopts[] = {
static const int32_t devopts[] = { static const int32_t devopts[] = {
SR_CONF_POWER_SUPPLY, SR_CONF_POWER_SUPPLY,
SR_CONF_CONTINUOUS, SR_CONF_CONTINUOUS,
SR_CONF_OUTPUT_CHANNEL, SR_CONF_OUTPUT_CHANNEL_CONFIG,
SR_CONF_OVER_CURRENT_PROTECTION, SR_CONF_OVER_CURRENT_PROTECTION_ENABLED,
}; };
static const int32_t devopts_cg[] = { static const int32_t devopts_cg[] = {
@ -221,10 +221,10 @@ static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi,
if (!cg) { if (!cg) {
/* No channel group: global options. */ /* No channel group: global options. */
switch (key) { switch (key) {
case SR_CONF_OUTPUT_CHANNEL: case SR_CONF_OUTPUT_CHANNEL_CONFIG:
*data = g_variant_new_string(channel_modes[devc->channel_mode]); *data = g_variant_new_string(channel_modes[devc->channel_mode]);
break; break;
case SR_CONF_OVER_CURRENT_PROTECTION: case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED:
*data = g_variant_new_boolean(devc->over_current_protection); *data = g_variant_new_boolean(devc->over_current_protection);
break; break;
default: default:
@ -292,7 +292,7 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
if (!cg) { if (!cg) {
/* No channel group: global options. */ /* No channel group: global options. */
switch (key) { switch (key) {
case SR_CONF_OUTPUT_CHANNEL: case SR_CONF_OUTPUT_CHANNEL_CONFIG:
sval = g_variant_get_string(data, NULL); sval = g_variant_get_string(data, NULL);
if ((ival = find_str(sval, channel_modes, if ((ival = find_str(sval, channel_modes,
ARRAY_SIZE(channel_modes))) == -1) { ARRAY_SIZE(channel_modes))) == -1) {
@ -309,7 +309,7 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
devc->channel_mode_set = ival; devc->channel_mode_set = ival;
devc->config_dirty = TRUE; devc->config_dirty = TRUE;
break; break;
case SR_CONF_OVER_CURRENT_PROTECTION: case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED:
bval = g_variant_get_boolean(data); bval = g_variant_get_boolean(data);
if (bval == devc->over_current_protection_set) if (bval == devc->over_current_protection_set)
/* Nothing to do. */ /* Nothing to do. */
@ -386,7 +386,7 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32, *data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
devopts, ARRAY_SIZE(devopts), sizeof(int32_t)); devopts, ARRAY_SIZE(devopts), sizeof(int32_t));
break; break;
case SR_CONF_OUTPUT_CHANNEL: case SR_CONF_OUTPUT_CHANNEL_CONFIG:
if (devc->model->channel_modes == CHANMODE_INDEPENDENT) { if (devc->model->channel_modes == CHANMODE_INDEPENDENT) {
/* The 1-channel models. */ /* The 1-channel models. */
*data = g_variant_new_strv(channel_modes, 1); *data = g_variant_new_strv(channel_modes, 1);

View File

@ -36,7 +36,7 @@ static const int32_t hwcaps[] = {
SR_CONF_OUTPUT_VOLTAGE, SR_CONF_OUTPUT_VOLTAGE,
SR_CONF_OUTPUT_CURRENT, SR_CONF_OUTPUT_CURRENT,
/* There's no SR_CONF_OUTPUT_ENABLED; can't know/set status remotely. */ /* There's no SR_CONF_OUTPUT_ENABLED; can't know/set status remotely. */
SR_CONF_OVER_CURRENT_PROTECTION, SR_CONF_OVER_CURRENT_PROTECTION_ENABLED,
}; };
SR_PRIV struct sr_dev_driver conrad_digi_35_cpu_driver_info; SR_PRIV struct sr_dev_driver conrad_digi_35_cpu_driver_info;
@ -151,7 +151,7 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
ret = send_msg1(sdi, 'C', (int) (dblval * 100 + 0.5)); ret = send_msg1(sdi, 'C', (int) (dblval * 100 + 0.5));
break; break;
/* No SR_CONF_OUTPUT_ENABLED :-( . */ /* No SR_CONF_OUTPUT_ENABLED :-( . */
case SR_CONF_OVER_CURRENT_PROTECTION: case SR_CONF_OVER_CURRENT_PROTECTION_ENABLED:
if (g_variant_get_boolean(data)) if (g_variant_get_boolean(data))
ret = send_msg1(sdi, 'V', 900); ret = send_msg1(sdi, 'V', 900);
else /* Constant current mode */ else /* Constant current mode */

View File

@ -58,7 +58,7 @@ static const int32_t hwcaps[] = {
SR_CONF_LIMIT_MSEC, SR_CONF_LIMIT_MSEC,
SR_CONF_CONTINUOUS, SR_CONF_CONTINUOUS,
/* Device configuration */ /* Device configuration */
SR_CONF_OUTPUT_CHANNEL, SR_CONF_OUTPUT_CHANNEL_CONFIG,
}; };
/** Hardware capabilities channel 1, 2. */ /** Hardware capabilities channel 1, 2. */
@ -561,7 +561,7 @@ static int config_get(int key, GVariant **data, const struct sr_dev_inst *sdi,
case SR_CONF_LIMIT_MSEC: case SR_CONF_LIMIT_MSEC:
*data = g_variant_new_uint64(devc->limit_msec); *data = g_variant_new_uint64(devc->limit_msec);
break; break;
case SR_CONF_OUTPUT_CHANNEL: case SR_CONF_OUTPUT_CHANNEL_CONFIG:
*data = g_variant_new_string(channel_modes[devc->tracking_mode]); *data = g_variant_new_string(channel_modes[devc->tracking_mode]);
break; break;
default: default:
@ -634,7 +634,7 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
sr_dbg("Setting sample limit to %" PRIu64 ".", sr_dbg("Setting sample limit to %" PRIu64 ".",
devc->limit_samples); devc->limit_samples);
break; break;
case SR_CONF_OUTPUT_CHANNEL: case SR_CONF_OUTPUT_CHANNEL_CONFIG:
sval = g_variant_get_string(data, NULL); sval = g_variant_get_string(data, NULL);
found = FALSE; found = FALSE;
for (idx = 0; idx < (int)ARRAY_SIZE(channel_modes); idx++) for (idx = 0; idx < (int)ARRAY_SIZE(channel_modes); idx++)
@ -748,7 +748,7 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32, *data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
hwcaps, ARRAY_SIZE(hwcaps), sizeof(int32_t)); hwcaps, ARRAY_SIZE(hwcaps), sizeof(int32_t));
return SR_OK; return SR_OK;
case SR_CONF_OUTPUT_CHANNEL: case SR_CONF_OUTPUT_CHANNEL_CONFIG:
if (devc->model->modelid <= LPS_303) { if (devc->model->modelid <= LPS_303) {
/* The 1-channel models. */ /* The 1-channel models. */
*data = g_variant_new_strv(channel_modes, 1); *data = g_variant_new_strv(channel_modes, 1);

View File

@ -114,18 +114,30 @@ static struct sr_config_info sr_config_info_data[] = {
"Maximum output current", NULL}, "Maximum output current", NULL},
{SR_CONF_OUTPUT_ENABLED, SR_T_BOOL, "output_enabled", {SR_CONF_OUTPUT_ENABLED, SR_T_BOOL, "output_enabled",
"Output enabled", NULL}, "Output enabled", NULL},
{SR_CONF_OUTPUT_CHANNEL, SR_T_STRING, "output_channel", {SR_CONF_OUTPUT_CHANNEL_CONFIG, SR_T_STRING, "output_channel_config",
"Output channel modes", NULL}, "Output channel modes", NULL},
{SR_CONF_OVER_VOLTAGE_PROTECTION, SR_T_BOOL, "ovp", {SR_CONF_OVER_VOLTAGE_PROTECTION_ENABLED, SR_T_BOOL, "ovp_enabled",
"Over-voltage protection", NULL}, "Over-voltage protection enabled", NULL},
{SR_CONF_OVER_CURRENT_PROTECTION, SR_T_BOOL, "ocp", {SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE, SR_T_BOOL, "ovp_active",
"Over-current protection", NULL}, "Over-voltage protection active", NULL},
{SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD, SR_T_FLOAT, "ovp_threshold",
"Over-voltage protection threshold", NULL},
{SR_CONF_OVER_CURRENT_PROTECTION_ENABLED, SR_T_BOOL, "ocp_enabled",
"Over-current protection enabled", NULL},
{SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE, SR_T_BOOL, "ocp_active",
"Over-current protection active", NULL},
{SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD, SR_T_FLOAT, "ocp_threshold",
"Over-current protection threshold", NULL},
{SR_CONF_LIMIT_SAMPLES, SR_T_UINT64, "limit_samples", {SR_CONF_LIMIT_SAMPLES, SR_T_UINT64, "limit_samples",
"Sample limit", NULL}, "Sample limit", NULL},
{SR_CONF_CLOCK_EDGE, SR_T_STRING, "clock_edge", {SR_CONF_CLOCK_EDGE, SR_T_STRING, "clock_edge",
"Clock edge", NULL}, "Clock edge", NULL},
{SR_CONF_AMPLITUDE, SR_T_FLOAT, "amplitude", {SR_CONF_AMPLITUDE, SR_T_FLOAT, "amplitude",
"Amplitude", NULL}, "Amplitude", NULL},
{SR_CONF_OVER_TEMPERATURE_PROTECTION, SR_T_BOOL, "otp",
"Over-temperature protection", NULL},
{SR_CONF_OUTPUT_REGULATION, SR_T_STRING, "output_regulation",
"Output channel regulation", NULL},
{0, 0, NULL, NULL, NULL}, {0, 0, NULL, NULL, NULL},
}; };