* This file is part of the libsigrok project.
*
* Copyright (C) 2016 George Hopkins <george-hopkins@null.net>
+ * Copyright (C) 2016 Matthieu Guillaumin <matthieu@guillaum.in>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
SR_CONF_SPL_WEIGHT_TIME | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_SPL_MEASUREMENT_RANGE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_POWER_OFF | SR_CONF_GET | SR_CONF_SET,
+ SR_CONF_DATA_SOURCE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
};
static const char *weight_freq[] = {
{ 80, 130 },
};
+static const char *data_sources[] = {
+ "Live",
+ "Memory",
+};
+
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
- struct drv_context *drvc;
struct dev_context *devc;
struct sr_config *src;
struct sr_serial_dev_inst *serial;
struct sr_dev_inst *sdi;
- GSList *l, *devices;
+ GSList *l;
const char *conn;
conn = NULL;
if (serial_open(serial, SERIAL_RDONLY) != SR_OK)
return NULL;
- devices = NULL;
- drvc = di->context;
-
sdi = g_malloc0(sizeof(struct sr_dev_inst));
sdi->status = SR_ST_INACTIVE;
sdi->vendor = g_strdup("PCE");
sdi->conn = sr_serial_dev_inst_new(conn, SERIALCOMM);
sdi->inst_type = SR_INST_SERIAL;
sdi->priv = devc;
- sdi->driver = di;
sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "SPL");
- drvc->instances = g_slist_append(drvc->instances, sdi);
- devices = g_slist_append(devices, sdi);
serial_close(serial);
- return devices;
+ return std_scan_complete(di, g_slist_append(NULL, sdi));
}
static int dev_clear(const struct sr_dev_driver *di)
case SR_CONF_POWER_OFF:
*data = g_variant_new_boolean(FALSE);
break;
+ case SR_CONF_DATA_SOURCE:
+ if (devc->cur_data_source == DATA_SOURCE_LIVE)
+ *data = g_variant_new_string("Live");
+ else
+ *data = g_variant_new_string("Memory");
+ break;
default:
return SR_ERR_NA;
}
if (g_variant_get_boolean(data))
ret = pce_322a_power_off(sdi);
break;
+ case SR_CONF_DATA_SOURCE:
+ tmp_str = g_variant_get_string(data, NULL);
+ if (!strcmp(tmp_str, "Live"))
+ devc->cur_data_source = DATA_SOURCE_LIVE;
+ else if (!strcmp(tmp_str, "Memory"))
+ devc->cur_data_source = DATA_SOURCE_MEMORY;
+ else
+ return SR_ERR;
+ break;
default:
ret = SR_ERR_NA;
}
}
*data = g_variant_builder_end(&gvb);
break;
+ case SR_CONF_DATA_SOURCE:
+ *data = g_variant_new_strv(data_sources, ARRAY_SIZE(data_sources));
+ break;
default:
return SR_ERR_NA;
}
devc = sdi->priv;
devc->buffer_len = 0;
+ devc->memory_state = MEM_STATE_REQUEST_MEMORY_USAGE;
- std_session_send_df_header(sdi, LOG_PREFIX);
+ std_session_send_df_header(sdi);
/* Poll every 150ms, or whenever some data comes in. */
serial = sdi->conn;
return SR_OK;
}
-static int dev_acquisition_stop(struct sr_dev_inst *sdi)
-{
- pce_322a_disconnect(sdi);
-
- return std_serial_dev_acquisition_stop(sdi, std_serial_dev_close,
- sdi->conn, LOG_PREFIX);
-}
-
static struct sr_dev_driver pce_322a_driver_info = {
.name = "pce-322a",
.longname = "PCE PCE-322A",
.dev_open = dev_open,
.dev_close = dev_close,
.dev_acquisition_start = dev_acquisition_start,
- .dev_acquisition_stop = dev_acquisition_stop,
+ .dev_acquisition_stop = std_serial_dev_acquisition_stop,
.context = NULL,
};
SR_REGISTER_DEV_DRIVER(pce_322a_driver_info);