comparison core/RTAudio.cpp @ 50:be427da6fb9c newapi

Removed old testing code that stopped audio after 10 seconds; command line parameter updates; D-Box updates (not fully working yet)
author andrewm
date Sat, 30 May 2015 12:34:32 -0500
parents 643cbee74eda
children 3c3a1357657d
comparison
equal deleted inserted replaced
49:bb40e7e06b8c 50:be427da6fb9c
50 const char gRTAudioThreadName[] = "beaglert-audio"; 50 const char gRTAudioThreadName[] = "beaglert-audio";
51 const char gRTAudioInterruptName[] = "beaglert-pru-irq"; 51 const char gRTAudioInterruptName[] = "beaglert-pru-irq";
52 52
53 // Real-time tasks and objects 53 // Real-time tasks and objects
54 RT_TASK gRTAudioThread; 54 RT_TASK gRTAudioThread;
55 #ifdef BEAGLERT_USE_XENOMAI_INTERRUPTS
55 RT_INTR gRTAudioInterrupt; 56 RT_INTR gRTAudioInterrupt;
57 #endif
56 PRU *gPRU = 0; 58 PRU *gPRU = 0;
57 I2c_Codec *gAudioCodec = 0; 59 I2c_Codec *gAudioCodec = 0;
58 60
59 vector<InternalAuxiliaryTask*> gAuxTasks; 61 vector<InternalAuxiliaryTask*> gAuxTasks;
60 62
255 if(gRTAudioVerbose) 257 if(gRTAudioVerbose)
256 rt_printf("Warning: couldn't set value (high) on amplifier mute pin\n"); 258 rt_printf("Warning: couldn't set value (high) on amplifier mute pin\n");
257 } 259 }
258 } 260 }
259 261
262 #ifdef BEAGLERT_USE_XENOMAI_INTERRUPTS
260 gPRU->loop(&gRTAudioInterrupt, gUserData); 263 gPRU->loop(&gRTAudioInterrupt, gUserData);
261 264 #else
265 gPRU->loop(0, gUserData);
266 #endif
262 // Now clean up 267 // Now clean up
263 // gPRU->waitForFinish(); 268 // gPRU->waitForFinish();
264 gPRU->disable(); 269 gPRU->disable();
265 gAudioCodec->stopAudio(); 270 gAudioCodec->stopAudio();
266 gPRU->cleanupGPIO(); 271 gPRU->cleanupGPIO();
339 if(rt_task_create(&gRTAudioThread, gRTAudioThreadName, 0, BEAGLERT_AUDIO_PRIORITY, T_JOINABLE | T_FPU)) { 344 if(rt_task_create(&gRTAudioThread, gRTAudioThreadName, 0, BEAGLERT_AUDIO_PRIORITY, T_JOINABLE | T_FPU)) {
340 cout << "Error: unable to create Xenomai audio thread" << endl; 345 cout << "Error: unable to create Xenomai audio thread" << endl;
341 return -1; 346 return -1;
342 } 347 }
343 348
349 #ifdef BEAGLERT_USE_XENOMAI_INTERRUPTS
344 // Create an interrupt which the audio thread receives from the PRU 350 // Create an interrupt which the audio thread receives from the PRU
345 int result = 0; 351 int result = 0;
346 if((result = rt_intr_create(&gRTAudioInterrupt, gRTAudioInterruptName, PRU_RTAUDIO_IRQ, I_NOAUTOENA)) != 0) { 352 if((result = rt_intr_create(&gRTAudioInterrupt, gRTAudioInterruptName, PRU_RTAUDIO_IRQ, I_NOAUTOENA)) != 0) {
347 cout << "Error: unable to create Xenomai interrupt for PRU (error " << result << ")" << endl; 353 cout << "Error: unable to create Xenomai interrupt for PRU (error " << result << ")" << endl;
348 return -1; 354 return -1;
349 } 355 }
356 #endif
350 357
351 // Start all RT threads 358 // Start all RT threads
352 if(rt_task_start(&gRTAudioThread, &audioLoop, 0)) { 359 if(rt_task_start(&gRTAudioThread, &audioLoop, 0)) {
353 cout << "Error: unable to start Xenomai audio thread" << endl; 360 cout << "Error: unable to start Xenomai audio thread" << endl;
354 return -1; 361 return -1;
411 free(taskStruct); 418 free(taskStruct);
412 } 419 }
413 gAuxTasks.clear(); 420 gAuxTasks.clear();
414 421
415 // Delete the audio task and its interrupt 422 // Delete the audio task and its interrupt
423 #ifdef BEAGLERT_USE_XENOMAI_INTERRUPTS
416 rt_intr_delete(&gRTAudioInterrupt); 424 rt_intr_delete(&gRTAudioInterrupt);
425 #endif
417 rt_task_delete(&gRTAudioThread); 426 rt_task_delete(&gRTAudioThread);
418 427
419 if(gPRU != 0) 428 if(gPRU != 0)
420 delete gPRU; 429 delete gPRU;
421 if(gAudioCodec != 0) 430 if(gAudioCodec != 0)