#include <math.h>

extern int tlmframe;
extern float tlmval[4][5];
extern int rawtlmint[4][5];

void pcsat2_decode()
{

   /* Actually Do the decode. Note this is sat specific, */
   /* and we should wrap it in a switch/case/if setup */

   switch(tlmframe) 
   { 
      /* Decode Frame 0 */
      case 0: 
         tlmval[tlmframe][0]=(float)(2*rawtlmint[tlmframe][0]); 
         tlmval[tlmframe][1]=(float)(2*rawtlmint[tlmframe][1]); 
         tlmval[tlmframe][2]=(float)(rawtlmint[tlmframe][2]/20.07); 
         tlmval[tlmframe][3]=(float)(2*rawtlmint[tlmframe][3]); 
         tlmval[tlmframe][4]=(float)(2*rawtlmint[tlmframe][4]); 
         /* Handle Z bit=0 -> ArmB2 =-1 */
         break; 

      /* Decode Frame 1 */
      case 1: 
         tlmval[tlmframe][0]=(.00001* powf((float)rawtlmint[tlmframe][0],3.0) - 0.0034 * powf((float)rawtlmint[tlmframe][0],2.0) + 0.7134 * (float)rawtlmint[tlmframe][0] - 33.49); 
         tlmval[tlmframe][1]=(.00001* powf((float)rawtlmint[tlmframe][1],3.0) - 0.0034 * powf((float)rawtlmint[tlmframe][1],2.0) + 0.7134 * (float)rawtlmint[tlmframe][1] - 33.49); 
         tlmval[tlmframe][2]=5*(float)rawtlmint[tlmframe][2]-5;
         tlmval[tlmframe][3]=5*(float)rawtlmint[tlmframe][3];
         tlmval[tlmframe][4]=(float)rawtlmint[tlmframe][4] / 19.86;

         break;

      /* Decode Frame 2 */
      case 2:
         tlmval[tlmframe][0]=(.00001* powf((float)rawtlmint[tlmframe][0],3.0) - 0.0034 * powf((float)rawtlmint[tlmframe][0],2.0) + 0.7134 * (float)rawtlmint[tlmframe][0] - 33.49); 
         tlmval[tlmframe][1]=(.00001* powf((float)rawtlmint[tlmframe][1],3.0) - 0.0034 * powf((float)rawtlmint[tlmframe][1],2.0) + 0.7134 * (float)rawtlmint[tlmframe][1] - 33.49); 
         tlmval[tlmframe][2]=(float)rawtlmint[tlmframe][2] / 20.01;
         tlmval[tlmframe][3]=(.00001* powf((float)rawtlmint[tlmframe][3],3.0) - 0.0034 * powf((float)rawtlmint[tlmframe][3],2.0) + 0.7134 * (float)rawtlmint[tlmframe][3] - 33.49); 
         tlmval[tlmframe][4]=(.00001* powf((float)rawtlmint[tlmframe][4],3.0) - 0.0034 * powf((float)rawtlmint[tlmframe][4],2.0) + 0.7134 * (float)rawtlmint[tlmframe][4] - 33.49); 
         /* Handle Z bit=0 the ArmB1 = -1 */
         break;

       /* Decode Frame 3 */
       case 3:
         tlmval[tlmframe][0]=(((float)rawtlmint[tlmframe][0]) / 10.0);
         tlmval[tlmframe][1]=(float)(((int)(-22.43 * rawtlmint[tlmframe][2])) + 2.27 * 0.0 + 2842);
         tlmval[tlmframe][2]=(float)(int)(15.43 * (float)rawtlmint[tlmframe][3] +20.0);
         tlmval[tlmframe][3]=((float)((int)7.843 * (float)rawtlmint[tlmframe][4]) - 7.0);
         tlmval[tlmframe][4]=(float)(rawtlmint[tlmframe][4])*5.0/213.0;

         break;
   }
}
