static GSList *scan(struct sr_dev_driver *di, GSList *options, int modelid)
{
struct sr_dev_inst *sdi;
- struct drv_context *drvc;
struct dev_context *devc;
struct sr_config *src;
struct sr_channel *ch;
struct sr_channel_group *cg;
struct sr_serial_dev_inst *serial;
- GSList *l, *devices;
+ GSList *l;
const struct pps_model *model;
uint8_t packet[PACKET_SIZE];
unsigned int i;
const char *conn, *serialcomm;
char channel[10];
- devices = NULL;
- drvc = di->context;
-
conn = serialcomm = NULL;
for (l = options; l; l = l->next) {
src = l->data;
devc->config = g_malloc0(sizeof(struct per_channel_config) * model->num_channels);
devc->delay_ms = delay_ms;
sdi->priv = devc;
- devices = g_slist_append(devices, sdi);
serial_close(serial);
- if (!devices)
- sr_serial_dev_inst_free(serial);
- return std_scan_complete(di, devices);
+ return std_scan_complete(di, g_slist_append(NULL, sdi));
}
static GSList *scan_3203(struct sr_dev_driver *di, GSList *options)
{
struct dev_context *devc;
struct sr_channel *ch;
- int channel, ret;
+ int channel;
if (!sdi)
return SR_ERR_ARG;
devc = sdi->priv;
- ret = SR_OK;
if (!cg) {
/* No channel group: global options. */
switch (key) {
}
}
- return ret;
+ return SR_OK;
}
static int find_str(const char *str, const char **strings, int array_size)
const char *sval;
gboolean bval;
- if (sdi->status != SR_ST_ACTIVE)
- return SR_ERR_DEV_CLOSED;
-
ret = SR_OK;
devc = sdi->priv;
if (!cg) {
struct sr_channel *ch;
GVariant *gvar;
GVariantBuilder gvb;
- int channel, ret, i;
+ int channel, i;
- /* 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,
- drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t));
- return SR_OK;
- }
-
- if (!sdi)
- return SR_ERR_ARG;
+ devc = (sdi) ? sdi->priv : NULL;
- devc = sdi->priv;
- ret = SR_OK;
if (!cg) {
/* No channel group: global options. */
switch (key) {
+ case SR_CONF_SCAN_OPTIONS:
case SR_CONF_DEVICE_OPTIONS:
- *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
- devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
- break;
+ return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
case SR_CONF_CHANNEL_CONFIG:
if (devc->model->channel_modes == CHANMODE_INDEPENDENT) {
/* The 1-channel models. */
}
} else {
/* Channel group specified: per-channel options. */
- if (!sdi)
- return SR_ERR_ARG;
+
/* We only ever have one channel per channel group in this driver. */
ch = cg->channels->data;
channel = ch->index;
}
}
- return ret;
+ return SR_OK;
}
static int dev_close(struct sr_dev_inst *sdi)
struct dev_context *devc;
devc = sdi->priv;
+
if (devc->config_dirty)
/* Some configuration changes were queued up but didn't
* get sent to the device, likely because we were never
struct sr_serial_dev_inst *serial;
uint8_t packet[PACKET_SIZE];
- if (sdi->status != SR_ST_ACTIVE)
- return SR_ERR_DEV_CLOSED;
-
devc = sdi->priv;
memset(devc->packet, 0x44, PACKET_SIZE);
devc->packet_size = 0;
serial = sdi->conn;
serial_source_add(sdi->session, serial, G_IO_IN, 50,
atten_pps3xxx_receive_data, (void *)sdi);
- std_session_send_df_header(sdi, LOG_PREFIX);
+ std_session_send_df_header(sdi);
/* Send a "channel" configuration packet now. */
memset(packet, 0, PACKET_SIZE);
{
struct dev_context *devc;
- if (sdi->status != SR_ST_ACTIVE)
- return SR_ERR_DEV_CLOSED;
-
devc = sdi->priv;
devc->acquisition_running = FALSE;
.cleanup = std_cleanup,
.scan = scan_3203,
.dev_list = std_dev_list,
- .dev_clear = NULL,
+ .dev_clear = std_dev_clear,
.config_get = config_get,
.config_set = config_set,
.config_list = config_list,