X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fdemo%2Fdemo.c;h=5128b9dc652094b75790d626fae7b2936bdc7f10;hb=536141ff49330b48ed8230547a9bec738d84a309;hp=44b9293133faba108c1218a7b0ff76b1c664d3b0;hpb=76372c5a9ce25d94ee992a5c84b8135f0d945293;p=libsigrok.git diff --git a/src/hardware/demo/demo.c b/src/hardware/demo/demo.c index 44b92931..5128b9dc 100644 --- a/src/hardware/demo/demo.c +++ b/src/hardware/demo/demo.c @@ -157,7 +157,11 @@ static const uint32_t devopts_cg_logic[] = { SR_CONF_PATTERN_MODE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, }; -static const uint32_t devopts_cg_analog[] = { +static const uint32_t devopts_cg_analog_group[] = { + SR_CONF_AMPLITUDE | SR_CONF_GET | SR_CONF_SET, +}; + +static const uint32_t devopts_cg_analog_channel[] = { SR_CONF_PATTERN_MODE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST, SR_CONF_AMPLITUDE | SR_CONF_GET | SR_CONF_SET, }; @@ -225,7 +229,7 @@ static void generate_analog_pattern(struct analog_gen *ag, uint64_t sample_rate) for (i = 0; i < num_samples; i++) { t = (double) i / (double) sample_rate; ag->pattern_data[i] = ag->amplitude * - sin(2 * PI * frequency * t); + sin(2 * G_PI * frequency * t); } ag->num_samples = num_samples; @@ -238,8 +242,8 @@ static void generate_analog_pattern(struct analog_gen *ag, uint64_t sample_rate) for (i = 0; i < num_samples; i++) { t = (double) i / (double) sample_rate; - ag->pattern_data[i] = (2 * ag->amplitude / PI) * - asin(sin(2 * PI * frequency * t)); + ag->pattern_data[i] = (2 * ag->amplitude / G_PI) * + asin(sin(2 * G_PI * frequency * t)); } ag->num_samples = num_samples; @@ -601,7 +605,6 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * return SR_ERR_NA; } } else { - /* Any channel in the group will do. */ ch = cg->channels->data; switch (key) { case SR_CONF_DEVICE_OPTIONS: @@ -609,14 +612,24 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, devopts_cg_logic, ARRAY_SIZE(devopts_cg_logic), sizeof(uint32_t)); - else if (ch->type == SR_CHANNEL_ANALOG) - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - devopts_cg_analog, ARRAY_SIZE(devopts_cg_analog), - sizeof(uint32_t)); + else if (ch->type == SR_CHANNEL_ANALOG) { + if (strcmp(cg->name, "Analog") == 0) + *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, + devopts_cg_analog_group, ARRAY_SIZE(devopts_cg_analog_group), + sizeof(uint32_t)); + else + *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, + devopts_cg_analog_channel, ARRAY_SIZE(devopts_cg_analog_channel), + sizeof(uint32_t)); + } else return SR_ERR_BUG; break; case SR_CONF_PATTERN_MODE: + /* The analog group (with all 4 channels) shall not have a pattern property. */ + if (strcmp(cg->name, "Analog") == 0) + return SR_ERR_NA; + if (ch->type == SR_CHANNEL_LOGIC) *data = g_variant_new_strv(logic_pattern_str, ARRAY_SIZE(logic_pattern_str)); @@ -764,9 +777,9 @@ static int prepare_data(int fd, int revents, void *cb_data) expected_samplenum = MIN(expected_samplenum, devc->limit_samples); /* Of those, how many do we still have to send? */ - if (devc->num_logic_channels) + if (devc->num_logic_channels && (devc->logic_counter < devc->limit_samples)) logic_todo = expected_samplenum - devc->logic_counter; - if (devc->num_analog_channels) + if (devc->num_analog_channels && (devc->analog_counter < devc->limit_samples)) analog_todo = expected_samplenum - devc->analog_counter; while (logic_todo || analog_todo) {