annotate projects/basic_analog_output/main.cpp @ 56:3c3a1357657d newapi

Further API update to name three primary functions setup(), render() and cleanup(). Changed include paths so now can #include <BeagleRT.h>. Removed stale pru_rtaudio.bin file as this is now done as pru_rtaudio_bin.h. Updated examples to new API and fixed minor compiler warnings along the way. Network example needs further attention to compile.
author andrewm
date Wed, 15 Jul 2015 12:10:51 +0100
parents a6d223473ea2
children
rev   line source
andrewm@0 1 /*
andrewm@0 2 * main.cpp
andrewm@0 3 *
andrewm@0 4 * Created on: Oct 24, 2014
andrewm@0 5 * Author: parallels
andrewm@0 6 */
andrewm@0 7
andrewm@0 8 #include <iostream>
andrewm@0 9 #include <cstdlib>
andrewm@0 10 #include <libgen.h>
andrewm@0 11 #include <signal.h>
andrewm@5 12 #include <getopt.h>
andrewm@56 13 #include <BeagleRT.h>
andrewm@0 14
andrewm@0 15 using namespace std;
andrewm@0 16
andrewm@0 17 // Handle Ctrl-C by requesting that the audio rendering stop
andrewm@0 18 void interrupt_handler(int var)
andrewm@0 19 {
andrewm@0 20 gShouldStop = true;
andrewm@0 21 }
andrewm@0 22
andrewm@0 23 // Print usage information
andrewm@0 24 void usage(const char * processName)
andrewm@0 25 {
andrewm@5 26 cerr << "Usage: " << processName << " [options]" << endl;
andrewm@5 27
andrewm@5 28 BeagleRT_usage();
andrewm@5 29
andrewm@5 30 cerr << " --frequency [-f] frequency: Set the frequency of the LED fade (default: 1.0)\n";
andrewm@5 31 cerr << " --help [-h]: Print this menu\n";
andrewm@0 32 }
andrewm@0 33
andrewm@0 34 int main(int argc, char *argv[])
andrewm@0 35 {
andrewm@52 36 BeagleRTInitSettings settings; // Standard audio settings
andrewm@5 37 float frequency = 1.0; // Frequency of LED fades
andrewm@5 38
andrewm@5 39 struct option customOptions[] =
andrewm@5 40 {
andrewm@5 41 {"help", 0, NULL, 'h'},
andrewm@5 42 {"frequency", 1, NULL, 'f'},
andrewm@5 43 {NULL, 0, NULL, 0}
andrewm@5 44 };
andrewm@5 45
andrewm@5 46 // Set default settings
andrewm@5 47 BeagleRT_defaultSettings(&settings);
andrewm@5 48
andrewm@5 49 // In this example, audio isn't used so might as well leave speaker muted
andrewm@5 50 settings.beginMuted = 1;
andrewm@0 51
andrewm@0 52 // Parse command-line arguments
andrewm@0 53 while (1) {
andrewm@0 54 int c;
andrewm@5 55 if ((c = BeagleRT_getopt_long(argc, argv, "hf:", customOptions, &settings)) < 0)
andrewm@0 56 break;
andrewm@0 57 switch (c) {
andrewm@0 58 case 'h':
andrewm@0 59 usage(basename(argv[0]));
andrewm@0 60 exit(0);
andrewm@0 61 case 'f':
andrewm@0 62 frequency = atof(optarg);
andrewm@0 63 if(frequency < 0)
andrewm@0 64 frequency = 0;
andrewm@0 65 if(frequency > 11025.0)
andrewm@0 66 frequency = 11025.0;
andrewm@0 67 break;
andrewm@0 68 case '?':
andrewm@0 69 default:
andrewm@0 70 usage(basename(argv[0]));
andrewm@0 71 exit(1);
andrewm@0 72 }
andrewm@0 73 }
andrewm@0 74
andrewm@0 75 // Initialise the PRU audio device
andrewm@5 76 if(BeagleRT_initAudio(&settings, &frequency) != 0) {
andrewm@0 77 cout << "Error: unable to initialise audio" << endl;
andrewm@0 78 return -1;
andrewm@0 79 }
andrewm@0 80
andrewm@0 81 // Start the audio device running
andrewm@5 82 if(BeagleRT_startAudio()) {
andrewm@0 83 cout << "Error: unable to start real-time audio" << endl;
andrewm@0 84 return -1;
andrewm@0 85 }
andrewm@0 86
andrewm@15 87 // Set up interrupt handler to catch Control-C and SIGTERM
andrewm@0 88 signal(SIGINT, interrupt_handler);
andrewm@15 89 signal(SIGTERM, interrupt_handler);
andrewm@0 90
andrewm@0 91 // Run until told to stop
andrewm@0 92 while(!gShouldStop) {
andrewm@0 93 usleep(100000);
andrewm@0 94 }
andrewm@0 95
andrewm@0 96 // Stop the audio device
andrewm@5 97 BeagleRT_stopAudio();
andrewm@0 98
andrewm@0 99 // Clean up any resources allocated for audio
andrewm@5 100 BeagleRT_cleanupAudio();
andrewm@0 101
andrewm@0 102 // All done!
andrewm@0 103 return 0;
andrewm@0 104 }