X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Fdemo%2Fdemo.c;h=a84ee18b65756a24a9f03546491e85552624ebb7;hb=e91d4ce2b2a2b34fe4cabb3082a2c325941de1f9;hp=1b25872755a451dcecaa0ed242fc4b08010fea0b;hpb=5faebab2903dc91949edc31f0a4b118d86090a30;p=libsigrok.git diff --git a/src/hardware/demo/demo.c b/src/hardware/demo/demo.c index 1b258727..a84ee18b 100644 --- a/src/hardware/demo/demo.c +++ b/src/hardware/demo/demo.c @@ -38,7 +38,7 @@ /* Size of the analog pattern space per channel. */ #define ANALOG_BUFSIZE 4096 -#define DEFAULT_ANALOG_AMPLITUDE 25 +#define DEFAULT_ANALOG_AMPLITUDE 10 #define ANALOG_SAMPLES_PER_PERIOD 20 /* Logic patterns we can generate. */ @@ -137,7 +137,7 @@ static const uint32_t scanopts[] = { }; static const uint32_t devopts[] = { - SR_CONF_CONTINUOUS | SR_CONF_SET, + SR_CONF_CONTINUOUS, SR_CONF_LIMIT_SAMPLES | SR_CONF_GET | SR_CONF_SET, SR_CONF_LIMIT_MSEC | SR_CONF_GET | SR_CONF_SET, SR_CONF_SAMPLERATE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, @@ -177,12 +177,7 @@ static const uint8_t pattern_sigrok[] = { SR_PRIV struct sr_dev_driver demo_driver_info; -static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data); - -static int init(struct sr_dev_driver *di, struct sr_context *sr_ctx) -{ - return std_init(sr_ctx, di, LOG_PREFIX); -} +static int dev_acquisition_stop(struct sr_dev_inst *sdi); static void generate_analog_pattern(struct analog_gen *ag, uint64_t sample_rate) { @@ -354,11 +349,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) return devices; } -static GSList *dev_list(const struct sr_dev_driver *di) -{ - return ((struct drv_context *)(di->context))->instances; -} - static int dev_open(struct sr_dev_inst *sdi) { sdi->status = SR_ST_ACTIVE; @@ -389,7 +379,7 @@ static void clear_helper(void *priv) g_free(devc); } -static int cleanup(const struct sr_dev_driver *di) +static int dev_clear(const struct sr_dev_driver *di) { return std_dev_clear(di, clear_helper); } @@ -757,7 +747,7 @@ static int prepare_data(int fd, int revents, void *cb_data) if (devc->cur_samplerate <= 0 || devc->logic_unitsize <= 0 || (devc->num_logic_channels <= 0 && devc->num_analog_channels <= 0)) { - dev_acquisition_stop(sdi, sdi); + dev_acquisition_stop(sdi); return G_SOURCE_CONTINUE; } @@ -784,8 +774,8 @@ static int prepare_data(int fd, int revents, void *cb_data) */ todo_us = samples_todo * G_USEC_PER_SEC / devc->cur_samplerate; - logic_done = 0; - analog_done = 0; + logic_done = devc->num_logic_channels > 0 ? 0 : samples_todo; + analog_done = devc->num_analog_channels > 0 ? 0 : samples_todo; while (logic_done < samples_todo || analog_done < samples_todo) { /* Logic */ @@ -841,20 +831,18 @@ static int prepare_data(int fd, int revents, void *cb_data) } } sr_dbg("Requested number of samples reached."); - dev_acquisition_stop(sdi, sdi); + dev_acquisition_stop(sdi); } return G_SOURCE_CONTINUE; } -static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) +static int dev_acquisition_start(const struct sr_dev_inst *sdi) { struct dev_context *devc; GHashTableIter iter; void *value; - (void)cb_data; - if (sdi->status != SR_ST_ACTIVE) return SR_ERR_DEV_CLOSED; @@ -868,7 +856,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) sr_session_source_add(sdi->session, -1, 0, 100, prepare_data, (struct sr_dev_inst *)sdi); - /* Send header packet to the session bus. */ std_session_send_df_header(sdi, LOG_PREFIX); /* We use this timestamp to decide how many more samples to send. */ @@ -878,19 +865,11 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) return SR_OK; } -static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data) +static int dev_acquisition_stop(struct sr_dev_inst *sdi) { - struct sr_datafeed_packet packet; - - (void)cb_data; - sr_dbg("Stopping acquisition."); - sr_session_source_remove(sdi->session, -1); - - /* Send last packet. */ - packet.type = SR_DF_END; - sr_session_send(sdi, &packet); + std_session_send_df_end(sdi, LOG_PREFIX); return SR_OK; } @@ -899,11 +878,11 @@ SR_PRIV struct sr_dev_driver demo_driver_info = { .name = "demo", .longname = "Demo driver and pattern generator", .api_version = 1, - .init = init, - .cleanup = cleanup, + .init = std_init, + .cleanup = std_cleanup, .scan = scan, - .dev_list = dev_list, - .dev_clear = NULL, + .dev_list = std_dev_list, + .dev_clear = dev_clear, .config_get = config_get, .config_set = config_set, .config_list = config_list,