giuliomoro@74
|
1 #include <BeagleRT.h>
|
giuliomoro@74
|
2 #include <Utilities.h>
|
giuliomoro@74
|
3 #include <cmath>
|
giuliomoro@74
|
4 #include <rtdk.h>
|
giuliomoro@74
|
5
|
giuliomoro@74
|
6 // setup() is called once before the audio rendering starts.
|
giuliomoro@74
|
7 // Use it to perform any initialisation and allocation which is dependent
|
giuliomoro@74
|
8 // on the period size or sample rate.
|
giuliomoro@74
|
9 //
|
giuliomoro@74
|
10 // userData holds an opaque pointer to a data structure that was passed
|
giuliomoro@74
|
11 // in from the call to initAudio().
|
giuliomoro@74
|
12 //
|
giuliomoro@74
|
13 // Return true on success; returning false halts the program.
|
giuliomoro@74
|
14
|
giuliomoro@74
|
15 bool setup(BeagleRTContext *context, void *userData)
|
giuliomoro@74
|
16 {
|
giuliomoro@74
|
17 return true;
|
giuliomoro@74
|
18 }
|
giuliomoro@74
|
19
|
giuliomoro@74
|
20 // render() is called regularly at the highest priority by the audio engine.
|
giuliomoro@74
|
21 // Input and output are given from the audio hardware and the other
|
giuliomoro@74
|
22 // ADCs and DACs (if available). If only audio is available, numAnalogFrames
|
giuliomoro@74
|
23 // will be 0.
|
giuliomoro@74
|
24
|
giuliomoro@75
|
25 /* basic_blink
|
giuliomoro@75
|
26 * Connect an LED in series with a 470ohm resistor between P8_07 and ground.
|
giuliomoro@75
|
27 * The LED will blink every @interval seconds.
|
giuliomoro@75
|
28 */
|
giuliomoro@75
|
29
|
giuliomoro@74
|
30 void render(BeagleRTContext *context, void *userData)
|
giuliomoro@74
|
31 {
|
giuliomoro@74
|
32 static int count=0; //counts elapsed samples
|
giuliomoro@74
|
33 float interval=0.5; //how often to toggle the LED (in seconds)
|
giuliomoro@74
|
34 static int status=GPIO_LOW;
|
giuliomoro@74
|
35 for(unsigned int n=0; n<context->digitalFrames; n++){
|
giuliomoro@74
|
36 if(count==context->digitalSampleRate*interval){ //if enough samples have elapsed
|
giuliomoro@74
|
37 count=0; //reset the counter
|
giuliomoro@74
|
38 // status=digitalReadFrame(context, 0, P8_07);
|
giuliomoro@74
|
39 if(status==GPIO_LOW) //toggle the status
|
giuliomoro@74
|
40 status=GPIO_HIGH;
|
giuliomoro@74
|
41 else
|
giuliomoro@74
|
42 status=GPIO_LOW;
|
giuliomoro@75
|
43 pinModeFrame(context, n, P8_07, OUTPUT);
|
giuliomoro@75
|
44 digitalWriteFrameOnce(context, n, P8_07, status); //write the status to the LED
|
giuliomoro@74
|
45 }
|
giuliomoro@74
|
46 count++;
|
giuliomoro@74
|
47 }
|
giuliomoro@74
|
48 }
|
giuliomoro@74
|
49
|
giuliomoro@74
|
50 // cleanup() is called once at the end, after the audio has stopped.
|
giuliomoro@74
|
51 // Release any resources that were allocated in setup().
|
giuliomoro@74
|
52
|
giuliomoro@74
|
53 void cleanup(BeagleRTContext *context, void *userData)
|
giuliomoro@74
|
54 {
|
giuliomoro@74
|
55 // Nothing to do here
|
giuliomoro@74
|
56 }
|