CDMS code for testing sbc

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:
Thu Jul 14 13:07:30 2016 +0000
Parent:
260:65e1ace927fd
Child:
262:752c8689944a
Commit message:
Added thresholds in flash

Changed in this revision

CDMS_HK.h Show annotated file Show diff for this revision Revisions of this file
COM_MNG_TMTC.h Show annotated file Show diff for this revision Revisions of this file
Compression.h Show annotated file Show diff for this revision Revisions of this file
DefinitionsAndGlobals.h Show annotated file Show diff for this revision Revisions of this file
FMS_all.h Show annotated file Show diff for this revision Revisions of this file
Flash.h Show annotated file Show diff for this revision Revisions of this file
ThreadsAndFunctions.h Show annotated file Show diff for this revision Revisions of this file
adf.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 17:54:30 2016 +0000
+++ b/CDMS_HK.h	Thu Jul 14 13:07:30 2016 +0000
@@ -40,7 +40,7 @@
     while(1)
     {
     gHK_THREAD->signal_wait(HK_SIGNAL);
-    gPC.printf("Entering HK thread");
+    gPC.printf("\n\nEntering HK thread\n");
 
     gMutex.lock();
 
@@ -75,7 +75,7 @@
     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;
-
+    gPC.printf("0x%x\n",time);
     FCTN_SD_MNGR();                                 //Adding FSC & TMID to TM frame
     CDMS_HK_FRAME[0] = 0x20;
     CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1;
@@ -97,20 +97,19 @@
     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);
-    gPC.printf("\rCompleted CDMS HK\n");
+    //SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
+    gPC.printf("Completed CDMS HK\t");
 
     /*---------------------------------- BAE HK --------------------------------------------*/
 
-
     BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134);
-    gPC.printf("\rEntering BAE HK\n");
+    gPC.printf("Entering BAE HK\t");
     if(BAE_HK_I2C == 0) {
         crc = crc16_gen((unsigned char *)BAE_HK,132);
         if(crc == ((uint16_t)BAE_HK[132] << 8) | (uint16_t)BAE_HK[133]){
             TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
-            for(int i = 0; i<15; i++)
-                gPC.printf("\r 0x%02X\n",BAE_HK[i]);
+            /*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] = time >> i;
             BAE_HK_FRAME[0] = 0x28;
@@ -133,11 +132,11 @@
         }
         
     } else {
-        gPC.printf("\rBAE HK data not recieved through I2C\n");
+        gPC.printf("BAE HK data not recieved through I2C\t");
         for(int i = 0; i<134; i++)
             BAE_HK[i] = 0;
     }
-    gPC.printf("\rCompleted BAE HK\n");
+    gPC.printf("Completed BAE HK\n");
 
     /*----------------------------------Beacon message--------------------------------------*/
     unsigned char SC_HK_LBM_0[135];
--- a/COM_MNG_TMTC.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/COM_MNG_TMTC.h	Thu Jul 14 13:07:30 2016 +0000
@@ -16,25 +16,6 @@
 //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;
@@ -50,7 +31,7 @@
 uint8_t ACK_CODE;
 
 void TM_PMS_PL_SCHEDULE(Base_tm* tm_pointer1,uint8_t psc);
-void ACK_L234(Base_tm* tm_pointer1,uint8_t ackCode,uint8_t psc);
+void ACK_L234(Base_tm* tm_pointer_short1,uint8_t ackCode,uint8_t psc);
 
 #define delete_TC(tc_ptr) {\
     if(tc_ptr == gHEAD_NODE_TCL){\
@@ -220,19 +201,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_pointer1,uint8_t ackCode,uint8_t psc)
+void ACK_L234(Base_tm* tm_pointer_short1,uint8_t ackCode,uint8_t psc)
 {
-    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;
+    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;
     for(uint8_t i=0;i<6;i++)
-        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;                                                 
+        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;                                                 
 }
 void TM_PMS_PL_SCHEDULE(Base_tm *tm_pointer1,uint8_t psc)
 {
@@ -367,23 +348,26 @@
     //uint8_t ACKCODE = 0xB0;
     bool y;
     //gPC.printf("\rTC execution in progress\r\n");
-    Base_tm *tm_pointer = new Base_tm;
+    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
     {
         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_pointer,0x03,GETpacket_seq_count(tc_ptr));
-                return tm_ptr;
+                ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
+                return tm_ptr_short;
             }                                  
             else if(y==0)
             {
@@ -406,17 +390,17 @@
                     }
                     else if(y==1)
                     {
-                        ACK_L234(tm_pointer,0x85,GETpacket_seq_count(tc_ptr));                
+                        ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));                
                         //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
-                        return tm_ptr;
+                        return tm_ptr_short;
                         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_pointer,0x84,GETpacket_seq_count(tc_ptr));
-                    return tm_ptr;
+                    ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
+                    return tm_ptr_short;
                 }
             }
             BAE_I2C_mutex.unlock();
@@ -438,17 +422,15 @@
                             mid=((uint16_t)(tc_ptr->TC_string[3]<<4))+((uint16_t)(tc_ptr->TC_string[4]));                                                       
                             if(mid!=0x0000 && mid!=0x0001)
                             {
-                                ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                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);
-                            
                             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);
@@ -461,43 +443,169 @@
                             mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
                             //32 bits at a time           
 
-                            if(mid<0 || mid>16)                                  //allowable MID values?
+                            if(mid == 0x0101 || mid==0x0102 || mid == 0x0103 || mid == 0x0100)                                  //allowable MID values?
                             {
-                                ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }                                                        
-                            
-                            FCTN_CDMS_WR_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(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]));                                                     
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));                     //ackCode = ? for success
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));              
 
-                            return tm_ptr;
+                            return tm_ptr_short;
                         }
-                        case 0x6:
+                        case 0x6:   //service subtye = WR_L_FLASH
                         {
-                            //gPC.printf("WRITE ON LONG_FLASH_MEMORY\r\n");                          
-                            mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);           
-                            //1024 bits at a time
-
-                            if(mid<0x0002 || mid>0x000A)                                  //allowable MID values?
+                            mid=((uint16_t)(tc_ptr->TC_string[3]<<8))+((uint16_t)(tc_ptr->TC_string[4]));
+                            if(mid == 0x0002)
+                            {
+                                for(uint8_t z=0;z<24;z++)
+                                    scp_threshold_m0[z] = tc_ptr->TC_string[z+5];
+                                for(uint8_t z=24;z<32;z++)
+                                    scp_threshold_m0[z+8] = tc_ptr->TC_string[z+5];                            
+                                //int strt_add = flash_size() - (11*SECTOR_SIZE);
+                                //uint32_t flasharray[32] = {0};
+                                for(uint8_t z=0;z<24;z++)
+                                    flasharray_thres[z] = scp_threshold_m0[z];
+                                for(uint8_t z=24;z<32;z++)
+                                    flasharray_thres[z] = scp_threshold_m0[z+8];
+                                erase_sector(strt_add_thres);
+                                program_flash(strt_add_thres, (char*)flasharray_thres,32);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x0003)
+                            {
+                                for(uint8_t z=0;z<12;z++)
+                                    scp_threshold_m0[z+40] = tc_ptr->TC_string[z+5];
+                                //int strt_add = flash_size() - (10*SECTOR_SIZE);
+                                //uint32_t flasharray[32] = {0};
+                                for(uint8_t z=0;z<12;z++)
+                                    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);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x0004)
+                            {
+                                for(uint8_t z=0;z<32;z++)
+                                    scp_threshold_m1[z] = tc_ptr->TC_string[z+5];
+                                //int strt_add = flash_size() - (9*SECTOR_SIZE);
+                                //uint32_t flasharray[32] = {0};
+                                for(uint8_t z=0;z<32;z++)
+                                    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);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x0005)
+                            {
+                                for(uint8_t z=0;z<20;z++)
+                                    scp_threshold_m1[z+32] = tc_ptr->TC_string[z+5];
+                                //int strt_add = flash_size() - (8*SECTOR_SIZE);
+                                //uint32_t flasharray[32] = {0};
+                                for(uint8_t z=0;z<20;z++)
+                                    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);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x0006)
                             {
-                                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
-                            //FCTN_CDMS_WR_L_FLASH(mid);
-
-                            return tm_ptr;
-                        }                                                    
+                                scp_threshold_m0_1[7] = tc_ptr->TC_string[5];
+                                scp_threshold_m0_1[5] = tc_ptr->TC_string[6];
+                                scp_threshold_m0_1[8] = tc_ptr->TC_string[7];
+                                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];
+                                //int strt_add = flash_size() - (7*SECTOR_SIZE);
+                                //uint32_t flasharray[32] = {0};
+                                flasharray_thres[0] = scp_threshold_m0_1[7];
+                                flasharray_thres[1] = scp_threshold_m0_1[5];
+                                flasharray_thres[2] = scp_threshold_m0_1[8];
+                                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];
+                                erase_sector(strt_add_thres+(4*SECTOR_SIZE));
+                                program_flash(strt_add_thres+(4*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x0007)
+                            {
+                                for(uint8_t z=0;z<24;z++)
+                                    sfp_threshold_m0[z] = tc_ptr->TC_string[z+5];
+                                for(uint8_t z=24;z<32;z++)
+                                    sfp_threshold_m0[z+8] = tc_ptr->TC_string[z+5];
+                                //int strt_add_thres = flash_size() - (6*SECTOR_SIZE);
+                                //uint32_t flasharray_thres[32] = {0};
+                                for(uint8_t z=0;z<24;z++)
+                                    flasharray_thres[z] = sfp_threshold_m0[z];
+                                for(uint8_t z=24;z<32;z++)
+                                    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);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x0008)
+                            {
+                                for(uint8_t z=0;z<12;z++)
+                                    sfp_threshold_m0[z+40] = tc_ptr->TC_string[z+5];
+                                //int strt_add_thres = flash_size() - (5*SECTOR_SIZE);
+                                //uint32_t flasharray_thres[32] = {0};
+                                for(uint8_t z=0;z<12;z++)
+                                    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);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x0009)
+                            {
+                                for(uint8_t z=0;z<32;z++)
+                                    sfp_threshold_m1[z] = tc_ptr->TC_string[z+5];
+                                //int strt_add_thres = flash_size() - (4*SECTOR_SIZE);
+                                //uint32_t flasharray_thres[32] = {0};
+                                for(uint8_t z=0;z<32;z++)
+                                    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);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            else if(mid == 0x000A)
+                            {
+                                for(uint8_t z=0;z<20;z++)
+                                    sfp_threshold_m1[z+32] = tc_ptr->TC_string[z+5];
+                                //int strt_add_thres = flash_size() - (3*SECTOR_SIZE);
+                                //uint32_t flasharray_thres[32] = {0};
+                                for(uint8_t z=0;z<20;z++)
+                                    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);
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }                        
+                        }
                         default:
                         {
                             gPC.printf("INVALID SERVICE SUBTYPE\r\n");
-                            ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;
+                            ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;
                         }
                     } 
-                }                                                                
+                }                                                                   
                 case 0x80:
                 {
                     gPC.printf("service:FUNCTION MANAGEMENT SERVICE\r\n"); 
@@ -511,13 +619,13 @@
                                 
                                 P_PL_INIT();
 
-                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr_short;
                             }
                         }                                
                         else if(GETpid(tc_ptr)==0x02)
@@ -528,13 +636,13 @@
                                 
                                 P_PL_MAIN();
 
-                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr_short;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x03)
@@ -545,13 +653,13 @@
                                 
                                 P_COM_INIT();
 
-                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr_short;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x04)
@@ -560,15 +668,15 @@
                             {   
                                 //gPC.printf("TC_P_CDMS_HK_MAIN\r\n"); // call PWR_SWCH_ON function
                                 
-                                P_CDMS_HK_MAIN();
+                                //gHK_THREAD->signal_set(HK_SIGNAL);
 
-                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr_short;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x05)
@@ -579,13 +687,13 @@
                                 
                                 P_PL_RCV_SC_DATA();
 
-                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr_short;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x06)
@@ -593,16 +701,16 @@
                             if(CDMS_STANDBY==1)
                             {   
                                 //gPC.printf("TC_SW_ON_RTC\r\n"); // call PWR_SWCH_ON function
-                                
+                                gPC.printf("SD _INIT\r\n");
                                 P_CDMS_INIT_SD();
 
-                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
                             }                
                             else if(CDMS_STANDBY==0)
                             {
-                                ACK_L234(tm_pointer,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
-                                return tm_ptr;
+                                ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
+                                return tm_ptr_short;
                             }    
                         }
                         else if(GETpid(tc_ptr)==0x11)
@@ -611,8 +719,8 @@
                             
                             CDMS_SD_SW_ON();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                       
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                       
                         }
                         else if(GETpid(tc_ptr)==0x21)
                         {       
@@ -620,8 +728,8 @@
                             
                             CDMS_SD_SW_OFF();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;     
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;     
                         }
                         else if(GETpid(tc_ptr)==0x12)
                         {       
@@ -629,8 +737,8 @@
                             
                             CDMS_RTC_ON();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                       
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                       
                         }
                         else if(GETpid(tc_ptr)==0x22)
                         {       
@@ -638,17 +746,17 @@
                             
                             CDMS_RTC_OFF();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                       
-                        }
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;
+                        } 
                         else if(GETpid(tc_ptr)==0x13)
                         {                           
                             //gPC.printf("TC_SW_ON_BAE\r\n"); // call PWR_SWCH_ON function
                             
                             SW_ON_BAE();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                            
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                            
                         }
                         else if(GETpid(tc_ptr)==0x23)
                         {                           
@@ -656,8 +764,8 @@
                             
                             SW_OFF_BAE();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                        
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x14)
                         {                            
@@ -665,8 +773,8 @@
                             
                             SW_ON_PL_BEE();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                        
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x24)
                         {                   
@@ -674,8 +782,8 @@
                             
                             SW_OFF_PL_BEE();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;    
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;    
                         }
                         else if(GETpid(tc_ptr)==0x15)
                         {                            
@@ -683,8 +791,8 @@
                             
                             SW_ON_PL_EPS();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));     
-                            return tm_ptr;                            
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));     
+                            return tm_ptr_short;                            
                         }
                         else if(GETpid(tc_ptr)==0x25)
                         {                            
@@ -692,8 +800,8 @@
                             
                             SW_OFF_PL_EPS();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                            
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                            
                         }
                         else if(GETpid(tc_ptr)==0x16)
                         {                            
@@ -702,8 +810,8 @@
                             
                             SW_ON_V_A_EN();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                        
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                        
                         }
                         else if(GETpid(tc_ptr)==0x26)
                         {                        
@@ -711,8 +819,8 @@
                             
                             SW_OFF_V_A_EN();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                    
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                    
                         }
                         else if(GETpid(tc_ptr)==0x31)
                         {                            
@@ -720,8 +828,8 @@
                             
                             RST_SD();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                        
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x33)
                         {                            
@@ -729,8 +837,8 @@
                             
                             RST_BAE();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                            
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                            
                         }
                         else if(GETpid(tc_ptr)==0x34)
                         {                            
@@ -738,25 +846,24 @@
                             
                             RST_PL_BEE();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                        
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                        
                         }
                         else if(GETpid(tc_ptr)==0x38)
                         {
                             //gPC.printf()
                             
                             CDMS_INTERNAL_RESET();
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                         }
                         else if(GETpid(tc_ptr)==0x40)
                         {                         
                             //gPC.printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
                             
-                            STANDBY_PRCS();         //////// Need to Complete this function
+                            STANDBY_PRCS();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;                                                    
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;                                                    
                         }
                         else if(GETpid(tc_ptr)==0x41)
                         {                            
@@ -764,8 +871,8 @@
                             
                             RST_HK_COUNTER();
 
-                            ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
-                            return tm_ptr;    
+                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                            return tm_ptr_short;    
                         }
                         else if(GETpid(tc_ptr)==0xF1)
                         {          
@@ -774,7 +881,7 @@
                             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[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);
@@ -787,14 +894,14 @@
                             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;
+                            tm_pointer->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,0xC0,GETpacket_seq_count(tc_ptr));
+                                ACK_L234(tm_pointer,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr;
                             }
                             else
@@ -818,19 +925,25 @@
                                 tm_pointer->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;
                         }                               
                         else 
                         {
                             gPC.printf("INVALID FID\r\n");
-                            ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));  
-                            return tm_ptr;
+                            ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
+                            return tm_ptr_short;
                         }
                     }
                     else 
                     {
                         gPC.printf("INVALID SERVICE SUBTYPE\r\n");
-                        ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));  
-                        return tm_ptr;
+                        ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
+                        return tm_ptr_short;
                     }                                    
                 }
                 case 0x70:
@@ -930,15 +1043,15 @@
                     else
                     {
                         gPC.printf("INVALID SERVICE SUBTYPE\r\n");
-                        ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));  
-                        return tm_ptr;
+                        ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));  
+                        return tm_ptr_short;
                     }
                 }
                 default:
                 {
                     gPC.printf("ILLEGAL TC"); 
-                    ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
-                    return tm_ptr;                    
+                    ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+                    return tm_ptr_short;                    
                 }
             }
         }
@@ -954,8 +1067,8 @@
                 
             if(y==1)                                                            
             {                                                                               
-                ACK_L234(tm_pointer,0x03,GETpacket_seq_count(tc_ptr));
-                return tm_ptr;
+                ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
+                return tm_ptr_short;
                 break;
             }                                  
             else if(y==0)
@@ -980,25 +1093,25 @@
                     }
                     else if(y==1)
                     {
-                        ACK_L234(tm_pointer,0x85,GETpacket_seq_count(tc_ptr));                
+                        ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));                
                         //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
-                        return tm_ptr;
+                        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");                    
-                    ACK_L234(tm_pointer,0x84,GETpacket_seq_count(tc_ptr));
-                    return tm_ptr;
+                    ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
+                    return tm_ptr_short;
                 }
             }                             
         }
         default:    //invalid TC
         {
             gPC.printf("INVALID TC\r\n");                 
-            ACK_L234(tm_pointer,0x02,GETpacket_seq_count(tc_ptr));
-            return tm_ptr;
+            ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+            return tm_ptr_short;
         }
     }
     return;
--- a/Compression.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/Compression.h	Thu Jul 14 13:07:30 2016 +0000
@@ -49,9 +49,9 @@
 uint8_t srp_mode , at , pzf , ezf ,sfp[65] ,scp[55];; //tells which mode is calibrated or plot 0 for calibrated and 1 for scatterered, below threshold , proton zero flux, electron zero flux.
 unsigned int sfp_bin[52] , scp_bin[52];         //storing the bin values.
 unsigned int sfp_threshold_m0[52] = {8128,8128,8128,8128,8128,8128,8128,8128,960,960,960,960,960,960,960,960,960,960,960,960,4032,4032,4032,4032,8128,8128,8128,8128,4032,4032,124,124,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,252,252,252,252,252}; 
-const unsigned int scp_threshold_m0[52] = {245760,245760,245760,245760,245760,245760,245760,245760,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,114688,114688,114688,114688,245760,245760,245760,245760,114688,114688,4032,4032,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,8128,4032,4032,4032,4032};
+unsigned int scp_threshold_m0[52] = {245760,245760,245760,245760,245760,245760,245760,245760,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,114688,114688,114688,114688,245760,245760,245760,245760,114688,114688,4032,4032,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,8128,4032,4032,4032,4032};
 unsigned int scp_threshold_m0_1[9]={114688,245760,245760,245760,245760,114688,114688,65472,65472} ; //for mode 0..ie callibrated mode
-const unsigned int sfp_threshold_m1[2] ={252,8128},scp_threshold_m1[2]={7680,245760};
+unsigned int sfp_threshold_m1[2] ={252,8128},scp_threshold_m1[2]={7680,245760};
 uint8_t frames[3][134] = {0};
 uint8_t position_tm_frame[3] = {8,11,5} , position_tm_starting[3] = {8,11,5}; //{sc,sf-bt,sf-at}
 uint8_t id;   //sf = 0,sc-at = 1,sc-bt = 2;
@@ -292,7 +292,7 @@
                     space = adjust(1,0,pointer,8);
                     space = adjust(4,3,pointer,space);
                     FSC_science = FSC_CURRENT[3]+1;
-                    gPC.printf("SID = 3, FSC = %02X\r\n", FSC_CURRENT[3]+1);
+                    //gPC.printf("SID = 3, FSC = %02X\r\n", FSC_CURRENT[3]+1);
                     frames[id][1] = (FSC_science>>24)&0xff;
                     frames[id][2] = (FSC_science>>16)&0xff;
                     frames[id][3] = (FSC_science>>8)&0xff;
@@ -306,7 +306,7 @@
                     space = adjust(1,0,pointer,8);
                     space = adjust(4,2,pointer,space);
                     FSC_science = FSC_CURRENT[2]+1;
-                    gPC.printf("SID = 2, FSC = %02X\r\n", FSC_science);
+                    //gPC.printf("SID = 2, FSC = %02X\r\n", FSC_science);
                     frames[id][1] = (FSC_science>>16)&0xff;
                     frames[id][2] = (FSC_science>>8)&0xff;
                     frames[id][3] = FSC_science&0xff;
@@ -336,7 +336,7 @@
                   }
                 if(sd_stat)
                 {
-                    gPC.puts("sd write failure");
+                    //gPC.puts("sd write failure");
                     break;
                     }
                 position_tm_frame[id] = position_tm_starting[id];
@@ -594,7 +594,7 @@
                 space = adjust(1,0,pointer,8);
                 space = adjust(4,1,pointer,space);
                 FSC_science = FSC_CURRENT[1]+1;
-                gPC.printf("SID = 1, FSC = %02X\r\n", FSC_science);
+                //gPC.printf("SID = 1, FSC = %02X\r\n", FSC_science);
                 frames[id][1] = (FSC_science>>16)&0xff;
                 frames[id][2] = (FSC_science>>8)&0xff;
                 frames[id][3] = (FSC_science)&0xff;
@@ -616,7 +616,7 @@
                 sd_stat = SD_WRITE(TM_interleave_data,FSC_CURRENT[1]+1,1);
                 if(sd_stat)
                 {
-                    gPC.puts("sd write failure");
+                    //gPC.puts("sd write failure");
                     break;
                 }
                 position_tm_frame[id] = position_tm_starting[id];
--- a/DefinitionsAndGlobals.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/DefinitionsAndGlobals.h	Thu Jul 14 13:07:30 2016 +0000
@@ -1,15 +1,15 @@
 // **************DEFINITIONS*********************
 
-#define bypass_adf 0
+#define bypass_adf 1
 #define dma 0
 
 // COM_RX
     #define RX_TIMEOUT_LIMIT 0.5
-    #define COM_RX_UART_TX PTE20    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_TX USBTX
-    #define COM_RX_UART_RX PTE21    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_RX USBRX
+    //#define COM_RX_UART_TX PTE20    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_TX USBTX
+    //#define COM_RX_UART_RX PTE21    // For bypassing RX1M (SET BAUD RATE 1200) #define COM_RX_UART_RX USBRX
     
-    //#define COM_RX_UART_TX USBTX
-    //#define COM_RX_UART_RX USBRX
+    #define COM_RX_UART_TX USBTX
+    #define COM_RX_UART_RX USBRX
     
 // COMMON SPI
     #define SPI_MOSI PTE1
@@ -17,7 +17,8 @@
     #define SPI_CLK PTE2
     #define SPI_CS_ADF PTA15
     #define SPI_CS_SDC PIN20
-    #define SPI_CS_RTC PIN26
+    //#define SPI_CS_RTC PIN26
+    #define SPI_CS_RTC PIN60
     
 // COM_TX
     #define COM_TX_CONFIG_LIMIT 3
--- a/FMS_all.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/FMS_all.h	Thu Jul 14 13:07:30 2016 +0000
@@ -40,7 +40,6 @@
 
 void RST_HK_COUNTER();
 int8_t CDMS_RD_SD_HK(uint8_t *);
-void CDMS_RD_RTC(uint64_t *);
 void CDMS_CALIB_RTC(uint8_t *);
 void TOTAL_RESET_WITH_CDMS();
 
@@ -83,11 +82,19 @@
 void CDMS_SD_SW_ON()
 {
     SD_SW_EN_DS = 0;
+    SD_STATUS = DEVICE_POWERED;
+    CDMS_SD_SW_STATUS = DEVICE_POWERED;
+    FCTN_CDMS_WR_FLASH(2,DEVICE_POWERED);
+    gPC.printf("sw on sd\n");
 }
 
 void CDMS_SD_SW_OFF()
 {
     SD_SW_EN_DS = 1;
+    SD_STATUS = DEVICE_DISABLED;
+    CDMS_SD_SW_STATUS = DEVICE_DISABLED;
+    FCTN_CDMS_WR_FLASH(2,DEVICE_DISABLED);
+    gPC.printf("sw off sd\n");
 }
 
 void CDMS_RTC_ON()
@@ -99,6 +106,7 @@
     spi.write(0x81); //register address with write flag
     spi.write(0x00);//disabling stop bit in the seconds register
     SPI_mutex.unlock();
+    gPC.printf("sw on rtc\n");
 }
 
 void CDMS_RTC_OFF()
@@ -109,27 +117,39 @@
     spi.write(0x81); //register address with write flag
     spi.write(0x80);//enabling stop bit in the seconds register
     SPI_mutex.unlock();
+    gPC.printf("sw off rtc\n");
 }
 
 void SW_ON_BAE()
 {
     BAE_SW_EN_DS = 0;
+    BAE_STATUS = DEVICE_POWERED;
+    BAE_SW_STATUS = DEVICE_POWERED;
+    FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED);
+    gPC.printf("sw on bae\n");
 }
 
 void SW_OFF_BAE()
 {
     BAE_SW_EN_DS = 1;
+    BAE_STATUS = DEVICE_DISABLED;
+    BAE_SW_STATUS = DEVICE_DISABLED;
+    FCTN_CDMS_WR_FLASH(1,DEVICE_DISABLED);
+    gPC.printf("sw off bae\n");
 }
 
 void SW_ON_PL_BEE()
 {
-    PYLD_DFF_CLK = 0;\
-    PYLD_DFF = 1;\
-    wait_us(1);\
-    PYLD_DFF_CLK = 1;\
-    wait_us(1);\
-    PYLD_DFF_CLK = 0;\
-    wait_us(1);\
+    PYLD_DFF_CLK = 0;
+    PYLD_DFF = 1;
+    wait_us(1);
+    PYLD_DFF_CLK = 1;
+    wait_us(1);
+    PYLD_DFF_CLK = 0;
+    wait_us(1);
+    PL_STATUS = DEVICE_POWERED;
+    PL_BEE_SW_STATUS = DEVICE_POWERED;
+    FCTN_CDMS_WR_FLASH(3,DEVICE_POWERED);
 }
 
 void SW_OFF_PL_BEE()
@@ -141,38 +161,49 @@
     wait_us(1);
     PYLD_DFF_CLK = 0;
     wait_us(1);
+    PL_STATUS = DEVICE_DISABLED;
+    PL_BEE_SW_STATUS = DEVICE_DISABLED;
+    FCTN_CDMS_WR_FLASH(3,DEVICE_DISABLED);
 }
 
 void SW_ON_PL_EPS()
 {
-    PYLD_EPS_DFF_PWR_CLK = 0;\
-    PYLD_EPS_DFF_PWR = 1;\
-    wait_us(1);\
-    PYLD_EPS_DFF_PWR_CLK = 1;\
-    wait_us(1);\
-    PYLD_EPS_DFF_PWR_CLK = 0;\
-    wait_us(1);\
+    PYLD_EPS_DFF_PWR_CLK = 0;
+    PYLD_EPS_DFF_PWR = 1;
+    wait_us(1);
+    PYLD_EPS_DFF_PWR_CLK = 1;
+    wait_us(1);
+    PYLD_EPS_DFF_PWR_CLK = 0;
+    wait_us(1);
+    PL_EPS_LATCH_SW_EN = 1;
+    FCTN_CDMS_WR_FLASH(4,1);
 }
 
 void SW_OFF_PL_EPS()
 {
-    PYLD_EPS_DFF_PWR_CLK = 0;\
-    PYLD_EPS_DFF_PWR = 0;\
-    wait_us(1);\
-    PYLD_EPS_DFF_PWR_CLK = 1;\
-    wait_us(1);\
-    PYLD_EPS_DFF_PWR_CLK = 0;\
-    wait_us(1);\
+    PYLD_EPS_DFF_PWR_CLK = 0;
+    PYLD_EPS_DFF_PWR = 0;
+    wait_us(1);
+    PYLD_EPS_DFF_PWR_CLK = 1;
+    wait_us(1);
+    PYLD_EPS_DFF_PWR_CLK = 0;
+    wait_us(1);
+    PL_EPS_LATCH_SW_EN = 0;
+    FCTN_CDMS_WR_FLASH(4,0);
 }
 
 void SW_ON_V_A_EN()
 {
     V_A_EN = 1;
+    EPS_V_A_EN_STATUS = 1;
+    FCTN_CDMS_WR_FLASH(0,1);
 }
 
 void SW_OFF_V_A_EN()
 {
     V_A_EN = 0;
+    EPS_V_A_EN_STATUS = 0;
+    FCTN_CDMS_WR_FLASH(0,0);
 }
 
 void RST_SD()
@@ -180,6 +211,7 @@
     SD_SW_EN_DS = 1;
     wait_ms(10);
     SD_SW_EN_DS = 0;
+    gPC.printf("rst sd\n");
 }
 
 void SW_RST_BAE()
@@ -187,6 +219,7 @@
     BAE_SW_EN_DS = 1;
     wait_ms(10);
     BAE_SW_EN_DS = 0;
+    gPC.printf("rst bae\n");
 }
 
 void SW_RST_PL_BEE()
@@ -254,12 +287,7 @@
     return p;
 }
 
-void CDMS_RD_RTC(uint64_t *time)
-{
-    *time = FCTN_CDMS_RD_RTC();
-}
-
-void CDMS_CALIB_RTC(uint64_t *time)
+void CDMS_CALIB_RTC(uint64_t time)
 {
     SPI_mutex.lock();
     gCS_RTC=1;
@@ -268,27 +296,27 @@
  
     gCS_RTC=0;
     spi.write(0x82);
-    spi.write(time[0]);//set minutes
+    spi.write((uint8_t)time);//set minutes
     gCS_RTC=1;
  
     gCS_RTC=0;
     spi.write(0x83); 
-    spi.write(time[1] & 0x3F); //set hours
+    spi.write((uint8_t)(time>>8) & 0x3F); //set hours
     gCS_RTC=1;
     
     gCS_RTC=0;
     spi.write(0x85); 
-    spi.write(time[2] & 0x3F); //set date
+    spi.write((uint8_t)(time>>16) & 0x3F); //set date
     gCS_RTC=1;
     
     gCS_RTC=0;
     spi.write(0x86); 
-    spi.write(time[3] & 0x1F); //set month
+    spi.write((uint8_t)(time>>24) & 0x1F); //set month
     gCS_RTC=1;
     
     gCS_RTC=0;
     spi.write(0x87); 
-    spi.write(time[4]); //set year to 00(2000)
+    spi.write((uint8_t)(time>>32)); //set year to 00(2000)
     gCS_RTC=1;
     gPC.puts("\n\r rtc initalised \n");
     SPI_mutex.unlock();
--- a/Flash.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/Flash.h	Thu Jul 14 13:07:30 2016 +0000
@@ -1,5 +1,8 @@
 #include "FreescaleIAP.h"
 
+int strt_add_thres = flash_size() - (11*SECTOR_SIZE);
+uint32_t flasharray_thres[32] = {0};
+
 void FCTN_CDMS_WR_FLASH(uint16_t , uint32_t);
 int strt_add = flash_size() - (2*SECTOR_SIZE);
 uint32_t flasharray[32];    //256+(3*1024)
@@ -50,7 +53,7 @@
 /*Writing to the Flash*/
 void FCTN_CDMS_WR_FLASH(uint16_t j,uint32_t datablock)  //j-position to write address  ; fdata - flash data to be written
 {
-    for(int i=0;i<5;i++)
+    for(int i=0;i<17;i++)
     {
         flasharray[i]=nativeflash[i];
     }
@@ -61,3 +64,29 @@
 /*End*/
 
 /*===================================================MMS Functions=================================================*/
+
+void FCTN_CDMS_WR_S_FLASH(uint16_t mid,uint32_t datablock);
+
+void FCTN_CDMS_WR_S_FLASH(uint16_t mid,uint32_t datablock)
+{
+    if(mid == 0x0100)
+    {
+        FCTN_CDMS_WR_FLASH(11,(datablock>>16) & 0x000000FF);
+        FCTN_CDMS_WR_FLASH(13,(datablock>>8) & 0x000000FF);
+        FCTN_CDMS_WR_FLASH(14,datablock & 0x000000FF);
+    }
+    else if(mid == 0x0101)
+    {
+        FCTN_CDMS_WR_FLASH(12,(datablock>>16) & 0x000000FF);
+        FCTN_CDMS_WR_FLASH(10,(datablock>>8) & 0x000000FF);
+        FCTN_CDMS_WR_FLASH(15,datablock & 0x000000FF);
+    }
+    else if(mid == 0x0102)
+    {
+        FCTN_CDMS_WR_FLASH(9,datablock & 0x0000FFFF);
+    }
+    else if(mid == 0x0103)
+    {
+        FCTN_CDMS_WR_FLASH(6,datablock & 0x00000001);
+    } 
+}
\ No newline at end of file
--- a/ThreadsAndFunctions.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/ThreadsAndFunctions.h	Thu Jul 14 13:07:30 2016 +0000
@@ -143,7 +143,7 @@
         }
         else if( gFLAGS & NEW_TC_RECEIVED ){
             gPC.puts("NEW TC RECEIVED\r\n");
-            Thread::wait(10000);
+            //Thread::wait(10000);
             gFLAGS = gFLAGS & (~NEW_TC_RECEIVED);
             gFLAGS = gFLAGS | COM_MNG_TMTC_RUNNING_FLAG;
 
--- a/adf.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/adf.h	Thu Jul 14 13:07:30 2016 +0000
@@ -7,38 +7,29 @@
 bool buffer_state;
 bool finish_write_data;
 uint8_t signal = 0x00;
-unsigned char bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xF4,0xC2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,0x7F,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x20,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00};
-bool data_irq_err=0;
-bool data_err= false;
-unsigned char temp_byte=0x00;
-unsigned char data_err1[112];
-unsigned char data_err_cnt=0;
-unsigned int byte_count =0;
-#define DATA_ERR_THRS 20
-bool rolling_buffer_settings_error=true;
-bool bbram_write_success=true;
-int bbram_err_cnt=0;
-int rbp_err_cnt=0;
-bool reset_flag=false;
-#define RBP_THRS 4
-bool quit_configuration=false;
-bool power_reset_flag=false;
-unsigned int power_reset_count=0;
-bool Configuration_done=false;
-#define HW_THRS 2
+unsigned char bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xF4,0xC2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,0x7F,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x10,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00};
  
 //int initialise_card();
 //int disk_initialize();
+ 
+#define bbram_write {\
+     SPI_mutex.lock();\
+    gCS_ADF=0;\
+    spi.write(0xB0);\
+    wait_us(300);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    for(int i=0;i<66;i++){\
+        spi.write(bbram_buffer[i]);\
+    }\
+    gCS_ADF=1;\
+    SPI_mutex.unlock();\
+}
 //------------------------------------------------------------------------
 // state checking functions
 //bool assrt_phy_off( int, int, int);
 //bool assrt_phy_on( int,int,int);
 //bool assrt_phy_tx(int,int,int);
-
-#define TRANSMIT_LEN_1 0xFF
-#define TRANSMIT_LEN_2 0xFF
-/***/
-Timer T;
  
 #define START_ADDRESS 0x020;
 #define MISO_PIN PTE3
@@ -54,105 +45,7 @@
 #define CMD_PHY_OFF 0xB0
 #define CMD_PHY_TX 0xB5
 #define CMD_CONFIG_DEV 0xBB
-/**STATES**/
-//=======================
-#define PHY_OFF 0xB1
-#define PHY_ON 0xB2
-#define PHY_TX 0xB4
-#define BUSY 0x00
-//===================================================
-
-unsigned int Adf_data_counter=0;
-unsigned char status =0;
-unsigned int cmd_err_cnt=0;
-unsigned int data_length;
-unsigned int state_err_cnt=0;
-unsigned int miso_err_cnt=0;
-unsigned int hw_reset_err_cnt=0;
-unsigned int counter =0;
-bool temp_return = 0;
-bool bcn_flag=0;
-bool bbram_flag=0;
-
-bool stop_transmission=false;
-
-#define reset_flags {\
-finish_write_data = false;\
-buffer_state = true;\
-last_buffer = false;\
-loop_on = true;\
-ADF_off = false;\
-buffer_state = true;\
-loop_on = true;\
-ADF_off = false;\
-sent_tmfrom_SDcard = false;\
-Adf_data_counter=0;\
-status =0;\
-cmd_err_cnt=0;\
-data_length;\
-state_err_cnt=0;\
-miso_err_cnt=0;\
-hw_reset_err_cnt=0;\
-counter =0;\
-bcn_flag=0;\
-bbram_flag=0;\
-stop_transmission=false;\
-    }
-
-
-int err_arr[64];
-bool bbram_err=false;
-int err_idx=-1;
-int err[64];
-#define bbram_check gCS_ADF=0;\
-    for(int i=0;i<64;i++){\
-        err_arr[i]=0;\
-        }\
-    for(int i=0;i<64;i++){\
-        err[i]=0;\
-        }\
-    bbram_err=false;\
-    gCS_ADF=0;\
-    spi.write(0x39);\
-    spi.write(0x00);\
-    spi.write(0xFF);\
-    for(int i=0;i<64;i++){\
-        err_arr[i]=spi.write(0xFF);\
-        if(err_arr[i]!=bbram_buffer[i+2]){\
-            err[i]=1;\
-            bbram_err=true;\
-            }\
-    }\
-    gCS_ADF=1;\
-    if(!bbram_err)\
-        gPC.printf("BBRAM verified \r\n");\
-    else\
-        gPC.printf("BBRAM error \r\n");\
  
-
-bool tx_loop=1;
-
-#define PRNT_ONCE {\
-    gPC.printf("%d %d lol_ what?\r\n",segment_len,EOS_len);\
-    }
- 
-#define bbram_write {\
-    gCS_ADF=0;\
-    spi.write(0xB0);\
-    wait_us(300);\
-    gCS_ADF=1;\
-    gCS_ADF=0;\
-    for(int i=0;i<66;i++){\
-        spi.write(bbram_buffer[i]);\
-    }\
-    gCS_ADF=1;\
-}
-//------------------------------------------------------------------------
-// state checking functions
-//bool assrt_phy_off( int, int, int);
-//bool assrt_phy_on( int,int,int);
-//bool assrt_phy_tx(int,int,int);
-
 #define check_status {\
     unsigned char stat=0;\
     gCS_ADF=0;\
@@ -161,106 +54,97 @@
     gCS_ADF=1;\
     status = stat;\
 }
-
-/*CMD_VAR*/
-bool cmd_bit=true;
-bool cmd_err_flag=false;
-unsigned char command = 0x00;
-#define CMD(command) {\
-    cmd_err_cnt=0;\
-    cmd_err_flag=false;\
-    while(cmd_err_cnt<3) {\
+ 
+// all three arguments are int
+#define assrt_phy_off(return_this) {\
+    int cmd_err_cnt = 0;\
+    int spi_err_cnt = 0;\
+    int state_err_cnt = 0;\
+    for(int i = 0 ; i < 40 ;i++){\
         check_status;\
-        cmd_bit=status&0x20;\
-        if(cmd_bit) {\
+        if(status == 0xB1){\
+            return_this = 0;\
+            break;\
+        }\
+        else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){\
+            return_this = 1;\
+            break;\
+        }\
+        else if(state_err_cnt>STATE_ERR_THRS){\
+            return_this = 1;\
+            break;\
+        }\
+        else if( (status & 0xA0) == 0xA0 ){\
             gCS_ADF=0;\
-            spi.write(command);\
+            spi.write(CMD_PHY_OFF);\
             gCS_ADF=1;\
-            break;\
-        } else {\
-            wait_us(5);\
+            wait_us(PHY_OFF_EXEC_TIME);\
+            state_err_cnt++;\
+        }\
+        else if(status&0x80==0x00){\
+            wait_ms(5);\
+            spi_err_cnt++;\
+        }\
+        else {\
+            wait_ms(1);\
             cmd_err_cnt++;\
         }\
     }\
-    if(cmd_err_cnt==3) {\
-        cmd_err_flag=true;\
-    }\
 }
-// all three arguments are int\
-#define assrt_phy_off {\
-    int state_err_cnt = 0;\
-    CMD(CMD_PHY_OFF);\
-    if(cmd_err_flag){\
-        temp_return=1;\
+ 
+ 
+#define initial_adf_check {\
+    spi.write(CMD_PHY_OFF);\
+    int tempReturn = 0;\
+    bool flag = false;\
+    while( hw_reset_err_cnt < 2 ){\
+        assrt_phy_off( tempReturn);\
+        if( !tempReturn ){\
+            bbram_write;\
+            bbram_flag=1;\
+            flag = true;\
+            break;\
         }\
-    else{\
-        for(int i = 0 ; i < 40 ;i++){\
-            CMD(CMD_PHY_OFF);\
-            check_status;\
-            if(status == PHY_OFF){\
-                temp_return = 0;\
-            break;\
-            }\
-            else if(state_err_cnt>THRS){\
-                temp_return = 1;\
-            break;\
-            }\
-            else {\
-                wait_ms(1);\
-            }\
+        else{\
+            hardware_reset(0);\
+            hw_reset_err_cnt++;\
+            gPC.puts("Resetting hardware\r\n");\
         }\
     }\
+    if( flag == false ){\
+        gPC.puts("Seems to be SPI problem\r\n");\
+    }\
+    assrt_phy_off(tempReturn);\
+    if(!bbram_flag){\
+        bcn_flag=1;\
+     }\
 }
-
-
-bool hardware_reset(int bcn_call)
-{
-    for(int i= 0; i < 2 ; i++) {
+ 
+unsigned char status =0;
+unsigned int cmd_err_cnt=0;
+unsigned int state_err_cnt=0;
+unsigned int miso_err_cnt=0;
+unsigned int hw_reset_err_cnt=0;
+bool bcn_flag=0;
+bool bbram_flag=0;
+ 
+bool hardware_reset(int bcn_call){
+    for(int i= 0; i < 20 ; i++){
         gCS_ADF=0;
         spi.write(CMD_HW_RESET);
         gCS_ADF=1;
         wait_ms(2);// Typically 1 ms
         int count=0;
-        temp_return = 0;
-        while(count<10 && miso_err_cnt<10) {
-            if(MISO_PIN) {
-//                assrt_phy_off;
-/*asseert_phyoff Starts**/
-{\
-    int state_err_cnt = 0;\
-    CMD(CMD_PHY_OFF);\
-    if(cmd_err_flag){\
-        temp_return=1;\
-        }\
-    else{\
-        for(int i = 0 ; i < 40 ;i++){\
-            CMD(CMD_PHY_OFF);\
-            check_status;\
-            if(status == PHY_OFF){\
-                temp_return = 0;\
-            break;\
-            }\
-            else if(state_err_cnt>THRS){\
-                temp_return = 1;\
-            break;\
-            }\
-            else {\
-                wait_ms(1);\
-            }\
-        }\
-    }\
-}\
-/*Assert_phy_off_ends*/
-
-
-
-
-
+        int temp_return = 0;
+        while(count<10 && miso_err_cnt<10){      
+            if(MISO_PIN){
+                assrt_phy_off(temp_return);
                 if(!temp_return){
                     return 0;
                 }
                 count++;
-            } else {
+            }
+            else{
                 wait_us(50);
                 miso_err_cnt++;
             }
@@ -268,158 +152,46 @@
     }
     return 1;
 }
-//for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx.
+ 
+//for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx. 
 //----------------------------------------------------------------------------
-unsigned char temp;
-bool reg_err;
-int reg_err_cnt;
-#define REG_ERR_THRS 5
-#define reg_check(addr1,addr2,reg_val){\
- gCS_ADF=0;\
-        reg_err=false;\
-        spi.write(addr1);\
-        spi.write(addr2);\
-        spi.write(0xFF);\
-        temp = spi.write(0xFF);\
-        if(temp==reg_val)\
-            reg_err = false;\
-        else\
-            reg_err=true;\
-    gCS_ADF=1;\
-}
-
-#define initiate {\
+ 
+# define initiate {\
+    SPI_mutex.lock();\
     gCS_ADF=0;\
     spi.write(0xFF);\
     spi.write(0xFF);\
     gCS_ADF=1;\
-    reg_err=true;\
-    for(reg_err_cnt=0;reg_err_cnt<REG_ERR_THRS && reg_err;reg_err_cnt++){\
-        gCS_ADF=0;\
-        spi.write(0x08);\
-        spi.write(0x14);\
-        spi.write(TRANSMIT_LEN_1);\
-        gCS_ADF=1;\
-        reg_check(0x28,0x14,TRANSMIT_LEN_1);\
-    }\
-    if(reg_err)\
-        gPC.printf("Reg_err_ignored %x \r\n",(int)temp);\
-    else\
-        gPC.printf("reg written successful %x \r\n",(int)temp);\
-    reg_err=true;\
-    for(reg_err_cnt=0;reg_err_cnt<REG_ERR_THRS && reg_err;reg_err_cnt++){\
-        gCS_ADF=0;\
-        spi.write(0x08);\
-        spi.write(0x15);\
-        spi.write(TRANSMIT_LEN_2);\
-        gCS_ADF=1;\
-        reg_check(0x28,0x15,TRANSMIT_LEN_2);\
-    }\
-    if(reg_err)\
-        gPC.printf("Reg_err_ignored %x \r\n",(int)temp);\
-    else\
-        gPC.printf("reg written successful %x \r\n",(int)temp);\
-}
-
-#define write_data {\
-    counter++;\
+    gCS_ADF=0;\
+    spi.write(0x08);\
+    spi.write(0x14);\
+    spi.write(0xFF);\
+    gCS_ADF=1;\
     gCS_ADF=0;\
-        spi.write(0x0B);\
-        spi.write(0x36);\
-        spi.write(0xFF);\
+    spi.write(0x08);\
+    spi.write(0x15);\
+    spi.write(0xFF);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    spi.write(0x09);\
+    spi.write(0x24);\
+    spi.write(0x20);\
     gCS_ADF=1;\
-    data_err_cnt=0;\
-    data_err=true;\
-    while(data_err && (data_err_cnt<DATA_ERR_THRS)){\
-        gCS_ADF=0;\
-        if(buffer_state){\
-            spi.write(0x18);\
-            spi.write(0x20);\
-            for(unsigned char i=0; i<112;i++){\
-                if(bypass_adf)\
-                    gPC.putc(buffer_112[i]);\
-                else\
-                    spi.write(buffer_112[i]);\
-                    /*gPC.printf("0x%X,",spi.write(buffer_112[i]));*/\
-            }\
-        }\
-        else{\
-            spi.write(0x18);\
-            spi.write(0x90);\
-            for(unsigned char i=0; i<112;i++){\
-                if(bypass_adf)\
-                    gPC.putc(buffer_112[i]);\
-                else\
-                    spi.write(buffer_112[i]);\
-                /*gPC.printf("0x%X,",spi.write(buffer_112[i]));*/\
-            }\
-        }\
-        gCS_ADF=1;\
-        wait_us(5);\
-        data_err=false;\
-        gCS_ADF=0;\
-        spi.write(0x38);\
-        if(buffer_state){\
-            spi.write(0x20);\
-            }\
-        else{\
-            spi.write(0x90);\
-            }\
-        spi.write(0xFF);\
-        for(unsigned char i=0; i<112;i++){\
-            temp_byte=spi.write(0xFF);\
-            if(buffer_112[i]!=temp_byte){\
-                data_err1[i]=1;\
-                data_err=true;\
-                }\
-        }\
+    gCS_ADF=0;\
+    spi.write(0x09);\
+    spi.write(0x37);\
+    spi.write(0xE0);\
     gCS_ADF=1;\
-    /*SPI_mutex.unlock();*/\
-    if(data_err==false){\
-    buffer_state = !buffer_state;\
-    }\
-    data_err_cnt++;\
-    if(last_buffer){\
-        finish_write_data = true;\
-           /*gPC.puts("adf_off\r\n");*/\
-        }\
-    }\
-}
-
-#define check {\
-    check_status;\
-    /*gPC.printf("I 0x%X\r\n",(int)status);*/\
-    if(IRQ || bypass_adf){\
-        /*gPC.printf("det\r\n");*/\
-        if(!ADF_off) {\
-            if(finish_write_data) {\
-                write_data;\
-                ADF_off=true;\
-            } else {\
-                write_data;\
-                if(sent_tmfrom_SDcard)\
-                send_tm_from_SD_card_fun();\
-                else snd_tm.transmit_data(buffer_112,&last_buffer);\
-            }\
-        } else {\
-            wait_ms(20);\
-            gCS_ADF=0;\
-            spi.write(0xB1);\
-            gCS_ADF=1;\
-            gPC.puts("transmission done\r\n");\
-            loop_on=false;\
-        }\
-    }\
-    else{\
-        if(T.read_us()>98000){\
-                data_irq_err=true;\
-                CMD(CMD_PHY_ON);\
-                gPC.printf("Data_error_detected");\
-                }\        
-        }\
-}
-
-#define send_data {\
+    gCS_ADF=0;\
+    spi.write(0x09);\
+    spi.write(0x36);\
+    spi.write(0x70);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    spi.write(0x09);\
+    spi.write(0x39);\
+    spi.write(0x10);\
+    gCS_ADF=1;\
     gCS_ADF=0;\
     spi.write(0xBB);\
     gCS_ADF=1;\
@@ -427,7 +199,58 @@
     spi.write(0xFF);\
     spi.write(0xFF);\
     gCS_ADF=1;\
-    if(sent_tmfrom_SDcard){\
+    SPI_mutex.unlock();\
+}
+ 
+#define write_data {\
+    SPI_mutex.lock();\
+    gCS_ADF=0;\
+    spi.write(0x0B);\
+    spi.write(0x36);\
+    spi.write(0xFF);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    if(buffer_state){\
+        spi.write(0x18);\
+        spi.write(0x20);\
+        for(unsigned char i=0; i<112;i++){\
+            if(bypass_adf)\
+                gPC.putc(buffer_112[i]);\
+            else\
+                spi.write(buffer_112[i]);\
+            /*gPC.printf("%02X",buffer_112[i])*/;\
+        }\
+    }\
+    else{\
+        spi.write(0x18);\
+        spi.write(0x90);\
+        for(unsigned char i=0; i<112;i++){\
+            if(bypass_adf)\
+                gPC.putc(buffer_112[i]);\
+            else\
+                spi.write(buffer_112[i]);\
+            /*gPC.printf("%02X",buffer_112[i])*/;\
+        }\
+    }\
+    gCS_ADF=1;\
+    SPI_mutex.unlock();\
+    buffer_state = !buffer_state;\
+    if(last_buffer){\
+        finish_write_data = true;\
+        /*gPC.puts("adf_off\r\n");*/\
+    }\
+}
+ 
+/* 
+void check(){   
+    if(IRQ){
+        gCOM_MNG_TMTC_THREAD->signal_set(signal);
+    }
+}*/
+  
+ 
+#define send_data {\
+if(sent_tmfrom_SDcard){\
         send_tm_from_SD_card_fun();\
     }else{\
         snd_tm.transmit_data(buffer_112,&last_buffer);\
@@ -444,6 +267,7 @@
     }else{\
         snd_tm.transmit_data(buffer_112,&last_buffer);\
     }\
+    SPI_mutex.lock();\
     gCS_ADF=0;\
     spi.write(0xB1);\
     gCS_ADF=1;\
@@ -460,114 +284,54 @@
     spi.write(0xFF);\
     spi.write(0xFF);\
     gCS_ADF=1;\
+    SPI_mutex.unlock();\
+    /*ticker.attach_us(&check,32000);*/\
 }
-  
-#define initial_adf_check {\
-    bool Configuration_Done=false;\
-    quit_configuration=false;\
-    bool reset_flag1 = 0;\
-    bool flag = false;\
-    while((hw_reset_err_cnt<HW_THRS)&&(quit_configuration==false)){\
-        while((bbram_err_cnt<2)&&(quit_configuration==false)){\
-            /*assrt_phy_off;*/\
-            /*Assrt_phy_off Begin*/\
-            {\
-    int state_err_cnt = 0;\
-    CMD(CMD_PHY_OFF);\
-    if(cmd_err_flag){\
-        temp_return=1;\
-        }\
-    else{\
-        for(int i = 0 ; i < 40 ;i++){\
-            CMD(CMD_PHY_OFF);\
-            check_status;\
-            if(status == PHY_OFF){\
-                temp_return = 0;\
-            break;\
-            }\
-            else if(state_err_cnt>THRS){\
-                temp_return = 1;\
-            break;\
-            }\
-            else {\
-                wait_ms(1);\
-            }\
-        }\
-    }\
-}\
-            /*Assrt_phy_off end*/\
-            reset_flag1=temp_return;\
-            if(!reset_flag1){\
-                bbram_write;\
-                while((rbp_err_cnt<RBP_THRS)&&(quit_configuration==false)){\
-                    bbram_check;\
-                    if(bbram_err==0){\
-                        bbram_write_success=true;\
-                        bbram_err_cnt=0;\
-                        initiate;\
-                        if(reg_err){\
-                            rbp_err_cnt++;\
-                            }\
-                        else{\
-                            rbp_err_cnt=0;\
-                            gPC.printf("NO Reg err\r\n");\
-                            CMD(CMD_CONFIG_DEV);\
-                            if(cmd_err_flag){\
-                                reset_flag=1;\
-                                gPC.printf("CMD ERR\r\n");\
-                            }\
-                            else{\
-                                reset_flag=0;\
-                                gPC.printf("NO CMD ERR CONFIG_DONE\r\n");\
-                                quit_configuration=true;\
-                            }\
-                        }\
-                    }\
-                    else{\
-                        bbram_write_success=false;\
-                        bbram_err_cnt++;\
-                        break;\
-                    }\
-                }\
-            }\
-            else{\
-                break;\
-            }\
-        }\
-        if(reset_flag1){\
-            hardware_reset(0);\
-            hw_reset_err_cnt++;\
-            gPC.puts("Resetting hardware\r\n");\
-        }\
-    }\
-    if(hw_reset_err_cnt==HW_THRS){\
-        power_reset_flag=1;\
-        power_reset_count++;\
-        }\
-    else{\
-        Configuration_Done=true;\
-        gPC.printf("Configuration_Done\n");\
-        }\
-}
-
+ 
 #define configure_adf {\
-    reset_flags;\
+    finish_write_data = false;\
+    buffer_state = true;\
+    last_buffer = false;\
+    loop_on = true;\
+    ADF_off = false;\
     initial_adf_check;\
-    gPC.puts("Config_part done\r\n");\
+    gPC.puts("initial adf check\r\n");\
+    initiate;\
+    gPC.puts("adf configured\r\n");\
+    /*gLEDR = !gLEDR;*/\
 }
  
 #define transmit_adf {\
     configure_adf;\
+    if(sent_tmfrom_SDcard)\
+    signal = COM_MNG_TMTC_SIGNAL_ADF_SD;\
+    else signal = COM_MNG_TMTC_SIGNAL_ADF_NSD;\
     send_data;\
-    CMD(CMD_PHY_TX);\
-    wait_us(2000);\
     while(loop_on){\
-        wait_us(20);\
-        check;\
-        if(data_irq_err){\
-        break;\
+        wait_ms(COM_TX_TICKER_LIMIT);\
+        if(IRQ || bypass_adf){\
+            if(finish_write_data){\
+                if(ADF_off){\
+                    SPI_mutex.lock();\ 
+                    gCS_ADF=0;\
+                    spi.write(0xB1);\
+                    gCS_ADF=1;\
+                    SPI_mutex.unlock();\
+                    loop_on = false;\
+                    gPC.puts("Transmission done\r\n");\
+                    gLEDR = 1;\
+                }\
+                else{\
+                    ADF_off = true;\
+                }\
+            }else{\ 
+                gLEDG = !gLEDG;\  
+                write_data;\
+                if(sent_tmfrom_SDcard)\
+                send_tm_from_SD_card_fun();\
+                else snd_tm.transmit_data(buffer_112,&last_buffer);\ 
+            }\
         }\
     }\
     /*gPC.puts("after while loop\r\n");*/\
-}
-
+}
\ No newline at end of file
--- a/cdms_sd.h	Tue Jul 12 17:54:30 2016 +0000
+++ b/cdms_sd.h	Thu Jul 14 13:07:30 2016 +0000
@@ -4,7 +4,7 @@
 //Serial sd1(USBTX,USBRX);
 
 
-#define SD_COMMAND_TIMEOUT 5000
+#define SD_COMMAND_TIMEOUT 325
 
 #define SD_DBG             0
 
@@ -56,7 +56,7 @@
 int SD_WRITE(uint8_t*,uint32_t,uint8_t);
 int FCTN_CDMS_SD_INIT();
 uint8_t SD_READ(uint8_t*,uint32_t,uint8_t);
-#define SDCARD_FAIL 0
+#define SDCARD_FAIL 4
 #define SDCARD_V1   1
 #define SDCARD_V2   2
 #define SDCARD_V2HC 3
@@ -68,6 +68,8 @@
 int FCTN_CDMS_SD_INIT()
 {   
     int i = initialise_card();
+    if( i == 4)
+    return 4;
     debug_if(SD_DBG, "init card = %d\n", i);
     sectors = sd_sectors();
 
@@ -78,7 +80,7 @@
     } else {
     //printf("\rDisk initialization successfull\r\n");
     }
-
+    SD_STATUS = DEVICE_POWERED;
     spi.frequency(1000000); // Set to 1MHz for data transfer
     return 0;
 }
@@ -88,7 +90,9 @@
     uint32_t fsc;
     uint32_t start_fsc;
     uint8_t buffer[512];
-    int b=disk_read(buffer, SD_MNG_SECT);
+    int b;
+    if(SD_STATUS == DEVICE_POWERED){
+    b=disk_read(buffer, SD_MNG_SECT);
     
     fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3];
     start_fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7];
@@ -114,6 +118,7 @@
     start_fsc=(uint32_t)(buffer[36]<<24)+(uint32_t)(buffer[37]<<16)+(uint32_t)(buffer[38]<<8)+(uint32_t)buffer[39];
     FSC_CURRENT[5] = fsc;
     FSC_LAST[5] = start_fsc;
+    }
 }
 
 int INCREMENT_SD_LIB(uint8_t sid)
@@ -259,6 +264,7 @@
 {
     uint32_t block_number;
     int result = 10;
+    if(SD_STATUS == DEVICE_POWERED){
     if(sid==0x01)
     {
         //block_number=SD_SCP_FIRST+(fsc%(SD_SCP_LAST-SD_SCP_FIRST+1))-1;
@@ -319,6 +325,7 @@
         }
         return result;
     }
+    }
     return 1;
 }
 
--- a/main.cpp	Tue Jul 12 17:54:30 2016 +0000
+++ b/main.cpp	Thu Jul 14 13:07:30 2016 +0000
@@ -28,10 +28,11 @@
 #include "Flash.h"
 #include "CDMS_PL.h"
 #include "FMS_all.h"
+#include "Compression.h"
 #include "COM_MNG_TMTC.h"
 #include "COM_POWER_ON_TX.h"
 #include "COM_POWER_OFF_TX.h"
-#include "Compression.h"
+
 #include "ThreadsAndFunctions.h"
 #include "TEST_PL.h"
 
@@ -85,6 +86,47 @@
                             gPC.puts("exit_adf\r\n");\
 }
 
+
+#define BAE_tc(tm_ptr) {\
+    Base_tc *bae_tc = new  Long_tc;\
+    bae_tc->next_TC = NULL;\
+    PUTshort_or_long(bae_tc,0);\
+    PUTcrc_pass(bae_tc,0x1);\
+    PUTexec_status(bae_tc,0);\
+    bae_tc->TC_string[0] = 0x01;\
+    bae_tc->TC_string[1] = 0x71;\
+    bae_tc->TC_string[2] = 0x81;\
+    bae_tc->TC_string[3] = 0x32;\
+    bae_tc->TC_string[4] = 0;\
+    bae_tc->TC_string[5] = 0;\
+    bae_tc->TC_string[6] = 0;\
+    bae_tc->TC_string[7] = 0;\
+    bae_tc->TC_string[8] = 0;\    
+    uint16_t crc16 = crc16_gen(bae_tc->TC_string, 9);\
+    bae_tc->TC_string[9]  = (uint8_t)(crc16 & 0xFF00)>>8;\
+    bae_tc->TC_string[10] = (uint8_t)(crc16 & 0x00FF);\
+    for(uint8_t i=11;i<135;i++)\
+        bae_tc->TC_string[i] = 0;\
+    tm_ptr =  FCTN_CDMS_RLY_TMTC(bae_tc);\
+    delete bae_tc;\
+    Base_tm *temp;\
+    temp = tm_ptr;\
+    while(tm_ptr!=NULL)\
+    {\
+        temp = temp->next_TM;\
+        delete tm_ptr;\
+        tm_ptr = temp;\        
+    }\
+}
+
+void BAE_TC();
+void BAE_TC()
+{
+    Base_tm *tm_ptr = new Long_tm;     
+    BAE_tc(tm_ptr);    
+}
+
+
 int main()
 {
     
@@ -102,7 +144,7 @@
     
     // COMMON SPI
     spi.format(8,0);
-    spi.frequency(1000000);
+    spi.frequency(500000);
 
     // SD CARD
     cs_sd = 1;
@@ -110,7 +152,7 @@
     gCS_ADF = 1;
     
     FCTN_CDMS_INIT_RTC();/* rtc initialization*/
-    //FCTN_CDMS_SD_INIT();/* sd card initialization*/
+    FCTN_CDMS_SD_INIT();/* sd card initialization*/
     
     
     //uint8_t test[512] = {0};
@@ -142,14 +184,15 @@
     
     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);
     
-    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);
     
-    
+    /*Timeout flipper;
+    flipper.attach(BAE_TC,31);*/
     
     /*while(1){
     gPC.printf("PL_TC sending\r\n");