Mercurial > hg > beaglert
comparison core/RTAudioCommandLine.cpp @ 67:472e892c6e41
Merge newapi into default
| author | Andrew McPherson <a.mcpherson@qmul.ac.uk> |
|---|---|
| date | Fri, 17 Jul 2015 15:28:18 +0100 |
| parents | a6d223473ea2 |
| children | e63563507edd |
comparison
equal
deleted
inserted
replaced
| 21:0d80ff9e2227 | 67:472e892c6e41 |
|---|---|
| 7 | 7 |
| 8 #include <iostream> | 8 #include <iostream> |
| 9 #include <cstdlib> | 9 #include <cstdlib> |
| 10 #include <cstring> | 10 #include <cstring> |
| 11 #include <getopt.h> | 11 #include <getopt.h> |
| 12 | 12 #include "../include/BeagleRT.h" |
| 13 #include "../include/RTAudio.h" | 13 |
| 14 #ifndef OPT_PRU_FILE | |
| 15 #define OPT_PRU_FILE 176 // this is an extended ASCII code | |
| 16 #endif | |
| 17 | |
| 18 enum { | |
| 19 kAmplifierMutePin = 61 // P8-26 controls amplifier mute | |
| 20 }; | |
| 14 | 21 |
| 15 // Default command-line options for RTAudio | 22 // Default command-line options for RTAudio |
| 16 struct option gDefaultLongOptions[] = | 23 struct option gDefaultLongOptions[] = |
| 17 { | 24 { |
| 18 {"period", 1, NULL, 'p'}, | 25 {"period", 1, NULL, 'p'}, |
| 19 {"verbose", 0, NULL, 'v'}, | 26 {"verbose", 0, NULL, 'v'}, |
| 20 {"use-matrix", 1, NULL, 'm'}, | 27 {"use-analog", 1, NULL, 'N'}, |
| 21 {"matrix-channels", 1, NULL, 'C'}, | 28 {"use-digital", 1, NULL, 'G'}, |
| 29 {"analog-channels", 1, NULL, 'C'}, | |
| 30 {"digital-channels", 1, NULL, 'B'}, | |
| 22 {"mute-speaker", 1, NULL, 'M'}, | 31 {"mute-speaker", 1, NULL, 'M'}, |
| 23 {"dac-level", 1, NULL, 'D'}, | 32 {"dac-level", 1, NULL, 'D'}, |
| 24 {"adc-level", 1, NULL, 'A'}, | 33 {"adc-level", 1, NULL, 'A'}, |
| 25 {"hp-level", 1, NULL, 'H'}, | 34 {"hp-level", 1, NULL, 'H'}, |
| 35 {"receive-port", 1, NULL, 'R'}, | |
| 36 {"transmit-port", 1, NULL, 'T'}, | |
| 37 {"server-name", 1, NULL, 'S'}, | |
| 38 {"pru-file", 1, NULL, OPT_PRU_FILE}, | |
| 26 {NULL, 0, NULL, 0} | 39 {NULL, 0, NULL, 0} |
| 27 }; | 40 }; |
| 28 | 41 |
| 29 const char gDefaultShortOptions[] = "p:vm:M:C:D:A:H:"; | 42 const char gDefaultShortOptions[] = "p:vN:M:C:D:A:H:G:B:R:T:S:"; |
| 30 | 43 |
| 31 // This function sets the default settings for the RTAudioSettings structure | 44 // This function sets the default settings for the BeagleRTInitSettings structure |
| 32 void BeagleRT_defaultSettings(RTAudioSettings *settings) | 45 void BeagleRT_defaultSettings(BeagleRTInitSettings *settings) |
| 33 { | 46 { |
| 34 // Set default values for settings | 47 // Set default values for settings |
| 35 settings->periodSize = 8; | 48 settings->periodSize = 8; |
| 49 settings->useAnalog = 1; | |
| 50 settings->useDigital = 1; | |
| 51 settings->numAnalogChannels = 8; | |
| 52 settings->numDigitalChannels = 16; | |
| 53 | |
| 36 settings->beginMuted = 0; | 54 settings->beginMuted = 0; |
| 37 settings->dacLevel = DEFAULT_DAC_LEVEL; | 55 settings->dacLevel = DEFAULT_DAC_LEVEL; |
| 38 settings->adcLevel = DEFAULT_ADC_LEVEL; | 56 settings->adcLevel = DEFAULT_ADC_LEVEL; |
| 39 settings->headphoneLevel = DEFAULT_HP_LEVEL; | 57 settings->headphoneLevel = DEFAULT_HP_LEVEL; |
| 40 settings->useMatrix = 1; | 58 |
| 41 settings->numMatrixChannels = 8; | |
| 42 settings->verbose = 0; | 59 settings->verbose = 0; |
| 60 settings->pruFilename[0] = '\0'; | |
| 61 | |
| 62 // These two deliberately have no command-line flags by default. | |
| 63 // A given program might prefer one mode or another, but it's unlikely | |
| 64 // the user would want to switch at runtime | |
| 65 settings->interleave = 1; | |
| 66 settings->analogOutputsPersist = 1; | |
| 67 | |
| 43 settings->codecI2CAddress = CODEC_I2C_ADDRESS; | 68 settings->codecI2CAddress = CODEC_I2C_ADDRESS; |
| 69 settings->receivePort = 9998; | |
| 70 settings->transmitPort = 9999; | |
| 71 strcpy(settings->serverName, "127.0.0.1"); | |
| 44 settings->ampMutePin = kAmplifierMutePin; | 72 settings->ampMutePin = kAmplifierMutePin; |
| 45 } | 73 } |
| 46 | 74 |
| 47 // This function drops in place of getopt() in the main() function | 75 // This function drops in place of getopt() in the main() function |
| 48 // and handles the initialisation of the RTAudio settings using | 76 // and handles the initialisation of the RTAudio settings using |
| 49 // standard command-line arguments. System default arguments will | 77 // standard command-line arguments. System default arguments will |
| 50 // be stored in settings, otherwise arguments will be returned | 78 // be stored in settings, otherwise arguments will be returned |
| 51 // as getopt() normally does. | 79 // as getopt() normally does. |
| 52 | 80 |
| 53 int BeagleRT_getopt_long(int argc, char *argv[], const char *customShortOptions, const struct option *customLongOptions, RTAudioSettings *settings) | 81 int BeagleRT_getopt_long(int argc, char *argv[], const char *customShortOptions, const struct option *customLongOptions, BeagleRTInitSettings *settings) |
| 54 { | 82 { |
| 55 static int firstRun = 1; | 83 static int firstRun = 1; |
| 56 static char totalShortOptions[256]; | 84 static char totalShortOptions[256]; |
| 57 static struct option totalLongOptions[256]; | 85 static struct option totalLongOptions[256]; |
| 58 | 86 |
| 120 settings->periodSize = 1; | 148 settings->periodSize = 1; |
| 121 break; | 149 break; |
| 122 case 'v': | 150 case 'v': |
| 123 settings->verbose = 1; | 151 settings->verbose = 1; |
| 124 break; | 152 break; |
| 125 case 'm': | 153 case 'N': |
| 126 settings->useMatrix = atoi(optarg); | 154 settings->useAnalog = atoi(optarg); |
| 155 break; | |
| 156 case 'G': | |
| 157 settings->useDigital = atoi(optarg); | |
| 158 settings->numDigitalChannels = 0; | |
| 127 break; | 159 break; |
| 128 case 'C': | 160 case 'C': |
| 129 settings->numMatrixChannels = atoi(optarg); | 161 settings->numAnalogChannels = atoi(optarg); |
| 130 if(settings->numMatrixChannels >= 8) | 162 if(settings->numAnalogChannels >= 8) |
| 131 settings->numMatrixChannels = 8; | 163 settings->numAnalogChannels = 8; |
| 132 else if(settings->numMatrixChannels >= 4) | 164 else if(settings->numAnalogChannels >= 4) |
| 133 settings->numMatrixChannels = 4; | 165 settings->numAnalogChannels = 4; |
| 134 else | 166 else |
| 135 settings->numMatrixChannels = 2; | 167 settings->numAnalogChannels = 2; |
| 168 break; | |
| 169 case 'B': | |
| 170 settings->numDigitalChannels = atoi(optarg); | |
| 171 if(settings->numDigitalChannels >= 16) | |
| 172 settings->numDigitalChannels = 16; | |
| 173 else if (settings->numDigitalChannels < 1){ | |
| 174 settings->numDigitalChannels = 0; | |
| 175 settings->useDigital = 0; //TODO: this actually works only if -G 0 is specified after -g 1. | |
| 176 //No worries, though: disabling numDigital will only prevent the pins from being exported. | |
| 177 } | |
| 136 break; | 178 break; |
| 137 case 'M': | 179 case 'M': |
| 138 settings->beginMuted = atoi(optarg); | 180 settings->beginMuted = atoi(optarg); |
| 139 break; | 181 break; |
| 140 case 'D': | 182 case 'D': |
| 143 case 'A': | 185 case 'A': |
| 144 settings->adcLevel = atof(optarg); | 186 settings->adcLevel = atof(optarg); |
| 145 break; | 187 break; |
| 146 case 'H': | 188 case 'H': |
| 147 settings->headphoneLevel = atof(optarg); | 189 settings->headphoneLevel = atof(optarg); |
| 190 break; | |
| 191 case 'R': | |
| 192 settings->receivePort = atoi(optarg); | |
| 193 break; | |
| 194 case 'T': | |
| 195 settings->transmitPort = atoi(optarg); | |
| 196 break; | |
| 197 case 'S': | |
| 198 if(strlen(optarg)<MAX_SERVERNAME_LENGTH) | |
| 199 strcpy(settings->serverName, optarg); | |
| 200 else | |
| 201 std::cerr << "Warning: server name is too long (>" << MAX_SERVERNAME_LENGTH << " characters)." | |
| 202 " Using default severName Instead ( " << settings->serverName << " ).\n"; | |
| 203 break; | |
| 204 case OPT_PRU_FILE: | |
| 205 if(strlen(optarg) < MAX_PRU_FILENAME_LENGTH) | |
| 206 strcpy(settings->pruFilename, optarg); | |
| 207 else | |
| 208 std::cerr << "Warning: filename for the PRU code is too long (>" << MAX_PRU_FILENAME_LENGTH << " characters). Using embedded PRU code instead\n"; | |
| 148 break; | 209 break; |
| 149 case '?': | 210 case '?': |
| 150 default: | 211 default: |
| 151 return c; | 212 return c; |
| 152 } | 213 } |
| 155 | 216 |
| 156 // This function prints standard usage information for default arguments | 217 // This function prints standard usage information for default arguments |
| 157 // Call from within your own usage function | 218 // Call from within your own usage function |
| 158 void BeagleRT_usage() | 219 void BeagleRT_usage() |
| 159 { | 220 { |
| 160 std::cerr << " --period [-p] period: Set the hardware period (buffer) size in matrix samples\n"; | 221 std::cerr << " --period [-p] period: Set the hardware period (buffer) size in analog samples\n"; |
| 161 std::cerr << " --dac-level [-D] dBs: Set the DAC output level (0dB max; -63.5dB min)\n"; | 222 std::cerr << " --dac-level [-D] dBs: Set the DAC output level (0dB max; -63.5dB min)\n"; |
| 162 std::cerr << " --adc-level [-A] dBs: Set the ADC input level (0dB max; -12dB min)\n"; | 223 std::cerr << " --adc-level [-A] dBs: Set the ADC input level (0dB max; -12dB min)\n"; |
| 163 std::cerr << " --hp-level [-H] dBs: Set the headphone output level (0dB max; -63.5dB min)\n"; | 224 std::cerr << " --hp-level [-H] dBs: Set the headphone output level (0dB max; -63.5dB min)\n"; |
| 164 std::cerr << " --mute-speaker [-M] val: Set whether to mute the speaker initially (default: no)\n"; | 225 std::cerr << " --mute-speaker [-M] val: Set whether to mute the speaker initially (default: no)\n"; |
| 165 std::cerr << " --use-matrix [-m] val: Set whether to use ADC/DAC matrix\n"; | 226 std::cerr << " --use-analog [-N] val: Set whether to use ADC/DAC analog (default: yes)\n"; |
| 166 std::cerr << " --matrix-channels [-C] val: Set the number of ADC/DAC channels (default: 8)\n"; | 227 std::cerr << " --use-digital [-G] val: Set whether to use digital GPIO channels (default: yes)\n"; |
| 167 std::cerr << " --verbose [-v]: Enable verbose logging information\n"; | 228 std::cerr << " --analog-channels [-C] val: Set the number of ADC/DAC channels (default: 8)\n"; |
| 229 std::cerr << " --digital-channels [-B] val: Set the number of GPIO channels (default: 16)\n"; | |
| 230 std::cerr << " --receive-port [-R] val: Set the receive port (default: 9998)\n"; | |
| 231 std::cerr << " --transmit-port [-T] val: Set the transmit port (default: 9999)\n"; | |
| 232 std::cerr << " --server-name [-S] val: Set the destination server name (default: '127.0.0.1')\n"; | |
| 233 std::cerr << " --pru-file val: Set an optional external file to use for the PRU binary code\n"; | |
| 234 std::cerr << " --verbose [-v]: Enable verbose logging information\n"; | |
| 168 } | 235 } |
| 236 |
