Mercurial > hg > beaglert
diff projects/basic_sensor/main.cpp @ 5:09f03ac40fcc
API improvements and cleanups. Now all common audio command-line options can be parsed automatically.
author | andrewm |
---|---|
date | Sat, 08 Nov 2014 16:16:55 +0100 |
parents | 8a575ba3ab52 |
children | 901d205d1a3c |
line wrap: on
line diff
--- a/projects/basic_sensor/main.cpp Thu Nov 06 19:02:48 2014 +0000 +++ b/projects/basic_sensor/main.cpp Sat Nov 08 16:16:55 2014 +0100 @@ -9,6 +9,7 @@ #include <cstdlib> #include <libgen.h> #include <signal.h> +#include <getopt.h> #include "../../include/RTAudio.h" using namespace std; @@ -25,36 +26,39 @@ // Print usage information void usage(const char * processName) { - cerr << "Usage: " << processName << " [-h] [-v] [-p period] [-f input] [-a input]" << endl; - cerr << " -h: Print this menu\n"; - cerr << " -v: Enable verbose messages\n"; - cerr << " -p period: Set the period (hardware buffer) size in sensor frames\n"; - cerr << " -f input: Choose the analog input controlling frequency (0-7; default 0)\n"; - cerr << " -a input: Choose the analog input controlling amplitude (0-7; default 1)\n"; + cerr << "Usage: " << processName << " [options]" << endl; + + BeagleRT_usage(); + + cerr << " --frequency [-f] input: Choose the analog input controlling frequency (0-7; default 0)\n"; + cerr << " --amplitude [-a] input: Choose the analog input controlling amplitude (0-7; default 1)\n"; + cerr << " --help [-h]: Print this menu\n"; } int main(int argc, char *argv[]) { - int periodSize = 8; // Period size in sensor frames - int verbose = 0; // Verbose printing level + RTAudioSettings settings; // Standard audio settings + + struct option customOptions[] = + { + {"help", 0, NULL, 'h'}, + {"frequency", 1, NULL, 'f'}, + {"amplitude", 1, NULL, 'a'}, + {NULL, 0, NULL, 0} + }; + + // Set default settings + BeagleRT_defaultSettings(&settings); // Parse command-line arguments while (1) { int c; - if ((c = getopt(argc, argv, "hp:vf:a:")) < 0) + if ((c = BeagleRT_getopt_long(argc, argv, "hf:a:", customOptions, &settings)) < 0) break; switch (c) { case 'h': usage(basename(argv[0])); exit(0); - case 'p': - periodSize = atoi(optarg); - if(periodSize < 1) - periodSize = 1; - break; - case 'v': - verbose = 1; - break; case 'f': gSensorInputFrequency = atoi(optarg); if(gSensorInputFrequency < 0 || gSensorInputFrequency > 7) { @@ -76,24 +80,19 @@ } } + // Initialise the PRU audio device + if(BeagleRT_initAudio(&settings, 0) != 0) { + cout << "Error: unable to initialise audio" << endl; + return -1; + } - // Set verbose logging information (optional by using value > 0; default is 0) - setVerboseLevel(verbose); - - if(verbose) { - cout << "Starting with period size " << periodSize << endl; + if(settings.verbose) { cout << "--> Frequency on input " << gSensorInputFrequency << endl; cout << "--> Amplitude on input " << gSensorInputAmplitude << endl; } - // Initialise the PRU audio device - if(initAudio(periodSize, 1, 0) != 0) { - cout << "Error: unable to initialise audio" << endl; - return -1; - } - // Start the audio device running - if(startAudio()) { + if(BeagleRT_startAudio()) { cout << "Error: unable to start real-time audio" << endl; return -1; } @@ -107,14 +106,10 @@ } // Stop the audio device - stopAudio(); - - if(verbose) { - cout << "Cleaning up..." << endl; - } + BeagleRT_stopAudio(); // Clean up any resources allocated for audio - cleanupAudio(); + BeagleRT_cleanupAudio(); // All done! return 0;