//Echo_control.c  Echo using two interrupts for read and write
//3 sliders to control effects: buffer size, amplitude, fading

short input, output;
short bufferlength = 1000;		   //initial buffer size
short i = 0;       			   //buffer index
short buffer[8000];			   //max size of buffer
short delay = 1;				   //determines size of buffer
short delay_flag = 1;			   //flag if buffer size changes
short amplitude = 1;			   //amplitude control by slider
short echo_type = 0;			   //no fading (1 for fading)

interrupt void c_int11()		   //ISR INT11 to write
{
 short new_count;				   //count for new buffer

 output=input+0.1*amplitude*buffer[i]; //newest+oldest sample
 if (echo_type == 1)			   //if fading is desired
  {
   new_count = (i-1) % bufferlength;   //previous buffer location
   buffer[new_count] = output;	   //to store most recent output
  }	
 output_sample(output);     	    	   //output delayed sample
}

interrupt void c_int12()       	   //ISR INT12 to read
{
 input = input_sample();	    	   //newest input sample data
 if (delay_flag != delay)		   //if delay has changed
  {                                    //->new buffer size
   delay_flag = delay;			   //reint for future change
   bufferlength = 1000*delay;		   //new buffer length
   i = 0;				    	   //reinit buffer count
  }
 buffer[i] = input;			   //store input sample
 i++;					    	   //increment buffer index
 if (i == bufferlength) i=0;		   //if @ end of buffer reinit
}

main()
{
 comm_intr();	  			   //init DSK, codec, McBSP
 while(1);     				   //infinite loop
}