audio_queue.c File Reference

Include dependency graph for audio_queue.c:

Functions

void audio_queue_add (uns8 phrase)
void audio_queue_clear ()
uns8 audio_queue_empty ()
void audio_queue_process ()

Variables

uns8 aq_end = 0
uns8 aq_start = 0
bit audio_playing = 0
uns8 audio_queue_fifo [AUDIO_QUEUE_FIFO_SIZE]

Function Documentation

void audio_queue_add ( uns8  phrase  ) 

00051                                   {
00052 
00053 uns8 aq_next;
00054 
00055     if ((aq_end == aq_start) &&  // Nothing in the fifo
00056         (audio_playing == 0)) {  // And txreg is empty
00057                 
00058         somo_14d_set_file_id(phrase);
00059         audio_playing =  1;
00060     } else {    // Put it in the buffer
00061         aq_next = aq_end + 1;   // Get next buffer position
00062         if (aq_next == AUDIO_QUEUE_FIFO_SIZE) { // If we're at the end
00063             aq_next = 0;    // wrap to the beginning
00064         }
00065         if (aq_next == aq_start) {
00066             // we're full!
00067             return; // just forget it for now
00068         }   
00069             
00070         audio_queue_fifo[aq_end] = phrase; // put it in
00071         aq_end = aq_next;  // move pointer along
00072     }   
00073 }

void audio_queue_clear (  ) 

00105                          {
00106     // crit sec
00107     start_crit_sec();
00108     aq_end = aq_start;
00109     if (audio_playing || somo_14d_is_busy()) {
00110         serial_print_str("<<BUSY>>");
00111         delay_ms(10);
00112         somo_14d_stop();
00113         while (somo_14d_is_busy()) {};
00114         delay_ms(10);
00115     }   
00116     audio_playing = 0;
00117     end_crit_sec();
00118     // crit sec end
00119 }   

Here is the call graph for this function:

uns8 audio_queue_empty (  ) 

00121                          {
00122     return (audio_playing == 0);
00123 }

void audio_queue_process (  ) 

Call when audio file completes.

This routine will pluck the next file off the queue and start playing it. Assumes it is in an interrupt otherwise will need wrapping in critsec

00082 {
00083 uns8 aq_next;
00084 
00085     if (aq_end == aq_start) { // anything in the fifo?
00086         //serial_print_str("End of queue\n");
00087         audio_playing = 0;
00088        return; // nope
00089     }
00090     aq_next = aq_start + 1; // get next position
00091     if (aq_next == AUDIO_QUEUE_FIFO_SIZE) { // if we're at the end of the buffer
00092         aq_next = 0;    // wrap to the beginning
00093     }
00094     if (aq_end == aq_next) {    // if we've only got one character to send
00095         //?????clear_bit(pie1, TXIE);   // then turn off interrupts
00096     }
00097     audio_playing = 1;
00098                 
00099     somo_14d_set_file_id(audio_queue_fifo[aq_start]);
00100     aq_start = aq_next; // move start position of fifo
00101 
00102 }


Variable Documentation

uns8 aq_end = 0

Audio queue fifo end point

uns8 aq_start = 0

Audio queue fifo start point

bit audio_playing = 0

Audio playing at present

uns8 audio_queue_fifo[AUDIO_QUEUE_FIFO_SIZE]

Audio queue fifo


Generated on Fri Aug 19 09:04:34 2011 for Pic Pack Library by  doxygen 1.6.1