Listing 2. Code Snippet at the Heart of the Control Module

while (1)
{
// Read in new coefficients on control FIFO
  rtf_get(CONTROL_FIFO_ID,&coeffs,sizeof(coeffs));
  rtf_flush(CONTROL_FIFO_ID);

// This code places coeffs[] in A, B, C, D, E ...

   pd_ain_get_samples(AI_board_handle,NO_CHANNELS,
                            adc_data,  &samples);
  for (i = 0;i < (NO_CHANNELS);i++)
   volts[i+1]=
   ((float)(adc_data[i]^0x8000)*.00030518)-10.000;

// Difference equation
       x0[0]=volts[1];
       x1[0]=volts[2];
       x2[0]=volts[3];
       x3[0]=volts[4];
       y0[0] =d1*x0[0]+stuff0;
       y1[0] =d2*x1[0]+stuff1;
       y2[0] =d1*x2[0]+stuff2;
       y3[0] =d2*x3[0]+stuff3;
       y4[0] = -y0[0];
       y5[0] = -y1[0];
       y6[0] = -y2[0];
       y7[0] = -y3[0];

//  output to AO board
       dac_data[0] = (y0[0]+10.0)*3276.6;
       dac_data[1] = (y1[0]+10.0)*3276.6;
       dac_data[2] = (y2[0]+10.0)*3276.6;
       dac_data[3] = (y3[0]+10.0)*3276.6;
       dac_data[4] = (y4[0]+10.0)*3276.6;
       dac_data[5] = (y5[0]+10.0)*3276.6;
       dac_data[6] = (y6[0]+10.0)*3276.6;
       dac_data[7] = (y7[0]+10.0)*3276.6;
  for (j = 0;j < 8 ;j++)
    pd_ao32_write(AO_board_handle,j,dac_data[j]);

// Perform shift operations
    for (i = 3; i > 0; i--)
        {
         x0[i]=x0[i-1];
        x1[i]=x1[i-1];
        x2[i]=x2[i-1];
        x3[i]=x3[i-1];
         y0[i]=y0[i-1];
         y1[i]=y1[i-1];
         y2[i]=y2[i-1];
         y3[i]=y3[i-1];
         }

// Setup difference equations
         stuff0 = A*y0[1]+B*y0[2]+C*y0[3]
                   +E*x0[1]+F*x0[2]+G*x0[3];
         stuff1 = A*y1[1]+B*y1[2]+C*y0[3]
                   +E*x1[1]+F*x1[2]+G*x1[3];
         stuff2 = A*y2[1]+B*y2[2]+C*y0[3]
                   +E*x2[1]+F*x2[2]+G*x2[3];
         stuff3 = A*y3[1]+B*y3[2]+C*y0[3]
                   +E*x3[1]+F*x3[2]+G*x3[3];

// end this thread until next periodic call
         pthread_wait_np();
         pd_ain_sw_cl_start(AI_board_handle);
// multiplies for time test
          for (i = 0; i < 5000; i++) qq=a*b;
  }



