SR_CONF_SERIALCOMM,
};
-static const uint32_t devopts[] = {
+static const uint32_t devopts_drv[] = {
SR_CONF_POWER_SUPPLY,
SR_CONF_CONTINUOUS,
+};
+
+static const uint32_t devopts_global[] = {
SR_CONF_OUTPUT_CHANNEL_CONFIG | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_OVER_CURRENT_PROTECTION_ENABLED | SR_CONF_GET | SR_CONF_SET,
};
static const uint32_t devopts_cg[] = {
SR_CONF_OUTPUT_VOLTAGE | SR_CONF_GET,
- SR_CONF_OUTPUT_VOLTAGE_MAX | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
+ SR_CONF_OUTPUT_VOLTAGE_TARGET | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_OUTPUT_CURRENT | SR_CONF_GET,
- SR_CONF_OUTPUT_CURRENT_MAX | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
+ SR_CONF_OUTPUT_CURRENT_LIMIT | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_OUTPUT_ENABLED | SR_CONF_GET | SR_CONF_SET,
};
struct sr_serial_dev_inst *serial;
GSList *l, *devices;
struct pps_model *model;
- float byte_delay_ms;
uint8_t packet[PACKET_SIZE];
unsigned int i;
- int ret;
+ int delay_ms, ret;
const char *conn, *serialcomm;
char channel[10];
return NULL;
serial_flush(serial);
- /* How long it takes for a byte to transfer over the serial port. */
- if (sp_get_port_transport(serial->data) == SP_TRANSPORT_NATIVE)
- /* 11 bits at 9600 bps. */
- byte_delay_ms = 1.15;
- else
- /* Emulated serial over USB or bluetooth is just enqueueing. */
- byte_delay_ms = 0;
-
/* This is how the vendor software scans for hardware. */
memset(packet, 0, PACKET_SIZE);
packet[0] = 0xaa;
packet[1] = 0xaa;
- if (serial_write_blocking(serial, packet, PACKET_SIZE,
- byte_delay_ms * PACKET_SIZE + 1) < PACKET_SIZE) {
+ delay_ms = serial_timeout(serial, PACKET_SIZE);
+ if (serial_write_blocking(serial, packet, PACKET_SIZE, delay_ms) < PACKET_SIZE) {
sr_err("Unable to write while probing for hardware.");
return NULL;
}
devc = g_malloc0(sizeof(struct dev_context));
devc->model = model;
devc->config = g_malloc0(sizeof(struct per_channel_config) * model->num_channels);
- devc->byte_delay_ms = byte_delay_ms;
+ devc->delay_ms = delay_ms;
sdi->priv = devc;
drvc->instances = g_slist_append(drvc->instances, sdi);
devices = g_slist_append(devices, sdi);
case SR_CONF_OUTPUT_VOLTAGE:
*data = g_variant_new_double(devc->config[channel].output_voltage_last);
break;
- case SR_CONF_OUTPUT_VOLTAGE_MAX:
+ case SR_CONF_OUTPUT_VOLTAGE_TARGET:
*data = g_variant_new_double(devc->config[channel].output_voltage_max);
break;
case SR_CONF_OUTPUT_CURRENT:
*data = g_variant_new_double(devc->config[channel].output_current_last);
break;
- case SR_CONF_OUTPUT_CURRENT_MAX:
+ case SR_CONF_OUTPUT_CURRENT_LIMIT:
*data = g_variant_new_double(devc->config[channel].output_current_max);
break;
case SR_CONF_OUTPUT_ENABLED:
channel = ch->index;
switch (key) {
- case SR_CONF_OUTPUT_VOLTAGE_MAX:
+ case SR_CONF_OUTPUT_VOLTAGE_TARGET:
dval = g_variant_get_double(data);
if (dval < 0 || dval > devc->model->channels[channel].voltage[1])
ret = SR_ERR_ARG;
devc->config[channel].output_voltage_max = dval;
devc->config_dirty = TRUE;
break;
- case SR_CONF_OUTPUT_CURRENT_MAX:
+ case SR_CONF_OUTPUT_CURRENT_LIMIT:
dval = g_variant_get_double(data);
if (dval < 0 || dval > devc->model->channels[channel].current[1])
ret = SR_ERR_ARG;
GVariantBuilder gvb;
int channel, ret, i;
- /* Always available, even without sdi. */
+ /* Always available. */
if (key == SR_CONF_SCAN_OPTIONS) {
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
return SR_OK;
}
+ if (key == SR_CONF_DEVICE_OPTIONS && !sdi) {
+ *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
+ devopts_drv, ARRAY_SIZE(devopts_drv), sizeof(uint32_t));
+ return SR_OK;
+ }
+
if (!sdi)
return SR_ERR_ARG;
- devc = sdi->priv;
+ devc = sdi->priv;
ret = SR_OK;
if (!cg) {
/* No channel group: global options. */
switch (key) {
case SR_CONF_DEVICE_OPTIONS:
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
- devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
+ devopts_global, ARRAY_SIZE(devopts_global), sizeof(uint32_t));
break;
case SR_CONF_OUTPUT_CHANNEL_CONFIG:
if (devc->model->channel_modes == CHANMODE_INDEPENDENT) {
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
devopts_cg, ARRAY_SIZE(devopts_cg), sizeof(uint32_t));
break;
- case SR_CONF_OUTPUT_VOLTAGE_MAX:
+ case SR_CONF_OUTPUT_VOLTAGE_TARGET:
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
/* Min, max, step. */
for (i = 0; i < 3; i++) {
}
*data = g_variant_builder_end(&gvb);
break;
- case SR_CONF_OUTPUT_CURRENT_MAX:
+ case SR_CONF_OUTPUT_CURRENT_LIMIT:
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
/* Min, max, step. */
for (i = 0; i < 3; i++) {