X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fdemo%2Fdemo.c;h=98c95457ce49259b827e6607bc1f8b9d1c127502;hb=refs%2Ftags%2Fdsupstream;hp=d2497d5a4871c69ea0733fb3b7d62ede3c8d5e0c;hpb=ed20a42803c8b4e79b259ae03298dec88f2299f5;p=libsigrok.git diff --git a/hardware/demo/demo.c b/hardware/demo/demo.c index d2497d5a..98c95457 100644 --- a/hardware/demo/demo.c +++ b/hardware/demo/demo.c @@ -1,5 +1,5 @@ /* - * This file is part of the sigrok project. + * This file is part of the libsigrok project. * * Copyright (C) 2010 Uwe Hermann * Copyright (C) 2011 Olivier Fauchon @@ -31,14 +31,14 @@ #include "libsigrok.h" #include "libsigrok-internal.h" -/* Message logging helpers with driver-specific prefix string. */ -#define DRIVER_LOG_DOMAIN "demo: " -#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args) -#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args) -#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args) -#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args) -#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args) -#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args) +/* Message logging helpers with subsystem-specific prefix string. */ +#define LOG_PREFIX "demo: " +#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args) +#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args) +#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args) +#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args) +#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args) +#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args) /* TODO: Number of probes should be configurable. */ #define NUM_PROBES 8 @@ -152,7 +152,7 @@ static int clear_instances(void) static int hw_init(struct sr_context *sr_ctx) { - return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN); + return std_hw_init(sr_ctx, di, LOG_PREFIX); } static GSList *hw_scan(GSList *options) @@ -172,8 +172,8 @@ static GSList *hw_scan(GSList *options) sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, DEMONAME, NULL, NULL); if (!sdi) { - sr_err("%s: sr_dev_inst_new failed", __func__); - return 0; + sr_err("Device instance creation failed."); + return NULL; } sdi->driver = di; @@ -188,8 +188,8 @@ static GSList *hw_scan(GSList *options) drvc->instances = g_slist_append(drvc->instances, sdi); if (!(devc = g_try_malloc(sizeof(struct dev_context)))) { - sr_err("%s: devc malloc failed", __func__); - return SR_ERR_MALLOC; + sr_err("Device context malloc failed."); + return NULL; } devc->sdi = sdi; @@ -212,7 +212,7 @@ static int hw_dev_open(struct sr_dev_inst *sdi) { (void)sdi; - /* Nothing needed so far. */ + sdi->status = SR_ST_ACTIVE; return SR_OK; } @@ -221,7 +221,7 @@ static int hw_dev_close(struct sr_dev_inst *sdi) { (void)sdi; - /* Nothing needed so far. */ + sdi->status = SR_ST_INACTIVE; return SR_OK; } @@ -286,7 +286,7 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi) } break; default: - return SR_ERR_ARG; + return SR_ERR_NA; } return SR_OK; @@ -299,6 +299,9 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi) struct dev_context *const devc = sdi->priv; + if (sdi->status != SR_ST_ACTIVE) + return SR_ERR_DEV_CLOSED; + if (id == SR_CONF_SAMPLERATE) { devc->cur_samplerate = g_variant_get_uint64(data); sr_dbg("%s: setting samplerate to %" PRIu64, __func__, @@ -335,7 +338,7 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi) sr_dbg("%s: setting pattern to %d", __func__, devc->sample_generator); } else { - ret = SR_ERR; + ret = SR_ERR_NA; } return ret; @@ -364,7 +367,7 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi) *data = g_variant_new_strv(pattern_strings, ARRAY_SIZE(pattern_strings)); break; default: - return SR_ERR_ARG; + return SR_ERR_NA; } return SR_OK; @@ -460,6 +463,9 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, { struct dev_context *const devc = sdi->priv; + if (sdi->status != SR_ST_ACTIVE) + return SR_ERR_DEV_CLOSED; + devc->cb_data = cb_data; devc->samples_counter = 0; @@ -490,7 +496,7 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, 40, receive_data, devc); /* Send header packet to the session bus. */ - std_session_send_df_header(cb_data, DRIVER_LOG_DOMAIN); + std_session_send_df_header(cb_data, LOG_PREFIX); /* We use this timestamp to decide how many more samples to send. */ devc->starttime = g_get_monotonic_time(); @@ -509,6 +515,8 @@ static int hw_dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data) sr_session_source_remove_channel(devc->channel); g_io_channel_shutdown(devc->channel, FALSE, NULL); + g_io_channel_unref(devc->channel); + devc->channel = NULL; /* Send last packet. */ packet.type = SR_DF_END;