Repository for CDMS code

Dependencies:   SimpleDMA mbed-rtos mbed eeprom

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

Files at this revision

API Documentation at this revision

Comitter:
ee12b079
Date:
Sat Mar 12 14:07:32 2016 +0000
Parent:
127:8a7bee7b8e8b
Child:
140:be4eea8275c3
Commit message:
corrected some errors in obsrs.h

Changed in this revision

COM_MNG_TMTC.h.orig Show diff for this revision Revisions of this file
COM_SND_TM.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
DefinitionsAndGlobals.h.orig Show diff for this revision Revisions of this file
OBSRS.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
main.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp.orig Show diff for this revision Revisions of this file
--- a/COM_MNG_TMTC.h.orig	Fri Feb 26 13:01:11 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1585 +0,0 @@
-// 8 Jul
-// did flowchart of states
-
-// handle sd card with cdms team
-
-// Jun 6
-// WHAT IS TC exec code in L1 ack ? 
-
-//Jan 7 
-//added RLY_TMTC function
-//added included related files
-
-//#include "Flash.h"
-#include "cdms_rtc.h"
-
-DigitalIn tm_status_4m_slv(PIN39); //I2C interrupt to CDMS from BAE
-//DigitalIn tm_status_4m_pl(PIN61); //I2C interrupt to CDMS from PL
-
-uint8_t received = 0;
-uint16_t mid1;
-uint16_t mid2;
-uint16_t Nbytes;
-uint32_t Data[2];
-uint16_t nbytes;
-uint8_t flash_counter = 0;
-uint16_t crc16;
-uint16_t mid;
-uint32_t block;
-
-#define delete_TC(tc_ptr) {\
-    if(tc_ptr == gHEAD_NODE_TCL){\
-        gHEAD_NODE_TCL = tc_ptr->next_TC;\
-    }\
-    delete tc_ptr;\
-}
-
-// typeof tm_ptr: Base_tm
-// typeof tc_ptr: Base_tc
-// typeof temp_xxxx: uint8_t
-#define fill_l1_ack(tm_ptr) {\
-    tm_ptr->next_TM = NULL;\
-    tm_ptr->TM_string[0] = TMID_ACK_L1 << 4;\
-    /*PENDING: PA TEMPERATURE*/\
-    tm_ptr->TM_string[1] = gTOTAL_INCORRECT_SIZE_TC & 0xFF;\
-    tm_ptr->TM_string[2] = gTOTAL_CRC_FAIL_TC & 0xFF;\
-}
-
-#define put_crc_l1_ack(tm_ptr) {\
-    tm_ptr->TM_string[2] = gTOTAL_CRC_FAIL_TC & 0xFF;\
-    /*TC LIST STATUS*/\
-    tm_ptr->TM_string[3] |= (gMASTER_STATE << 5) & 0xE0;\
-    /*PA HOT*/\
-    if( gFLAGS & COM_PA_HOT_FLAG ){\
-        tm_ptr->TM_string[3] |= (1 << 4);\
-    }\
-    else{\
-        tm_ptr->TM_string[3] &= ~(1 << 4);\
-    }\
-    uint16_t crc_checksum = crc16_gen(tm_ptr->TM_string, TM_SHORT_SIZE-2);\
-    tm_ptr->TM_string[TM_SHORT_SIZE-2] = (crc_checksum >> 8) & 0xFF;\
-    tm_ptr->TM_string[TM_SHORT_SIZE-1] = crc_checksum & 0xFF;\
-}
-
-#define detect_ack(tm_ptr, temp_ack, tc_psc) {\
-    if( tm_ptr != NULL ){\
-        int length = TM_SHORT_SIZE;\
-        if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
-            length = TM_SHORT_SIZE;\
-        }\
-        else{\
-            length = TM_LONG_SIZE;\
-        }\
-        uint16_t crc = crc16_gen(tm_ptr->TM_string, length-2);\
-        if( (((crc & 0xFF00) >> 8) == tm_ptr->TM_string[length-2]) && ( (crc & 0x00FF) == tm_ptr->TM_string[length-1] ) ){\
-            uint8_t temp8;\
-            temp8 = tm_ptr->TM_string[TM_ACK_CODE_INDEX];\
-            temp8 = temp8 & 0xE0;\
-            if( (temp8 == 0xC0) || (temp8 == 0xA0) )\
-                temp_ack = 0x01;\
-            else{\
-                temp_ack = 0x00;\
-                /*CHECK FOR NACK CODE: CRC FAIL NACK*/\
-                temp8 = tm_ptr->TM_string[TM_ACK_CODE_INDEX];\
-                temp8 = temp8 & 0x0F;\
-                if( temp8 == CRC_FAIL_NACK_CODE ){\
-                    tm_ptr->TM_string[2] = tc_psc;\
-                }\
-            }\
-        }\
-        else\
-            temp_ack = 0x00;\
-    }\
-    else{\
-        temp_ack = 0x00;\
-    }\
-}
-
-#define isit_obosc(tc_ptr, temp_obosc) {\
-    temp_obosc = 0x00;\
-    if( GETapid(tc_ptr) == APID_COM ){\
-        if( ((tc_ptr->TC_string[2]) >> 4) == SERVICE_OBOSC ){\
-            temp_obosc = 0x01;\
-        }\
-    }\
-}
-
-#define isit_sdcard(tc_ptr, temp_sdcard) {\
-    temp_sdcard = 0x00;\
-    if( GETapid(tc_ptr) == APID_COM ){\
-        if( ( (tc_ptr->TC_string[2]) >> 4) == SERVICE_OBSRS ){\
-            temp_sdcard = 0x01;\
-        }\
-    }\
-}
-
-#define isPAhot(returnHere){\
-    /*PENDING : COMPLETE THIS FUNCTION*/\
-    returnHere = 0xFF;\
-}
-
-void after_cooling_pa(){
-    gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
-}
-
-/*
-@brief:     check for missing tc, also check crc, i.e. 
-            if true execution can be started else have to wait
-            decide the next state
-@param:     none
-@return:    bool indicating whether there are missing tc
-*/
-// PENDING: LAST FRAME BIT
-/*
-for loop: check for missing tc
-if: check for incorrect sized tc
-if: check for last frame bit
-*/
-#define continueToExecute(returnHere) {\
-    uint8_t tempReturn = 0x00;\
-    /*search for missing psc*/\
-    for(uint8_t p = 0x00 ; p < (gTOTAL_VALID_TC) ; ++p){\
-        bool flag = false;\
-        Base_tc *node_ptr = gHEAD_NODE_TCL;\
-        while(node_ptr != NULL){\
-            if( (GETpacket_seq_count(node_ptr) == p) && (GETcrc_pass(node_ptr) == 1) ){\
-                flag = true;\
-                break;\
-            }\
-            else{\
-                node_ptr = node_ptr->next_TC;\
-            }\
-        }\
-        if(flag == false){\
-            tempReturn = 0x02;\
-            break;\
-        }\
-    }\
-    /*search for last packet bit*/\
-    tempReturn = tempReturn + 0x01;\
-    Base_tc *tcp = gHEAD_NODE_TCL;\
-    while(tcp != NULL){\
-        if(GETpacket_seq_count(tcp) == (gTOTAL_VALID_TC - 1)){\
-            if( ( (tcp->TC_string[1]) & 0x20 ) == 0x20 ){\
-                tempReturn = tempReturn - 0x01;\
-            }\
-            break;\
-        }\
-        tcp = tcp->next_TC;\
-    }\
-    returnHere = tempReturn;\
-    /*UPDATE gMASTER STATE*/\
-    if( (returnHere == 0x00) ){\
-        if( (gMASTER_STATE == TCL_STATE_INCOMPLETE) || (gMASTER_STATE == TCL_STATE_COMPLETED) || (gMASTER_STATE == TCL_STATE_ABORTED) ){\
-            gMASTER_STATE = TCL_STATE_EXECUTING;\
-        }\
-    }\
-    else{\
-        if( (gMASTER_STATE == TCL_STATE_INCOMPLETE) || (gMASTER_STATE == TCL_STATE_COMPLETED) ){\
-            gMASTER_STATE = TCL_STATE_INCOMPLETE;\
-        }\
-    }\
-}
-
-/*
-return 1 if code match
-return 0 if code mismatch
-*/
-#define GScodeVerification(returnHere){\
-    Base_tc *testTC = gHEAD_NODE_TCL;\
-    uint16_t overflowCount = 0;\
-    returnHere = 0xFF;\
-    while( (overflowCount < TCL_OVERFLOW_CONSTANT) && (testTC != NULL) ){\
-        if( (GETpacket_seq_count(testTC) == PSC_CALLSIGN) && (GETapid(testTC) == APID_CALLSIGN) ){\
-            /*uint8_t temp8 = testTC->TC_string[1];*/\
-            if( true ){\
-                for( int i = 2 ; i <= 8 ; ++i ){\
-                    if( testTC->TC_string[i] != gGSCODE[i-2] ){\
-                        returnHere = 0;\
-                        break;\
-                    }\
-                }\
-            }\
-            break;\
-        }\
-        testTC = testTC->next_TC;\
-        ++overflowCount;\
-    }\
-}
-
-/*
-@brief:     DELETE THE CRC FAILED TC FROM THE LIST TO FREE-UP MEMORY AND UPDATE 
-            THE TOTAL VALID TC AND GENERATE L1_ACK_TM
-@param:     none
-@return:    none
-*/
-/*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 */
-#define get_ack_l1( tm_ptr ){\
-    Base_tc *current_TC = gHEAD_NODE_TCL;\
-    Base_tm *l1_ack = new Short_tm;\
-    /*APPEND TO THE tm_ptr HERE*/\
-    tm_ptr = l1_ack;\
-    fill_l1_ack(l1_ack);\
-    int TC_count = 0;\
-    int overflowCountL1 = 0;\
-    while(current_TC != NULL){\
-        if( overflowCountL1 < TCL_OVERFLOW_CONSTANT ){\
-            /*IF CRC PASS*/\
-            if( (GETcrc_pass(current_TC) == 1) ){\
-                if(TC_count > 4){\
-                    /*PENDING: FILL TC_EXEC_CODE, APPEND CRC TO THE TM*/\
-                    put_crc_l1_ack( l1_ack );\
-                    /*extend the TM linked list*/\
-                    TC_count = 0;\
-                    l1_ack->next_TM = new Short_tm;\
-                    l1_ack = l1_ack->next_TM;\
-                    fill_l1_ack(l1_ack);\
-                }\
-                /*PSC starts from 7th byte*/\
-                l1_ack->TM_string[6+TC_count] = GETpacket_seq_count(current_TC);\
-                /*TC exec status*/\
-                switch(TC_count){\
-                    case 0:\
-                        l1_ack->TM_string[3] = (GETexec_status(current_TC)) & 0x0F;\
-                        break;\
-                    case 1:\
-                        l1_ack->TM_string[4] = (GETexec_status(current_TC) << 4) & 0xF0;\
-                        break;\
-                    case 2:\
-                        l1_ack->TM_string[4] |= (GETexec_status(current_TC)) & 0x0F;\
-                        break;\
-                    case 3:\
-                        l1_ack->TM_string[5] = (GETexec_status(current_TC) << 4) & 0xF0;\
-                        break;\
-                    case 4:\
-                        l1_ack->TM_string[5] |= (GETexec_status(current_TC)) & 0x0F;\
-                }\
-                ++TC_count;\
-            }\
-            current_TC = current_TC->next_TC;\
-            ++overflowCountL1;\
-        }\
-        else{\
-            /*PENDING: RESET CDMS*/\
-            break;\
-        }\
-    }\
-    /*FILL UP THE REMAINING FIELDS WITH 0x00 as PSC, AND 0xF as tc exec status*/\
-    if( (TC_count < 5) && (TC_count != 0) ){\
-        while(TC_count < 5){\
-            l1_ack->TM_string[6+TC_count] = 0x00;\
-            switch(TC_count){\
-                case 1:\
-                    l1_ack->TM_string[4] = 0xF0;\
-                    break;\
-                case 2:\
-                    l1_ack->TM_string[4] |= 0x0F;\
-                    break;\
-                case 3:\
-                    l1_ack->TM_string[5] = 0xF0;\
-                    break;\
-                case 4:\
-                    l1_ack->TM_string[5] |= 0x0F;\
-            }\
-            ++TC_count;\
-        }\
-    }\
-    put_crc_l1_ack(l1_ack);\
-}
-
-/*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 */
-#define get_tc_list(tm_ptr, thePSC){\
-    uint8_t TM_PSC = 0xFF;\
-    uint8_t TC_PSC = thePSC;\
-    int overflowCount = 0;\
-    uint8_t TC_LIST_TAG = 0x00;\
-    Base_tc *temp_tc = gHEAD_NODE_TCL;\
-    bool first_time = true;\
-    Base_tm *current_tm = NULL;\
-    while( temp_tc != NULL ){\
-        if( overflowCount < TCL_OVERFLOW_CONSTANT ){\
-            TM_PSC = TM_PSC + 1;\
-            /*Increment TM_PSC for every new TM pointer created*/\
-            Base_tm *temp_tm = new Long_tm;\
-            temp_tm->next_TM = NULL;\
-            temp_tm->TM_string[0] = 0x38;\
-            /*Frame type(1) = 0; TMID = 0111; Spare = 000*/\
-            temp_tm->TM_string[1] = TC_PSC;\
-            temp_tm->TM_string[3] = TM_PSC;\
-            int indexCustom = 4, num_of_short_tc = 0;\
-            while(temp_tc != NULL){\
-                if( overflowCount < TCL_OVERFLOW_CONSTANT ){\
-                    if( GETshort_or_long_tc(temp_tc) == SHORT_TC_CODE ){\
-                        for( int i = 0 ; i < TC_SHORT_SIZE ; ++i ){\
-                            temp_tm->TM_string[indexCustom + i] = temp_tc->TC_string[i];\
-                        }\
-                        indexCustom = indexCustom + TC_SHORT_SIZE;\
-                        ++overflowCount;\
-                        /*INCREMENT STUFF*/\
-                        temp_tc = temp_tc->next_TC;\
-                        num_of_short_tc = num_of_short_tc + 1;\
-                        if (temp_tc == NULL){\
-                            for (int i = indexCustom ; i < TM_LONG_SIZE-2 ; ++i){\
-                                temp_tm->TM_string[i] = 0;\
-                                /*Fill remaining values with 0*/\
-                            }\
-                            TC_LIST_TAG = num_of_short_tc;\
-                            break;\
-                        }\
-                        if( (GETshort_or_long_tc(temp_tc) == LONG_TC_CODE) || (num_of_short_tc == OBOSC_TCL_MAX_SHORT_SIZE) ){\
-                            /*Next TC is long or memory is filled*/\
-                            for(int i = indexCustom; i < TM_LONG_SIZE-2 ; ++i){\
-                                temp_tm->TM_string[i] = 0;\
-                                /*Fill remaining values with 0*/\
-                            }\
-                            TC_LIST_TAG = num_of_short_tc;\
-                            break;\
-                        }\
-                    }\
-                    else if (TC_LIST_TAG == OBOSC_TCL_TAG_LONG_FIRST_HALF){\
-                        /*Long TC, 2nd half*/\
-                        for (int i = 0; i < OBOSC_LONG_TC_SECOND_HALF_SIZE ; ++i){\
-                            temp_tm->TM_string[indexCustom + i] = temp_tc->TC_string[OBOSC_LONG_TC_FIRST_HALF_SIZE + i];\
-                            /*Fill the TM with TC_values*/\
-                        }\
-                        for (int i = OBOSC_LONG_TC_SECOND_HALF_SIZE + indexCustom ; i < TM_LONG_SIZE-2 ; ++i ){\
-                            temp_tm->TM_string[i] = 0;\
-                            /*Fill remaining values with 0*/\
-                        }\
-                        temp_tc = temp_tc->next_TC;\
-                        TC_LIST_TAG = OBOSC_TCL_TAG_LONG_SECOND_HALF;\
-                        ++overflowCount;\
-                        break;\
-                    }\
-                    else{\
-                        /*Long TC, 1st half */\
-                        for (int i = 0; i < OBOSC_LONG_TC_FIRST_HALF_SIZE; ++i){\
-                            /*gPC.printf("indexCustom = %d\r\n", indexCustom);*/\
-                            temp_tm->TM_string[indexCustom + i] = temp_tc->TC_string[i];\
-                            /*Fill the TM with TC_values*/\
-                        }\
-                        for (int i = OBOSC_LONG_TC_FIRST_HALF_SIZE + indexCustom ; i < TM_LONG_SIZE-2 ; ++i ){\
-                            temp_tm->TM_string[i] = 0;\
-                            /*Fill remaining values with 0*/\
-                        }\
-                        TC_LIST_TAG = OBOSC_TCL_TAG_LONG_FIRST_HALF;\
-                        break;\
-                    }\
-                }\
-                else{\
-                    /*PENDING: reset cdms*/\
-                    break;\
-                }\
-            }\
-            temp_tm->TM_string[2] = TC_LIST_TAG;\
-            /*TC_LIST_TAG as is updated in the inner while loop*/\
-            uint16_t crc16 = crc16_gen(temp_tm->TM_string, TM_LONG_SIZE-2);\
-            temp_tm->TM_string[TM_LONG_SIZE-2] = (crc16 & 0xFF00) >> 8 ;\
-            temp_tm->TM_string[TM_LONG_SIZE-1] = crc16 & 0x00FF;\
-            /*Attach this new node to the TM linked list*/\
-            if( first_time ){\
-                first_time = false;\
-                tm_ptr = temp_tm;\
-                current_tm = temp_tm;\
-            }\
-            else{\
-                current_tm->next_TM = temp_tm;\
-                current_tm = current_tm->next_TM;\
-            }\
-            /*Attach this new node at the end*/\
-        }\
-        else{\
-            /*PENDING: reset CDMS*/\
-            break;\
-        }\
-    }\
-}
-
-// CDMS TEAM CODE START
-inline Base_tm* FCTN_CDMS_RLY_TMTC(Base_tc *tc_ptr){
-    uint8_t ACKCODE = 0x00;
-    //printf("\rTC execution in progress\r\n");
-    Base_tm *tm_pointer = new Long_tm;
-    Base_tm *tm_ptr = tm_pointer;
-    received = 0;
-    switch(GETapid(tc_ptr))
-    {
-        case 1: //apid=01 implies it corresponds to bae
-        {
-            //printf("Telecommand is for BAE\r\n");
-            //printf("Sending TC to BAE...\r\n"); //interrupt to be sent to the bae
-            FCTN_I2C_WRITE((char*)tc_ptr->TC_string);
-            while(1)
-            {
-                wait(1); //TimeOut instead of wait
-                if(tm_status_4m_slv == 1)
-                {
-                    //printf("receiving...\r\n");
-                    FCTN_I2C_READ((char*)tm_pointer->TM_string,134);
-                    //printf("%s", tm_pointer->TM_string);
-                    received+=1;
-                    tm_pointer = tm_pointer->next_TM;
-                    break; //only for testing purpose
-                }
-                else
-                {
-                    break;
-                }
-            }
-            if(received >= 1 )
-            {
-                //printf("Telemetry is received from BAE\r\n");
-                Base_tm *tm_print = tm_ptr;
-                for(uint8_t i=0;i<received;i++)
-                {  
-                    //printf("%s", tm_print->TM_string);
-                    tm_print = tm_print->next_TM; //for check
-                }
-                received  = 0;
-                tm_pointer->next_TM = NULL;                 return tm_ptr;
-            }
-            else
-            {
-                //printf("Telemetry is not received from BAE\r\n");
-                //tm_pointer = new Short_tm;
-                tm_pointer->TM_string[0] = 0xB0;
-                tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
-                tm_pointer->TM_string[2] = 0x01;
-                tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
-                tm_pointer->TM_string[4] = 0x01;
-                for(uint8_t i=0;i<6;i++)
-                {
-                    tm_pointer->TM_string[i+5] = 0;
-                }
-                crc16 = crc16_gen(tm_ptr->TM_string,11);
-                tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                tm_pointer->next_TM = NULL;                 return tm_ptr;
-            }
-            break;
-        }
-        case 2:
-        {
-            //gPC.printf("Telecommand is for CDMS\r\n"); //apid = 10 corresponds to cdms
-            switch(GETservice_type(tc_ptr))
-            {
-                case 0x60:
-                {
-                        //gPC.printf("service:MMS\r\n");
-                        switch(GETservice_subtype(tc_ptr))
-                        {
-                            case 0x1:
-                            {
-                            //printf("sub_service:Read from RAM_Memory\r\n");
-                            mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);                                                       
-                                                             
-                                    //Data[0] = FCTN_CDMS_RD_FLASH(0);
-                                    //Data[1] = FCTN_CDMS_RD_FLASH(1);
-                                    //tm_pointer = new Long_tm;
-                                    tm_pointer->TM_string[0] = 0x30;
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
-                                    tm_pointer->TM_string[2] = (uint8_t)(flash_counter);
-                                    for(uint8_t i=0;i<4;i++)
-                                    {
-                                        tm_pointer->TM_string[3+i] = (uint8_t)((Data[0]>>(8*i))&0x00FF);
-                                    }
-                                    for(uint8_t i=4;i<8;i++)
-                                    {
-                                        tm_pointer->TM_string[3+i] = (uint8_t)((Data[1]>>(8*i))&0x00FF);
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,9);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                tm_pointer->next_TM = NULL;                 return tm_ptr;
-                            }                            
-                            case 0x2:
-                            {
-                            //printf("sub_service:Read from Flash_Memory\r\n");
-                            mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);                           
-                                                                                             
-                                    //Data[0] = FCTN_CDMS_RD_FLASH(0);
-                                    //Data[1] = FCTN_CDMS_RD_FLASH(1);                                                                                             
-                                    //tm_pointer = new Long_tm;
-                                    tm_pointer->TM_string[0] = 0x30;
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
-                                    tm_pointer->TM_string[2] = (uint8_t)(flash_counter);
-                                    for(uint8_t i=0;i<4;i++)
-                                    {
-                                        tm_pointer->TM_string[3+i] = (uint8_t)((Data[0]>>(8*i))&0x00FF);
-                                    }
-                                    for(uint8_t i=4;i<8;i++)
-                                    {
-                                        tm_pointer->TM_string[3+i] = (uint8_t)((Data[1]>>(8*i))&0x00FF);
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,9);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                tm_pointer->next_TM = NULL;                 return tm_ptr;
-                            }                           
-                            case 0x5:
-                            {
-                            //printf("WRITE ON FLASH_MEMORY\r\n");                          
-                                    mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);                                   
-                                    block = (((uint32_t)(tc_ptr->TC_string[5])<<24)|((uint32_t)(tc_ptr->TC_string[5])<<16)|((uint32_t)(tc_ptr->TC_string[5])<<8)|((uint32_t)(tc_ptr->TC_string[5])));
-                                    //FCTN_CDMS_WR_FLASH(mid,block);
-                                    //tm_pointer = new Short_tm;
-                                    tm_pointer->TM_string[0] = 0xB0;
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
-                                    tm_pointer->TM_string[2] = 0x01;
-                                    tm_pointer->TM_string[3] = ACKCODE;  //ackcode to be decided
-                                    tm_pointer->TM_string[4] = 0x01;
-                                    for(uint8_t i=0;i<6;i++)
-                                    {
-                                        tm_pointer->TM_string[i+5] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                            }                                                    
-                            default:
-                            {
-                                //printf("INVALID TC\r\n"); //Send Invalid TC Telemetry
-                                //tm_pointer = new Short_tm;
-                                tm_pointer->TM_string[0] = 0xB0;
-                                tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
-                                tm_pointer->TM_string[2] = 0x01;
-                                tm_pointer->TM_string[3] = ACKCODE;  //ackcode to be decided
-                                tm_pointer->TM_string[4] = 0x01;
-                                for(uint8_t i=0;i<6;i++)
-                                {
-                                    tm_pointer->TM_string[i+5] = 0;
-                                }
-                                crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                tm_pointer->next_TM = NULL;                 return tm_ptr;                               
-                            }
-                            break;
-                        }
-                    }                                                                   
-                    case 0x8:
-                    {
-                        //printf("service:FUNCTION MANAGEMENT SERVICE\r\n"); 
-                        if(GETservice_subtype(tc_ptr)==0x1)
-                            {                               
-                              if(GETpid(tc_ptr)==0x01)
-                                {
-                                    //printf("TC_PL_INIT\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }                                
-                                else if(GETpid(tc_ptr)==0x02)
-                                {
-                                    //printf("TC_PL_MAIN\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                               else if(GETpid(tc_ptr)==0x03)
-                                {
-                                    //printf("TC_COM_INIT\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x04)
-                                {
-                                    //printf("TC_CDMS_HK_MAIN\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                    
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;                                   
-                                }
-                                else if(GETpid(tc_ptr)==0x11)
-                                {
-                                    //printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x12)
-                                {
-                                    //printf("TC_SW_ON_RTC\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                    
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x13)
-                                {
-                                    //printf("TC_SW_ON_BAE\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x14)
-                                {
-                                    //printf("TC_SW_ON_PL_DL\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                    
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                 else if(GETpid(tc_ptr)==0x15)
-                                {
-                                    //printf("TC_SW_ON_PL_AG_HV\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                 else if(GETpid(tc_ptr)==0x16)
-                                {
-                                    //printf("TC_SW_ON_V_A_EN\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;                                   
-                                }
-                                else if(GETpid(tc_ptr)==0x21)
-                                {
-                                    //printf("TC_SW_OFF_SD\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x22)
-                                {
-                                    //printf("TC_SW_OFF_RTC\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                    
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x23)
-                                {
-                                    //printf("TC_SW_OFF_BAE\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x24)
-                                {
-                                    //printf("TC_SW_OFF_PL_DL\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                 else if(GETpid(tc_ptr)==0x25)
-                                {
-                                    //printf("TC_SW_OFF_PL_AG_HV\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                 else if(GETpid(tc_ptr)==0x26)
-                                {
-                                    //printf("TC_SW_OFF_V_A_EN\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                    
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x31)
-                                {
-                                    //printf("TC_RST_SD\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x32)
-                                {
-                                    //printf("TC_RST_RTC\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x33)
-                                {
-                                    //printf("TC_RST_BAE\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0x34)
-                                {
-                                    //printf("TC_RST_PL_DL\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0xC1)
-                                {
-                                    //printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = ACKCODE;                                   
-                                    for(uint8_t i=3;i<11;i++)
-                                    {
-                                        tm_pointer->TM_string[i] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                    break;
-                                }
-                                else if(GETpid(tc_ptr)==0xF1)
-                                {
-                                    //printf("RD_RTC\r\n"); //call RD_RTC
-                                    //tm_pointer = new Short_tm;
-                                    tm_pointer->TM_string[0] = 0xD0;
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
-                                    tm_pointer->TM_string[2] = 0x01;
-                                    uint64_t time = FCTN_CDMS_RD_RTC();
-                                    tm_pointer->TM_string[3] = (uint8_t)((time&0xFF00000000000000)>>56);
-                                    tm_pointer->TM_string[4] = (uint8_t)((time&0x00FF000000000000)>>48);
-                                    tm_pointer->TM_string[5] = (uint8_t)((time&0x0000FF0000000000)>>40);
-                                    tm_pointer->TM_string[6] = (uint8_t)((time&0x000000FF00000000)>>32);
-                                    tm_pointer->TM_string[7] = (uint8_t)((time&0x00000000FF000000)>>24);
-                                    tm_pointer->TM_string[8] = (uint8_t)((time&0x0000000000FF0000)>>16);
-                                    tm_pointer->TM_string[9] = (uint8_t)((time&0x000000000000FF00)>>8);
-                                    tm_pointer->TM_string[10] = (uint8_t)(time&0x00000000000000FF);
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                }                               
-                                else 
-                                {
-                                    //printf("INVALID TC\r\n");
-                                    //tm_pointer = new Short_tm; 
-                                    tm_pointer->TM_string[0] = 0xB0; 
-                                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                                    tm_pointer->TM_string[2] = 0x01;
-                                    tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
-                                    tm_pointer->TM_string[4] = 0x01;
-                                    for(uint8_t i=0;i<6;i++)
-                                    {
-                                        tm_pointer->TM_string[i+5] = 0;
-                                    }
-                                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                                }
-                            }                          
-                                              
-                                     
-                }
-                default:
-                {
-                    //printf("INVALID TC"); //send invalid TC TM
-                    //tm_pointer = new Short_tm; 
-                    tm_pointer->TM_string[0] = 0xB0; 
-                    tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-                    tm_pointer->TM_string[2] = 0x01;
-                    tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
-                    tm_pointer->TM_string[4] = 0x01;
-                    for(uint8_t i=0;i<6;i++)
-                    {
-                        tm_pointer->TM_string[i+5] = 0;
-                    }
-                    crc16 = crc16_gen(tm_ptr->TM_string,11);
-                    tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-                    tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-                    tm_pointer->next_TM = NULL;                 return tm_ptr;
-                    break;
-                }
-            }
-        }
-        case 3:
-        {
-            //printf("Telecommand is for PL\r\n");
-            // printf("Informing PL about TC using I2C\r\n"); //interrupt to be sent to the bae
-            // FCTN_I2C_WRITE((char*)tc_ptr->TC_string);
-            // printf("sent the Telecommand to BAE\r\n"); //packet along with crc will be sent when bae is ready
-            // wait(1); //wait time is to be optimised
-            // if(tm_status_4m_slv == 1)
-            // {
-            //     FCTN_I2C_READ((char*)tm_ptr->TM_string);
-            //     received = 1;
-            // }
-            // if(received == 1 )
-            // {
-            //     printf("Telemetry is received from BAE\r\n");
-            //     printf("%s", tm_ptr->TM_string);
-            //     received  = 0;
-            // } // similar to BAE functions
-            break;
-        }
-        default: //invalid TC
-        {
-            //printf("INVALID TC\r\n");
-            //tm_pointer = new Short_tm; 
-            tm_pointer->TM_string[0] = 0xB0; 
-            tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
-            tm_pointer->TM_string[2] = 0x01;
-            tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
-            tm_pointer->TM_string[4] = 0x01;
-            for(uint8_t i=0;i<6;i++)
-            {
-                tm_pointer->TM_string[i+5] = 0;
-            }
-            crc16 = crc16_gen(tm_ptr->TM_string,11);
-            tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
-            tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
-            tm_pointer->next_TM = NULL;                 return tm_ptr;
-            break;
-        }
-     }
-}
-// CDMS TEAM CODE END
-// EXECUTE OBOSC
-#define execute_obosc_core(tc_ptr, tm_ptr, reset_flag) {\
-    uint8_t service_subtype = (tc_ptr->TC_string[2]) & 0x0F;\
-    uint8_t temp8 = 0x00;\
-    Base_tc *modify_this = gHEAD_NODE_TCL;\
-    int modify_overflow = 0x00;\
-    switch( service_subtype ){\
-        case OBOSC_SUB_DISABLE:\
-            /*gPC.puts("target psc are ");*/\
-            for(int i = 3 ; i < 9 ; ++i){\
-                /*gPC.printf("%u ", tc_ptr->TC_string[i]);*/\
-            }\
-            /*gPC.puts("\r\n");*/\
-            /*gPC.puts("disable type obosc\r\n");*/\
-            while( modify_this != NULL ){\
-                if( modify_overflow < TCL_OVERFLOW_CONSTANT ){\
-                    uint8_t modify_psc = GETpacket_seq_count(modify_this);\
-                    /*gPC.printf("mosify_psc = %u\r\n", modify_psc);*/\
-                    for( int i = 3 ; i < 9 ; ++i ){\
-                        uint8_t target_psc = tc_ptr->TC_string[i];\
-                        if( (target_psc == modify_psc) && (target_psc != 0) ){\
-                            uint16_t tempExec = TC_STATE_DISABLED;\
-                            PUTexec_status( modify_this, tempExec );\
-                            break;\
-                        }\
-                    }\
-                    modify_this = modify_this->next_TC;\
-                    ++modify_overflow;\
-                }\
-                else{\
-                    /*PENDING: RESET CDMS*/\
-                    break;\
-                }\
-            }\
-            break;\
-        case OBOSC_SUB_RETRY:\
-            /*gPC.puts("retry type obosc\r\n");*/\
-            while( modify_this != NULL ){\
-                if( modify_overflow < TCL_OVERFLOW_CONSTANT ){\
-                    uint8_t modify_psc = GETpacket_seq_count(modify_this);\
-                    for( int i = 3 ; i < 9 ; ++i ){\
-                        uint8_t target_psc = tc_ptr->TC_string[i];\
-                        if( (target_psc == modify_psc) && (target_psc != 0) ){\
-                            uint16_t tempExec = TC_STATE_MARKED_RETRY;\
-                            PUTexec_status( modify_this, tempExec );\
-                            /*gPC.puts("reqquired tc found: disable\r\n");*/\
-                            break;\
-                        }\
-                    }\
-                    modify_this = modify_this->next_TC;\
-                    ++modify_overflow;\
-                }\
-                else{\
-                    /*PENDING: RESET CDMS*/\
-                    break;\
-                }\
-            }\
-            break;\
-    }\
-    Base_tm *ackl234new = new Short_tm;\
-    ackl234new->next_TM = NULL;\
-    /*return telemetry pointer here*/\
-    tm_ptr = ackl234new;\
-    ackl234new->TM_string[0] = TMID_ACK_L234 << 4;\
-    ackl234new->TM_string[1] = GETpacket_seq_count(tc_ptr);\
-    ackl234new->TM_string[2] = 0xA0;\
-    for(int i = 3; i < 11; ++i){\
-        ackl234new->TM_string[i] = 0x00;\
-    }\
-    uint16_t crc = crc16_gen(ackl234new->TM_string, TM_SHORT_SIZE-2);\
-    ackl234new->TM_string[11] = (crc & 0xFF00) >> 8;\
-    ackl234new->TM_string[12] = crc & 0x00FF;\
-    /*ack l234 old*/\
-    if( service_subtype == OBOSC_SUB_REP_LE ){\
-        if( gLAST_TM_SHORT_OR_LONG == SHORT_TM_CODE ){\
-            Base_tm *ackl234old = new Short_tm;\
-            ackl234old->next_TM = NULL;\
-            /*APPEND TO ACK L234 NEW HERE*/\
-            ackl234new->next_TM = ackl234old;\
-            for( int i = 0 ; i < TM_SHORT_SIZE ; ++i ){\
-                ackl234old->TM_string[i] = gLAST_TM[i];\
-            }\
-        }\
-        else{\
-            Base_tm *tempLongTM = new Long_tm;\
-            tempLongTM->next_TM = NULL;\
-            /*APPEND TO ACK L234 NEW HERE*/\
-            ackl234new->next_TM = tempLongTM;\
-            for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){\
-                tempLongTM->TM_string[i] = gLAST_TM[i];\
-            }\
-        }\
-    }\
-    else if( service_subtype == OBOSC_SUB_REP_TCLD ){\
-        get_tc_list(ackl234new->next_TM, GETpacket_seq_count(tc_ptr));\
-    }\
-    else if( service_subtype == OBOSC_SUB_RESET ){\
-        /*reset_all;*/\
-        reset_flag = 1;\
-        /*PENDING: VERIFY reset_all, RESET CDMS*/\
-    }\
-    else if( (service_subtype != OBOSC_SUB_DISABLE) && (service_subtype != OBOSC_SUB_RETRY) ){\
-        /*CHANGE THE ACK CODE TO INVALID TC*/\
-        ackl234new->TM_string[2] = 0xA2;\
-    }\
-    /*gPC.puts("completed obosc\r\n");*/\
-}
-
-/*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 */
-#define get_call_sign(tm_ptr) {\
-    Base_tm* call_sign_tm = new Short_tm;\
-    call_sign_tm->next_TM = NULL;\
-    tm_ptr = call_sign_tm;\
-    for( int i = 0 ; i < TM_SHORT_SIZE ; ++i ){\
-        call_sign_tm->TM_string[i] = gCALL_SIGN_STRING[i];\
-    }\
-}
-
-#define EXECUTE_OBOSC_ONLY {\
-    int reset_flag = 0;\
-    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;\
-        while( current_TC != NULL ){\
-            if( overCount < TCL_OVERFLOW_CONSTANT ){\
-                if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
-                    /*CHECK FOR OBOSC*/\
-                    uint8_t temp82 = 0x00;\
-                    isit_obosc(current_TC, temp82);\
-                    if(temp82 == 0x01){\
-                        uint16_t current_exec_status = GETexec_status(current_TC);\
-                        if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) )\
-                            break;\
-                        else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
-                            /*gPC.printf("It is obosc: %u\r\n", execute_psc);*/\
-                            /*EXECUTION OF OBOSC TC*/\
-                            /*WARNING: LARGE MEMORY UTILIZATION FOR TC-LIST-REPORT */\
-                            Base_tm *obosc_tm_head = NULL;\
-                            get_call_sign(obosc_tm_head);\
-                            Base_tm *obosc_tm_core = NULL;\
-                            execute_obosc_core(current_TC, obosc_tm_core, reset_flag);\
-                            uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
-                            PUTexec_status(current_TC, temp16);\
-                            Base_tm *obosc_tm_current = obosc_tm_head;\
-                            get_ack_l1(obosc_tm_current->next_TM);\
-                            int overflowCountOBONLY = 0;\
-                            while( obosc_tm_current->next_TM != NULL ){\
-                                if( overflowCountOBONLY < TM_OVERFLOW_CONSTANT ){\
-                                    obosc_tm_current = obosc_tm_current->next_TM;\
-                                    ++overflowCountOBONLY;\
-                                }\
-                                else{\
-                                    /*PENDING: RESET CDMS*/\
-                                    break;\
-                                }\
-                            }\
-                            obosc_tm_current->next_TM = obosc_tm_core;\
-                            obosc_tm_current = obosc_tm_head;\
-                            while( obosc_tm_current != NULL ){\
-                                int length = TM_SHORT_SIZE;\
-                                if( GETshort_or_long_tm(obosc_tm_current) == SHORT_TM_CODE ){\
-                                    length = TM_SHORT_SIZE;\
-                                }\
-                                else{\
-                                    length = TM_LONG_SIZE;\
-                                }\
-                                for(int i = 0 ; i < length ; ++i){\
-                                    /*gPC.putc(obosc_tm_current->TM_string[i]);*/\
-                                }\
-                                obosc_tm_current = obosc_tm_current->next_TM;\
-                            }\
-                            /*Sending OBOSC TM to GS*/\
-                            /*snd_tm.head_pointer(obosc_tm_head);*/\
-                            /*transmit_adf;*/\
-                            /*DELETE THE TM AFTER USE*/\
-                            obosc_tm_current = obosc_tm_head;\
-                            int overCount = 0;\
-                            while( obosc_tm_current != NULL ){\
-                                if( (overCount < TM_OVERFLOW_CONSTANT) ){\
-                                    Base_tm *temp = obosc_tm_current->next_TM;\
-                                    delete obosc_tm_current;\
-                                    obosc_tm_current = temp;\
-                                    ++overCount;\
-                                }\
-                                else{\
-                                    /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/\
-                                    break;\
-                                }\
-                            }\
-                            if ( reset_flag ==1 ){\
-                                reset_all;\
-                            }\
-                        }\
-                    }\
-                }\
-                current_TC = current_TC->next_TC;\
-                ++overCount;\
-            }\
-            else{\
-                /*PENDING: REST CDMS: MEMORY LEAK FOUND*/\
-                break;\
-            }\
-        }\
-    }\
-}
-
-#define EXECUTE_TC {\
-    gMASTER_STATE = TCL_STATE_EXECUTING;\
-    /*gPC.printf("%u\r\n", gTOTAL_VALID_TC);*/\
-    for(uint8_t execute_psc = PSC_START_VALUE ; execute_psc < gTOTAL_VALID_TC ; ++execute_psc ){\
-        /*gPC.printf("executing normal %u\r\n", execute_psc);*/\
-        /*gLEDG = !gLEDG;*/\
-        /*gLEDR = !gLEDR;*/\
-        Base_tc* current_TC = gHEAD_NODE_TCL;\
-        int overflowCount = 0;\
-        while(current_TC != NULL){\
-            if( overflowCount < TCL_OVERFLOW_CONSTANT ){\
-                if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
-                    uint8_t current_exec_status = GETexec_status(current_TC);\
-                    if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) ){\
-                        /*gPC.printf("disabled or completed at %u\n", execute_psc);*/\
-                        break;\
-                    }\
-                    else if( (current_exec_status == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
-                        /*gPC.printf("abort on nack at %u psc\r\n", execute_psc);*/\
-                        gMASTER_STATE = TCL_STATE_ABORTED;\
-                        Base_tm *tm_ptr_head = NULL;\
-                        get_call_sign(tm_ptr_head);\
-                        Base_tm *tm_ptr = tm_ptr_head;\
-                        get_ack_l1(tm_ptr->next_TM);\
-                        tm_ptr = tm_ptr_head;\
-                        while( tm_ptr != NULL ){\
-                            int length = TM_SHORT_SIZE;\
-                            if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
-                                length = TM_SHORT_SIZE;\
-                            }\
-                            else{\
-                                length = TM_LONG_SIZE;\
-                            }\
-                            /*gPC.puts("Printing Call Sign, ACK_L1, TM list");*/\
-                            for(int i = 0 ; i < length ; ++i){\
-                                /*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;*/\
-                        /*DELETE THE TM AFTER USE*/\
-                        tm_ptr = tm_ptr_head;\
-                        int overflowCountExecute = 0;\
-                        while(tm_ptr != NULL){\
-                            if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
-                                Base_tm *temp = tm_ptr->next_TM;\
-                                delete tm_ptr;\
-                                tm_ptr = temp;\
-                                ++overflowCountExecute;\
-                            }\
-                            else{\
-                                /*PENDING: RESET CDMS*/\
-                                break;\
-                            }\
-                        }\
-                        break;\
-                    }\
-                    else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
-                        /*EXECUTION OF TC START*/\
-                        uint8_t temp81 = 0x00;\
-                        isit_sdcard(current_TC, temp81);\
-                        if( temp81 == 0x00 ){\
-                            /*gPC.printf("non sd card at %u\r\n", execute_psc);*/\
-                            /*EXECUTION OF NON SD-CARD (BOTH OBOSC and CDMS functions)*/\
-                            Base_tm *tm_ptr_head = NULL;\
-                            get_call_sign(tm_ptr_head);\
-                            Base_tm *put_tm_here = NULL;\
-                            uint8_t temp82 = 0x00;\
-                            uint8_t tempPAhot = 0x00;\
-                            isit_obosc(current_TC, temp82);\
-                            if(temp82 == 0x01){\
-                                /*gPC.printf("obosc tc inside normal tc at %u\r\n", execute_psc);*/\
-                                /*EXECUTION OF OBOSC TC*/\
-                                /*SKIP EXECUTION OF OBOSC HERE*/\
-                                break;\
-                            }\
-                            else{\
-                                /*gPC.printf("cdms relay tmtc at %u\r\n", execute_psc);*/\
-                                /*call CDMS_RLY_TMTC*/\
-                                /*CDMS_RLY_TMTC(current_TC, put_tm_here);*/\
-                                put_tm_here =  FCTN_CDMS_RLY_TMTC(current_TC);\
-                            }\
-                            /*DETECT ACK OR NACK*/\
-                            uint8_t temp83 = 0x00;\
-                            uint8_t temp84 = GETpacket_seq_count(current_TC);\
-                            detect_ack(put_tm_here, temp83, temp84);\
-                            if( temp83 == 0x01){\
-                                uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
-                                PUTexec_status(current_TC, temp16);\
-                            }\
-                            else{\
-                                /*gPC.puts("TC_STATE_EXECUTION_FAILED");*/\
-                                uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
-                                PUTexec_status(current_TC, temp16);\
-                            }\
-                            /*ABORT ON NACK AND TC LIST COMPLETED: UPDATE IN gMASTERSTATE*/\
-                            if( (GETexec_status(current_TC) == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
-                                gMASTER_STATE = TCL_STATE_ABORTED;\
-                            }\
-                            else if( execute_psc == (gTOTAL_VALID_TC-1) ){\
-                                /*LAST TC IS EXECUTED*/\
-                                gMASTER_STATE = TCL_STATE_COMPLETED;\
-                            }\
-                            else{\
-                                uint8_t check1 = 1;\
-                                for( uint8_t test_psc = execute_psc+1 ; test_psc < gTOTAL_VALID_TC ; ++test_psc ){\
-                                    Base_tc* test_TC = gHEAD_NODE_TCL;\
-                                    while(test_TC != NULL){\
-                                        if( GETpacket_seq_count(test_TC) == test_psc ){\
-                                            uint8_t checkval;\
-                                            isit_obosc(test_TC, checkval);\
-                                            if( checkval == 0 ){\
-                                                check1 = 0;\
-                                            }\
-                                        }\
-                                        test_TC = test_TC->next_TC;\
-                                    }\
-                                }\
-                                if( check1 == 0x01 ){\
-                                    gMASTER_STATE = TCL_STATE_COMPLETED;\
-                                }\
-                            }\
-                            /*update last executed L1_ack*/\
-                            if( put_tm_here != NULL ){\
-                                if( GETshort_or_long_tm(put_tm_here) == SHORT_TM_CODE ){\
-                                    for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
-                                        gLAST_TM[i] = put_tm_here->TM_string[i];\
-                                        gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;\
-                                    }\
-                                }\
-                                else{\
-                                    for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){\
-                                        gLAST_TM[i] = put_tm_here->TM_string[i];\
-                                        gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;\
-                                    }\
-                                }\
-                            }\
-                            /*PENDING: APPEND ACK L1*/\
-                            Base_tm *tm_ptr = tm_ptr_head;\
-                            get_ack_l1(tm_ptr->next_TM);\
-                            int overflowCountExecute = 0;\
-                            while( tm_ptr->next_TM != NULL ){\
-                                if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
-                                    tm_ptr = tm_ptr->next_TM;\
-                                    ++overflowCountExecute;\
-                                }\
-                                else{\
-                                    /*PENDING: RESET CDMS*/\
-                                    break;\
-                                }\
-                            }\
-                            tm_ptr->next_TM = put_tm_here;\
-                            /*CHECK FOR HOT PA*/\
-                            isPAhot(tempPAhot);\
-                            if( tempPAhot == 0x00 ){\
-                                gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\
-                            }\
-                            tm_ptr = tm_ptr_head;\
-                            while( tm_ptr != NULL ){\
-                                int length = TM_SHORT_SIZE;\
-                                if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
-                                    length = TM_SHORT_SIZE;\
-                                }\
-                                else{\
-                                    length = TM_LONG_SIZE;\
-                                }\
-                                /*gPC.puts("Printing Call Sign, ACK_L1, TM list");*/\
-                                for(int i = 0 ; i < length ; ++i){\
-                                    /*gPC.putc(tm_ptr->TM_string[i]);*/\
-                                }\
-                                tm_ptr = tm_ptr->next_TM;\
-                            }\
-                            /*SEND call sign, ACK_L1, NON OBSRS TM TO GS*/\
-                            snd_tm.head_pointer(tm_ptr_head);\
-                            gPC.puts("enter_adf\r\n");\
-                            transmit_adf;\
-                            gPC.puts("exit_adf\r\n");\ 
-                            /*DELETE THE TM AFTER USE*/\
-                            tm_ptr = tm_ptr_head;\
-                            overflowCountExecute = 0;\
-                            while(tm_ptr != NULL){\
-                                if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
-                                    Base_tm *temp = tm_ptr->next_TM;\
-                                    delete tm_ptr;\
-                                    tm_ptr = temp;\
-                                    ++overflowCountExecute;\
-                                }\
-                                else{\
-                                    /*PENDING: RESET CDMS*/\
-                                    break;\
-                                }\ 
-                            }\
-                        }\
-                        else{\
-                            /*gPC.printf("sd card at %u\r\n", execute_psc);*/\
-                            /*EXECUTION OF SD-CARD DATA SENDING (OBSRS)*/\
-                            Base_tm *tm_ptr_head = NULL;\
-                            get_call_sign(tm_ptr_head);\
-                            Base_tm *put_tm_here = NULL;\
-                            /*execute_obsrs(current_TC, put_tm_here)*/\
-                            /*read_TC(current_TC);*/\
-                            execute_OBSRS_TC(current_TC);\
-                            gPC.puts("en_adf");\
-                            transmit_adf;\
-                            gPC.puts("ex_adf");\
-                            uint8_t tempExec = TC_STATE_SUCCESSFULLY_EXECUTED;\
-                            PUTexec_status(current_TC, tempExec);\
-                            /*PENDING: ABORT ON NACK CHECK, gMASTER_STATE VERIFICATION WITH SD CARD, session timeout, last executed ack l234*/\
-                            if( (GETexec_status(current_TC) == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
-                                gMASTER_STATE = TCL_STATE_ABORTED;\
-                            }\
-                            else if( execute_psc == (gTOTAL_VALID_TC-1) ){\
-                                gMASTER_STATE = TCL_STATE_COMPLETED;\
-                            }\
-                            else{\
-                                uint8_t check1 = 1;\
-                                for( uint8_t test_psc = execute_psc+1 ; test_psc < gTOTAL_VALID_TC ; ++test_psc ){\
-                                    Base_tc* test_TC = gHEAD_NODE_TCL;\
-                                    while(test_TC != NULL){\
-                                        if( GETpacket_seq_count(test_TC) == test_psc ){\
-                                            uint8_t checkval;\
-                                            isit_obosc(test_TC, checkval);\
-                                            if( checkval == 0 ){\
-                                                check1 = 0;\
-                                            }\
-                                        }\
-                                        test_TC = test_TC->next_TC;\
-                                    }\
-                                }\
-                                if( check1 == 0x01 ){\
-                                    gMASTER_STATE = TCL_STATE_COMPLETED;\
-                                }\
-                            }\
-                            /*update last executed L1_ack*/\
-                            if( put_tm_here != NULL ){\
-                                if( GETshort_or_long_tm(put_tm_here) == SHORT_TM_CODE ){\
-                                    for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
-                                        gLAST_TM[i] = put_tm_here->TM_string[i];\
-                                        gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;\
-                                    }\
-                                }\
-                                else{\
-                                    for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){\
-                                        gLAST_TM[i] = put_tm_here->TM_string[i];\
-                                        gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;\
-                                    }\
-                                }\
-                            }\
-                            /*PENDING: APPEND ACK L1*/\
-                            Base_tm *tm_ptr = tm_ptr_head;\
-                            get_ack_l1(tm_ptr->next_TM);\
-                            int overflowCountExecute = 0;\
-                            while( tm_ptr->next_TM != NULL ){\
-                                if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
-                                    tm_ptr = tm_ptr->next_TM;\
-                                    ++overflowCountExecute;\
-                                }\
-                                else{\
-                                    /*PENDING: RESET CDMS*/\
-                                    break;\
-                                }\
-                            }\
-                            tm_ptr->next_TM = put_tm_here;\
-                            /*CHECK FOR HOT PA*/\
-                            uint8_t tempPAhot = 0x00;\
-                            isPAhot(tempPAhot);\
-                            if( tempPAhot == 0x00 ){\
-                                gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\
-                            }\
-                            tm_ptr = tm_ptr_head;\
-                            while( tm_ptr != NULL ){\
-                                int length = TM_SHORT_SIZE;\
-                                if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
-                                    length = TM_SHORT_SIZE;\
-                                }\
-                                else{\
-                                    length = TM_LONG_SIZE;\
-                                }\
-                                /*gPC.puts("Printing Call Sign, ACK_L1, TM list");*/\
-                                for(int i = 0 ; i < length ; ++i){\
-                                    /*gPC.putc(tm_ptr->TM_string[i]);*/\
-                                }\
-                                tm_ptr = tm_ptr->next_TM;\
-                            }\
-                            /*SEND call sign, ACK_L1, OBSRS TO GS*/\
-                            /*snd_tm.head_pointer(tm_ptr_head);*/\
-                            /*adf_SDcard();*/\
-                            /*DELETE THE TM AFTER USE*/\
-                            tm_ptr = tm_ptr_head;\
-                            overflowCountExecute = 0;\
-                            while(tm_ptr != NULL){\
-                                if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
-                                    Base_tm *temp = tm_ptr->next_TM;\
-                                    delete tm_ptr;\
-                                    tm_ptr = temp;\
-                                    ++overflowCountExecute;\
-                                }\
-                                else{\
-                                    /*PENDING: RESET CDMS*/\
-                                    break;\
-                                }\
-                            }\
-                        }\
-                    }\
-                    break;\
-                }\
-                current_TC = current_TC->next_TC;\
-                ++overflowCount;\
-            }\
-            else{\
-                /*PENDING: RESET CDMS*/\
-                break;\
-            }\
-        }\
-        if( gFLAGS & COM_SESSION_TIMEOUT_FLAG ){\
-            break;\
-        }\
-        else if( gMASTER_STATE == TCL_STATE_ABORTED ){\
-            /*gPC.puts("ABORTING DUE TO ABORT ON NACK\r\n");*/\
-            /*EXITED DUE TO ABORT ON NACK:*/\
-            /*PENDING : POWER OFF COM TX*/\
-            RX1M.attach(&rx_read, Serial::RxIrq);\
-            gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
-            break;\
-        }\
-        else if( gFLAGS & COM_PA_HOT_FLAG ){\
-            /*PA HOT: WAIT FOR TIMEOUT*/\
-            gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);\
-            /*PENDING : POWER OFF COMM TX*/\
-            RX1M.attach(&rx_read, Serial::RxIrq);\
-            gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
-            break;\
-        }\
-        /*gPC.printf("successflly executed %u tc\r\n", execute_psc);*/\
-    }\
-    if( (gMASTER_STATE == TCL_STATE_COMPLETED) || (gFLAGS & COM_SESSION_TIMEOUT_FLAG) ){\
-        /*gPC.printf("completed or session timed out: %x\r\n", gMASTER_STATE);*/\
-        /*COMPLETED EXECUTION OF TC*/\
-        gMASTER_STATE = TCL_STATE_COMPLETED;\
-        COM_POWER_OFF_TX;\
-        reset_all;\
-        /*PENDING : ENABLE THREADS*/\
-        gSESSION_TIMEOUT.detach();\
-        gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
-        gFLAGS = gFLAGS & (~COM_SESSION_FLAG);\
-    }\
-}
\ No newline at end of file
--- a/COM_SND_TM.h	Fri Feb 26 13:01:11 2016 +0000
+++ b/COM_SND_TM.h	Sat Mar 12 14:07:32 2016 +0000
@@ -267,8 +267,6 @@
         DS_state = !DS_state;\
         if (DS_f){\
             DS_f = false;\
-            if(bypass_adf == 1)\
-                print_tm(ptr);\
             exor(ptr);\
             convolution(ptr);\
             interleave(convoluted_frame,interleave_data[0]);\
@@ -425,8 +423,9 @@
                                 TOTAL_SEGMENT_NO -= SEGMENT_NO;
                                 reset_adf = true;//what does this do??
                                 Sframe = true;
+                                junk_f = true;
                            }
-                        junk_f = true;
+                        
                     }
                     continue;
                 }
--- a/DefinitionsAndGlobals.h	Fri Feb 26 13:01:11 2016 +0000
+++ b/DefinitionsAndGlobals.h	Sat Mar 12 14:07:32 2016 +0000
@@ -1,6 +1,6 @@
 // **************DEFINITIONS*********************
 
-#define bypass_adf 0
+#define bypass_adf 1
 
 // COM_RX
     #define RX_TIMEOUT_LIMIT 0.5
--- a/DefinitionsAndGlobals.h.orig	Fri Feb 26 13:01:11 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-// **************DEFINITIONS*********************
-
-#define bypass_adf 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 USBTX
-    #define COM_RX_UART_RX USBRX
-    
-// COMMON SPI
-    #define SPI_MOSI PTE1
-    #define SPI_MISO PTE3
-    #define SPI_CLK PTE2
-    #define SPI_CS_ADF PTA15
-    #define SPI_CS_SDC PIN20
-    #define SPI_CS_RTC PIN26
-    
-// COM_TX
-    #define COM_TX_CONFIG_LIMIT 3
-    #define COM_TX_TICKER_LIMIT 32
-
-// ADF INTERRUPUT
-    #define ADF_IRQ PTA14
-
-// TC LIST
-    #define TCL_STATE_INCOMPLETE 0x00
-    #define TCL_STATE_ABORTED 0x03
-    #define TCL_STATE_EXECUTING 0x04   
-    #define TCL_STATE_COMPLETED 0x05
-    #define TCL_STATE_EXCEEDED_LIMIT 0x06
-
-// LIST OF FLAGS
-    #define UART_INT_FLAG 0x0001
-    #define NEW_TC_RECEIVED 0x0002
-    #define COM_SESSION_FLAG 0x0004
-    #define COM_RX_FLAG 0x0008
-    #define COM_MNG_TMTC_RUNNING_FLAG 0x0010
-    #define COM_SESSION_VALIDITY 0x0020
-    #define ALL_CRC_PASS_FLAG 0x0040
-    #define COM_PA_HOT_FLAG 0x0080
-    #define COM_TX_FLAG 0x0100
-    #define COM_SESSION_TIMEOUT_FLAG 0x0200
-
-// COM_MNG_TMTC THREAD
-    #define SESSION_TIME_LIMIT 1500
-    #define COM_MNG_TMTC_SIGNAL_UART_INT 0x01
-    #define COM_MNG_TMTC_SIGNAL_ADF_NSD 0x02
-    #define COM_MNG_TMTC_SIGNAL_ADF_SD 0x03
-    #define SCIENCE_SIGNAL 0x04
-// COM_MNG_TMTC
-    #define COM_PA_COOLING_TIME_LIMIT 20
-    #define COM_MAX_TC_LIMIT 200
-    #define TM_ACK_CODE_INDEX 2
-    #define CRC_FAIL_NACK_CODE 0x01
-    
-    // call sign
-    #define PSC_CALLSIGN 0x00
-    #define APID_CALLSIGN 0x00
-    
-    // max value of telecommands in a tcl
-    #define TCL_OVERFLOW_CONSTANT 256
-    #define TM_OVERFLOW_CONSTANT 256
-
-    // starting value of packet sequence count at each pass 
-    #define PSC_START_VALUE 1
-    
-    // APID list
-    #define APID_COM 0
-    #define APID_BAE 1
-    #define APID_CDMS 2
-    #define APID_SPEED 3
-    
-    //SERVICE
-    #define SERVICE_OBOSC 0xB
-    #define SERVICE_OBSRS 0xF
-    
-    // HIGH PRIORITY TC - priority list
-    // not correct values here
-    #define HPTC1 5
-    #define HPTC2 6
-    // Add more entries above
-    
-    // SIZE of tc in bytes
-    #define TC_SHORT_SIZE 11
-    #define TC_LONG_SIZE 135
-    
-    // TMID list
-    #define TMID_ACK_L1 0xA
-    #define TMID_ACK_L234 0xB
-    #define TMID_TCL 0x7
-    #define TMID_CALL_SIGN 0xE
-
-// OBOSC SERVICE SUBTYPE
-    #define OBOSC_TCL_MAX_SHORT_SIZE 11
-    #define OBOSC_LONG_TC_FIRST_HALF_SIZE 67
-    #define OBOSC_LONG_TC_SECOND_HALF_SIZE 68
-    #define OBOSC_TCL_TAG_LONG_FIRST_HALF 0x10
-    #define OBOSC_TCL_TAG_LONG_SECOND_HALF 0x11
-
-    #define OBOSC_SUB_DISABLE 0x01
-    #define OBOSC_SUB_RETRY 0x05
-    #define OBOSC_SUB_REP_TCLD 0x06
-    #define OBOSC_SUB_REP_LE 0x0F
-    #define OBOSC_SUB_RESET 0x07
-    
-// PAYLOAD or SCIENCE
-    #define PAYLOAD_BUFFER_LENGTH 6723
-    #define PAY_SPI_MOSI PTE18
-    #define PAY_SPI_MISO PTE19
-    #define PAY_SPI_CLK PTE17
-    #define PAY_SPI_CS PTE16
-    
-    
-// ****************GLOBAL VARIABLES******************
-// DEBUG
-Serial gPC( USBTX, USBRX );
-DigitalOut gLEDR(LED_RED);
-DigitalOut gLEDG(LED_GREEN);
-
-// COM_RX
-RawSerial RX1M( COM_RX_UART_TX, COM_RX_UART_RX );
-COM_RX_DATA_NODE *gRX_HEAD_DATA_NODE = NULL;
-COM_RX_DATA_NODE *gRX_CURRENT_DATA_NODE = NULL;
-// uint8_t *gRX_CURRENT_PTR = NULL;
-uint32_t gRX_COUNT = 0;
-uint16_t gTOTAL_INCORRECT_SIZE_TC = 0x00;
-uint16_t gTOTAL_CRC_FAIL_TC = 0x00;
-uint16_t gTOTAL_REPEATED_TC = 0x00;
-
-// COMMON SPI
-SPI spi( SPI_MOSI, SPI_MISO, SPI_CLK );
-DigitalOut gCS_ADF(SPI_CS_ADF);
-DigitalOut cs_sd(SPI_CS_SDC);
-DigitalOut gCS_RTC(SPI_CS_RTC);
-Mutex SPI_mutex;
-
-// TC LIST
-Base_tc* gHEAD_NODE_TCL = NULL;
-Base_tc* gLAST_NODE_TCL = NULL;
-uint8_t gMASTER_STATE = TCL_STATE_INCOMPLETE;
-uint16_t gFLAGS = 0x0000;
-
-// COM_MNG_TMTC THREAD
-Thread* gCOM_MNG_TMTC_THREAD = NULL;
-Timeout gRX_TIMEOUT;
-Timeout gSESSION_TIMEOUT;
-
-// COM_MNG_TMTC
-
-// PA cooling timeout
-Timeout gCOM_PA_COOLING_TIMEOUT;
-
-// GS code for verification
-const uint8_t gGSCODE[] = {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-uint8_t gTOTAL_VALID_TC = 0x00;
-// USE LAST_L1_ACK FOR GENERATING REPORT
-uint8_t gLAST_TM[TM_LONG_SIZE];
-uint8_t gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;
-
-// PAYLOAD OR SCIENCE_THREAD
-Thread* gSCIENCE_THREAD = NULL;
-dmaSPISlave gPAY_SPI(PAY_SPI_MOSI, PAY_SPI_MISO, PAY_SPI_CLK, PAY_SPI_CS);
-uint8_t gPAYLOAD_BUFFER[PAYLOAD_BUFFER_LENGTH];
-
-// CALL SIGN TM
-const uint8_t gCALL_SIGN_STRING[TM_SHORT_SIZE] = {0xE0, 0x00, 0x00, 0x00, 0x56, 0x55, 0x32, 0x4E, 0x43, 0x46, 0x00, 0xAC, 0x11};
-
-// CDMS HK
-CDMS_HK_actual actual_data;
-CDMS_HK_quant quant_data;
-CDMS_HK_min_max min_max_data;
-bool firstCount=true;
\ No newline at end of file
--- a/OBSRS.h	Fri Feb 26 13:01:11 2016 +0000
+++ b/OBSRS.h	Sat Mar 12 14:07:32 2016 +0000
@@ -269,8 +269,8 @@
                     new_OBSRS_TC = false;\                   
                     get_call_sign(callsign);\
                     snd_tm.head_pointer(callsign);\
+                    int temp = snd_tm.make_shor_tm();\
                     delete callsign;\
-                    int temp = snd_tm.make_shor_tm();\
                }\
                else{\
                    enable_read_block = true;\
@@ -514,8 +514,8 @@
                         gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;
                     }
                 }
+                ack_and_callsign = ack_head;
                 delete ack_head;
-                ack_and_callsign = ack_head;
                 while(ack_and_callsign != NULL){
                     Base_tm *temp = ack_and_callsign->next_TM;
                     delete ack_and_callsign;
--- a/adf.h	Fri Feb 26 13:01:11 2016 +0000
+++ b/adf.h	Sat Mar 12 14:07:32 2016 +0000
@@ -214,7 +214,10 @@
         spi.write(0x18);\
         spi.write(0x20);\
         for(unsigned char i=0; i<112;i++){\
-            spi.write(buffer_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]));*/\
         }\
     }\
@@ -222,7 +225,10 @@
         spi.write(0x18);\
         spi.write(0x90);\
         for(unsigned char i=0; i<112;i++){\
-            spi.write(buffer_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]));*/\
         }\
     }\
--- a/main.cpp	Fri Feb 26 13:01:11 2016 +0000
+++ b/main.cpp	Sat Mar 12 14:07:32 2016 +0000
@@ -45,7 +45,7 @@
     
     // DEBUG
     //gPC.puts("welcome to mng_tm_tc\r\n");
-    gPC.baud(1200);
+    gPC.baud(115200);
     
     // COMMON SPI
     spi.format(8,0);
--- a/main.cpp.orig	Fri Feb 26 13:01:11 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-// TESTING PUSH PULL IN MAIN CPP
-
-#include "mbed.h"
-
-#define DEBUG 1
-
-#include "SimpleDMA.h"
-#include "dmaSPIslave.h"
-#include "rtos.h"
-#include "mbed_debug.h"
-
-#include "Structures.h"
-#include "pinconfig.h"
-#include "DefinitionsAndGlobals.h"
-#include "crc.h"
-#include "i2c.h"
-#include "COM_SND_TM_functions.h"
-#include "COM_SND_TM.h"
-#include "cdms_sd.h"
-//#include "CDMS_HK.h"
-#include "OBSRS.h"
-#include "adf.h"
-#include "COM_RCV_TC.h"
-#include "COM_MNG_TMTC.h"
-#include "COM_POWER_ON_TX.h"
-#include "COM_POWER_OFF_TX.h"
-#include "Compression.h"
-#include "ThreadsAndFunctions.h"
-
-//void set_sig(){gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);}
-int main()
-{
-    //gLEDR = 1;
-    
-    // ******************INITIALISATIONS START******************
-    // COM RX
-    RX1M.baud(1200);
-    gRX_HEAD_DATA_NODE = new COM_RX_DATA_NODE;
-    gRX_HEAD_DATA_NODE->next_node = NULL;
-    gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;
-    gRX_COUNT = 0;
-//    gRX_CURRENT_PTR = gRX_CURRENT_DATA_NODE->values;
-    RX1M.attach(&rx_read, Serial::RxIrq);
-    
-    // DEBUG
-    //gPC.puts("welcome to mng_tm_tc\r\n");
-    gPC.baud(1200);
-    
-    // COMMON SPI
-    spi.format(8,0);
-    spi.frequency(1000000);
-
-    // SD CARD
-    cs_sd = 1;
-    gCS_RTC = 1;
-    gCS_ADF = 1;
-    
-    FCTN_CDMS_INIT_RTC();/* rtc initialization*/
-    FCTN_CDMS_SD_INIT();/* sd card initialization*/
-    
-    #if DEBUG
-    gPC.puts("welcome to mng_tmtc\r\n");
-    #endif
-    
-    // COM_MNG_TMTC THREAD
-    gCOM_MNG_TMTC_THREAD = new Thread(COM_MNG_TMTC_FUN);
-    gCOM_MNG_TMTC_THREAD->set_priority(osPriorityAboveNormal);
-    #if DEBUG
-    gPC.puts("allocating threads\r\n");
-    #endif
-    gSCIENCE_THREAD = new Thread(SCIENCE_FUN);
-   // gPC.puts("step one complete\r\n");
-    gSCIENCE_THREAD->set_priority(osPriorityBelowNormal);
-    #if DEBUG
-    gPC.puts("competed allocating threads\r\n");
-    #endif
-    
-    // *******************INITIALISATIONS END********************
-    
-    //RtosTimer gCDMS_HK_TIMER(FCTN_CDMS_HK_MAIN, osTimerPeriodic);
-    //gCDMS_HK_TIMER.start(5000);
-    
-    /*starting the thread with signal*/
-//    set_sig();
-    
-    /*Calculating Stack used*/
-    
-    int state;
-    /*while (true) { 
-    Thread::wait(500); 
-    state = gSCIENCE_THREAD->get_state(); 
-    //gPC.printf("Thread state %d\r\n", state); 
-    if(state == Thread::Inactive) 
-    {delete gSCIENCE_THREAD;
-    break;}
-    }*/
-    
-    
-    
-    while(true){
-        Thread::wait(osWaitForever);
-        //state = gCOM_MNG_TMTC_THREAD->get_state() + '0';
-         gLEDG = !gLEDG;
-        //gPC.putc(state); 
-    }
-}
\ No newline at end of file