cdms_update

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of CDMS_SD_MNG_OVERDRIVE by saikiran cholleti

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CDMS_HK.cpp Source File

CDMS_HK.cpp

00001 #include "Flags.h"
00002 #include "CDMS_HK.h"
00003 #include "mbed.h"
00004 #include "cdms_rtc.h"
00005 #include "i2c.h"
00006 #include "Flash.h"
00007 #include "cdms_sd.h"
00008 #include "pinconfig.h"
00009 
00010 
00011 Serial hk_cdms(USBTX, USBRX);
00012 //DigitalOut Select_Lines_C[]={PIN85,PIN84,PIN39,PIN38};  //to mux on IF board,from LSB(Select_Lines_C[3]) to MSB(Select_Lines_C[0])
00013 DigitalOut Select_Lines_C[]={D7,D6,D5,D4};
00014 AnalogIn Temperature_voltage_Input(PIN53);  //output from IF mux
00015 //AnalogIn Sensor_Input(PIN53);    //output from temperature sensor on CDMS
00016 
00017 
00018 void FCTN_CDMS_HK_MAIN()
00019 
00020 {
00021     CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_MAIN_STATUS);
00022     
00023     hk_cdms.printf(" \r\nCDMS HK entered Verify COM RX RSSI >0.4 \r\n");
00024     
00025     int HK_I2C;
00026     char BAE_HK[73];
00027     FCTN_I2C_READ(BAE_HK,73);
00028     printf("BAE_HK=%s",BAE_HK);
00029     //FCTN_I2C_READ(BAE_HK);
00030     /*if(HK_I2C==0)
00031     {
00032         if(Power_level!=0)
00033         {
00034             printf("Update Power_level to 0 in Flash");
00035         }
00036         Att_level=0;
00037         CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_BAE_ERR_I2C);
00038         CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS));
00039     }**/
00040     
00041        // printf("BAE HK is %s",BAE_HK);
00042         uint64_t time=FCTN_CDMS_RD_RTC();
00043         char tree[61];
00044         hk_cdms.printf("i am done\r\n");
00045         uint8_t* data;
00046         tree[0]=(char)(time>>(56))&(0xFF);
00047         tree[1]=(char)(time>>(48))&(0xFF);
00048         tree[2]=(char)(time>>(40))&(0xFF);
00049         tree[3]=(char)(time>>(32))&(0xFF);
00050         tree[4]=(char)(time>>(24))&(0xFF);
00051         tree[5]=(char)(time>>(16))&(0xFF);
00052         tree[6]=(char)(time>>(8))&(0xFF);
00053         tree[7]=(char)(time)&(0xFF); 
00054         for(int i=0;i<73;i++)
00055         {
00056             tree[i+8]=BAE_HK[i];
00057         }
00058         printf("Hope u r alive \r\n");
00059        data=(uint8_t*)tree;
00060         
00061         uint8_t fsc=FCTN_SD_MNGR(0x3);
00062         printf("FSC where SD is written is %d\r\n",fsc);
00063         int a=SD_WRITE(data,0x00000012,0x3); 
00064         printf("Result of writing is %d \r\n",a);
00065         //BCN long frame ???
00066         CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS));
00067         hk_cdms.printf("let me know the truth\r\n");
00068 }
00069 
00070 
00071 
00072 int quantiz(float l_start,float l_step,float l_x)       // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation)
00073 {
00074     int l_y = (l_x - l_start)/l_step;
00075         
00076     if(l_y <= 0)
00077             l_y = 0;
00078             
00079     if(l_y >= 15)
00080             l_y = 15;
00081             
00082     return l_y;
00083 } 
00084  
00085 Sensor_Data Sensor; 
00086 Sensor_Data_Quantised Sensor_Quantised;
00087  
00088 char* FCTN_CDMS_HK()
00089 {
00090     char CDMS_HK_DATA[8];
00091     float l_resistance_thermistor;  //declaration of variables
00092     float l_voltage_thermistor;
00093     float l_Payload_voltage;
00094     int l_Loop_Iterator = 0;
00095     int l_Select_Line_Iterator = 3;
00096  
00097     for(l_Loop_Iterator = 0; l_Loop_Iterator < 16; l_Loop_Iterator++)
00098     {
00099  
00100         l_voltage_thermistor = Temperature_voltage_Input.read()*3.3;       //voltage across thermistor
00101         l_resistance_thermistor = 24000*l_voltage_thermistor/(3.3 - l_voltage_thermistor);           //resistance of thermistor
00102         l_Payload_voltage = Temperature_voltage_Input.read()*3.3;
00103                
00104         Sensor.l_Temperature_thermistor[(l_Loop_Iterator)] = 0.00000004*l_resistance_thermistor*l_resistance_thermistor - 0.0039*l_resistance_thermistor + 347.97;
00105         Sensor.l_Temperature_sensor[l_Loop_Iterator] = (-90.7*3.3*Temperature_voltage_Input.read() + 190.1543);  
00106               
00107         if(l_Loop_Iterator % 2 == 0) 
00108         {
00109              if(l_Loop_Iterator < 4)
00110              Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[(l_Loop_Iterator)]);
00111                
00112              else  
00113              {
00114                 if(4 < l_Loop_Iterator < 14)
00115                 Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] <<4 + quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]); 
00116                 
00117                 else
00118                 Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); 
00119              }
00120         }
00121                                               
00122         else
00123         {
00124             
00125             if(l_Loop_Iterator < 4)
00126             Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] <<4 + quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[l_Loop_Iterator]);
00127             
00128             else
00129             {
00130                 if(4 < l_Loop_Iterator < 14)
00131                 Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]);
00132                 
00133                 else
00134                 Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] <<4 + quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); 
00135         
00136             }
00137         }
00138     
00139        
00140           
00141        // The following lines are used to iterate the select lines from 0 to 15
00142        for(l_Select_Line_Iterator = 3;l_Select_Line_Iterator >= 0;l_Select_Line_Iterator--)
00143        {
00144             if(Select_Lines_C[l_Select_Line_Iterator] == 0)
00145             {
00146                 Select_Lines_C[l_Select_Line_Iterator] = 1;
00147                 break;
00148             }
00149             else Select_Lines_C[l_Select_Line_Iterator] = 0;
00150             printf("%d\n",l_Select_Line_Iterator);
00151        }
00152       
00153         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00154     }
00155      printf("vol %f temp %f",Temperature_voltage_Input.read()*3.3,-90.7*3.3*Temperature_voltage_Input.read() + 190.1543 );
00156      printf("CDMS_HK Data is Temperature_sensor=%s, l_Temperature_thermistor=%s, Payload_voltage=%s ",Sensor_Quantised.l_Temperature_sensor,Sensor_Quantised.l_Temperature_thermistor,Sensor_Quantised.l_Payload_voltage);
00157      strcpy (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_sensor);
00158      strcat (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_thermistor);
00159      strcat (CDMS_HK_DATA,Sensor_Quantised.l_Payload_voltage);
00160      return(CDMS_HK_DATA);
00161 }
00162 
00163 
00164