Repository for CDMS code

Dependencies:   SimpleDMA mbed-rtos mbed eeprom

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

Files at this revision

API Documentation at this revision

Comitter:
chaithanyarss
Date:
Sun Jul 03 09:33:33 2016 +0000
Parent:
210:f4acf895b598
Commit message:
Reset CDMS added;

Changed in this revision

CDMS_HK.h Show annotated file Show diff for this revision Revisions of this file
CDMS_PL.h Show annotated file Show diff for this revision Revisions of this file
COM_MNG_TMTC.h Show annotated file Show diff for this revision Revisions of this file
Compression.h Show annotated file Show diff for this revision Revisions of this file
DefinitionsAndGlobals.h Show annotated file Show diff for this revision Revisions of this file
FMS_all.h Show annotated file Show diff for this revision Revisions of this file
Flash.h Show annotated file Show diff for this revision Revisions of this file
RESET_functions.h Show annotated file Show diff for this revision Revisions of this file
cdms_rtc.h Show annotated file Show diff for this revision Revisions of this file
cdms_sd.h Show annotated file Show diff for this revision Revisions of this file
i2c.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/CDMS_HK.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/CDMS_HK.h	Sun Jul 03 09:33:33 2016 +0000
@@ -1,11 +1,11 @@
 
 //CDMS HK
-    #define COMRX_ALIVE 0xFF
-    #define COMRX_DEAD 0x00
-    #define DEVICE_ENABLED 0x00
-    #define DEVICE_POWERED 0x01
-    #define DEVICE_OC_FAULT 0x02
-    #define DEVICE_DISABLED 0x03
+#define COMRX_ALIVE 0x01
+#define COMRX_DEAD 0x00
+#define DEVICE_ENABLED 0x00
+#define DEVICE_POWERED 0x01
+#define DEVICE_OC_FAULT 0x02
+#define DEVICE_DISABLED 0x03
 
 void FCTN_CDMS_HK_MAIN();
 void FCTN_CDMS_HK();
@@ -35,119 +35,116 @@
 void FCTN_CDMS_HK_MAIN(void const *args)
 {
 
-  unsigned char CDMS_HK_FRAME[134] = {0};
-  char BAE_HK[128] = {0};
-  uint8_t convoluted_CDMS_HK[270];
-  uint8_t interleave_CDMS_HK[288];
-  uint8_t CDMS_HEALTH_FINAL[512] = {0};
-  uint8_t convoluted_BAE_HK[270];
-  uint8_t interleave_BAE_HK[288];
-  uint8_t BAE_HEALTH_FINAL[512] = {0};
-  unsigned char BAE_HK_FRAME[134] = {0};
+    unsigned char CDMS_HK_FRAME[134] = {0};
+    char BAE_HK[128] = {0};
+    uint8_t convoluted_CDMS_HK[270];
+    uint8_t interleave_CDMS_HK[288];
+    uint8_t CDMS_HEALTH_FINAL[512] = {0};
+    uint8_t convoluted_BAE_HK[270];
+    uint8_t interleave_BAE_HK[288];
+    uint8_t BAE_HEALTH_FINAL[512] = {0};
+    unsigned char BAE_HK_FRAME[134] = {0};
+
+    CDMS_HK_MAIN_STATUS = 0x01;
+    CDMS_HK_MAIN_COUNTER++;
 
-  CDMS_HK_MAIN_STATUS = 0x01;
-  CDMS_HK_MAIN_COUNTER++;
+    FCTN_CDMS_HK();
+    RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;
+    VERIFY_COMRX();
+    VERIFY_RTC();
+    HANDLE_HW_FAULTS();
+    FUNC_CDMS_GPIO_STATUS(); //yet to be done
 
-  FCTN_CDMS_HK();
-  RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;
-  VERIFY_COMRX();
-  VERIFY_RTC();
-  HANDLE_HW_FAULTS();
-  FUNC_CDMS_GPIO_STATUS(); //yet to be done
+    uint8_t CDMS_quant[19];
+    for(int i=0; i<16; i++) {
+        CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
+    }
+    CDMS_quant[16]= (uint8_t)RSSI_volatge;
+    CDMS_quant[17]= (uint8_t)quant_data.CDMS_temp_quant;
+    minMaxHkData();
+
+    uint64_t time = FCTN_CDMS_RD_RTC();             //Reading Time from RTC
+    time = time>>7;
+    uint32_t HK_time = (uint32_t)time;
+    for(int i = 0; i<4; i++)
+        CDMS_HEALTH_DATA[i] = HK_time >> i;
 
-  uint8_t CDMS_quant[19];
-  for(int i=0;i<16;i++)
-  {
-     CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
-  }
-  CDMS_quant[16]= (uint8_t)RSSI_volatge;
-  CDMS_quant[17]= (uint8_t)quant_data.CDMS_temp_quant;
-  minMaxHkData();
-  
-  uint64_t time = FCTN_CDMS_RD_RTC();             //Reading Time from RTC 
-  time = time>>7;
-  uint32_t HK_time = (uint32_t)time;
-  for(int i = 0;i<4;i++)
-    CDMS_HEALTH_DATA[i] = HK_time >> i;
+    // Here: Have to FIT flash data.
+    for(int i = 0; i<19; i++)                       //Collecting Data from Temp sensors
+        CDMS_HEALTH_DATA[i+24] = CDMS_quant[i];
+
+    COLLECT_CDMS_RAM();                             //Reading RAM parameters
+
+    CDMS_HEALTH_DATA[126] = GPIO_STATUS;            //Reading GPIO Pins
+    CDMS_HEALTH_DATA[127] = GPIO_STATUS >> 8;
+
+    FCTN_SD_MNGR();                                 //Adding FSC & TMID to TM frame
+    CDMS_HK_FRAME[0] = 0x20;
+    CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1;
+    CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8;
+    CDMS_HK_FRAME[3] = (FSC_CURRENT[4]+1) >> 16;
 
-  // Here: Have to FIT flash data.
-  for(int i = 0;i<19;i++)                         //Collecting Data from Temp sensors
-    CDMS_HEALTH_DATA[i+24] = CDMS_quant[i];
-  
-  COLLECT_CDMS_RAM();                             //Reading RAM parameters
-  
-  CDMS_HEALTH_DATA[126] = GPIO_STATUS;            //Reading GPIO Pins
-  CDMS_HEALTH_DATA[127] = GPIO_STATUS >> 8;
- 
-  FCTN_SD_MNGR();                                 //Adding FSC & TMID to TM frame
-  CDMS_HK_FRAME[0] = 0x20;
-  CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1;
-  CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8;
-  CDMS_HK_FRAME[3] = (FSC_CURRENT[4]+1) >> 16;
-  
-  for(int i = 0;i<128;i++)                         /*Adding actual CDMS Health data to TM frame*/
-    CDMS_HK_FRAME[4+i] = CDMS_HEALTH_DATA[i];
-  
-  uint16_t crc = crc16_gen(CDMS_HK_FRAME,132);      /*Adding CRC to TM frame*/
-  CDMS_HK_FRAME[133] = crc;
-  CDMS_HK_FRAME[132] = crc >> 8;
+    for(int i = 0; i<128; i++)                       /*Adding actual CDMS Health data to TM frame*/
+        CDMS_HK_FRAME[4+i] = CDMS_HEALTH_DATA[i];
+
+    uint16_t crc = crc16_gen(CDMS_HK_FRAME,132);      /*Adding CRC to TM frame*/
+    CDMS_HK_FRAME[133] = crc;
+    CDMS_HK_FRAME[132] = crc >> 8;
 
-  Convolution CDMS_HEALTH;
-  Convolution BAE_HEALTH;
-  CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK);
-  CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135);
-  interleave(convoluted_CDMS_HK ,  interleave_CDMS_HK);
-  interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144);
-  for(int i=0;i<288;i++)
-    CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i];
+    Convolution CDMS_HEALTH;
+    Convolution BAE_HEALTH;
+    CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK);
+    CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135);
+    interleave(convoluted_CDMS_HK ,  interleave_CDMS_HK);
+    interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144);
+    for(int i=0; i<288; i++)
+        CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i];
 
-  SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
-  hk_cdms.printf("CDMS hk succesfully completed\r\n");
+    SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
+    hk_cdms.printf("CDMS hk succesfully completed\r\n");
 
 
-/*---------------------------------- BAE HK --------------------------------------------*/
-  
-  
-  BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134);
-  if(BAE_HK_I2C == 0){
-    TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
-    hk_cdms.printf("Bae hk data received");
-  }
-  else
-  {
-    for(int i = 0;i<128;i++)
-      BAE_HK[i] = 0;
-  }
-  for(int i = 0;i<4;i++)
-    BAE_HK[i] = HK_time >> i;
-  BAE_HK_FRAME[0] = 0x28;
-  BAE_HK_FRAME[1] = FSC_CURRENT[5]+1;
-  BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8;
-  BAE_HK_FRAME[3] = (FSC_CURRENT[5]+1) >> 16;
-  for(int i = 0;i<128;i++)                         /*Adding actual CDMS Health data to TM frame*/
-    BAE_HK_FRAME[4+i] = BAE_HK[i];
-  crc = crc16_gen(BAE_HK_FRAME,132);               /*Adding CRC to TM frame*/
-  BAE_HK_FRAME[133] = crc;
-  BAE_HK_FRAME[132] = crc >> 8;
-  BAE_HEALTH.convolutionEncode(BAE_HK_FRAME , convoluted_BAE_HK);
-  BAE_HEALTH.convolutionEncode(BAE_HK_FRAME + 67, convoluted_BAE_HK + 135);
-  interleave(convoluted_BAE_HK ,  interleave_BAE_HK);
-  interleave(convoluted_BAE_HK +135, interleave_BAE_HK + 144);
-  for(int i=0;i<288;i++)
-  BAE_HEALTH_FINAL[i] = interleave_BAE_HK[i];
-  SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5);
-  hk_cdms.printf("BAE hk succesfully completed\r\n");
-  
-  /*----------------------------------Beacon message--------------------------------------*/
-  unsigned char SC_HK_LBM_0[135];
-  SC_HK_LBM_0[0] = 0;       // Sending long beacon msg as telecommand with Packet sequence count 0x00
-  // Add HK bits
-  
-  // Add SC bits
-  crc = crc16_gen(SC_HK_LBM_0,133);
-  SC_HK_LBM_0[132] = crc;
-  SC_HK_LBM_0[133] = crc >> 8;
-  FCTN_I2C_WRITE((char *)SC_HK_LBM_0,135);
+    /*---------------------------------- BAE HK --------------------------------------------*/
+
+
+    BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134);
+    if(BAE_HK_I2C == 0) {
+        TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
+        hk_cdms.printf("Bae hk data received");
+    } else {
+        for(int i = 0; i<128; i++)
+            BAE_HK[i] = 0;
+    }
+    for(int i = 0; i<4; i++)
+        BAE_HK[i] = HK_time >> i;
+    BAE_HK_FRAME[0] = 0x28;
+    BAE_HK_FRAME[1] = FSC_CURRENT[5]+1;
+    BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8;
+    BAE_HK_FRAME[3] = (FSC_CURRENT[5]+1) >> 16;
+    for(int i = 0; i<128; i++)                       /*Adding actual CDMS Health data to TM frame*/
+        BAE_HK_FRAME[4+i] = BAE_HK[i];
+    crc = crc16_gen(BAE_HK_FRAME,132);               /*Adding CRC to TM frame*/
+    BAE_HK_FRAME[133] = crc;
+    BAE_HK_FRAME[132] = crc >> 8;
+    BAE_HEALTH.convolutionEncode(BAE_HK_FRAME , convoluted_BAE_HK);
+    BAE_HEALTH.convolutionEncode(BAE_HK_FRAME + 67, convoluted_BAE_HK + 135);
+    interleave(convoluted_BAE_HK ,  interleave_BAE_HK);
+    interleave(convoluted_BAE_HK +135, interleave_BAE_HK + 144);
+    for(int i=0; i<288; i++)
+        BAE_HEALTH_FINAL[i] = interleave_BAE_HK[i];
+    SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5);
+    hk_cdms.printf("BAE hk succesfully completed\r\n");
+
+    /*----------------------------------Beacon message--------------------------------------*/
+    unsigned char SC_HK_LBM_0[135];
+    SC_HK_LBM_0[0] = 0;       // Sending long beacon msg as telecommand with Packet sequence count 0x00
+    // Add HK bits
+
+    // Add SC bits
+    crc = crc16_gen(SC_HK_LBM_0,133);
+    SC_HK_LBM_0[132] = crc;
+    SC_HK_LBM_0[133] = crc >> 8;
+    FCTN_I2C_WRITE((char *)SC_HK_LBM_0,135);
 }
 
 int quantiz(float start,float step,float x)
@@ -169,32 +166,30 @@
 }
 
 void minMaxHkData()
-{  
-    if(firstCount==true){
-        for (int i = 0; i < 16; ++i){   
-        min_max_data.temp_min[i] = quant_data.temp_quant[i];
-        min_max_data.temp_max[i] = quant_data.temp_quant[i];
+{
+    if(firstCount==true) {
+        for (int i = 0; i < 16; ++i) {
+            min_max_data.temp_min[i] = quant_data.temp_quant[i];
+            min_max_data.temp_max[i] = quant_data.temp_quant[i];
         }
 
         min_max_data.CDMS_temp_min=quant_data.CDMS_temp_quant;
         min_max_data.CDMS_temp_max=quant_data.CDMS_temp_quant;
-    }
-    else {
-        for (int i = 0; i < 16; ++i)
-        {
-          min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
-          min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
+    } else {
+        for (int i = 0; i < 16; ++i) {
+            min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
+            min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
         }
-               
+
         min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant);
         min_max_data.CDMS_temp_max = saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant);
-    }  
+    }
     firstCount=false;
 }
 
 void FCTN_CDMS_HK()
 {
-  
+
     int Iteration=0;
 
     SelectLinec0=0;
@@ -202,7 +197,7 @@
     SelectLinec2=0;
     SelectLinec3=0;
 
-    for(Iteration=0; Iteration<16; Iteration++){
+    for(Iteration=0; Iteration<16; Iteration++) {
 
         actual_data.temp_actual[Iteration]=TempInput.read();
 
@@ -212,39 +207,35 @@
         if(Iteration%4==3)
             SelectLinec2=!(SelectLinec2);
         if(Iteration%8==7)
-             SelectLinec3=!(SelectLinec3);
+            SelectLinec3=!(SelectLinec3);
     }
 
     actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543;
-   
-    for(Iteration=0;Iteration<16;Iteration++){
 
-        if(Iteration<14){
+    for(Iteration=0; Iteration<16; Iteration++) {
+
+        if(Iteration<14) {
 
             actual_data.temp_actual[Iteration]=actual_data.temp_actual[Iteration]*3.3;
-            int resistance;      
-            
+            int resistance;
+
             resistance=24000*actual_data.temp_actual[Iteration]/(3.3-actual_data.temp_actual[Iteration]);
-            if(actual_data.temp_actual[Iteration]>1.47)
-            {
+            if(actual_data.temp_actual[Iteration]>1.47) {
                 actual_data.temp_actual[Iteration]=3694/log(24.032242*resistance);
-            }
-            else{
-               
+            } else {
+
                 actual_data.temp_actual[Iteration]=3365.4/log(7.60573*resistance);
             }
-        }
-        else
+        } else
             actual_data.temp_actual[Iteration]=(-90.7*3.3*actual_data.temp_actual[Iteration])+190.1543;
     }
 
-    for(Iteration=0;Iteration<16;Iteration++){
+    for(Iteration=0; Iteration<16; Iteration++) {
 
-        if(Iteration<14){
+        if(Iteration<14) {
 
             quant_data.temp_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.temp_actual[Iteration]);
-        }
-        else
+        } else
             quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]);
     }
 
@@ -255,211 +246,195 @@
 
 void FUNC_CDMS_GPIO_STATUS()       //Polls the status of Input GPIO PINS
 {
-  //V_A_PGOOD //TRZ EN
-  GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15)));
-  //V_B_PGOOD_1 //3V3BPGOOD //$
-  GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)||((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14)));
-  //V_B_PGOOD_2 //3V3BEN //$
-  GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)||((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13)));
-  //V_C_PGOOD //3V3CPGOOD //$
-  GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12)));
-  //COMRX_OC_FAULT //$
-  GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11)));
-  // COMTX_OC_FAULT //$
-  GPIO_STATUS=(COMTX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10)));
-  //BAE_OC_FAULT //$
-  GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9)));
-  //PL_GPIO_1_STATUS //$
-  GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8)));
-  //PL_GPIO_2_STATUS //$
-  GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7)));
-  //PL_GPIO_3_STATUS //$
-  GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6)));
-  //PL_BEE_SW_OC_FAULT //to be verified
-  GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<5)):(GPIO_STATUS)&(~((uint16_t)(0x1<<5)));
-  //PL_EPS_LATCH_SW_OC_FAULT // to be verified
-  GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4)));
+    //V_A_PGOOD //TRZ EN
+    GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15)));
+    //V_B_PGOOD_1 //3V3BPGOOD //$
+    GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)||((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14)));
+    //V_B_PGOOD_2 //3V3BEN //$
+    GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)||((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13)));
+    //V_C_PGOOD //3V3CPGOOD //$
+    GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12)));
+    //COMRX_OC_FAULT //$
+    GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11)));
+    // COMTX_OC_FAULT //$
+    GPIO_STATUS=(COMTX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10)));
+    //BAE_OC_FAULT //$
+    GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9)));
+    //PL_GPIO_1_STATUS //$
+    GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8)));
+    //PL_GPIO_2_STATUS //$
+    GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7)));
+    //PL_GPIO_3_STATUS //$
+    GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6)));
+    //PL_BEE_SW_OC_FAULT //to be verified
+    GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<5)):(GPIO_STATUS)&(~((uint16_t)(0x1<<5)));
+    //PL_EPS_LATCH_SW_OC_FAULT // to be verified
+    GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4)));
 
 }
 
 void VERIFY_COMRX()
 {
-  //COMRX_OC_FAULT //$
-  if(PIN68==0 && RSSI_volatge > 0.4)
-  {
-    COMRX_STATUS = COMRX_ALIVE;
-  }
-  else
-  {
-    RESET_COMRX();
-    COMRX_RESET_COUNTER++;
-    if(PIN68==0 && RSSI_volatge > 0.4)
-      COMRX_STATUS = COMRX_ALIVE;
-    else
-      COMRX_STATUS = COMRX_DEAD;
-  }
+    //COMRX_OC_FAULT //$
+    if(PIN68==0 && RSSI_volatge > 0.4) {
+        COMRX_STATUS = COMRX_ALIVE;
+    } else {
+        RESET_COMRX();
+        COMRX_RESET_COUNTER++;
+        if(PIN68==0 && RSSI_volatge > 0.4)
+            COMRX_STATUS = COMRX_ALIVE;
+        else
+            COMRX_STATUS = COMRX_DEAD;
+    }
 }
 
-void VERIFY_RTC(){
+void VERIFY_RTC()
+{
 
-  if(RTC_STATUS == 0x00)
-  {
-    SPI_mutex.lock();
-    gCS_RTC=1; 
-    gCS_RTC=0;
-    spi.write(0x0F);
-    if(spi.write(0x00) & 0x04 == 0x04)
-    {
-      RTC_STATUS = 0x00;
-      RESET_RTC();
-      RTC_FAULTCOUNT++;
+    if(RTC_STATUS == 0x00) {
+        SPI_mutex.lock();
+        gCS_RTC=1;
+        gCS_RTC=0;
+        spi.write(0x0F);
+        if(spi.write(0x00) & 0x04 == 0x04) {
+            RTC_STATUS = 0x00;
+            RESET_RTC();
+            RTC_FAULTCOUNT++;
+        }
+        gCS_RTC=1;
+        SPI_mutex.unlock();
     }
-    gCS_RTC=1; 
-    SPI_mutex.unlock();
-  }
 }
 
 void HANDLE_HW_FAULTS()
 {
-  HANDLE_HW_FAULT_SD();
-  HANDLE_HW_FAULT_BAE();
-  HANDLE_HW_FAULT_PL();
+    HANDLE_HW_FAULT_SD();
+    HANDLE_HW_FAULT_BAE();
+    HANDLE_HW_FAULT_PL();
 }
 
 void HANDLE_HW_FAULT_SD()
 {
-  if(SD_STATUS != DEVICE_DISABLED)
-  {
-    if(SD_STATUS == DEVICE_OC_FAULT)
-      SD_SW_EN_DS = 0; //powering on SD
+    if(SD_STATUS != DEVICE_DISABLED) {
+        if(SD_STATUS == DEVICE_OC_FAULT)
+            SD_SW_EN_DS = 0; //powering on SD
+
+        if(SD_OC_FAULT == 0) {
+            SD_SW_EN_DS = 1; //switching off SD card
 
-    if(SD_OC_FAULT == 0) 
-    {
-      SD_SW_EN_DS = 1; //switching off SD card
-     
-      SD_FAULTCOUNT++;
-      SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT;
+            SD_FAULTCOUNT++;
+            SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT;
+        } else {
+            SD_STATUS = DEVICE_POWERED;
+            SD_FAULTCOUNT = 0;
+        }
     }
-    else
-    {
-      SD_STATUS = DEVICE_POWERED;
-      SD_FAULTCOUNT = 0;
-    }
-  }
 }
 
 void HANDLE_HW_FAULT_BAE()
 {
-  if(BAE_STATUS != DEVICE_DISABLED)
-  {
-    if(BAE_STATUS == DEVICE_OC_FAULT)
-        BAE_SW_EN_DS = 0; //Power ON BAE
+    if(BAE_STATUS != DEVICE_DISABLED) {
+        if(BAE_STATUS == DEVICE_OC_FAULT)
+            BAE_SW_EN_DS = 0; //Power ON BAE
 
-    if(BAE_OC_FAULT == 0)  // If OC Fault
-    {
-      BAE_SW_EN_DS = 1; //Switch OFF BAE
-      BAE_FAULTCOUNT++;
-      BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+        if(BAE_OC_FAULT == 0) { // If OC Fault
+            BAE_SW_EN_DS = 1; //Switch OFF BAE
+            BAE_FAULTCOUNT++;
+            BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+        } else {
+            BAE_STATUS = DEVICE_POWERED;
+            BAE_FAULTCOUNT = 0;
+        }
     }
-    else
-    {
-      BAE_STATUS = DEVICE_POWERED;
-      BAE_FAULTCOUNT = 0;
-    }
-  }
 }
 
 void HANDLE_HW_FAULT_PL()
 {
-  if(PL_STATUS != DEVICE_DISABLED)
-  {
-    if(PL_STATUS == DEVICE_OC_FAULT)
-      PL_SW_EN_DS = 0; //Power ON PL
+    if(PL_STATUS != DEVICE_DISABLED) {
+        if(PL_STATUS == DEVICE_OC_FAULT)
+            PL_SW_EN_DS = 0; //Power ON PL
 
-    if(PL_BEE_SW_OC_FAULT == 0)  // if OC Fault
-    {
-      PL_SW_EN_DS = 1;  // switching OFF PL
-      PL_FAULTCOUNT++;
-      PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+        if(PL_BEE_SW_OC_FAULT == 0) { // if OC Fault
+            PL_SW_EN_DS = 1;  // switching OFF PL
+            PL_FAULTCOUNT++;
+            PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+        } else {
+            if(PL_STATUS == DEVICE_OC_FAULT)
+                PL_SW_EN_DS = 0; //Switching OFF PL
+            PL_STATUS = DEVICE_ENABLED;
+            PL_FAULTCOUNT = 0;
+        }
     }
-    else
-    {
-      if(PL_STATUS == DEVICE_OC_FAULT)
-        PL_SW_EN_DS = 0; //Switching OFF PL
-      PL_STATUS = DEVICE_ENABLED;
-      PL_FAULTCOUNT = 0;
-    }
-  }
 }
-  
+
 void COLLECT_CDMS_RAM()
-{ 
-  /*--------------------Current FSC's---------------------*/
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+43] = FSC_LAST[5] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+47] = FSC_CURRENT[5] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+51] = FSC_LAST[4] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+55] = FSC_CURRENT[4] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+59] = FSC_LAST[3] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+63] = FSC_CURRENT[3] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+67] = FSC_LAST[2] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+71] = FSC_CURRENT[2] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+75] = FSC_LAST[1] >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+79] = FSC_CURRENT[1] >> (i*8);
-  /*---------------------Latest Time----------------------*/
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+83] = TIME_LATEST_SPI_SPEED >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+87] = TIME_LATEST_SD_RD >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+91] = TIME_LATEST_SD_WR >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+95] = TIME_LATEST_I2C_SPEED >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+99] = TIME_LATEST_I2C_BAE >> (i*8);
-  for(int i=0;i<4;i++)
-    CDMS_HEALTH_DATA[i+103] = TIME_LATEST_RTC >> (i*8);
-  for(int i=0;i<2;i++)
-    CDMS_HEALTH_DATA[i+107] = COMRX_RESET_COUNTER >> (i*8);
-  for(int i=0;i<2;i++)
-    CDMS_HEALTH_DATA[i+107] = PL_RCV_SC_DATA_COUNTER >> (i*8);
-  for(int i=0;i<2;i++)
-    CDMS_HEALTH_DATA[i+111] = PL_MAIN_COUNTER >> (i*8);
-  for(int i=0;i<2;i++)
-    CDMS_HEALTH_DATA[i+113] = CDMS_HK_MAIN_COUNTER >> (i*8);
-  for(int i=0;i<2;i++)
-    CDMS_HEALTH_DATA[i+115] = CDMS_I2C_ERR_BAE_COUNTER >> (i*8);
-  for(int i=0;i<2;i++)
-    CDMS_HEALTH_DATA[i+117] = CDMS_I2C_ERR_SPEED_COUNTER >> (i*8);
-  CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | CDMS_STANDBY_PL << 7;
-  CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_INIT_STATUS << 6) & 0x40);
-  CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_MAIN_STATUS << 5) & 0x20);
-  CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_STATUS << 3) & 0x18);
-  CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((COMRX_STATUS << 2) & 0x04);
-  CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_RTC_BL << 1) & 0x02);
-  CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] & 0xFE;
-  
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | PL_RCV_SC_DATA_STATUS << 7;
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_SESSION << 6) & 0x40);
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_RX << 5) & 0x20);
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((RF_SW_STATUS << 4) & 0x10);
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX << 3) & 0x08);
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX_STATUS << 2) & 0x04);
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_MNG_TMTC << 1) & 0x02);
-  CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | (CDMS_STANDBY_HK & 0x01);
+{
+    /*--------------------Current FSC's---------------------*/
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+43] = FSC_LAST[5] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+47] = FSC_CURRENT[5] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+51] = FSC_LAST[4] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+55] = FSC_CURRENT[4] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+59] = FSC_LAST[3] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+63] = FSC_CURRENT[3] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+67] = FSC_LAST[2] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+71] = FSC_CURRENT[2] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+75] = FSC_LAST[1] >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+79] = FSC_CURRENT[1] >> (i*8);
+    /*---------------------Latest Time----------------------*/
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+83] = TIME_LATEST_SPI_SPEED >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+87] = TIME_LATEST_SD_RD >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+91] = TIME_LATEST_SD_WR >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+95] = TIME_LATEST_I2C_SPEED >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+99] = TIME_LATEST_I2C_BAE >> (i*8);
+    for(int i=0; i<4; i++)
+        CDMS_HEALTH_DATA[i+103] = TIME_LATEST_RTC >> (i*8);
+    for(int i=0; i<2; i++)
+        CDMS_HEALTH_DATA[i+107] = COMRX_RESET_COUNTER >> (i*8);
+    for(int i=0; i<2; i++)
+        CDMS_HEALTH_DATA[i+107] = PL_RCV_SC_DATA_COUNTER >> (i*8);
+    for(int i=0; i<2; i++)
+        CDMS_HEALTH_DATA[i+111] = PL_MAIN_COUNTER >> (i*8);
+    for(int i=0; i<2; i++)
+        CDMS_HEALTH_DATA[i+113] = CDMS_HK_MAIN_COUNTER >> (i*8);
+    for(int i=0; i<2; i++)
+        CDMS_HEALTH_DATA[i+115] = CDMS_I2C_ERR_BAE_COUNTER >> (i*8);
+    for(int i=0; i<2; i++)
+        CDMS_HEALTH_DATA[i+117] = CDMS_I2C_ERR_SPEED_COUNTER >> (i*8);
+    CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | CDMS_STANDBY_PL << 7;
+    CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_INIT_STATUS << 6) & 0x40);
+    CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_MAIN_STATUS << 5) & 0x20);
+    CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_STATUS << 3) & 0x18);
+    CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((COMRX_STATUS << 2) & 0x04);
+    CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_RTC_BL << 1) & 0x02);
+    CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] & 0xFE;
 
-  CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | PL_INIT_STATUS << 7;
-  CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_MAIN_STATUS << 6) & 0x40);
-  CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_LOW_POWER << 5) & 0x20);
-  CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_STATE << 3) & 0x18);
-  CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | (PL_STATUS & 0x07);
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | PL_RCV_SC_DATA_STATUS << 7;
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_SESSION << 6) & 0x40);
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_RX << 5) & 0x20);
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((RF_SW_STATUS << 4) & 0x10);
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX << 3) & 0x08);
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX_STATUS << 2) & 0x04);
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_MNG_TMTC << 1) & 0x02);
+    CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | (CDMS_STANDBY_HK & 0x01);
+
+    CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | PL_INIT_STATUS << 7;
+    CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_MAIN_STATUS << 6) & 0x40);
+    CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_LOW_POWER << 5) & 0x20);
+    CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_STATE << 3) & 0x18);
+    CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | (PL_STATUS & 0x07);
 }
\ No newline at end of file
--- a/CDMS_PL.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/CDMS_PL.h	Sun Jul 03 09:33:33 2016 +0000
@@ -6,7 +6,6 @@
 uint32_t pl_time;
 uint32_t TIME_LATEST_PL=0;
 uint8_t i;
-uint8_t PL_BEE_SW_STATUS=0;
 
 //Serial pc(USBTX,USBRX);
 
--- a/COM_MNG_TMTC.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/COM_MNG_TMTC.h	Sun Jul 03 09:33:33 2016 +0000
@@ -974,7 +974,7 @@
                     ++modify_overflow;\
                 }\
                 else{\
-                    RESET_CDMS;\
+                    RESET_CDMS();\
                     break;\
                 }\
             }\
@@ -997,7 +997,7 @@
                     ++modify_overflow;\
                 }\
                 else{\
-                    RESET_CDMS;\
+                    RESET_CDMS();\
                     break;\
                 }\
             }\
@@ -1127,7 +1127,7 @@
                 ++overflowCountOBONLY;\
             }\
             else{\
-                RESET_CDMS;\
+                RESET_CDMS();\
                 break;\
             }\
         }\
@@ -1146,7 +1146,7 @@
                 ++overCount;\
             }\
             else{\
-                RESET_CDMS;\
+                RESET_CDMS();\
                 break;\
             }\
         }\
@@ -1213,7 +1213,7 @@
                                 ++overflowCountExecute;\
                             }\
                             else{\
-                                RESET_CDMS;\
+                                RESET_CDMS();\
                                 break;\
                             }\
                         }\
@@ -1291,7 +1291,7 @@
                                     ++overflowCountExecute;\
                                 }\
                                 else{\
-                                    RESET_CDMS;\
+                                    RESET_CDMS();\
                                     break;\
                                 }\
                             }\
@@ -1332,7 +1332,7 @@
                                     ++overflowCountExecute;\
                                 }\
                                 else{\
-                                    RESET_CDMS;\
+                                    RESET_CDMS();\
                                     break;\
                                 }\ 
                             }\
@@ -1403,7 +1403,7 @@
                                     ++overflowCountExecute;\
                                 }\
                                 else{\
-                                    RESET_CDMS;\
+                                    RESET_CDMS();\
                                     break;\
                                 }\
                             }\
@@ -1443,7 +1443,7 @@
                                     ++overflowCountExecute;\
                                 }\
                                 else{\
-                                    RESET_CDMS;\
+                                    RESET_CDMS();\
                                     break;\
                                 }\
                             }\
@@ -1455,7 +1455,7 @@
                 ++overflowCount;\
             }\
             else{\
-                RESET_CDMS;\
+                RESET_CDMS();\
                 break;\
             }\
         }\
--- a/Compression.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/Compression.h	Sun Jul 03 09:33:33 2016 +0000
@@ -74,7 +74,8 @@
     sci_time = 0;
     gPC.puts("enter srp");
     
-    
+    TIME_LATEST_SPI_SPEED = FCTN_CDMS_RD_RTC() >> 7;
+    PL_RCV_SC_DATA_COUNTER++;
     
     //Call FCTN_SD_MNGR for latest fsc
     FCTN_SD_MNGR();
--- a/DefinitionsAndGlobals.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/DefinitionsAndGlobals.h	Sun Jul 03 09:33:33 2016 +0000
@@ -3,150 +3,150 @@
 #define bypass_adf 1
 
 // COM_RX
-    #define RX_TIMEOUT_LIMIT 0.5
-    //#define COM_RX_UART_TX PTE20    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_TX USBTX
-    //#define COM_RX_UART_RX PTE21    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_RX USBRX
-    
-    #define COM_RX_UART_TX USBTX
-    #define COM_RX_UART_RX USBRX
-    
+#define RX_TIMEOUT_LIMIT 0.5
+//#define COM_RX_UART_TX PTE20    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_TX USBTX
+//#define COM_RX_UART_RX PTE21    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_RX USBRX
+
+#define COM_RX_UART_TX USBTX
+#define COM_RX_UART_RX USBRX
+
 // COMMON SPI
-    #define SPI_MOSI PTE1
-    #define SPI_MISO PTE3
-    #define SPI_CLK PTE2
-    #define SPI_CS_ADF PTA15
-    #define SPI_CS_SDC PIN20
-    #define SPI_CS_RTC PIN26
-    
+#define SPI_MOSI PTE1
+#define SPI_MISO PTE3
+#define SPI_CLK PTE2
+#define SPI_CS_ADF PTA15
+#define SPI_CS_SDC PIN20
+#define SPI_CS_RTC PIN26
+
 // COM_TX
-    #define COM_TX_CONFIG_LIMIT 3
-    #define COM_TX_TICKER_LIMIT 32
+#define COM_TX_CONFIG_LIMIT 3
+#define COM_TX_TICKER_LIMIT 32
 
 // ADF INTERRUPT
-    #define ADF_IRQ PTA14
-    
+#define ADF_IRQ PTA14
+
 //I2C - Payload to CDMS (need to change while using CDMS hardware);
-    I2C master(PIN32,PIN31);
-    DigitalIn PL_I2C_Intr(PTC13);
-    DigitalOut PL_I2C_GPIO(PTC1);
-            
+I2C master(PIN32,PIN31);
+DigitalIn PL_I2C_Intr(PTC13);
+DigitalOut PL_I2C_GPIO(PTC1);
+
 //I2C - CDMS to BAE
-    DigitalIn BAE_I2C_GPIO(PIN39);
-    DigitalOut CDMS_I2C_GPIO(PIN67);
+DigitalIn BAE_I2C_GPIO(PIN39);
+DigitalOut CDMS_I2C_GPIO(PIN67);
 
 // TC LIST
-    #define TCL_STATE_INCOMPLETE 0x00
-    #define TCL_STATE_ABORTED 0x03
-    #define TCL_STATE_EXECUTING 0x04   
-    #define TCL_STATE_COMPLETED 0x05
-    #define TCL_STATE_EXCEEDED_LIMIT 0x06
+#define TCL_STATE_INCOMPLETE 0x00
+#define TCL_STATE_ABORTED 0x03
+#define TCL_STATE_EXECUTING 0x04
+#define TCL_STATE_COMPLETED 0x05
+#define TCL_STATE_EXCEEDED_LIMIT 0x06
 
 // LIST OF FLAGS
-    #define UART_INT_FLAG 0x0001
-    #define NEW_TC_RECEIVED 0x0002
-    #define COM_SESSION_FLAG 0x0004
-    #define COM_RX_FLAG 0x0008
-    #define COM_MNG_TMTC_RUNNING_FLAG 0x0010
-    #define COM_SESSION_VALIDITY 0x0020
-    #define ALL_CRC_PASS_FLAG 0x0040
-    #define COM_PA_HOT_FLAG 0x0080
-    #define COM_TX_FLAG 0x0100
-    #define COM_SESSION_TIMEOUT_FLAG 0x0200
-    #define COM_AUTO_POWER_OFF_BAE_FLAG 0x0400
-    #define BAE_SW_EN_FLAG 0x0800
-    #define RF_SW_STATUS_FLAG 0x1000
-    #define COM_INIT_STATUS_FLAG 0x2000
-    #define COM_TX_STATUS_FLAG 0x4000
+#define UART_INT_FLAG 0x0001
+#define NEW_TC_RECEIVED 0x0002
+#define COM_SESSION_FLAG 0x0004
+#define COM_RX_FLAG 0x0008
+#define COM_MNG_TMTC_RUNNING_FLAG 0x0010
+#define COM_SESSION_VALIDITY 0x0020
+#define ALL_CRC_PASS_FLAG 0x0040
+#define COM_PA_HOT_FLAG 0x0080
+#define COM_TX_FLAG 0x0100
+#define COM_SESSION_TIMEOUT_FLAG 0x0200
+#define COM_AUTO_POWER_OFF_BAE_FLAG 0x0400
+#define BAE_SW_EN_FLAG 0x0800
+#define RF_SW_STATUS_FLAG 0x1000
+#define COM_INIT_STATUS_FLAG 0x2000
+#define COM_TX_STATUS_FLAG 0x4000
 
 //RF relay STATUS
-    #define RF_COM_TX 0
-    #define RF_BCN 1
+#define RF_COM_TX 0
+#define RF_BCN 1
 
 // COM_MNG_TMTC THREAD
-    #define SESSION_TIME_LIMIT 1500
-    #define COM_MNG_TMTC_SIGNAL_UART_INT 0x01
-    #define COM_MNG_TMTC_SIGNAL_ADF_NSD 0x02
-    #define COM_MNG_TMTC_SIGNAL_ADF_SD 0x03
-    #define SCIENCE_SIGNAL 0x04
+#define SESSION_TIME_LIMIT 1500
+#define COM_MNG_TMTC_SIGNAL_UART_INT 0x01
+#define COM_MNG_TMTC_SIGNAL_ADF_NSD 0x02
+#define COM_MNG_TMTC_SIGNAL_ADF_SD 0x03
+#define SCIENCE_SIGNAL 0x04
 // COM_MNG_TMTC
-    #define COM_PA_COOLING_TIME_LIMIT 20
-    #define COM_MAX_TC_LIMIT 200
-    #define TM_ACK_CODE_INDEX 2
-    #define CRC_FAIL_NACK_CODE 0x01
-    
-    // call sign
-    #define PSC_CALLSIGN 0x00
-    #define APID_CALLSIGN 0x00
-    
-    // max value of telecommands in a tcl
-    #define TCL_OVERFLOW_CONSTANT 256
-    #define TM_OVERFLOW_CONSTANT 256
+#define COM_PA_COOLING_TIME_LIMIT 20
+#define COM_MAX_TC_LIMIT 200
+#define TM_ACK_CODE_INDEX 2
+#define CRC_FAIL_NACK_CODE 0x01
+
+// call sign
+#define PSC_CALLSIGN 0x00
+#define APID_CALLSIGN 0x00
+
+// max value of telecommands in a tcl
+#define TCL_OVERFLOW_CONSTANT 256
+#define TM_OVERFLOW_CONSTANT 256
+
+// starting value of packet sequence count at each pass
+#define PSC_START_VALUE 1
 
-    // starting value of packet sequence count at each pass 
-    #define PSC_START_VALUE 1
-    
-    // APID list
-    #define APID_COM 0
-    #define APID_BAE 1
-    #define APID_CDMS 2
-    #define APID_SPEED 3
-    
-    //SERVICE
-    #define SERVICE_OBOSC 0xB
-    #define SERVICE_OBSRS 0xF
-    
-    // HIGH PRIORITY TC - priority list
-    // not correct values here
-    #define HPTC1 5
-    #define HPTC2 6
-    // Add more entries above
-    
-    // SIZE of tc in bytes
-    #define TC_SHORT_SIZE 11
-    #define TC_LONG_SIZE 135
-    
-    // TMID list
-    #define TMID_ACK_L1 0xA
-    #define TMID_ACK_L234 0xB
-    #define TMID_TCL 0x7
-    #define TMID_CALL_SIGN 0xE
+// APID list
+#define APID_COM 0
+#define APID_BAE 1
+#define APID_CDMS 2
+#define APID_SPEED 3
+
+//SERVICE
+#define SERVICE_OBOSC 0xB
+#define SERVICE_OBSRS 0xF
+
+// HIGH PRIORITY TC - priority list
+// not correct values here
+#define HPTC1 5
+#define HPTC2 6
+// Add more entries above
+
+// SIZE of tc in bytes
+#define TC_SHORT_SIZE 11
+#define TC_LONG_SIZE 135
+
+// TMID list
+#define TMID_ACK_L1 0xA
+#define TMID_ACK_L234 0xB
+#define TMID_TCL 0x7
+#define TMID_CALL_SIGN 0xE
 
 // OBOSC SERVICE SUBTYPE
-    #define OBOSC_TCL_MAX_SHORT_SIZE 11
-    #define OBOSC_LONG_TC_FIRST_HALF_SIZE 67
-    #define OBOSC_LONG_TC_SECOND_HALF_SIZE 68
-    #define OBOSC_TCL_TAG_LONG_FIRST_HALF 0x10
-    #define OBOSC_TCL_TAG_LONG_SECOND_HALF 0x11
+#define OBOSC_TCL_MAX_SHORT_SIZE 11
+#define OBOSC_LONG_TC_FIRST_HALF_SIZE 67
+#define OBOSC_LONG_TC_SECOND_HALF_SIZE 68
+#define OBOSC_TCL_TAG_LONG_FIRST_HALF 0x10
+#define OBOSC_TCL_TAG_LONG_SECOND_HALF 0x11
 
-    #define OBOSC_SUB_DISABLE 0x01
-    #define OBOSC_SUB_RETRY 0x05
-    #define OBOSC_SUB_REP_TCLD 0x06
-    #define OBOSC_SUB_REP_LE 0x0F
-    #define OBOSC_SUB_RESET 0x07
-    
+#define OBOSC_SUB_DISABLE 0x01
+#define OBOSC_SUB_RETRY 0x05
+#define OBOSC_SUB_REP_TCLD 0x06
+#define OBOSC_SUB_REP_LE 0x0F
+#define OBOSC_SUB_RESET 0x07
+
 // PAYLOAD or SCIENCE
-    #define PAYLOAD_BUFFER_LENGTH 6723
-    #define PAY_SPI_MOSI PTE18
-    #define PAY_SPI_MISO PTE19
-    #define PAY_SPI_CLK PTE17
-    #define PAY_SPI_CS PTE16
+#define PAYLOAD_BUFFER_LENGTH 6723
+#define PAY_SPI_MOSI PTE18
+#define PAY_SPI_MISO PTE19
+#define PAY_SPI_CLK PTE17
+#define PAY_SPI_CS PTE16
 
 //BEACON
-    #define BCN_APID_SOURCE 0x41
-    #define BCN_SERVICE 0x81
-    
+#define BCN_APID_SOURCE 0x41
+#define BCN_SERVICE 0x81
+
 //BAE
-    #define BAE_APID_SOURCE 0x81
-    #define BAE_SERVICE 0x81
-    #define BAE_POWER_ON_PID 0x13
-    #define BAE_POWER_OFF_PID 0x23
-    #define BAE_RESET_PID 0x33
+#define BAE_APID_SOURCE 0x81
+#define BAE_SERVICE 0x81
+#define BAE_POWER_ON_PID 0x13
+#define BAE_POWER_OFF_PID 0x23
+#define BAE_RESET_PID 0x33
 
 //RF RELAY
-    #define RF_RELAY_CNTRL_TX PTA7
-    #define RF_RELAY_CNTRL_BCN PTA12 
+#define RF_RELAY_CNTRL_TX PTA7
+#define RF_RELAY_CNTRL_BCN PTA12
 
-    
+
 // ****************GLOBAL VARIABLES******************
 // DEBUG
 Serial gPC( USBTX, USBRX );
@@ -222,7 +222,7 @@
 uint8_t CDMS_HEALTH_DATA[128];
 uint8_t CDMS_RAM[59];
 uint16_t GPIO_STATUS;
-uint8_t CDMS_HK_MAIN_STATUS;    
+uint8_t CDMS_HK_MAIN_STATUS;
 uint8_t COMRX_STATUS;
 uint8_t RTC_FAULTCOUNT;
 uint16_t SD_FAULTCOUNT;
@@ -299,4 +299,23 @@
 uint8_t CDMS_STANDBY_PL;
 uint8_t CDMS_INIT_STATUS;
 uint8_t CDMS_HK_STATUS;
-uint8_t CDMS_RTC_BL;
\ No newline at end of file
+uint8_t CDMS_RTC_BL;
+
+//FLASH parameters
+uint8_t EPS_V_A_EN_STATUS;
+uint8_t BAE_SW_STATUS;
+uint8_t CDMS_SD_SW_STATUS;
+uint8_t PL_BEE_SW_STATUS =0 ;
+uint8_t PL_EPS_LATCH_SW_EN;
+uint8_t RTC_INIT_STATUS;
+uint8_t CDMS_RTC_DISABLE;
+uint8_t CDMS_RESET_COUNTER;
+uint8_t TIME_LATEST_CDSMS_RESET;
+uint8_t COM_TC_BYTES_LIMIT;
+uint8_t COM_RX_CURRENT_MAX;
+uint8_t COM_RX_DISABLE_TIMEOUT;
+uint8_t COM_PA_TMP_HIGH;
+uint8_t COM_PA_RECOVERY_TIMEOUT;
+uint8_t COM_SESSION_TIMEOUT;
+uint8_t COM_RSSI_MIN;
+uint8_t SD_LIB_BLK_CURRENT_NMBR;
\ No newline at end of file
--- a/FMS_all.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/FMS_all.h	Sun Jul 03 09:33:33 2016 +0000
@@ -20,6 +20,7 @@
 void RST_PL_BEE();
 void RST_HK_COUNTER();
 uint8_t CDMS_RD_SD_HK(uint8_t *);
+void RESET_CDMS();
 void CDMS_INTERNAL_RESET();
 
 void P_PL_INIT()
@@ -150,7 +151,12 @@
     return ACK;
 }
 
+void RESET_CDMS()
+{
+    
+}
+
 void CDMS_INTERNAL_RESET()
 {
-    
+        
 }
\ No newline at end of file
--- a/Flash.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/Flash.h	Sun Jul 03 09:33:33 2016 +0000
@@ -4,6 +4,70 @@
 uint32_t flasharray[256+(3*1024)];
 char *nativeflash = (char*)strt_add;
 
+/*Initiation of Flash*/
+void FLASH_INIT()
+{
+    uint32_t read[8]; 
+    for(int i=0;i<8;i++)
+        {  
+            read[i] = FCTN_CDMS_RD_FLASH(i);
+            //printf("\n\r val is read after starting %x  ",read[i]);
+        }
+            
+    if(read[0] == -1)
+        for(int j=0;j<8;j++)
+            {   
+                FCTN_CDMS_WR_FLASH(j,ARR_INITIAL_VAL[j]); 
+            } 
+    else
+       {
+        for(int j=0;j<8;j++)
+            {   
+                read[j] = FCTN_CDMS_RD_FLASH(j);
+            }
+        ACS_ATS_STATUS  = read[0]>>24;
+        ACS_TR_XY_SW_STATUS = ((uint8_t)(read[0]>>22))&0x03;
+        ACS_TR_Z_SW_STATUS = (read[0]>>20)&0x03;
+        ACS_DETUMBLING_ALGO_TYPE = (read[0]>>19)&0x01;
+        ACS_STATE = (read[0]>>16)&0x07;
+        BCN_TX_SW_STATUS = ((uint8_t)(read[0]>>14))&0x03;
+        BCN_SPND_TX = ((uint8_t)(read[0]>>13))&0x01;
+        BCN_FEN = ((uint8_t)(read[0]>>12))&0x01;
+        BCN_LONG_MSG_TYPE = ((uint8_t)(read[0]>>11))&0x01;
+        EPS_BTRY_HTR_AUTO = ((uint8_t)(read[0]>>10))&0x03;//EPS_BATTERY_HEATER_ENABLE
+        //now two spares in telemetry[5]
+        
+        //updating the reset counter
+        BAE_RESET_COUNTER = ((uint8_t)(read[0]))+1;
+        read[0]=(read[0]&0xffffff00) | (uint32_t)BAE_RESET_COUNTER;
+        FCTN_CDMS_WR_FLASH(0,read[0]);
+        
+                
+        EPS_SOC_LEVEL_12 = (uint8_t)(read[1]>>24); 
+        EPS_SOC_LEVEL_23 = (uint8_t)(read[1]>>16);
+        ACS_MAG_TIME_DELAY = (uint8_t)(read[1]>>8);
+        ACS_DEMAG_TIME_DELAY = (uint8_t)read[1];
+                
+        EPS_BAT_TEMP_LOW = (uint8_t)(read[2]>>24);
+        EPS_BAT_TEMP_HIGH = (uint8_t)(read[2]>>16);
+        EPS_BAT_TEMP_DEFAULT = (uint8_t)(read[2]>>8);
+                                                                    
+        ACS_MM_X_COMSN = (uint16_t)(read[3]>>16);                                                                
+        ACS_MM_Y_COMSN = (uint16_t)read[3];
+                                                                    
+        ACS_MG_X_COMSN = (uint16_t)(read[4]>>16);
+        ACS_MG_Y_COMSN = (uint16_t)read[4];
+                                                                
+        ACS_MM_Z_COMSN = (uint16_t)(read[5]>>16);
+        ACS_MG_Z_COMSN = (uint16_t)read[5];
+                                                                    
+        ACS_Z_FIXED_MOMENT = (uint16_t)(read[6]>>16);//assignvalues 
+            
+        }
+    
+}
+
+
 /*Writing to the Flash*/
 void FCTN_CDMS_WR_FLASH(uint16_t j,uint32_t block)
 {
@@ -15,7 +79,6 @@
     erase_sector(strt_add);
     program_flash(strt_add, (char*)&flasharray,4*(256+(1024*3)));
 }
-/*End*/
 
 /*Reading from Flash*/
 uint32_t FCTN_CDMS_RD_FLASH(uint16_t j)
--- a/RESET_functions.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/RESET_functions.h	Sun Jul 03 09:33:33 2016 +0000
@@ -8,6 +8,7 @@
     pwr_comrx = 0;
     wait_ms(10);
     pwr_comrx =1;
+    COMRX_RESET_COUNTER++;
 }
 
 void RESET_RTC()
--- a/cdms_rtc.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/cdms_rtc.h	Sun Jul 03 09:33:33 2016 +0000
@@ -1,5 +1,9 @@
 void FCTN_CDMS_INIT_RTC()
 {
+    if(RTC_INIT_STATUS = 1)
+    {
+        
+    }
     SPI_mutex.lock();
     gCS_RTC=1;
     spi.format(8,0);
@@ -82,11 +86,16 @@
 {
     SPI_mutex.lock();
     uint8_t response;
-
+    uint64_t time = 0;
+    
     gCS_RTC=1;
     gCS_RTC=0;
     spi.write(0x0F);
     response = (spi.write(0x00))&0x04;
+    if(response == 0x04)
+    {
+        goto END;
+    }
     
     gCS_RTC=1;
     gCS_RTC=0;
@@ -116,7 +125,6 @@
     year = (year == 17)?0x00:(year == 18)?0x01:(year == 19)?0x02:(year == 20)?0x03:0x00;
     gCS_RTC=1;
 
-    uint64_t time;
     time = 0;
     time = time|(((uint64_t)(centiseconds&0x7F)));
     time = time|(((uint64_t)(seconds&0x3F))<<7);
@@ -128,6 +136,8 @@
     time = (time&0x00000007FFFFFFFF);
 
     SPI_mutex.unlock();
+    TIME_LATEST_RTC = time >> 7;
+    END:
     return time;
 }
 
--- a/cdms_sd.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/cdms_sd.h	Sun Jul 03 09:33:33 2016 +0000
@@ -1,4 +1,4 @@
-//SPI spi(PTE1, PTE3, PTE2);      // MOSI,MISO, CLOCK microcontroller(in order)     
+//SPI spi(PTE1, PTE3, PTE2);      // MOSI,MISO, CLOCK microcontroller(in order)
 //DigitalOut cs_sd(PTE22);
 
 //Serial sd1(USBTX,USBRX);
@@ -67,7 +67,7 @@
 uint64_t sectors;
 
 int FCTN_CDMS_SD_INIT()
-{   
+{
     int i = initialise_card();
     debug_if(SD_DBG, "init card = %d\n", i);
     sectors = sd_sectors();
@@ -77,7 +77,7 @@
         debug("\rSet 512-byte block timed out\r\n");
         return 1;
     } else {
-    //printf("\rDisk initialization successfull\r\n");
+        //printf("\rDisk initialization successfull\r\n");
     }
 
     spi.frequency(1000000); // Set to 1MHz for data transfer
@@ -90,7 +90,7 @@
     uint32_t start_fsc;
     uint8_t buffer[512];
     int b=disk_read(buffer, SD_MNG_SECT);
-    
+
     fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3];
     start_fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7];
     FSC_CURRENT[1] = fsc;
@@ -126,8 +126,7 @@
     SD_MNG_SECT += SD_LIB_WRITES/(int)0xFFFF;
     SD_LIB_WRITES = SD_LIB_WRITES%(int)0xFFFF;
     disk_read(buffer,SD_MNG_SECT);
-    if(sid==0x01)
-    {
+    if(sid==0x01) {
         fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3];
         start_fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7];
         fsc++;
@@ -135,25 +134,22 @@
         buffer[1]=(uint8_t) (fsc>>16 & 0xFF);
         buffer[2]=(uint8_t) (fsc>>8 & 0xFF);
         buffer[3]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_SCP_LAST-SD_SCP_FIRST+1)
-        {
+        if(fsc > SD_SCP_LAST-SD_SCP_FIRST+1) {
             start_fsc = start_fsc+1;
             buffer[4]=(uint8_t) (start_fsc>>24 & 0xFF);
             buffer[5]=(uint8_t) (start_fsc>>16 & 0xFF);
             buffer[6]=(uint8_t) (start_fsc>>8 & 0xFF);
             buffer[7]=(uint8_t) (start_fsc & 0xFF);
         }
-        
+
         i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0)
-        {
+        if(i == 0) {
             FSC_CURRENT[1] = fsc;
             FSC_LAST[1] = start_fsc;
             return i;
-        } 
+        }
     }
-    if(sid==0x02)
-    {
+    if(sid==0x02) {
         fsc=(uint32_t)(buffer[8]<<24)+(uint32_t)(buffer[9]<<16)+(uint32_t)(buffer[10]<<8)+(uint32_t)buffer[11];
         start_fsc=(uint32_t)(buffer[12]<<24)+(uint32_t)(buffer[13]<<16)+(uint32_t)(buffer[14]<<8)+(uint32_t)buffer[15];
         fsc++;
@@ -161,8 +157,7 @@
         buffer[9]=(uint8_t) (fsc>>16 & 0xFF);
         buffer[10]=(uint8_t) (fsc>>8 & 0xFF);
         buffer[11]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_SFF_AT_LAST-SD_SFF_AT_FIRST+1)
-        {
+        if(fsc > SD_SFF_AT_LAST-SD_SFF_AT_FIRST+1) {
             start_fsc = start_fsc+1;
             buffer[12]=(uint8_t) (start_fsc>>24 & 0xFF);
             buffer[13]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -170,15 +165,13 @@
             buffer[15]=(uint8_t) (start_fsc & 0xFF);
         }
         i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0)
-        {
+        if(i == 0) {
             FSC_CURRENT[2] = fsc;
             FSC_LAST[2] = start_fsc;
             return i;
         }
     }
-    if(sid==0x03)
-    {
+    if(sid==0x03) {
         fsc=(uint32_t)(buffer[16]<<24)+(uint32_t)(buffer[17]<<16)+(uint32_t)(buffer[18]<<8)+(uint32_t)buffer[19];
         start_fsc=(uint32_t)(buffer[20]<<24)+(uint32_t)(buffer[21]<<16)+(uint32_t)(buffer[22]<<8)+(uint32_t)buffer[23];
         fsc++;
@@ -186,8 +179,7 @@
         buffer[17]=(uint8_t) (fsc>>16 & 0xFF);
         buffer[18]=(uint8_t) (fsc>>8 & 0xFF);
         buffer[19]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_SFF_BT_LAST-SD_SFF_BT_FIRST+1)
-        {
+        if(fsc > SD_SFF_BT_LAST-SD_SFF_BT_FIRST+1) {
             start_fsc = start_fsc+1;
             buffer[20]=(uint8_t) (start_fsc>>24 & 0xFF);
             buffer[21]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -195,15 +187,13 @@
             buffer[23]=(uint8_t) (start_fsc & 0xFF);
         }
         i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0)
-        {
+        if(i == 0) {
             FSC_CURRENT[3] = fsc;
             FSC_LAST[3] = start_fsc;
             return i;
         }
     }
-     if(sid==0x04)
-    {
+    if(sid==0x04) {
         fsc=(uint32_t)(buffer[24]<<24)+(uint32_t)(buffer[25]<<16)+(uint32_t)(buffer[26]<<8)+(uint32_t)buffer[27];
         start_fsc=(uint32_t)(buffer[28]<<24)+(uint32_t)(buffer[29]<<16)+(uint32_t)(buffer[30]<<8)+(uint32_t)buffer[31];
         fsc++;
@@ -211,8 +201,7 @@
         buffer[25]=(uint8_t) (fsc>>16 & 0xFF);
         buffer[26]=(uint8_t) (fsc>>8 & 0xFF);
         buffer[27]=(uint8_t) (fsc & 0xFF);
-        if(fsc > SD_HK_ARCH_LAST-SD_HK_ARCH_FIRST+1)
-        {
+        if(fsc > SD_HK_ARCH_LAST-SD_HK_ARCH_FIRST+1) {
             start_fsc = start_fsc+1;
             buffer[28]=(uint8_t) (start_fsc>>24 & 0xFF);
             buffer[29]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -220,15 +209,13 @@
             buffer[31]=(uint8_t) (start_fsc & 0xFF);
         }
         i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0)
-        {
+        if(i == 0) {
             FSC_CURRENT[4] = fsc;
             FSC_LAST[4] = start_fsc;
             return i;
         }
     }
-     if(sid==0x05)
-    {
+    if(sid==0x05) {
         fsc=(uint32_t)(buffer[32]<<24)+(uint32_t)(buffer[33]<<16)+(uint32_t)(buffer[34]<<8)+(uint32_t)buffer[35];
         start_fsc=(uint32_t)(buffer[36]<<24)+(uint32_t)(buffer[37]<<16)+(uint32_t)(buffer[38]<<8)+(uint32_t)buffer[39];
         fsc++;
@@ -236,8 +223,7 @@
         buffer[33]=(uint8_t) (fsc>>16 & 0xFF);
         buffer[34]=(uint8_t) (fsc>>8 & 0xFF);
         buffer[35]=(uint8_t) (fsc & 0xFF);
-        if(fsc > LOG_LAST-LOG_FIRST+1)
-        {
+        if(fsc > LOG_LAST-LOG_FIRST+1) {
             start_fsc = start_fsc+1;
             buffer[36]=(uint8_t) (start_fsc>>24 & 0xFF);
             buffer[37]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -245,8 +231,7 @@
             buffer[39]=(uint8_t) (start_fsc & 0xFF);
         }
         i = disk_write(buffer,SD_MNG_SECT);
-        if(i == 0)
-        {
+        if(i == 0) {
             FSC_CURRENT[5] = fsc;
             FSC_LAST[5] = start_fsc;
             return i;
@@ -260,61 +245,51 @@
 {
     uint32_t block_number;
     int result = 10;
-    if(sid==0x01)
-    {
+    if(sid==0x01) {
         //block_number=SD_SCP_FIRST+(fsc%(SD_SCP_LAST-SD_SCP_FIRST+1))-1;
         block_number=SD_SCP_FIRST+fsc;
         result= disk_write(buffer,block_number);
-        if(result == 0)
-        {
+        if(result == 0) {
             if(INCREMENT_SD_LIB(sid) == 0)
                 SD_LIB_WRITES++;
         }
         return result;
     }
-   if(sid==0x02)
-    {
+    if(sid==0x02) {
         //block_number= SD_SFF_AT_FIRST+(fsc%(SD_SFF_AT_LAST - SD_SFF_AT_FIRST+1))-1;
         block_number= SD_SFF_AT_FIRST+fsc;
         result= disk_write(buffer,block_number);
-        if(result == 0)
-         {
+        if(result == 0) {
             if(INCREMENT_SD_LIB(sid) == 0)
                 SD_LIB_WRITES++;
         }
         return result;
     }
-     if(sid==0x03)
-    {
+    if(sid==0x03) {
         //block_number= SD_SFF_BT_FIRST +(fsc%(SD_SFF_BT_LAST - SD_SFF_BT_FIRST +1))-1;
         block_number= SD_SFF_BT_FIRST +fsc;
         result= disk_write(buffer,block_number);
-        if(result == 0)
-        {
+        if(result == 0) {
             if(INCREMENT_SD_LIB(sid) == 0)
                 SD_LIB_WRITES++;
         }
         return result;
     }
-     if(sid==0x04)
-    {
+    if(sid==0x04) {
         //block_number=SD_HK_ARCH_FIRST +(fsc%(SD_HK_ARCH_LAST - SD_HK_ARCH_FIRST +1))-1;
         block_number=SD_HK_ARCH_FIRST +fsc;
         result= disk_write(buffer,block_number);
-        if(result == 0)
-        {
+        if(result == 0) {
             if(INCREMENT_SD_LIB(sid) == 0)
                 SD_LIB_WRITES++;
         }
         return result;
     }
-     if(sid==0x05)
-    {
+    if(sid==0x05) {
         //block_number= LOG_FIRST +(fsc%(LOG_FIRST - LOG_FIRST +1))-1;
         block_number= LOG_FIRST +fsc;
         result= disk_write(buffer,block_number);
-        if(result == 0)
-        {
+        if(result == 0) {
             if(INCREMENT_SD_LIB(sid) == 0)
                 SD_LIB_WRITES++;
         }
@@ -330,48 +305,37 @@
     int result;
     if(SD_SW_EN_DS == 1)
         return 0x89;
-    if(sid==0x01)
-    {
-        if(!(FSC_LAST[1]<=fsc && fsc<=FSC_CURRENT[1])){
+    if(sid==0x01) {
+        if(!(FSC_LAST[1]<=fsc && fsc<=FSC_CURRENT[1])) {
             return 0x86;
         }
         block_number=SD_SCP_FIRST + fsc;
         result= disk_read(buffer,block_number);
-    }
-   else if(sid==0x02)
-    {
-        if(!(FSC_LAST[2]<=fsc && fsc<=FSC_CURRENT[2])){
+    } else if(sid==0x02) {
+        if(!(FSC_LAST[2]<=fsc && fsc<=FSC_CURRENT[2])) {
             return 0x86;
         }
         block_number=SD_SFF_AT_FIRST + fsc;
         result= disk_read(buffer,block_number);
-    }
-    else if(sid==0x03)
-    {
-        if(!(FSC_LAST[3]<=fsc && fsc<=FSC_CURRENT[3])){
+    } else if(sid==0x03) {
+        if(!(FSC_LAST[3]<=fsc && fsc<=FSC_CURRENT[3])) {
             return 0x86;
         }
         block_number=SD_SFF_BT_FIRST + fsc;
         result= disk_read(buffer,block_number);
-    }
-    else if(sid==0x04)
-    {
-        if(!(FSC_LAST[4]<=fsc && fsc<=FSC_CURRENT[4])){
+    } else if(sid==0x04) {
+        if(!(FSC_LAST[4]<=fsc && fsc<=FSC_CURRENT[4])) {
             return 0x86;
         }
         block_number=SD_HK_ARCH_FIRST + fsc;
         result= disk_read(buffer,block_number);
-    }
-    else if(sid==0x05)
-    {
-        if(!(FSC_LAST[5]<=fsc && fsc<=FSC_CURRENT[5])){
+    } else if(sid==0x05) {
+        if(!(FSC_LAST[5]<=fsc && fsc<=FSC_CURRENT[5])) {
             return 0x86;
         }
         block_number=LOG_FIRST +fsc;
         result= disk_read(buffer,block_number);
-    }
-    else
-    {
+    } else {
         return 0x02;
     }
     if(result == 0)
@@ -384,7 +348,7 @@
 int initialise_card()
 {
     // Set to 100kHz for initialisation, and clock card with cs_sd = 1
-    spi.frequency(100000);           // changed on 31 12 2015 to 1 MHz 
+    spi.frequency(100000);           // changed on 31 12 2015 to 1 MHz
     cs_sd = 1;
     for (int i = 0; i < 16; i++) {
         spi.write(0xFF);
@@ -395,9 +359,8 @@
     if (R1_response != R1_IDLE_STATE) {
         debug("No disk, or could not put SD card in to spi idle state\r\n");
         return SDCARD_FAIL;
-    }
-    else
-        gPC.puts("SD Card is in IDLE state\n\r");    
+    } else
+        gPC.puts("SD Card is in IDLE state\n\r");
 
     // send CMD8 to determine whther it is ver 2.x
     int r = cmd8();
@@ -643,13 +606,10 @@
     if (cmd(24, block_number * cdv) != 0) {
         return 1;
     }
-    
-    uint64_t temp;
+
     int r = write(buffer, 512);
-    if(r == 0 ){
-        temp = FCTN_CDMS_RD_RTC();
-        TIME_LATEST_SD_RD = temp >> 7;
-    }
+    if(r == 0 )
+        TIME_LATEST_SD_WR = FCTN_CDMS_RD_RTC() >> 7;
     return  r;
 }
 
@@ -694,8 +654,7 @@
 
     // receive the data
     read(buffer, 512);
-    uint64_t temp = FCTN_CDMS_RD_RTC();
-    TIME_LATEST_SD_RD = temp >> 7;
+    TIME_LATEST_SD_RD = FCTN_CDMS_RD_RTC() >> 7;
     return 0;
 }
 
@@ -729,14 +688,14 @@
     if (cmd(38,0) != 0) {
         return 1;
     }
-    
+
     return 0; //normal return
 }
 
 int disk_read_statusbits(uint8_t *buffer)
 {
     if (cmd(17, 0) != 0) {
-          SD_RD_ERROR = 1;
+        SD_RD_ERROR = 1;
         return -1;
     }
 
--- a/i2c.h	Sat Jul 02 15:28:21 2016 +0000
+++ b/i2c.h	Sun Jul 03 09:33:33 2016 +0000
@@ -26,29 +26,31 @@
     I2C0->C1 |= 0x80;               //Enabling I2C module
     PORTE->PCR[1] |= 0x00000004;    //Disabling high slew rates for SDA and SCL lines
     PORTE->PCR[0] |= 0x00000004;    //Disabling high slew rates for SDA and SCL lines
-    Thread::wait(1);                //Wait for all I2C registers to be updates to their their values
+    wait_ms(1);               //Wait for all I2C registers to be updates to their their values
 }
 bool FCTN_I2C_READ_PL(char *data,int length)       // Returns 0 for success
 {    
     PL_I2C_GPIO = 1;
     read_ack = master.read(addr_pl|1,data,length);
-    Thread::wait(1);        //as per tests Thread::wait not required on master side. But its safe to give 1ms 
+    wait_ms(1);        //as per tests Thread::wait not required on master side. But its safe to give 1ms 
     pdirr1=PTE->PDIR;
     uint8_t i2c_count = 0;    
     if(read_ack == 0)   //if read_ack says success, it may or may not be successful.Hence we check SCL and SDA
     {
         while(((pdirr1 & 0x03000000)!=0x03000000)&& i2c_count<10)//checking SCL and SDA for time=10ms
         {
-            Thread::wait(1);
+            wait_ms(1);
             pdirr1=PTE->PDIR;
             i2c_count++;
         }
         if(((pdirr1 & 0x03000000)==0x03000000))//if SCL and SDA are both high
         {    
-            gPC.printf("\n\rData received from BAE");
+            TIME_LATEST_I2C_SPEED = FCTN_CDMS_RD_RTC() >> 7;
+            gPC.printf("\n\rData received from PL");
         }
         else 
-        {            
+        {   
+            CDMS_I2C_ERR_SPEED_COUNTER++;
             I2C_busreset();
             read_ack = 1;
         }
@@ -65,23 +67,25 @@
 bool FCTN_I2C_WRITE_PL(char *data2,uint8_t tc_len2)       // Returns 0 for success
 {
     write_ack = master.write(addr_pl|0x00,data2,tc_len2);//address to be defined in payload    
-    Thread::wait(1);    //As per the tests Thread::wait is not required on master side but its safe to give 1ms
+    wait_ms(1);    //As per the tests Thread::wait is not required on master side but its safe to give 1ms
     pdirw1=PTE->PDIR;
     uint8_t i2c_count = 0;
     if(write_ack == 0)
     {
         while(((pdirw1 & 0x03000000)!=0x03000000)&& i2c_count<10)
         {
-            Thread::wait(1);
+            wait_ms(1);
             pdirw1=PTE->PDIR;
             i2c_count++;
         }
         if(((pdirw1 & 0x03000000)==0x03000000))
         {
-            gPC.printf("\n\r Data sent");        
+            TIME_LATEST_I2C_SPEED = FCTN_CDMS_RD_RTC() >> 7;
+            gPC.printf("\n\r Data sent to PL");        
         }
         else
         {
+            CDMS_I2C_ERR_SPEED_COUNTER++;
             I2C_busreset();
             write_ack = 1;
         }
@@ -97,23 +101,25 @@
 {   
     CDMS_I2C_GPIO = 1;
     read_ack = master.read(addr_bae|1,data,length);
-    Thread::wait(1);        //as per tests Thread::wait not required on master side. But its safe to give 1ms 
+    wait_ms(1);        //as per tests Thread::wait not required on master side. But its safe to give 1ms 
     pdirr1=PTE->PDIR;
     uint8_t i2c_count = 0;    
     if(read_ack == 0)   //if read_ack says success, it may or may not be successful.Hence we check SCL and SDA
     {
         while(((pdirr1 & 0x03000000)!=0x03000000)&& i2c_count<10)//checking SCL and SDA for time=10ms
         {
-            Thread::wait(1);
+            wait_ms(1);
             pdirr1=PTE->PDIR;
             i2c_count++;
         }
         if(((pdirr1 & 0x03000000)==0x03000000))//if SCL and SDA are both high
         {    
+            TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
             gPC.printf("\n\rData received from BAE");
         }
         else 
-        {            
+        {   
+            CDMS_I2C_ERR_BAE_COUNTER++;
             I2C_busreset();
             read_ack = 1;
         }
@@ -131,23 +137,25 @@
 {    
     CDMS_I2C_GPIO = 1;
     write_ack = master.write(addr_bae|0x00,data,tc_len2);    
-    Thread::wait(1);    //As per the tests Thread::wait is not required on master side but its safe to give 1ms
+    wait_ms(1);    //As per the tests Thread::wait is not required on master side but its safe to give 1ms
     pdirw1=PTE->PDIR;
     uint8_t i2c_count = 0;
     if(write_ack == 0)
     {
         while(((pdirw1 & 0x03000000)!=0x03000000)&& i2c_count<10)
         {
-            Thread::wait(1);
+            wait_ms(1);
             pdirw1=PTE->PDIR;
             i2c_count++;
         }
         if(((pdirw1 & 0x03000000)==0x03000000))
         {
-            gPC.printf("\n\r Data sent");        
+            TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
+            gPC.printf("\n\r Data sent BAE");        
         }
         else
         {
+            CDMS_I2C_ERR_BAE_COUNTER++;
             I2C_busreset();
             write_ack = 1;
         }
--- a/main.cpp	Sat Jul 02 15:28:21 2016 +0000
+++ b/main.cpp	Sun Jul 03 09:33:33 2016 +0000
@@ -1,7 +1,4 @@
-
 // TESTING PUSH PULL IN MAIN CPP
-
-
 #include "mbed.h"
 
 #define DEBUG 1
@@ -15,18 +12,18 @@
 #include "pinconfig.h"
 #include "DefinitionsAndGlobals.h"
 #include "crc.h"
+#include "cdms_rtc.h"
+#include "cdms_sd.h"
 #include "i2c.h"
 #include "COM_SND_TM_functions.h"
 #include "COM_SND_TM.h"
-#include "cdms_rtc.h"
-#include "cdms_sd.h"
 #include "common_functions.h"
 #include "RESET_functions.h"
 #include "CDMS_HK.h"
 #include "OBSRS.h"
 #include "adf.h"
 #include "COM_RCV_TC.h"
-//#include "Flash.h"
+#include "Flash.h"
 #include "FMS_all.h"
 #include "CDMS_PL.h"
 #include "COM_MNG_TMTC.h"
@@ -36,6 +33,8 @@
 #include "ThreadsAndFunctions.h"
 #include "TEST_PL.h"
 
+void CDMS_INIT();
+
 #define PL_TC(tm_ptr){\
     Base_tc *beacon_tc = new Short_tc;\
     beacon_tc->next_TC = NULL;\
@@ -84,108 +83,112 @@
                             transmit_adf;\
                             gPC.puts("exit_adf\r\n");\
 }
-//void set_sig(){gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);}
+
+void CDMS_INIT()
+{
+    CDMS_INIT_STATUS = 1;
+    
+    spi.format(8,0);
+    spi.frequency(1000000);
+
+    cs_sd = 1;
+    gCS_RTC = 1;
+    gCS_ADF = 1;
+
+    FCTN_CDMS_INIT_RTC();
+    FCTN_CDMS_SD_INIT();
+    
+}
+
 int main()
 {
-    
-    CDMS_I2C_GPIO = 0; 
-    PL_I2C_GPIO = 0; 
-    
-    //gLEDR = 1;
-    
+
+    CDMS_I2C_GPIO = 0;
+    PL_I2C_GPIO = 0;
+
     // ******************INITIALISATIONS START******************
-    // COM RX
-    
+
     RX1M.baud(1200);
     gRX_HEAD_DATA_NODE = new COM_RX_DATA_NODE;
     gRX_HEAD_DATA_NODE->next_node = NULL;
     gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;
     gRX_COUNT = 0;
-//    gRX_CURRENT_PTR = gRX_CURRENT_DATA_NODE->values;
+    //gRX_CURRENT_PTR = gRX_CURRENT_DATA_NODE->values;
     RX1M.attach(&rx_read, Serial::RxIrq);
-    
+
     // DEBUG
     //gPC.puts("welcome to mng_tm_tc\r\n");
     gPC.baud(115200);//changed for bypassing COM
-    
-    // COMMON SPI
-    spi.format(8,0);
-    spi.frequency(1000000);
+
 
-    // SD CARD
-    cs_sd = 1;
-    gCS_RTC = 1;
-    gCS_ADF = 1;
     
-    FCTN_CDMS_INIT_RTC();/* rtc initialization*/
-    FCTN_CDMS_SD_INIT();/* sd card initialization*/
-    
-    
+
+
     uint8_t test[512] = {0};
     disk_write(test,7000); //to be used only just before launch
-    
-    #if DEBUG
+
+#if DEBUG
     gPC.puts("welcome to mng_tmtc\r\n");
-    #endif
-    
-    
-    
+#endif
+
+
+
     // COM_MNG_TMTC THREAD
     gCOM_MNG_TMTC_THREAD = new Thread(COM_MNG_TMTC_FUN);
     gCOM_MNG_TMTC_THREAD->set_priority(osPriorityHigh);
-    #if DEBUG
+#if DEBUG
     gPC.puts("allocating threads\r\n");
-    #endif
+#endif
     gSCIENCE_THREAD = new Thread(SCIENCE_FUN);
-   // gPC.puts("step one complete\r\n");
+    // gPC.puts("step one complete\r\n");
     gSCIENCE_THREAD->set_priority(osPriorityAboveNormal);
-    #if DEBUG
+#if DEBUG
     gPC.puts("competed allocating threads\r\n");
-    #endif
-    
-    
+#endif
+
+
     master.frequency(400000);
     PL_wo_dma = new RtosTimer(payload_isr_fun_dma, osTimerPeriodic,(void * )NULL);
     //PL_wo_dma->start(6000);//
     gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);
-    
-    
-    
-    
+
+
+
+
     /*gPC.printf("PL_TC sending\r\n");
-    
+
     Base_tm *tm_ptr = new Short_tm;
     OBSRS_TC(tm_ptr);
-    
+
     gPC.printf("PL_TC sent");
     */
     // *******************INITIALISATIONS END********************
-    
+
     //RtosTimer gCDMS_HK_TIMER(FCTN_CDMS_HK_MAIN, osTimerPeriodic);
     //gCDMS_HK_TIMER.start(5000);
-    
+
     /*starting the thread with signal*/
     //set_sig();
     //payload_isr_fun();
-    
+
     /*Calculating Stack used*/
-    
+
     int state;
-    /*while (true) { 
-    Thread::wait(500); 
-    state = gSCIENCE_THREAD->get_state(); 
-    //gPC.printf("Thread state %d\r\n", state); 
-    if(state == Thread::Inactive) 
+    /*while (true) {
+    Thread::wait(500);
+    state = gSCIENCE_THREAD->get_state();
+    //gPC.printf("Thread state %d\r\n", state);
+    if(state == Thread::Inactive)
     {delete gSCIENCE_THREAD;
     break;}
     }*/
-    
-    
-    
-    while(true){
+
+
+
+    while(true) {
         Thread::wait(osWaitForever);
         //state = gCOM_MNG_TMTC_THREAD->get_state() + '0';
-         gLEDG = !gLEDG;
-        //gPC.putc(state); 
+        gLEDG = !gLEDG;
+        //gPC.putc(state);
     }
 }
\ No newline at end of file