annotate projects/basic_blink/render.cpp @ 269:ac8eb07afcf5

Oxygen text added to each render.cpp file for the default projects. Text includes project explanation from Wiki, edited in places. Empty project added as a default project. Doxyfile updated. Each of the project locations added to INPUT configuration option. Consider just watching the whole project file so all new projects are automatically pulled through.
author Robert Jack <robert.h.jack@gmail.com>
date Tue, 17 May 2016 15:40:16 +0100
parents 92145ba7aabf
children 5433c83ce04e
rev   line source
robert@269 1 /*
robert@269 2 ____ _____ _ _
robert@269 3 | __ )| ____| | / \
robert@269 4 | _ \| _| | | / _ \
robert@269 5 | |_) | |___| |___ / ___ \
robert@269 6 |____/|_____|_____/_/ \_\.io
robert@269 7
robert@269 8 */
robert@269 9
robert@269 10 /*
robert@269 11 *
robert@269 12 * Andrew McPherson and Victor Zappi
robert@269 13 * Queen Mary, University of London
robert@269 14 */
robert@269 15
robert@269 16 /**
robert@269 17 \example 2_digital_blink
robert@269 18
robert@269 19 Blinking an LED
robert@269 20 ---------------
robert@269 21
robert@269 22 This sketch shows the simplest case of digital out. Connect an LED in series with
robert@269 23 a 470ohm resistor between P8_07 and ground. The led is blinked on and off by
robert@269 24 setting the digital pin `HIGH` and `LOW` every interval seconds (set it in the
robert@269 25 `render()` function).
robert@269 26
robert@269 27 Firstly the pin mode must be set to output mode:
robert@269 28 `pinModeFrame(context, 0, P8_07, OUTPUT);` in the `setup()` function. The output
robert@269 29 of the digital pins is set by the following code:
robert@269 30 `digitalWriteFrame(context, n, P8_07, status);` where status can be equal to
robert@269 31 either `HIGH` or `LOW`. When set `HIGH` the pin will give 3.3V, when set to
robert@269 32 `LOW` 0V.
robert@269 33
robert@269 34 To keep track of elapsed time we have a sample counter count. When count reaches
robert@269 35 a certain limit it switches state to either `HIGH` or `LOW` depending on its current
robert@269 36 value. In this case the limit is `context->digitalSampleRate*interval` which
robert@269 37 allows us to write the desired interval in seconds, stored in `interval`.
robert@269 38 */
robert@269 39
robert@269 40
robert@269 41
robert@269 42
robert@269 43
giuliomoro@74 44 #include <BeagleRT.h>
giuliomoro@74 45 #include <Utilities.h>
giuliomoro@74 46 #include <cmath>
giuliomoro@74 47 #include <rtdk.h>
giuliomoro@74 48
giuliomoro@74 49 // setup() is called once before the audio rendering starts.
giuliomoro@74 50 // Use it to perform any initialisation and allocation which is dependent
giuliomoro@74 51 // on the period size or sample rate.
giuliomoro@74 52 //
giuliomoro@74 53 // userData holds an opaque pointer to a data structure that was passed
giuliomoro@74 54 // in from the call to initAudio().
giuliomoro@74 55 //
giuliomoro@74 56 // Return true on success; returning false halts the program.
giuliomoro@74 57
giuliomoro@74 58 bool setup(BeagleRTContext *context, void *userData)
giuliomoro@74 59 {
andrewm@81 60 pinModeFrame(context, 0, P8_07, OUTPUT);
giuliomoro@74 61 return true;
giuliomoro@74 62 }
giuliomoro@74 63
giuliomoro@74 64 // render() is called regularly at the highest priority by the audio engine.
giuliomoro@74 65 // Input and output are given from the audio hardware and the other
giuliomoro@74 66 // ADCs and DACs (if available). If only audio is available, numAnalogFrames
giuliomoro@74 67 // will be 0.
giuliomoro@74 68
giuliomoro@75 69 /* basic_blink
giuliomoro@75 70 * Connect an LED in series with a 470ohm resistor between P8_07 and ground.
giuliomoro@75 71 * The LED will blink every @interval seconds.
giuliomoro@75 72 */
giuliomoro@75 73
giuliomoro@74 74 void render(BeagleRTContext *context, void *userData)
giuliomoro@74 75 {
giuliomoro@74 76 static int count=0; //counts elapsed samples
giuliomoro@74 77 float interval=0.5; //how often to toggle the LED (in seconds)
giuliomoro@74 78 static int status=GPIO_LOW;
giuliomoro@74 79 for(unsigned int n=0; n<context->digitalFrames; n++){
giuliomoro@74 80 if(count==context->digitalSampleRate*interval){ //if enough samples have elapsed
giuliomoro@74 81 count=0; //reset the counter
giuliomoro@74 82 // status=digitalReadFrame(context, 0, P8_07);
andrewm@81 83 if(status==GPIO_LOW) { //toggle the status
andrewm@81 84 digitalWriteFrame(context, n, P8_07, status); //write the status to the LED
andrewm@81 85 status=GPIO_HIGH;
andrewm@81 86 }
andrewm@81 87 else {
andrewm@81 88 digitalWriteFrame(context, n, P8_07, status); //write the status to the LED
andrewm@81 89 status=GPIO_LOW;
andrewm@81 90 }
giuliomoro@74 91 }
giuliomoro@74 92 count++;
giuliomoro@74 93 }
giuliomoro@74 94 }
giuliomoro@74 95
giuliomoro@74 96 // cleanup() is called once at the end, after the audio has stopped.
giuliomoro@74 97 // Release any resources that were allocated in setup().
giuliomoro@74 98
giuliomoro@74 99 void cleanup(BeagleRTContext *context, void *userData)
giuliomoro@74 100 {
giuliomoro@74 101 // Nothing to do here
giuliomoro@74 102 }