Support for regulation status and fix for mysterious M

Added support for SR_CONF_REGULATION which returns value for CH1
Also VELLEMAN LABPS3005D (only device currently supported) sends single
'M' character in beginning of return value, which is specially discarded.
This commit is contained in:
Hannu Vuolasaho 2015-10-21 19:04:37 +03:00 committed by Uwe Hermann
parent 865de99391
commit b16d975a5c
2 changed files with 19 additions and 1 deletions

View File

@ -43,6 +43,7 @@ static const uint32_t devopts[] = {
SR_CONF_CURRENT | SR_CONF_GET, SR_CONF_CURRENT | SR_CONF_GET,
SR_CONF_CURRENT_LIMIT | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, SR_CONF_CURRENT_LIMIT | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_ENABLED | SR_CONF_GET | SR_CONF_SET, SR_CONF_ENABLED | SR_CONF_GET | SR_CONF_SET,
SR_CONF_REGULATION | SR_CONF_GET,
}; };
static const struct korad_kdxxxxp_model models[] = { static const struct korad_kdxxxxp_model models[] = {
@ -217,6 +218,13 @@ static int config_get(uint32_t key, GVariant **data,
case SR_CONF_ENABLED: case SR_CONF_ENABLED:
*data = g_variant_new_boolean(devc->output_enabled); *data = g_variant_new_boolean(devc->output_enabled);
break; break;
case SR_CONF_REGULATION:
/* Dual channel not supported. */
if (devc->cc_mode[0])
*data = g_variant_new_string("CC");
else
*data = g_variant_new_string("CV");
break;
default: default:
return SR_ERR_NA; return SR_ERR_NA;
} }

View File

@ -202,7 +202,7 @@ SR_PRIV int korad_kdxxxxp_get_reply(struct sr_serial_dev_inst *serial,
struct dev_context *devc) struct dev_context *devc)
{ {
double value; double value;
int count, ret; int count, ret, i;
float *target; float *target;
char status_byte; char status_byte;
@ -241,6 +241,16 @@ SR_PRIV int korad_kdxxxxp_get_reply(struct sr_serial_dev_inst *serial,
devc->reply[count] = 0; devc->reply[count] = 0;
if (target) { if (target) {
/* Handle the strange 'M' */
if (devc->reply[0] == 'M') {
for (i = 1; i < count; ++i) {
devc->reply[i - 1] = devc->reply[i];
}
/* Get the last character */
if (( i = korad_kdxxxxp_read_chars(serial, 1,
&(devc->reply[count]))) < 0)
return i;
}
value = g_ascii_strtod(devc->reply, NULL); value = g_ascii_strtod(devc->reply, NULL);
*target = (float)value; *target = (float)value;
sr_dbg("value: %f",value); sr_dbg("value: %f",value);