Compression code changed and RLY_TMTC pointers managed

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Files at this revision

API Documentation at this revision

Comitter:
chaithanyarss
Date:
Tue Jul 12 17:07:17 2016 +0000
Parent:
254:22d97475ca79
Child:
259:066a7abd2a5f
Commit message:
pipi;

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
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
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/CDMS_HK.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/CDMS_HK.h	Tue Jul 12 17:07:17 2016 +0000
@@ -1,5 +1,3 @@
-
-
 void FCTN_CDMS_HK_MAIN();
 void FCTN_CDMS_HK();
 void VERIFY_COMRX();
@@ -41,10 +39,11 @@
 {
     while(1)
     {
+    gHK_THREAD->signal_wait(HK_SIGNAL);
     gPC.printf("Entering HK thread");
-    gHK_THREAD->signal_wait(HK_SIGNAL);
+
     gMutex.lock();
-    gPC.printf("HK thread signal set");
+
     CDMS_HK_MAIN_STATUS = 0x01;
     CDMS_HK_MAIN_COUNTER++;
 
@@ -54,43 +53,42 @@
     VERIFY_RTC();
     HANDLE_HW_FAULTS();
     FUNC_CDMS_GPIO_STATUS(); //yet to be done
-    gPC.printf("Checking RTCoun");
-    uint8_t CDMS_quant[19];
+
+    uint8_t CDMS_quant[20];
+    CDMS_quant[1]= (uint8_t)quant_data.CDMS_temp_quant;
+    CDMS_quant[2]= (uint8_t)RSSI_volatge;
     for(int i=0; i<16; i++) {
-        CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
+        CDMS_quant[i+4]= (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();
-    gPC.printf("here1");
-    uint64_t time = FCTN_CDMS_RD_RTC();             //Reading Time from RTC
-    gPC.printf("0x%08X \n",time);
-    time = time>>7;
-    uint32_t HK_time = (uint32_t)time;
-    for(int i = 0; i<4; i++)
-        CDMS_HEALTH_DATA[i] = HK_time >> i;
-    gPC.printf("here2");
-    // 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[1] = GPIO_STATUS;            //Reading GPIO Pins
+    CDMS_HEALTH_DATA[0] = GPIO_STATUS >> 8;
+    COLLECT_CDMS_RAM();
+    for(int i = 0;i<84;i++)
+        CDMS_HEALTH_DATA[2+i] = CDMS_RAM[i];                  //Reading RAM parameters
+    for(int i = 0;i<20;i++)                                   //Collecting Data from Temp sensors
+        CDMS_HEALTH_DATA[86+i] = CDMS_quant[i];
 
-    CDMS_HEALTH_DATA[126] = GPIO_STATUS;            //Reading GPIO Pins
-    CDMS_HEALTH_DATA[127] = GPIO_STATUS >> 8;
+    // Here: Have to FIT flash data.    
+    
+    uint64_t time = FCTN_CDMS_RD_RTC() >> 7;             //Reading Time from RTC
+    for(int i = 124; i<128; i++)
+        CDMS_HEALTH_DATA[i] = time >> i*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;
-    gPC.printf("here3");
+
     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;
-    
+
     exor(CDMS_HK_FRAME);
     CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK);
     CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135);
@@ -99,7 +97,7 @@
     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);
+    SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
     gPC.printf("\rCompleted CDMS HK\n");
 
     /*---------------------------------- BAE HK --------------------------------------------*/
@@ -114,7 +112,7 @@
             for(int i = 0; i<15; i++)
                 gPC.printf("\r 0x%02X\n",BAE_HK[i]);
             for(int i = 0; i<4; i++)
-            BAE_HK[i] = HK_time >> i;
+            BAE_HK[i] = time >> i;
             BAE_HK_FRAME[0] = 0x28;
             BAE_HK_FRAME[1] = FSC_CURRENT[5]+1;
             BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8;
@@ -279,6 +277,10 @@
     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)));
+    //EPS_V_C_EN_STATUS
+    GPIO_STATUS=(EPS_V_C_EN_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<3)):(GPIO_STATUS)&(~((uint16_t)(0x1<<3)));
+    //EPS_V_D_EN_STATUS
+    GPIO_STATUS=(EPS_V_D_EN_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<2)):(GPIO_STATUS)&(~((uint16_t)(0x1<<2)));
     
 }
 
@@ -306,7 +308,6 @@
         gCS_RTC=0;
         spi.write(0x0F);
         if(spi.write(0x00) & 0x04 == 0x04) {
-            
             RTC_STATUS = 0x00;
             RESET_RTC();
             RTC_FAULTCOUNT++;
@@ -398,72 +399,56 @@
 
 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);
-
-    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_RAM[0] = ((PL_INIT_STATUS<<7)&0x80)|((PL_MAIN_STATUS<<6)&0x40)|((PL_LOW_POWER<<5)&0x20)|((PL_STATE<<3)&0x18)|(PL_STATUS&0x07);
+    CDMS_RAM[1] = ((PL_RCV_SC_DATA_STATUS<<7)&0x80)|((COM_SESSION<<6)&0x40)|((COM_RX<<5)&0x20)|((RF_SW_STATUS<<4)&0x10)|((COM_TX<<3)&0x08)|((COM_TX_STATUS<<2)&0x04)|((COM_MNG_TMTC<<1)&0x02)|(EN_CDMS_HK&0x01);
+    CDMS_RAM[2] = ((EN_PL<<7)&0x80)|((EN_RCV_SC<<6)&0x40)|((CDMS_INIT_STATUS<<5)&0x20)|((CDMS_HK_MAIN_STATUS<<4)&0x10)|((CDMS_HK_STATUS<<2)&0x0C)|((COM_RX_STATUS<<1)&0x02)|(CDMS_RTC_BL&0x01);
+    CDMS_RAM[3] = CDMS_I2C_ERR_SPEED_COUNTER >> 8;
+    CDMS_RAM[4] = CDMS_I2C_ERR_SPEED_COUNTER;
+    CDMS_RAM[5] = CDMS_I2C_ERR_BAE_COUNTER >> 8;
+    CDMS_RAM[6] = CDMS_I2C_ERR_BAE_COUNTER;
+    CDMS_RAM[7] = CDMS_HK_MAIN_COUNTER >> 8;
+    CDMS_RAM[8] = CDMS_HK_MAIN_COUNTER;
+    CDMS_RAM[9] = PL_MAIN_COUNTER >> 8;
+    CDMS_RAM[10] = PL_MAIN_COUNTER;
+    CDMS_RAM[11] = PL_RCV_SC_DATA_COUNTER >> 8;
+    CDMS_RAM[12] = PL_RCV_SC_DATA_COUNTER;
+    CDMS_RAM[13] = COMRX_RESET_COUNTER >> 8;
+    CDMS_RAM[14] = COMRX_RESET_COUNTER;
+    CDMS_RAM[15] = CDMS_WR_SD_FAULT_COUNTER >> 8;
+    CDMS_RAM[16] = CDMS_WR_SD_FAULT_COUNTER;
+    CDMS_RAM[17] = SD_LIB_WRITES >> 8;
+    CDMS_RAM[18] = SD_LIB_WRITES;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[19+i] = TIME_LATEST_RTC >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[23+i] = TIME_LATEST_I2C_BAE >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[27+i] = TIME_LATEST_I2C_SPEED >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[31+i] = TIME_LATEST_SD_WR >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[35+i] = TIME_LATEST_SD_RD >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[39+i] = TIME_LATEST_SPI_SPEED >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[43+i] = FSC_CURRENT[1] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[47+i] = FSC_LAST[1] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[51+i] = FSC_CURRENT[2] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[55+i] = FSC_LAST[2] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[59+i] = FSC_CURRENT[3] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[63+i] = FSC_LAST[3] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[67+i] = FSC_CURRENT[4] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[71+i] = FSC_LAST[4] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[75+i] = FSC_CURRENT[5] >> i*8;
+    for(int i = 0; i<4; i++)
+        CDMS_RAM[79+i] = FSC_LAST[5] >> i*8;
+    CDMS_RAM[83] = 0x00;
 }
\ No newline at end of file
--- a/CDMS_PL.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/CDMS_PL.h	Tue Jul 12 17:07:17 2016 +0000
@@ -6,7 +6,7 @@
 uint32_t pl_time;
 uint32_t TIME_LATEST_PL=0;
 uint8_t i;
-uint8_t PL_BEE_SW_STATUS=0;
+//extern uint8_t PL_BEE_SW_STATUS=0;
 
 //Serial pc(USBTX,USBRX);
 
--- a/COM_MNG_TMTC.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/COM_MNG_TMTC.h	Tue Jul 12 17:07:17 2016 +0000
@@ -16,6 +16,25 @@
 //DigitalIn tm_status_4m_pl(PIN61); //I2C interrupt to CDMS from PL
 #define RESET_CDMS NVIC_SystemReset()
 
+#define BAE_TC{\
+    tc_ptr->next_TC = NULL;\
+    PUTshort_or_long(tc_ptr,SHORT_TC_CODE);\
+    PUTcrc_pass(tc_ptr,0x1);\
+    PUTexec_status(tc_ptr,0);\
+    tc_ptr->TC_string[0] = 0x01;\
+    tc_ptr->TC_string[1] = 0x60;\
+    tc_ptr->TC_string[2] = 0x81;\
+    tc_ptr->TC_string[3] = 0x21;\
+    tc_ptr->TC_string[4] = 0x00;\
+    tc_ptr->TC_string[5] = 0;\
+    tc_ptr->TC_string[6] = 0;\
+    tc_ptr->TC_string[7] = 0;\
+    tc_ptr->TC_string[8] = 0;\
+    uint16_t crc16 = crc16_gen(tc_ptr->TC_string, 9);\
+    tc_ptr->TC_string[9]  = (crc16 & 0xFF00)>>8;\
+    tc_ptr->TC_string[10] = (crc16 & 0x00FF);\
+}
+
 
 uint8_t received = 0;
 uint16_t mid1;
@@ -31,7 +50,7 @@
 uint8_t ACK_CODE;
 
 void TM_PMS_PL_SCHEDULE(Base_tm* tm_pointer1,uint8_t psc);
-void ACK_L234(Base_tm* tm_pointer_short1,uint8_t ackCode,uint8_t psc);
+void ACK_L234(Base_tm* tm_pointer1,uint8_t ackCode,uint8_t psc);
 
 #define delete_TC(tc_ptr) {\
     if(tc_ptr == gHEAD_NODE_TCL){\
@@ -201,19 +220,19 @@
 /*tm_ptr is the next_TM of a linked list, and should have the value NULL, i.e. tm_ptr should be the next_TM pointer of thte last node */
 
 // CDMS TEAM CODE START
-void ACK_L234(Base_tm* tm_pointer_short1,uint8_t ackCode,uint8_t psc)
+void ACK_L234(Base_tm* tm_pointer1,uint8_t ackCode,uint8_t psc)
 {
-    tm_pointer_short1->TM_string[0] = 0xB0; 
-    tm_pointer_short1->TM_string[1] = psc;
-    tm_pointer_short1->TM_string[2] = ackCode;
-    tm_pointer_short1->TM_string[3] = 0x00;
-    tm_pointer_short1->TM_string[4] = 0x00;
+    tm_pointer1->TM_string[0] = 0xB0; 
+    tm_pointer1->TM_string[1] = psc;
+    tm_pointer1->TM_string[2] = ackCode;
+    tm_pointer1->TM_string[3] = 0x00;
+    tm_pointer1->TM_string[4] = 0x00;
     for(uint8_t i=0;i<6;i++)
-        tm_pointer_short1->TM_string[i+5] = 0;
-    crc16 = crc16_gen(tm_pointer_short1->TM_string,11);
-    tm_pointer_short1->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-    tm_pointer_short1->TM_string[12] = (uint8_t)(crc16&0x00FF);
-    tm_pointer_short1->next_TM = NULL;                                                 
+        tm_pointer1->TM_string[i+5] = 0;
+    crc16 = crc16_gen(tm_pointer1->TM_string,11);
+    tm_pointer1->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
+    tm_pointer1->TM_string[12] = (uint8_t)(crc16&0x00FF);
+    tm_pointer1->next_TM = NULL;                                                 
 }
 void TM_PMS_PL_SCHEDULE(Base_tm *tm_pointer1,uint8_t psc)
 {
@@ -348,26 +367,23 @@
     //uint8_t ACKCODE = 0xB0;
     bool y;
     //gPC.printf("\rTC execution in progress\r\n");
-    Base_tm *tm_pointer = new Long_tm;
+    Base_tm *tm_pointer = new Base_tm;
     Base_tm *tm_ptr = tm_pointer;
-    //Base_tm *tm_ptr = new Long_tm;
-    Base_tm *tm_pointer_short = new Short_tm;
-    Base_tm *tm_ptr_short = tm_pointer_short;
     received = 0;
     switch(GETapid(tc_ptr))             //checking APID's
     {
         case 1: //apid=01 implies it corresponds to bae
         {
             BAE_I2C_mutex.lock();
-            //BAE_TC;
+            BAE_TC;
             gPC.printf("Telecommand is for BAE\r\n");
             gPC.printf("Sending TC to BAE...\r\n"); //interrupt to be sent to the bae
             y = FCTN_I2C_WRITE((char*)tc_ptr->TC_string,TC_LONG_SIZE);                         // Check for SHORT and LONG TC and then send
                 
             if(y==1)                                                            
             {                                                                               
-                ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
-                return tm_ptr_short;
+                ACK_L234(tm_pointer,0x03,GETpacket_seq_count(tc_ptr));
+                return tm_ptr;
             }                                  
             else if(y==0)
             {
@@ -390,17 +406,17 @@
                     }
                     else if(y==1)
                     {
-                        ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));                
+                        ACK_L234(tm_pointer,0x85,GETpacket_seq_count(tc_ptr));                
                         //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
-                        return tm_ptr_short;
+                        return tm_ptr;
                         break;  
                     }
                 }
                 else if(BAE_I2C_GPIO == 0)                                       //name to be changed later
                 {
                     gPC.printf("BAE_I2C_GPIO is not high\r\n");                    
-                    ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
-                    return tm_ptr_short;
+                    ACK_L234(tm_pointer,0x84,GETpacket_seq_count(tc_ptr));
+                    return tm_ptr;
                 }
             }
             BAE_I2C_mutex.unlock();
@@ -411,7 +427,7 @@
             //gPC.printf("Telecommand is for CDMS\r\n"); //apid = 10 corresponds to cdms
             switch(GETservice_type(tc_ptr))
             {
-                /*case 0x60:  //service type = 0x6
+                case 0x60:  //service type = 0x6
                 {
                     gPC.printf("service:MMS\r\n");
                     switch(GETservice_subtype(tc_ptr))      
@@ -422,19 +438,20 @@
                             mid=((uint16_t)(tc_ptr->TC_string[3]<<4))+((uint16_t)(tc_ptr->TC_string[4]));                                                       
                             if(mid!=0x0000 && mid!=0x0001)
                             {
-                                ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }
-                            FCTN_CDMS_RD_L_RAM(tm_pointer);
 
                             tm_pointer->TM_string[0] = 0x30;
                             tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
                             tm_pointer->TM_string[2] = 0xA0;
                             tm_pointer->TM_string[3] = 0x00;                            //spare bits
                             
+                            FCTN_CDMS_RD_L_RAM(tm_pointer);
+                            
                             crc16 = crc16_gen(tm_ptr->TM_string,132);
-                            tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
+                            tm_pointer->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm_pointer->TM_string[133] = (uint8_t)(crc16&0x00FF);
                             tm_pointer->next_TM = NULL;
                             return tm_ptr;
                         }                           
@@ -444,17 +461,17 @@
                             mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
                             //32 bits at a time           
 
-                            if(mid!= && mid!=)                                  //allowable MID values?
+                            if(mid<0 || mid>4)                                  //allowable MID values?
                             {
-                                ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }                                                        
+                            
+                            FCTN_CDMS_WR_S_FLASH(mid,(uint32_t)(tc_ptr->TC_string[5]<<24)+(uint32_t)(tc_ptr->TC_string[6]<<16)+(uint32_t)(tc_ptr->TC_string[7]<<8)+(uint32_t)(tc_ptr->TC_string[8]));                          
 
-                            FCTN_CDMS_WR_S_FLASH(tc_ptr);                            
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));                     //ackCode = ? for success
 
-                            ACK_L234(tm_ptr_short,???,GETpacket_seq_count(tc_ptr));                     //ackCode = ? for success
-
-                            return tm_ptr_short;
+                            return tm_ptr;
                         }
                         case 0x6:
                         {
@@ -464,20 +481,20 @@
 
                             if(mid<0x0002 || mid>0x000A)                                  //allowable MID values?
                             {
-                                ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));                     //ackCode = ? for invalid mid
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));                     //ackCode = ? for invalid mid
+                                return tm_ptr;
                             }    
 
-                            ///Send TM for success after writing onto flash
+                            //Send TM for success after writing onto flash
                             FCTN_CDMS_WR_L_FLASH(mid);
 
-                            return tm_ptr_short;
+                            return tm_ptr;
                         }                                                    
                         default:
                         {
                             gPC.printf("INVALID SERVICE SUBTYPE\r\n");
-                            ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;
+                            ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;
                         }
                     } 
                 }  */                                                                 
@@ -494,13 +511,13 @@
                                 
                                 P_PL_INIT();
 
-                                ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr;
                             }
                         }                                
                         else if(GETpid(tc_ptr)==0x02)
@@ -511,13 +528,13 @@
                                 
                                 P_PL_MAIN();
 
-                                ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x03)
@@ -528,13 +545,13 @@
                                 
                                 P_COM_INIT();
 
-                                ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x04)
@@ -545,13 +562,13 @@
                                 
                                 P_CDMS_HK_MAIN();
 
-                                ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x05)
@@ -562,13 +579,13 @@
                                 
                                 P_PL_RCV_SC_DATA();
 
-                                ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x06)
@@ -579,13 +596,13 @@
                                 
                                 P_CDMS_INIT_SD();
 
-                                ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr_short;
+                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr;
                             }    
                         }
                         else if(GETpid(tc_ptr)==0x11)
@@ -594,8 +611,8 @@
                             
                             CDMS_SD_SW_ON();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                                                       
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                       
                         }
                         else if(GETpid(tc_ptr)==0x21)
                         {       
@@ -603,8 +620,26 @@
                             
                             CDMS_SD_SW_OFF();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;     
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;     
+                        }
+                        else if(GETpid(tc_ptr)==0x12)
+                        {       
+                            //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
+                            
+                            CDMS_RTC_ON();
+
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                       
+                        }
+                        else if(GETpid(tc_ptr)==0x22)
+                        {       
+                            //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
+                            
+                            CDMS_RTC_OFF();
+
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                       
                         }
                         else if(GETpid(tc_ptr)==0x13)
                         {                           
@@ -612,8 +647,8 @@
                             
                             SW_ON_BAE();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                            
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                            
                         }
                         else if(GETpid(tc_ptr)==0x23)
                         {                           
@@ -621,8 +656,8 @@
                             
                             SW_OFF_BAE();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                                                        
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x14)
                         {                            
@@ -630,8 +665,8 @@
                             
                             SW_ON_PL_BEE();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                                                        
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x24)
                         {                   
@@ -639,8 +674,8 @@
                             
                             SW_OFF_PL_BEE();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;    
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;    
                         }
                         else if(GETpid(tc_ptr)==0x15)
                         {                            
@@ -648,8 +683,8 @@
                             
                             SW_ON_PL_EPS();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));     
-                            return tm_ptr_short;                            
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));     
+                            return tm_ptr;                            
                         }
                         else if(GETpid(tc_ptr)==0x25)
                         {                            
@@ -657,8 +692,8 @@
                             
                             SW_OFF_PL_EPS();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                            
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                            
                         }
                         else if(GETpid(tc_ptr)==0x16)
                         {                            
@@ -667,8 +702,8 @@
                             
                             SW_ON_V_A_EN();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                        
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                        
                         }
                         else if(GETpid(tc_ptr)==0x26)
                         {                        
@@ -676,8 +711,8 @@
                             
                             SW_OFF_V_A_EN();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                                                    
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                    
                         }
                         else if(GETpid(tc_ptr)==0x31)
                         {                            
@@ -685,8 +720,8 @@
                             
                             RST_SD();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                                                        
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x33)
                         {                            
@@ -694,8 +729,8 @@
                             
                             RST_BAE();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                            
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                            
                         }
                         else if(GETpid(tc_ptr)==0x34)
                         {                            
@@ -703,24 +738,25 @@
                             
                             RST_PL_BEE();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                                                        
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x38)
                         {
                             //gPC.printf()
                             
                             CDMS_INTERNAL_RESET();
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;
                         }
                         else if(GETpid(tc_ptr)==0x40)
                         {                         
                             //gPC.printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
                             
-                            RST_HK_COUNTER();
+                            STANDBY_PRCS();         //////// Need to Complete this function
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;                                                    
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;                                                    
                         }
                         else if(GETpid(tc_ptr)==0x41)
                         {                            
@@ -728,22 +764,22 @@
                             
                             RST_HK_COUNTER();
 
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr_short;    
+                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr;    
                         }
                         else if(GETpid(tc_ptr)==0xF1)
                         {          
                             //gPC.printf("TC_CDMS_RD_RTC\r\n"); // call PWR_SWCH_ON function
                             
-                            /*uint32_t time_temp = FCTN_CDMS_RD_RTC();                        //RTC_RD_EROR has to incorporated
+                            uint32_t time_temp = FCTN_CDMS_RD_RTC();                        //RTC_RD_EROR has to incorporated
                             tm_pointer->TM_string[0] = 0x78;     
                             tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                            tm_pointer->TM_string[2] = 0xA0;
+                            tm_pointer->TM_string[2] = 0xA0;    // ACK CODE
                             tm_pointer->TM_string[3] = 0x00;
-                            tm_pointer->TM_string[4] = (uint8_t)((time & 0xFF000000)>>24);
-                            tm_pointer->TM_string[5] = (uint8_t)((time & 0x00FF0000)>>16);
-                            tm_pointer->TM_string[6] = (uint8_t)((time & 0x0000FF00)>>8);
-                            tm_pointer->TM_string[7] = (uint8_t)((time & 0x000000FF));
+                            tm_pointer->TM_string[4] = (uint8_t)((time_temp & 0xFF000000)>>24);
+                            tm_pointer->TM_string[5] = (uint8_t)((time_temp & 0x00FF0000)>>16);
+                            tm_pointer->TM_string[6] = (uint8_t)((time_temp & 0x0000FF00)>>8);
+                            tm_pointer->TM_string[7] = (uint8_t)((time_temp & 0x000000FF));
                             for(uint8_t i=0;i<124;i++)
                             {
                                 tm_pointer->TM_string[i+8] = 0x00;
@@ -751,27 +787,50 @@
                             crc16 = crc16_gen(tm_ptr->TM_string,132);
                             tm_pointer->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
                             tm_pointer->TM_string[133] = (uint8_t)(crc16&0x00FF);
-                            tm_pointer->next_TM = NULL;                 
-                            return tm_ptr; */                                                    //incomplete
+                            tm_pointer->next_TM = NULL;                                                                     //incomplete
+                            return tm_ptr;
                         }
                         else if(GETpid(tc_ptr)==0xF0)
                         {
                             uint8_t statusbits[64];
-                            CDMS_RD_SD_HK(statusbits);
-                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+                            if( CDMS_RD_SD_HK(statusbits) != 0){
+                                ACK_L234(tm_pointer,0xC0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr;
+                            }
+                            else
+                            {
+                                uint32_t time_temp = FCTN_CDMS_RD_RTC();                        //RTC_RD_EROR has to incorporated
+                                tm_pointer->TM_string[0] = 0x78;     
+                                tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
+                                tm_pointer->TM_string[2] = 0xA0;    // ACK CODE
+                                tm_pointer->TM_string[3] = 0x00;
+                                for(int i=4;i<64;i++)
+                                {
+                                    tm_pointer->TM_string[i+4] = (i<68)?statusbits[i]:0x00;
+                                }
+                                for(uint8_t i=68;i<132;i++)
+                                {
+                                    tm_pointer->TM_string[i] = 0x00;
+                                }
+                                crc16 = crc16_gen(tm_ptr->TM_string,132);
+                                tm_pointer->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+                                tm_pointer->TM_string[133] = (uint8_t)(crc16&0x00FF);
+                                tm_pointer->next_TM = NULL;                                                                     //incomplete
+                                return tm_ptr;
+                            }
                         }                               
                         else 
                         {
                             gPC.printf("INVALID FID\r\n");
-                            ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
-                            return tm_ptr_short;
+                            ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));  
+                            return tm_ptr;
                         }
                     }
                     else 
                     {
                         gPC.printf("INVALID SERVICE SUBTYPE\r\n");
-                        ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
-                        return tm_ptr_short;
+                        ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));  
+                        return tm_ptr;
                     }                                    
                 }
                 case 0x70:
@@ -871,15 +930,15 @@
                     else
                     {
                         gPC.printf("INVALID SERVICE SUBTYPE\r\n");
-                        ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
-                        return tm_ptr_short;
+                        ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));  
+                        return tm_ptr;
                     }
                 }
                 default:
                 {
                     gPC.printf("ILLEGAL TC"); 
-                    ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
-                    return tm_ptr_short;                    
+                    ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
+                    return tm_ptr;                    
                 }
             }
         }
@@ -895,8 +954,8 @@
                 
             if(y==1)                                                            
             {                                                                               
-                ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
-                return tm_ptr_short;
+                ACK_L234(tm_pointer,0x03,GETpacket_seq_count(tc_ptr));
+                return tm_ptr;
                 break;
             }                                  
             else if(y==0)
@@ -921,25 +980,25 @@
                     }
                     else if(y==1)
                     {
-                        ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));                
+                        ACK_L234(tm_pointer,0x85,GETpacket_seq_count(tc_ptr));                
                         //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
-                        return tm_ptr_short;
+                        return tm_ptr;
                         break;  
                     }
                 }
                 else if(PL_I2C_Intr == 0)                                       //name to be changed later
                 {
                     gPC.printf("PL_I2C_Intr is not high\r\n");                    
-                    ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
-                    return tm_ptr_short;
+                    ACK_L234(tm_pointer,0x84,GETpacket_seq_count(tc_ptr));
+                    return tm_ptr;
                 }
             }                             
         }
         default:    //invalid TC
         {
             gPC.printf("INVALID TC\r\n");                 
-            ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
-            return tm_ptr_short;
+            ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
+            return tm_ptr;
         }
     }
     return;
--- a/DefinitionsAndGlobals.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/DefinitionsAndGlobals.h	Tue Jul 12 17:07:17 2016 +0000
@@ -264,19 +264,22 @@
 DigitalIn COMRX_OC_FAULT (PIN68);
 DigitalIn COMTX_OC_FAULT (PIN69);
 DigitalIn BAE_OC_FAULT (PIN92);
-DigitalIn PL_GPIO_1_STATUS (PIN71);
-DigitalIn PL_GPIO_2_STATUS (PIN81);
-DigitalIn PL_GPIO_3_STATUS (PIN80);
+Digitalout PL_GPIO_1_STATUS (PIN71);
+DigitalOut PL_GPIO_2_STATUS (PIN81);
+DigitalOut PL_GPIO_3_STATUS (PIN80);
 DigitalIn PL_BEE_SW_OC_FAULT (PIN91);
 DigitalIn PL_EPS_LATCH_SW_OC_FAULT (PIN5);
-DigitalIn V_D_EN_STATUS (PIN56);
+DigitalOut EPS_V_C_EN_STATUS (PIN72);
+DigitalOut EPS_V_D_EN_STATUS (PIN56);
 
 
 DigitalIn SD_OC_FAULT (PIN90);
 DigitalOut SD_SW_EN_DS (PIN97);
 DigitalOut BAE_SW_EN_DS (PIN47);
-DigitalOut TRXY_PWR_CNTRL (PIN84);
-DigitalOut TRZ_PWR_CNTRL (PIN88);
+DigitalOut TRXY_EN (PIN84);
+DigitalOut TRZ_EN (PIN88);
+DigitalOut V_A_EN (PIN99);
+DigitalOut Sys_pwr_rst (PIN96);
 
 DigitalOut PYLD_DFF (PIN73);
 DigitalOut PYLD_DFF_CLK (PIN65);
@@ -306,6 +309,8 @@
 uint16_t COMRX_RESET_COUNTER;
 uint16_t PL_MAIN_COUNTER;
 uint16_t PL_RCV_SC_DATA_COUNTER;
+uint16_t CDMS_WR_SD_FAULT_COUNTER;
+uint16_t SD_LIB_WRITES = 0;
 
 //CDMS RAM parameters
 uint8_t PL_INIT_STATUS;
@@ -319,8 +324,29 @@
 uint8_t COM_TX;
 uint8_t COM_TX_STATUS;
 uint8_t COM_MNG_TMTC;
-uint8_t CDMS_STANDBY_HK;
-uint8_t CDMS_STANDBY_PL;
+uint8_t EN_CDMS_HK;
+uint8_t EN_PL;
+uint8_t EN_RCV_SC;
 uint8_t CDMS_INIT_STATUS;
 uint8_t CDMS_HK_STATUS;
-uint8_t CDMS_RTC_BL;
\ No newline at end of file
+uint8_t COM_RX_STATUS;
+uint8_t CDMS_RTC_BL;
+
+//CDMS 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;
+uint8_t PL_EPS_LATCH_SW_EN;
+uint8_t RTC_INIT_STATUS;
+uint8_t CDMS_RTC_DISABLE;
+uint16_t CDMS_RESET_COUNTER;
+uint32_t TIME_LATEST_CDSMS_RESET;
+uint16_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;
+uint16_t SD_LIB_BLK_CURRENT;
\ No newline at end of file
--- a/FMS_all.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/FMS_all.h	Tue Jul 12 17:07:17 2016 +0000
@@ -1,3 +1,9 @@
+
+// Includes MMS RAM functions also
+
+/*===================================================FMS Functions=================================================*/
+
+void STANDBY_PRCS();
 
 //Run processes
 void P_PL_INIT();
@@ -27,17 +33,22 @@
 void SW_RST_PL_BEE();
 void RST_BAE();
 void RST_PL_BEE();
-void CDMS_INTERNAL_RESET();
+void CDMS_RESET();
 void SYS_PWR_RESET();  // Have to be decided with EPS team.
 void EPS_V_A_EN();
 void EPS_V_C_EN();
 
 void RST_HK_COUNTER();
-uint8_t CDMS_RD_SD_HK(uint8_t *);
+int8_t CDMS_RD_SD_HK(uint8_t *);
 void CDMS_RD_RTC(uint64_t *);
-void CDMS_CALIB_RTC();
-void CDMS_RESET();
+void CDMS_CALIB_RTC(uint8_t *);
+void TOTAL_RESET_WITH_CDMS();
+
 
+void STANDBY_PRCS()
+{
+    
+}
 
 void P_PL_INIT()
 {
@@ -46,7 +57,7 @@
 
 void P_PL_MAIN()
 {
-   // FCTN_CDMS_PL_MAIN((void *)NULL);
+   FCTN_CDMS_PL_MAIN((void *)NULL);
 }
 
 void P_COM_INIT()
@@ -81,12 +92,23 @@
 
 void CDMS_RTC_ON()
 {
-    
+    //FCTN_CDMS_INIT_RTC();
+    SPI_mutex.lock();
+    gCS_RTC=1;
+    gCS_RTC=0;
+    spi.write(0x81); //register address with write flag
+    spi.write(0x00);//disabling stop bit in the seconds register
+    SPI_mutex.unlock();
 }
 
 void CDMS_RTC_OFF()
 {
-    
+    SPI_mutex.lock();
+    gCS_RTC=1;
+    gCS_RTC=0;
+    spi.write(0x81); //register address with write flag
+    spi.write(0x80);//enabling stop bit in the seconds register
+    SPI_mutex.unlock();
 }
 
 void SW_ON_BAE()
@@ -145,14 +167,12 @@
 
 void SW_ON_V_A_EN()
 {
-    TRXY_PWR_CNTRL = 1;
-    TRZ_PWR_CNTRL = 1;
+    V_A_EN = 1;
 }
 
 void SW_OFF_V_A_EN()
 {
-    TRXY_PWR_CNTRL = 0;
-    TRZ_PWR_CNTRL = 0;    
+    V_A_EN = 0;
 }
 
 void RST_SD()
@@ -197,16 +217,14 @@
 
 void SYS_PWR_RESET()  // Have to be decided with EPS team.
 {
-    
+    sys_pwr_rst = 1;
 }
 
 void EPS_V_A_EN()     // This is a reset function
 {
-    TRXY_PWR_CNTRL = 0;
-    TRZ_PWR_CNTRL = 0;
+    V_A_EN = 0;
     wait_ms(10);
-    TRXY_PWR_CNTRL = 1;
-    TRZ_PWR_CNTRL = 1;
+    V_A_EN = 1;
 }
 
 void EPS_V_C_EN()     // This is a reset function
@@ -221,25 +239,19 @@
     firstCount = true;
 }
 
-uint8_t CDMS_RD_SD_HK(uint8_t *sd_statusbits)
+int8_t CDMS_RD_SD_HK(uint8_t *sd_statusbits)
 {
-    uint8_t p;
-    uint8_t ACK;
+    int8_t p;
     if(SD_SW_EN_DS != DEVICE_POWERED)
     {
-        ACK = 0x89;
         SD_RD_ERROR = 1;
-        //Generate TM
+        p = 1;
     }
     else
     {
         p = disk_read_statusbits(sd_statusbits);
-        if(p == 0)
-            ACK = 0xA0;
-        else
-            ACK = 0x89;
     }
-    return ACK;
+    return p;
 }
 
 void CDMS_RD_RTC(uint64_t *time)
@@ -247,9 +259,39 @@
     *time = FCTN_CDMS_RD_RTC();
 }
 
-void CDMS_CALIB_RTC()
+void CDMS_CALIB_RTC(uint64_t *time)
 {
+    SPI_mutex.lock();
+    gCS_RTC=1;
+    spi.format(8,0);
+    spi.frequency(1000000);
+ 
+    gCS_RTC=0;
+    spi.write(0x82);
+    spi.write(time[0]);//set minutes
+    gCS_RTC=1;
+ 
+    gCS_RTC=0;
+    spi.write(0x83); 
+    spi.write(time[1] & 0x3F); //set hours
+    gCS_RTC=1;
     
+    gCS_RTC=0;
+    spi.write(0x85); 
+    spi.write(time[2] & 0x3F); //set date
+    gCS_RTC=1;
+    
+    gCS_RTC=0;
+    spi.write(0x86); 
+    spi.write(time[3] & 0x1F); //set month
+    gCS_RTC=1;
+    
+    gCS_RTC=0;
+    spi.write(0x87); 
+    spi.write(time[4]); //set year to 00(2000)
+    gCS_RTC=1;
+    gPC.puts("\n\r rtc initalised \n");
+    SPI_mutex.unlock();
 }
 
 void CDMS_RESET()
@@ -262,4 +304,16 @@
 {
     
 }
-*/
\ No newline at end of file
+*/
+
+//===============================MMS RAM functions==================================
+
+void FCTN_CDMS_RD_L_RAM(Base_tm *);
+
+void FCTN_CDMS_RD_L_RAM(Base_tm *tm_pointer)
+{
+    for(int i=4;i<132;i++)
+    tm_pointer->TM_string[i] = CDMS_HK_FRAME[i-4];
+}
+
+
--- a/Flash.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/Flash.h	Tue Jul 12 17:07:17 2016 +0000
@@ -1,28 +1,83 @@
 #include "FreescaleIAP.h"
 
-int strt_add = flash_size() - (4*SECTOR_SIZE);  
-uint32_t flasharray[256+(3*1024)];
-char *nativeflash = (char*)strt_add;
+int strt_add = flash_size() - (2*SECTOR_SIZE);
+uint32_t flasharray[32];    //256+(3*1024)
+uint32_t INITIAL_FLASH[32];
+/*corrected*/
+int *nativeflash = (int*)strt_add;
+
+void FLASH_INI()
+{
+    uint32_t read[32]; 
+    for(int i=0;i<32;i++)
+        {  
+            read[i] = nativeflash[i];
+        }
+            
+    if(read[0] == -1)
+        for(int j=0;j<32;j++)
+            {   
+                FCTN_CDMS_WR_FLASH(j,INITIAL_FLASH[j]); 
+            } 
+    else
+       {
+        for(int j=0;j<32;j++)
+            {   
+                read[j] = nativeflash[j];
+            }
+            EPS_V_A_EN_STATUS = read[0] >> 31;
+            BAE_SW_STATUS   = (read[0] << 1) >> 30; 
+            CDMS_SD_SW_STATUS = (read[0] << 3) >> 30;
+            PL_BEE_SW_STATUS = (read[0] << 5) >> 30;
+            PL_EPS_LATCH_SW_EN = (read[0] << 7) >> 31;
+            RTC_INIT_STATUS = (read[0] << 8) >> 30;
+            CDMS_RTC_DISABLE = (read[0] << 10) >> 31;
+            CDMS_RESET_COUNTER = read[0];
+            TIME_LATEST_CDSMS_RESET = read[1];
+            COM_TC_BYTES_LIMIT = read[2] >> 16;
+            COM_RX_CURRENT_MAX = (read[2] << 16) >> 24;
+            COM_RX_DISABLE_TIMEOUT = read[2];
+            COM_PA_TMP_HIGH = read[3] >> 24;
+            COM_PA_RECOVERY_TIMEOUT = (read[3] << 8) >> 24;
+            COM_SESSION_TIMEOUT = (read[3] << 16) << 24;
+            COM_RSSI_MIN = read[3];
+            SD_LIB_BLK_CURRENT = read[4] >> 16;
+        }
+    
+}
 
 /*Writing to the Flash*/
-void FCTN_CDMS_WR_FLASH(uint16_t j,uint32_t block)
+void FCTN_CDMS_WR_FLASH(uint16_t j,uint32_t datablock)  //j-position to write address  ; fdata - flash data to be written
 {
-    for(int64_t i=0;i<(256+(3*1024));i++)
+    for(int i=0;i<5;i++)
     {
         flasharray[i]=nativeflash[i];
     }
-    flasharray[j]=block;
+    flasharray[j]=datablock;
     erase_sector(strt_add);
-    program_flash(strt_add, (char*)&flasharray,4*(256+(1024*3)));
+    program_flash(strt_add, (char*)flasharray,32);
 }
 /*End*/
 
-/*Reading from Flash*/
-uint32_t FCTN_CDMS_RD_FLASH(uint16_t j)
+/*===================================================MMS Functions=================================================*/
+
+void WRITE_TO_FLASH(uint8_t *);
+
+void WRITE_TO_FLASH(uint8_t *flash)
 {
-    for(int64_t i=0;i<(256+(3*1024));i++)
-    {
-        flasharray[i]=nativeflash[i];
-    }
-    return flasharray[j];
+    uint32_t FLASH[5];
+    FLASH[0] = ((uint32_t)flash[0] << 24) | ((uint32_t)flash[1] << 16) | ((uint32_t)flash[2] << 8) | ((uint32_t)flash[3]); 
+    FLASH[1] = ((uint32_t)flash[4] << 24) | ((uint32_t)flash[5] << 16) | ((uint32_t)flash[6] << 8) | ((uint32_t)flash[7]);
+    FLASH[2] = ((uint32_t)flash[8] << 24) | ((uint32_t)flash[9] << 16) | ((uint32_t)flash[10] << 8) | ((uint32_t)flash[11]);
+    FLASH[3] = ((uint32_t)flash[12] << 24) | ((uint32_t)flash[13] << 16) | ((uint32_t)flash[14] << 8) | ((uint32_t)flash[15]);
+    FLASH[4] = ((uint32_t)flash[16] << 24) | ((uint32_t)flash[17] << 16) | ((uint32_t)flash[18] << 8) | ((uint32_t)flash[19]);
+    erase_sector(strt_add);
+    program_flash(strt_add, (char*)FLASH,160);
+}
+
+void FCTN_CDMS_WR_S_FLASH(uint16_t , uint32_t);
+
+void FCTN_CDMS_WR_S_FLASH(uint16_t mid, uint32_t datavalue)
+{
+    
 }
\ No newline at end of file
--- a/RESET_functions.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/RESET_functions.h	Tue Jul 12 17:07:17 2016 +0000
@@ -10,12 +10,13 @@
 }
 
 void RESET_RTC()
-{   
+{
+    SPI_mutex.lock();
     gCS_RTC=1;
     gCS_RTC=0;
     spi.write(0x81); //register address with write flag
     spi.write(0x80);//enabling stop bit in the seconds register
-
+ 
     gCS_RTC=1;
     gCS_RTC=0;
     spi.write(0x81);
@@ -33,6 +34,5 @@
     gCS_RTC=0;
     spi.write(0x8F);
     spi.write(0x00);
-}
-
-
+    SPI_mutex.unlock();
+}
\ No newline at end of file
--- a/cdms_rtc.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/cdms_rtc.h	Tue Jul 12 17:07:17 2016 +0000
@@ -12,6 +12,11 @@
     spi.write(0x81); //register address with write flag
     spi.write(0x80);//enabling stop bit in the seconds register
     gCS_RTC=1;
+    
+    gCS_RTC=0;
+    spi.write(0x81);
+    spi.write(0x00);//disabling the stop bit to restart the oscillator 
+    gCS_RTC=1;
         
     //clearing the halt bit 
     gCS_RTC=1;
@@ -31,12 +36,6 @@
     spi.write(0x80|0x03);
     spi.write(0x00);
     gCS_RTC=1;
-
-    
-    gCS_RTC=0;
-    spi.write(0x81);
-    spi.write(0x00);//disabling the stop bit to restart the oscillator 
-    gCS_RTC=1;
     
     gCS_RTC=0;
     spi.write(0x80); 
--- a/cdms_sd.h	Tue Jul 12 11:10:48 2016 +0000
+++ b/cdms_sd.h	Tue Jul 12 17:07:17 2016 +0000
@@ -31,7 +31,6 @@
 uint32_t LOG_FIRST =5001;
 uint32_t LOG_LAST=6000;
 uint32_t SD_MNG_SECT=7000;
-uint16_t SD_LIB_WRITES = 0;
 
 extern uint8_t SD_INIT_FLAGS;
 
--- a/main.cpp	Tue Jul 12 11:10:48 2016 +0000
+++ b/main.cpp	Tue Jul 12 17:07:17 2016 +0000
@@ -1,7 +1,6 @@
 
 // TESTING PUSH PULL IN MAIN CPP
 
-
 #include "mbed.h"
 
 #define DEBUG 1
@@ -27,8 +26,8 @@
 #include "adf.h"
 #include "COM_RCV_TC.h"
 //#include "Flash.h"
+#include "CDMS_PL.h"
 #include "FMS_all.h"
-#include "CDMS_PL.h"
 #include "COM_MNG_TMTC.h"
 #include "COM_POWER_ON_TX.h"
 #include "COM_POWER_OFF_TX.h"
@@ -99,7 +98,7 @@
     gRX_COUNT = 0;
     RX1M.attach(&rx_read, Serial::RxIrq);
     
-    gPC.baud(1200);//changed for bypassing COM
+    gPC.baud(115200);//changed for bypassing COM
     
     // COMMON SPI
     spi.format(8,0);
@@ -110,12 +109,12 @@
     gCS_RTC = 1;
     gCS_ADF = 1;
     
-    //FCTN_CDMS_INIT_RTC();/* rtc initialization*/
-    FCTN_CDMS_SD_INIT();/* sd card initialization*/
+    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
+    //uint8_t test[512] = {0};
+    //disk_write(test,7000); //to be used only just before launch
     
     #if DEBUG
     gPC.puts("welcome to mng_tmtc\r\n");
@@ -143,13 +142,11 @@
     
     master.frequency(400000);
     
-    HK_counter = new RtosTimer(hk_isr, osTimerPeriodic,(void * )NULL);
-    HK_counter->start(10000);
+    /*HK_counter = new RtosTimer(hk_isr, osTimerPeriodic,(void * )NULL);
+    HK_counter->start(10000);*/
     
-    gPC.printf("HK counter started");
-    
-    /*PL_wo_dma = new RtosTimer(payload_isr_fun_dma, osTimerPeriodic,(void * )NULL);
-    PL_wo_dma->start(6000);*///
+    PL_wo_dma = new RtosTimer(payload_isr_fun_dma, osTimerPeriodic,(void * )NULL);
+    PL_wo_dma->start(6000);//
     //gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);