X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fdemo%2Fdemo.c;h=b5b0d786c064b9081089528d139ea0cbe7abfd16;hb=2cfd16a31672be2ef8227dcda407e8cc5a24607f;hp=0fc5011da0ec256194dc942a79f7576aade57b26;hpb=091c9621275fed7b0a418b644de46efec709d47b;p=libsigrok.git diff --git a/hardware/demo/demo.c b/hardware/demo/demo.c index 0fc5011d..b5b0d786 100644 --- a/hardware/demo/demo.c +++ b/hardware/demo/demo.c @@ -79,6 +79,7 @@ enum { PATTERN_SQUARE, PATTERN_SINE, PATTERN_TRIANGLE, + PATTERN_SAWTOOTH, }; static const char *logic_pattern_str[] = { @@ -93,6 +94,7 @@ static const char *analog_pattern_str[] = { "square", "sine", "triangle", + "sawtooth", }; struct analog_gen { @@ -190,7 +192,7 @@ static void generate_analog_pattern(const struct sr_probe_group *probe_group, ui switch (ag->pattern) { case PATTERN_SQUARE: - value = 5.0; + value = ANALOG_AMPLITUDE; last_end = 0; for (i = 0; i < num_samples; i++) { if (i % 5 == 0) @@ -233,6 +235,21 @@ static void generate_analog_pattern(const struct sr_probe_group *probe_group, ui asin(sin(2 * M_PI * frequency * t)); } + ag->num_samples = num_samples; + break; + + case PATTERN_SAWTOOTH: + frequency = sample_rate / ANALOG_SAMPLES_PER_PERIOD; + + while (num_samples % ANALOG_SAMPLES_PER_PERIOD != 0) + num_samples--; + + for (i = 0; i < num_samples; i++) { + t = (double) i / (double) sample_rate; + ag->pattern_data[i] = 2 * ANALOG_AMPLITUDE * + ((t * frequency) - floor(0.5f + t * frequency)); + } + ag->num_samples = num_samples; break; }