X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Fdemo%2Fapi.c;h=ba317fbe4a1b8fa389a8de39966c833956820659;hb=a4be2b327be8b6a38fe024e2a3ee614243067762;hp=e5ee21b71debde80b167aa21afeb65e7be2f2497;hpb=a6e5d2f676d2887978f193be2e6bb451185ba36d;p=libsigrok.git diff --git a/src/hardware/demo/api.c b/src/hardware/demo/api.c index e5ee21b7..ba317fbe 100644 --- a/src/hardware/demo/api.c +++ b/src/hardware/demo/api.c @@ -32,7 +32,7 @@ #define DEFAULT_NUM_LOGIC_CHANNELS 8 #define DEFAULT_LOGIC_PATTERN PATTERN_SIGROK -#define DEFAULT_NUM_ANALOG_CHANNELS 4 +#define DEFAULT_NUM_ANALOG_CHANNELS 5 /* Note: No spaces allowed because of sigrok-cli. */ static const char *logic_pattern_str[] = { @@ -77,12 +77,14 @@ static const uint32_t devopts_cg_logic[] = { static const uint32_t devopts_cg_analog_group[] = { SR_CONF_AMPLITUDE | SR_CONF_GET | SR_CONF_SET, + SR_CONF_OFFSET | SR_CONF_GET | SR_CONF_SET, }; static const uint32_t devopts_cg_analog_channel[] = { SR_CONF_MEASURED_QUANTITY | SR_CONF_GET | SR_CONF_SET, SR_CONF_PATTERN_MODE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, SR_CONF_AMPLITUDE | SR_CONF_GET | SR_CONF_SET, + SR_CONF_OFFSET | SR_CONF_GET | SR_CONF_SET, }; static const int32_t trigger_matches[] = { @@ -223,6 +225,8 @@ static void clear_helper(struct dev_context *devc) GHashTableIter iter; void *value; + demo_free_analog_pattern(devc); + /* Analog generators. */ g_hash_table_iter_init(&iter, devc->ch_ag); while (g_hash_table_iter_next(&iter, NULL, &value)) @@ -304,6 +308,16 @@ static int config_get(uint32_t key, GVariant **data, ag = g_hash_table_lookup(devc->ch_ag, ch); *data = g_variant_new_double(ag->amplitude); break; + case SR_CONF_OFFSET: + if (!cg) + return SR_ERR_CHANNEL_GROUP; + /* Any channel in the group will do. */ + ch = cg->channels->data; + if (ch->type != SR_CHANNEL_ANALOG) + return SR_ERR_ARG; + ag = g_hash_table_lookup(devc->ch_ag, ch); + *data = g_variant_new_double(ag->offset); + break; case SR_CONF_CAPTURE_RATIO: *data = g_variant_new_uint64(devc->capture_ratio); break; @@ -406,6 +420,17 @@ static int config_set(uint32_t key, GVariant *data, ag->amplitude = g_variant_get_double(data); } break; + case SR_CONF_OFFSET: + if (!cg) + return SR_ERR_CHANNEL_GROUP; + for (l = cg->channels; l; l = l->next) { + ch = l->data; + if (ch->type != SR_CHANNEL_ANALOG) + return SR_ERR_ARG; + ag = g_hash_table_lookup(devc->ch_ag, ch); + ag->offset = g_variant_get_double(data); + } + break; case SR_CONF_CAPTURE_RATIO: devc->capture_ratio = g_variant_get_uint64(data); break; @@ -548,7 +573,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) std_session_send_df_header(sdi); if (devc->limit_frames > 0) - std_session_send_frame_begin(sdi); + std_session_send_df_frame_begin(sdi); /* We use this timestamp to decide how many more samples to send. */ devc->start_us = g_get_monotonic_time(); @@ -566,7 +591,7 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) devc = sdi->priv; if (devc->limit_frames > 0) - std_session_send_frame_end(sdi); + std_session_send_df_frame_end(sdi); std_session_send_df_end(sdi);