FM

Dependencies:   SimpleDMA eeprom mbed-rtos mbed FreescaleIAP

Fork of CDMS_CODE by shubham c

Revision:
266:ae588e75cfa4
Parent:
264:f7d8f9f361e3
Child:
270:9dacc1d8459a
Child:
275:605dd29161ad
Child:
281:d1c9ae3605a3
Child:
289:9bd62b69874c
--- a/COM_MNG_TMTC.h	Thu Jul 14 23:05:09 2016 +0000
+++ b/COM_MNG_TMTC.h	Fri Jul 15 14:59:27 2016 +0000
@@ -348,11 +348,6 @@
     //uint8_t ACKCODE = 0xB0;
     bool y;
     //gPC.printf("\rTC execution in progress\r\n");
-    Base_tm *tm_pointer = new Long_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
     {
@@ -366,44 +361,46 @@
                 
             if(y==1)                                                            
             {        
-                gPC.printf("BAE write fail\r\n");                                                                       
+                gPC.printf("Write fail\r\n");
+                Base_tm *tm_ptr_short = new Short_tm;
                 ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
                 return tm_ptr_short;
             }                                  
             else if(y==0)
             {
-                gPC.printf("BAE write succe\r\n");
+                gPC.printf("Write success\r\n");
                 //wait(0.2);
                 int poll=0;
-                while(poll<9000 && BAE_I2C_GPIO==0)
+                while(poll<20000 && BAE_I2C_GPIO==0)
                 {
                     wait_us(10);
                     poll+=1;
                 }
-                //while(BAE_I2C_GPIO==0){}   
-                if(BAE_I2C_GPIO == 1)                                            //name to be changed later
+                if(BAE_I2C_GPIO == 1)
                 {
-                    gPC.printf("BAE_I2C_GPIO is high\r\n");
-                    
-                    y=FCTN_I2C_READ((char*)tm_pointer->TM_string,TM_LONG_SIZE);            //rify later about the size
+                    //gPC.printf("BAE_I2C_GPIO is high\r\n");
+                    Base_tm *tm_ptr = new Long_tm;
+                    y=FCTN_I2C_READ((char*)tm_ptr->TM_string,TM_LONG_SIZE);
                     if(y==0)
                     {
-                        gPC.printf("BAE read success\r\n");
-                        tm_pointer->next_TM=NULL;
+                        gPC.printf("Read success\r\n");
+                        tm_ptr->next_TM=NULL;
                         return tm_ptr;
                     }
                     else if(y==1)
                     {
-                        gPC.printf("BAE read fail\r\n");
+                        delete tm_ptr;
+                        Base_tm *tm_ptr_short = new Short_tm;
+                        gPC.printf("Read fail\r\n");
                         ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));                
                         //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
                         return tm_ptr_short;
-                        break;  
                     }
                 }
-                else if(BAE_I2C_GPIO == 0)                                       //name to be changed later
+                else if(BAE_I2C_GPIO == 0)
                 {
                     gPC.printf("BAE_I2C_GPIO is not high\r\n");                    
+                    Base_tm *tm_ptr_short = new Short_tm;
                     ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
                     return tm_ptr_short;
                 }
@@ -427,19 +424,20 @@
                             mid=((uint16_t)(tc_ptr->TC_string[3]<<4))+((uint16_t)(tc_ptr->TC_string[4]));                                                       
                             if(mid!=0x0000 && mid!=0x0001)
                             {
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
-
-                            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);
+                            Base_tm *tm_ptr = new Long_tm;
+                            tm_ptr->TM_string[0] = 0x30;
+                            tm_ptr->TM_string[1] = GETpacket_seq_count(tc_ptr);
+                            tm_ptr->TM_string[2] = 0xA0;
+                            tm_ptr->TM_string[3] = 0x00;                            //spare bits
+                            FCTN_CDMS_RD_L_RAM(tm_ptr);
                             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;
+                            tm_ptr->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm_ptr->TM_string[133] = (uint8_t)(crc16&0x00FF);
+                            tm_ptr->next_TM = NULL;
                             return tm_ptr;
                         }                           
                         case 0x5:                           // change the cases appropriately
@@ -447,9 +445,10 @@
                             //gPC.printf("WRITE ON SHORT_FLASH_MEMORY\r\n");                          
                             mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
                             //32 bits at a time           
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             if(mid == 0x0101 || mid==0x0102 || mid == 0x0103 || mid == 0x0100)                                  //allowable MID values?
                             {
+                                
                                 ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                                                        
@@ -477,6 +476,7 @@
                                     flasharray_thres[z] = scp_threshold_m0[z+8];
                                 erase_sector(strt_add_thres);
                                 program_flash(strt_add_thres, (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -490,6 +490,7 @@
                                     flasharray_thres[z] = scp_threshold_m0[z+40];
                                 erase_sector(strt_add_thres+SECTOR_SIZE);
                                 program_flash(strt_add_thres+SECTOR_SIZE, (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -503,6 +504,7 @@
                                     flasharray_thres[z] = scp_threshold_m1[z];
                                 erase_sector(strt_add_thres+(2*SECTOR_SIZE));
                                 program_flash(strt_add_thres+(2*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -516,6 +518,7 @@
                                     flasharray_thres[z] = scp_threshold_m1[z+32];
                                 erase_sector(strt_add_thres+(3*SECTOR_SIZE));
                                 program_flash(strt_add_thres+(3*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -527,9 +530,9 @@
                                 scp_threshold_m0_1[6] = tc_ptr->TC_string[8];
                                 for(uint8_t z=0;z<5;z++)
                                     scp_threshold_m0_1[z] = tc_ptr->TC_string[z+9];
-                                //scp_sfp_threshold_m0_2[0] = tc_ptr->TC_string[14];
-                                //scp_sfp_threshold_m0_2[1] = tc_ptr->TC_string[15];
-                                //scp_sfp_threshold_m0_2[2] = tc_ptr->TC_string[16];
+                                scp_sfp_threshold_m0_2[0] = tc_ptr->TC_string[14];
+                                scp_sfp_threshold_m0_2[1] = tc_ptr->TC_string[15];
+                                scp_sfp_threshold_m0_2[2] = tc_ptr->TC_string[16];
                                 //int strt_add = flash_size() - (7*SECTOR_SIZE);
                                 //uint32_t flasharray[32] = {0};
                                 flasharray_thres[0] = scp_threshold_m0_1[7];
@@ -538,11 +541,12 @@
                                 flasharray_thres[3] = scp_threshold_m0_1[6];
                                 for(uint8_t z=0;z<5;z++)
                                     flasharray_thres[z+4] = scp_threshold_m0_1[z];
-                                //flasharray_thres[9]  = scp_sfp_threshold_m0_2[0];
-                                //flasharray_thres[10] = scp_sfp_threshold_m0_2[1];
-                                //flasharray_thres[11] = scp_sfp_threshold_m0_2[2];
+                                flasharray_thres[9]  = scp_sfp_threshold_m0_2[0];
+                                flasharray_thres[10] = scp_sfp_threshold_m0_2[1];
+                                flasharray_thres[11] = scp_sfp_threshold_m0_2[2];
                                 erase_sector(strt_add_thres+(4*SECTOR_SIZE));
                                 program_flash(strt_add_thres+(4*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -560,6 +564,7 @@
                                     flasharray_thres[z] = sfp_threshold_m0[z+8];
                                 erase_sector(strt_add_thres+(5*SECTOR_SIZE));
                                 program_flash(strt_add_thres+(5*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -573,6 +578,7 @@
                                     flasharray_thres[z] = sfp_threshold_m0[z+40];
                                 erase_sector(strt_add_thres+(6*SECTOR_SIZE));
                                 program_flash(strt_add_thres+(6*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -586,6 +592,7 @@
                                     flasharray_thres[z] = sfp_threshold_m1[z];
                                 erase_sector(strt_add_thres+(7*SECTOR_SIZE));
                                 program_flash(strt_add_thres+(7*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }
@@ -599,6 +606,7 @@
                                     flasharray_thres[z] = sfp_threshold_m1[z+32];
                                 erase_sector(strt_add_thres+(8*SECTOR_SIZE));
                                 program_flash(strt_add_thres+(8*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                        
@@ -606,6 +614,7 @@
                         default:
                         {
                             gPC.printf("INVALID SERVICE SUBTYPE\r\n");
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;
                         }
@@ -618,12 +627,13 @@
                     {                               
                         if(GETpid(tc_ptr)==0x01)
                         {
+                            Base_tm *tm_ptr_short = new Short_tm;
                             if(CDMS_STANDBY==1)
                             {   
                                 //gPC.printf("TC_PL_INIT\r\n");                         // call PWR_SWCH_ON function
                                 
                                 P_PL_INIT();
-
+                                    
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                
@@ -635,6 +645,7 @@
                         }                                
                         else if(GETpid(tc_ptr)==0x02)
                         {
+                            Base_tm *tm_ptr_short = new Short_tm;
                             if(CDMS_STANDBY==1)
                             {   
                                 //gPC.printf("TC_PL_MAIN\r\n");                         // call PWR_SWCH_ON function
@@ -652,6 +663,7 @@
                         }
                         else if(GETpid(tc_ptr)==0x03)
                         {                            
+                            Base_tm *tm_ptr_short = new Short_tm;
                             if(CDMS_STANDBY==1)
                             {   
                                 //gPC.printf("PL_COM_INIT\r\n");                        // call PWR_SWCH_ON function
@@ -669,6 +681,7 @@
                         }
                         else if(GETpid(tc_ptr)==0x04)
                         {                            
+                            Base_tm *tm_ptr_short = new Short_tm;
                             if(CDMS_STANDBY==1)
                             {   
                                 //gPC.printf("TC_P_CDMS_HK_MAIN\r\n"); // call PWR_SWCH_ON function
@@ -686,6 +699,7 @@
                         }
                         else if(GETpid(tc_ptr)==0x05)
                         {                            
+                            Base_tm *tm_ptr_short = new Short_tm;
                             if(CDMS_STANDBY==1)
                             {   
                                 //gPC.printf("TC_SW_ON_SD\r\n");                        // call PWR_SWCH_ON function
@@ -703,6 +717,7 @@
                         }
                         else if(GETpid(tc_ptr)==0x06)
                         {                            
+                            Base_tm *tm_ptr_short = new Short_tm;
                             if(CDMS_STANDBY==1)
                             {   
                                 //gPC.printf("TC_SW_ON_RTC\r\n"); // call PWR_SWCH_ON function
@@ -723,7 +738,7 @@
                             //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
                             
                             CDMS_SD_SW_ON();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                       
                         }
@@ -732,7 +747,7 @@
                             //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
                             
                             CDMS_SD_SW_OFF();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;     
                         }
@@ -741,7 +756,7 @@
                             //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
                             
                             CDMS_RTC_ON();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                       
                         }
@@ -750,7 +765,7 @@
                             //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
                             
                             CDMS_RTC_OFF();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;
                         } 
@@ -759,7 +774,7 @@
                             //gPC.printf("TC_SW_ON_BAE\r\n"); // call PWR_SWCH_ON function
                             
                             SW_ON_BAE();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                            
                         }
@@ -768,7 +783,7 @@
                             //gPC.printf("TC_SW_OFF_BAE\r\n"); // call PWR_SWCH_ON function
                             
                             SW_OFF_BAE();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                        
                         }
@@ -777,7 +792,7 @@
                             //gPC.printf("TC_SW_ON_PL_BEE\r\n"); // call PWR_SWCH_ON function
                             
                             SW_ON_PL_BEE();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                        
                         }
@@ -786,7 +801,7 @@
                             //gPC.printf("TC_SW_OFF_PL_BEE\r\n"); // call PWR_SWCH_ON function
                             
                             SW_OFF_PL_BEE();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;    
                         }
@@ -795,7 +810,7 @@
                             //gPC.printf("TC_SW_ON_PL_EPS\r\n"); // call PWR_SWCH_ON function
                             
                             SW_ON_PL_EPS();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));     
                             return tm_ptr_short;                            
                         }
@@ -804,7 +819,7 @@
                             //gPC.printf("TC_SW_OFF_PL_EPS\r\n"); // call PWR_SWCH_ON function
                             
                             SW_OFF_PL_EPS();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                            
                         }
@@ -814,7 +829,7 @@
                             //gPC.printf("TC_SW_ON_V_A_EN\r\n"); // call PWR_SWCH_ON function
                             
                             SW_ON_V_A_EN();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                        
                         }
@@ -823,7 +838,7 @@
                             //gPC.printf("TC_SW_OFF_V_A_EN\r\n"); // call PWR_SWCH_ON function
                             
                             SW_OFF_V_A_EN();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                    
                         }
@@ -832,7 +847,7 @@
                             //gPC.printf("TC_RST_SD\r\n"); // call PWR_SWCH_ON function
                             
                             RST_SD();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                        
                         }
@@ -841,7 +856,7 @@
                             //gPC.printf("TC_RST_BAE\r\n"); // call PWR_SWCH_ON function
                             
                             RST_BAE();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                            
                         }
@@ -850,7 +865,7 @@
                             //gPC.printf("TC_RST_PL_BEE\r\n"); // call PWR_SWCH_ON function
                             
                             RST_PL_BEE();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                        
                         }
@@ -859,6 +874,7 @@
                             //gPC.printf()
                             
                             CDMS_INTERNAL_RESET();
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                         }
                         else if(GETpid(tc_ptr)==0x40)
@@ -866,7 +882,7 @@
                             //gPC.printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
                             
                             STANDBY_PRCS();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;                                                    
                         }
@@ -875,7 +891,7 @@
                             //gPC.printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
                             
                             RST_HK_COUNTER();
-
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;    
                         }
@@ -884,62 +900,67 @@
                             //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
-                            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[3] = 0x00;
-                            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));
+                            Base_tm *tm_ptr = new Long_tm;
+                            tm_ptr->TM_string[0] = 0x78;     
+                            tm_ptr->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
+                            tm_ptr->TM_string[2] = 0xA0;
+                            tm_ptr->TM_string[3] = 0x00;
+                            tm_ptr->TM_string[4] = (uint8_t)((time_temp & 0xFF000000)>>24);
+                            tm_ptr->TM_string[5] = (uint8_t)((time_temp & 0x00FF0000)>>16);
+                            tm_ptr->TM_string[6] = (uint8_t)((time_temp & 0x0000FF00)>>8);
+                            tm_ptr->TM_string[7] = (uint8_t)((time_temp & 0x000000FF));
                             for(uint8_t i=0;i<124;i++)
                             {
-                                tm_pointer->TM_string[i+8] = 0x00;
+                                tm_ptr->TM_string[i+8] = 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;                 
+                            tm_ptr->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm_ptr->TM_string[133] = (uint8_t)(crc16&0x00FF);
+                            tm_ptr->next_TM = NULL;                 
                             return tm_ptr;                                                     //incomplete
                         }
                         else if(GETpid(tc_ptr)==0xF0)
                         {
                             uint8_t statusbits[64];
                             if( CDMS_RD_SD_HK(statusbits) != 0){
-                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                Base_tm *tm_ptr_short = new Short_tm;
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }
                             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;
+                                Base_tm *tm_ptr = new Long_tm;
+                                tm_ptr->TM_string[0] = 0x78;     
+                                tm_ptr->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
+                                tm_ptr->TM_string[2] = 0xA0;    // ACK CODE
+                                tm_ptr->TM_string[3] = 0x00;
                                 for(int i=4;i<64;i++)
                                 {
-                                    tm_pointer->TM_string[i+4] = (i<68)?statusbits[i]:0x00;
+                                    tm_ptr->TM_string[i+4] = (i<68)?statusbits[i]:0x00;
                                 }
                                 for(uint8_t i=68;i<132;i++)
                                 {
-                                    tm_pointer->TM_string[i] = 0x00;
+                                    tm_ptr->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
+                                tm_ptr->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+                                tm_ptr->TM_string[133] = (uint8_t)(crc16&0x00FF);
+                                tm_ptr->next_TM = NULL;                                                                     //incomplete
                                 return tm_ptr;
                             }
                         }
                         else if(GETpid(tc_ptr)==0xF1)
                         {
                             CDMS_CALIB_RTC((uint64_t)(tc_ptr->TC_string[4])<<32 + (uint64_t)(tc_ptr->TC_string[5])<<24 + (uint64_t)(tc_ptr->TC_string[5])<<16 + (uint64_t)(tc_ptr->TC_string[6])<<8  +(uint64_t)(tc_ptr->TC_string[7]));
-                            ACK_L234(tm_pointer,0xC0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;
+                            Base_tm *tm_ptr_short = new Short_tm;
+                            ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;
                         }                               
                         else 
                         {
                             gPC.printf("INVALID FID\r\n");
+                            Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
                             return tm_ptr_short;
                         }
@@ -947,6 +968,7 @@
                     else 
                     {
                         gPC.printf("INVALID SERVICE SUBTYPE\r\n");
+                        Base_tm *tm_ptr_short = new Short_tm;
                         ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
                         return tm_ptr_short;
                     }                                    
@@ -957,6 +979,7 @@
                     if(GETservice_subtype(tc_ptr)==0x1)                     //make sure it is LONG TC before executing else INVALID TC
                     {
                         gPC.printf("\n\rTC with subtype = 0x1");
+                        Base_tm *tm_ptr = new Long_tm;
                         TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
                         for(uint8_t i=0,j=0;i<32;i++)
                         {
@@ -972,6 +995,7 @@
                     else if(GETservice_subtype(tc_ptr)==0x2)
                     {
                         gPC.printf("\n\rTC with subtype = 0x2");
+                        Base_tm *tm_ptr = new Long_tm;
                         TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
                         for(uint8_t i=32,j=0;i<64;i++,j+=4)
                         {
@@ -986,6 +1010,7 @@
                     else if(GETservice_subtype(tc_ptr)==0x3)
                     {
                         gPC.printf("\n\rTC with subtype = 0x3");
+                        Base_tm *tm_ptr = new Long_tm;
                         TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
                         for(uint8_t i=64,j=0;i<96;i++,j+=4)
                         {
@@ -1000,6 +1025,7 @@
                     else if(GETservice_subtype(tc_ptr)==0x4)
                     {
                         gPC.printf("\n\rTC with subtype = 0x4");
+                        Base_tm *tm_ptr = new Long_tm;
                         TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
                         for(uint8_t i=96,j=0;i<128;i++,j+=4)
                         {
@@ -1014,6 +1040,7 @@
                     else if(GETservice_subtype(tc_ptr)==0x5)
                     {   
                         gPC.printf("\n\rTC with subtype = 0x5");
+                        Base_tm *tm_ptr = new Long_tm;
                         TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
                         for(uint8_t i=128,j=0;i<160;i++,j+=4)
                         {
@@ -1028,6 +1055,7 @@
                     else if(GETservice_subtype(tc_ptr)==0x6)
                     {
                         gPC.printf("\n\rTC with subtype = 0x6");
+                        Base_tm *tm_ptr = new Long_tm;
                         TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
                         for(uint8_t i=160,j=0;i<192;i++,j+=4)
                         {
@@ -1042,19 +1070,22 @@
                     else if(GETservice_subtype(tc_ptr)==0xF)
                     {
                         gPC.printf("\n\rTC with subtype = 0xF");
+                        Base_tm *tm_ptr = new Long_tm;
                         TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
                         return tm_ptr;
                     }
                     else
                     {
                         gPC.printf("INVALID SERVICE SUBTYPE\r\n");
+                        Base_tm *tm_ptr_short = new Short_tm;
                         ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
                         return tm_ptr_short;
                     }
                 }
                 default:
                 {
-                    gPC.printf("ILLEGAL TC"); 
+                    gPC.printf("ILLEGAL TC");
+                    Base_tm *tm_ptr_short = new Short_tm;
                     ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
                     return tm_ptr_short;                    
                 }
@@ -1071,42 +1102,43 @@
                 y=FCTN_I2C_WRITE_PL((char*)tc_ptr->TC_string,TC_SHORT_SIZE);
                 
             if(y==1)                                                            
-            {                                                                               
+            {
+                Base_tm *tm_ptr_short = new Short_tm;
                 ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
                 return tm_ptr_short;
-                break;
             }                                  
             else if(y==0)
             {
                 //wait(0.2);
                 int poll=0;
-                while(poll<900 && PL_I2C_Intr==0)
+                while(poll<2000 && PL_I2C_Intr==0)
                 {
                     wait_us(10);
                     poll+=1;
                 }    
-                if(PL_I2C_Intr == 1)                                            //name to be changed later
+            if(PL_I2C_Intr == 1)
                 {
                     gPC.printf("PL_I2C_Intr is high\r\n");
-                    
-                    y=FCTN_I2C_READ_PL((char*)tm_pointer->TM_string,TM_LONG_SIZE);            //rify later about the size
+                    Base_tm *tm_ptr = new Long_tm;
+                    y=FCTN_I2C_READ_PL((char*)tm_ptr->TM_string,TM_LONG_SIZE);
                     if(y==0)
                     {
-                        tm_pointer->next_TM=NULL;
+                        tm_ptr->next_TM=NULL;
                         return tm_ptr;
-                        break;  
                     }
                     else if(y==1)
                     {
+                        delete tm_ptr;
+                        Base_tm *tm_ptr_short = new Short_tm;
                         ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));                
                         //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
                         return tm_ptr_short;
-                        break;  
                     }
                 }
                 else if(PL_I2C_Intr == 0)                                       //name to be changed later
                 {
                     gPC.printf("PL_I2C_Intr is not high\r\n");                    
+                    Base_tm *tm_ptr_short = new Short_tm;
                     ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
                     return tm_ptr_short;
                 }
@@ -1114,12 +1146,13 @@
         }
         default:    //invalid TC
         {
-            gPC.printf("INVALID TC\r\n");                 
+            gPC.printf("INVALID TC\r\n");
+            Base_tm *tm_ptr_short = new Short_tm;
             ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
             return tm_ptr_short;
         }
     }
-    return;
+    //return NULL;
 }
 // CDMS TEAM CODE END
 // EXECUTE OBOSC
@@ -1241,8 +1274,8 @@
     int reset_flag = 0;\
     if (DEBUG)\
         gPC.puts("iNSIDE EXECUTE_OBOSC_ONLY\r\n");\
-    Base_tm *obosc_tm_core = NULL;\            
-    Base_tm *obosc_tm = obosc_tm_core;\                    
+    Base_tm *obosc_tm_core = NULL;\
+    Base_tm *obosc_tm = obosc_tm_core;\
     for(uint8_t execute_psc = PSC_START_VALUE ; execute_psc < gTOTAL_VALID_TC ; ++execute_psc){\
         Base_tc* current_TC = gHEAD_NODE_TCL;\
         int overCount = 0;\
@@ -1341,7 +1374,7 @@
         gPAY_SPI->bulkRead_resume(&payload_isr_fun);\
         HK_counter->start(10000);\
         gSESSION_TIMEOUT.detach();\
-    }\    
+    }\
 }
 
 #define EXECUTE_TC {\
@@ -1389,7 +1422,7 @@
                                 /*gPC.putc(tm_ptr->TM_string[i]);*/\
                             }\
                             tm_ptr = tm_ptr->next_TM;\
-                        }\ 
+                        }\
                         /*Send only call sign, ACK_L1 to GS*/\
                         /*snd_tm.head_pointer(tm_ptr_head);*/\
                         /*transmit_adf;*/\
@@ -1523,7 +1556,7 @@
                             snd_tm.head_pointer(tm_ptr_head);\
                             gPC.puts("enter_adf\r\n");\
                             transmit_adf;\
-                            gPC.puts("exit_adf\r\n");\ 
+                            gPC.puts("exit_adf\r\n");\
                             /*DELETE THE TM AFTER USE*/\
                             tm_ptr = tm_ptr_head;\
                             overflowCountExecute = 0;\
@@ -1537,7 +1570,7 @@
                                 else{\
                                     RESET_CDMS;\
                                     break;\
-                                }\ 
+                                }\
                             }\
                         }\
                         else{\