static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data);
-static int dev_clear(void)
-{
- return std_dev_clear(di, NULL);
-}
-
static int init(struct sr_context *sr_ctx)
{
return std_init(sr_ctx, di, LOG_PREFIX);
break;
case PATTERN_SINE:
- frequency = sample_rate / ANALOG_SAMPLES_PER_PERIOD;
+ frequency = (double) sample_rate / ANALOG_SAMPLES_PER_PERIOD;
/* Make sure the number of samples we put out is an integer
* multiple of our period size */
break;
case PATTERN_TRIANGLE:
- frequency = sample_rate / ANALOG_SAMPLES_PER_PERIOD;
+ frequency = (double) sample_rate / ANALOG_SAMPLES_PER_PERIOD;
while (num_samples % ANALOG_SAMPLES_PER_PERIOD != 0)
num_samples--;
break;
case PATTERN_SAWTOOTH:
- frequency = sample_rate / ANALOG_SAMPLES_PER_PERIOD;
+ frequency = (double) sample_rate / ANALOG_SAMPLES_PER_PERIOD;
while (num_samples % ANALOG_SAMPLES_PER_PERIOD != 0)
num_samples--;
static int cleanup(void)
{
- return dev_clear();
+ return std_dev_clear(di, NULL);
}
static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
expected_samplenum = elapsed * devc->cur_samplerate / 1000000;
/* Of those, how many do we still have to send? */
- logic_todo = expected_samplenum - devc->logic_counter;
- analog_todo = expected_samplenum - devc->analog_counter;
-
- if (devc->limit_samples) {
- logic_todo = MIN(logic_todo, devc->limit_samples - devc->logic_counter);
- analog_todo = MIN(analog_todo, devc->limit_samples - devc->analog_counter);
- }
+ logic_todo = MIN(expected_samplenum, devc->limit_samples) - devc->logic_counter;
+ analog_todo = MIN(expected_samplenum, devc->limit_samples) - devc->analog_counter;
while (logic_todo || analog_todo) {
/* Logic */
}
}
- if (devc->limit_samples &&
- devc->logic_counter >= devc->limit_samples &&
+ if (devc->logic_counter >= devc->limit_samples &&
devc->analog_counter >= devc->limit_samples) {
sr_dbg("Requested number of samples reached.");
dev_acquisition_stop(sdi, cb_data);
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
- /* TODO: don't start without a sample limit set */
devc = sdi->priv;
+ if (devc->limit_samples == 0)
+ return SR_ERR;
devc->logic_counter = devc->analog_counter = 0;
/*
.cleanup = cleanup,
.scan = scan,
.dev_list = dev_list,
- .dev_clear = dev_clear,
+ .dev_clear = NULL,
.config_get = config_get,
.config_set = config_set,
.config_list = config_list,