Latest FM Code with EEPROM

Dependencies:   FreescaleIAP SimpleDMA eeprom mbed-rtos mbed

Fork of CDMS_QM_03MAR2017_Flash_with_obsrs by Team Fox

Revision:
356:4484bf39526f
Parent:
354:eb6c863756a8
--- a/COM_MNG_TMTC.h	Tue Mar 28 08:50:07 2017 +0000
+++ b/COM_MNG_TMTC.h	Sat Feb 24 10:28:56 2018 +0000
@@ -10,7 +10,6 @@
 //added RLY_TMTC function
 //added included related files
 
-//#include "Flash.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
@@ -18,7 +17,8 @@
 #define COM_MNG_TMTC_H
 
 #include "dmaSPIslave.h"
-
+//#include "FMS_all.h"//remove these
+//#include "Compression.h"//remove these
 #define RESET_CDMS NVIC_SystemReset()
 
 
@@ -446,6 +446,8 @@
                             FCTN_CDMS_RD_L_RAM(tm_ptr);
                             if(mid == 0x0001)
                             FCTN_CDMS_MAX_MIN(tm_ptr);
+                            if(mid == 0x0002)
+                            FCTN_SCP_CALIB_A(tm_ptr, mid);
                             
                             crc16 = crc16_gen(tm_ptr->TM_string,132);
                             tm_ptr->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
@@ -461,16 +463,16 @@
                             Base_tm *tm_ptr_short = new Short_tm;
                             if(mid == 0x0101 || mid==0x0102 || mid == 0x0103 || mid == 0x0100)                                  //allowable MID values?
                             {
-                                
-                                ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+                                //FCTN_CDMS_WR_S_FLASH(mid,(uint32_t)(tc_ptr->TC_string[5]<<24)+(uint32_t)(tc_ptr->TC_string[6]<<16)+(uint32_t)(tc_ptr->TC_string[7]<<8)+(uint32_t)(tc_ptr->TC_string[8]));                                                     
+                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));  
                                 return tm_ptr_short;
                             }                                                        
-
-                            //FCTN_CDMS_WR_S_FLASH(mid,(uint32_t)(tc_ptr->TC_string[5]<<24)+(uint32_t)(tc_ptr->TC_string[6]<<16)+(uint32_t)(tc_ptr->TC_string[7]<<8)+(uint32_t)(tc_ptr->TC_string[8]));                                                     
-
-                            ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));              
-
-                            return tm_ptr_short;
+                            else
+                            {
+                                ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+                                return tm_ptr_short;
+                            }
+                            
                         }
                         case 0x6:   //service subtye = WR_L_FLASH
                         {
@@ -486,9 +488,7 @@
                                 for(uint8_t z=24;z<32;z++)
                                     flasharray_thres[z] = scp_threshold_m0[z+8];
                                 
-   //                            FCTN_CDMS_WR_S_FLASH(mid,flasharray_thres);
-                                erase_sector(strt_add_thres);
-                                program_flash(strt_add_thres, (char*)flasharray_thres,32);
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
      
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
@@ -501,9 +501,7 @@
                                 for(uint8_t z=0;z<12;z++)
                                     flasharray_thres[z] = scp_threshold_m0[z+40];
                                 
-  //                              FCTN_CDMS_WR_S_FLASH(mid,flasharray_thres);
-                                erase_sector(strt_add_thres+SECTOR_SIZE);
-                                program_flash(strt_add_thres+SECTOR_SIZE, (char*)flasharray_thres,32);
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
                                 
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
@@ -516,9 +514,7 @@
                                 for(uint8_t z=0;z<32;z++)
                                     flasharray_thres[z] = scp_threshold_m1[z];
                                 
-  //                              THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
-                                 erase_sector(strt_add_thres+(2*SECTOR_SIZE));
-                                program_flash(strt_add_thres+(2*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
                                 
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
@@ -531,9 +527,7 @@
                                 for(uint8_t z=0;z<20;z++)
                                     flasharray_thres[z] = scp_threshold_m1[z+32];
                                 
- //                               THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
-                                erase_sector(strt_add_thres+(3*SECTOR_SIZE));
-                                program_flash(strt_add_thres+(3*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
                                 
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
@@ -560,10 +554,7 @@
                                 flasharray_thres[10] = scp_sfp_threshold_m0_2[1];
                                 flasharray_thres[11] = scp_sfp_threshold_m0_2[2];
                                 
-  //                              THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
-    
-                                erase_sector(strt_add_thres+(4*SECTOR_SIZE));
-                                program_flash(strt_add_thres+(4*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
                                 
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
@@ -580,10 +571,8 @@
                                 for(uint8_t z=24;z<32;z++)
                                     flasharray_thres[z] = sfp_threshold_m0[z+8];
                                 
-  //                              THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
-                                erase_sector(strt_add_thres+(5*SECTOR_SIZE));
-                                program_flash(strt_add_thres+(5*SECTOR_SIZE), (char*)flasharray_thres,32);
-                                
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
+                             
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
@@ -595,9 +584,8 @@
                                 for(uint8_t z=0;z<12;z++)
                                     flasharray_thres[z] = sfp_threshold_m0[z+40];
                                 
- //                               THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
-                                        erase_sector(strt_add_thres+(6*SECTOR_SIZE));
-                                program_flash(strt_add_thres+(6*SECTOR_SIZE), (char*)flasharray_thres,32);                             
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
+                           
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
@@ -609,10 +597,7 @@
                                 for(uint8_t z=0;z<32;z++)
                                     flasharray_thres[z] = sfp_threshold_m1[z];
                                 
- //                               THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
- 
-                                erase_sector(strt_add_thres+(7*SECTOR_SIZE));
-                                program_flash(strt_add_thres+(7*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
                                 
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
@@ -625,9 +610,7 @@
                                 for(uint8_t z=0;z<20;z++)
                                     flasharray_thres[z] = sfp_threshold_m1[z+32];
                                 
-//                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
-                                erase_sector(strt_add_thres+(8*SECTOR_SIZE));
-                                program_flash(strt_add_thres+(8*SECTOR_SIZE), (char*)flasharray_thres,32);
+                                THRES_WRITE_TO_EEPROM(mid,flasharray_thres);
                                 
                                 Base_tm *tm_ptr_short = new Short_tm;
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
@@ -651,7 +634,7 @@
                         if(GETpid(tc_ptr)==0x01)
                         {
                             Base_tm *tm_ptr_short = new Short_tm;
-                            if(CDMS_STANDBY==1)
+                            if(EN_CDMS_HK == 0 && EN_PL == 0 && EN_RCV_SC == 0)
                             {   
                                 //gPC.printf("TC_PL_INIT\r\n");                         // call PWR_SWCH_ON function
                                 
@@ -660,7 +643,7 @@
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                
-                            else if(CDMS_STANDBY==0)
+                            else
                             {
                                 ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
                                 return tm_ptr_short;
@@ -669,16 +652,17 @@
                         else if(GETpid(tc_ptr)==0x02)
                         {
                             Base_tm *tm_ptr_short = new Short_tm;
-                            if(CDMS_STANDBY==1)
+                            if(EN_CDMS_HK == 0 && EN_PL == 0 && EN_RCV_SC == 0)
                             {   
                                 //gPC.printf("TC_PL_MAIN\r\n");                         // call PWR_SWCH_ON function
-                                
+                                EN_PL = 1;
                                 P_PL_MAIN();
-
+                                EN_PL = 0;
+                                
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                
-                            else if(CDMS_STANDBY==0)
+                            else 
                             {
                                 ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
                                 return tm_ptr_short;
@@ -687,7 +671,7 @@
                         else if(GETpid(tc_ptr)==0x03)
                         {                            
                             Base_tm *tm_ptr_short = new Short_tm;
-                            if(CDMS_STANDBY==1)
+                            if(EN_CDMS_HK == 0 && EN_PL == 0 && EN_RCV_SC == 0)
                             {   
                                 //gPC.printf("PL_COM_INIT\r\n");                        // call PWR_SWCH_ON function
                                 
@@ -696,7 +680,7 @@
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                
-                            else if(CDMS_STANDBY==0)
+                            else
                             {
                                 ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
                                 return tm_ptr_short;
@@ -705,34 +689,59 @@
                         else if(GETpid(tc_ptr)==0x04)
                         {                            
                             Base_tm *tm_ptr_short = new Short_tm;
-                            if(CDMS_STANDBY==1)
+                            if(EN_CDMS_HK == 0 && EN_PL == 0 && EN_RCV_SC == 0)
                             {   
                                 //gPC.printf("TC_P_CDMS_HK_MAIN\r\n"); // call PWR_SWCH_ON function
+                                EN_CDMS_HK = 1;
+                                hk_count = 0;
+                                gHK_THREAD->signal_set(HK_SIGNAL);
+                                wait(1);
+                                EN_CDMS_HK = 0;
                                 
-                                //gHK_THREAD->signal_set(HK_SIGNAL);
-
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                
-                            else if(CDMS_STANDBY==0)
+                            else
                             {
                                 ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
                                 return tm_ptr_short;
                             }
                         }
                         else if(GETpid(tc_ptr)==0x05)
-                        {                            
+                        {   gPC.printf("...............0x%02X",GETpid(tc_ptr));                         
                             Base_tm *tm_ptr_short = new Short_tm;
-                            if(CDMS_STANDBY==1)
+                            if(EN_CDMS_HK == 0 && EN_PL == 0 && EN_RCV_SC == 0)
                             {   
+                                PL_RCV_SC_STATUS = 1;
                                 //gPC.printf("TC_SW_ON_SD\r\n");                        // call PWR_SWCH_ON function
-                                
-                                P_PL_RCV_SC_DATA();
-
-                                ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
-                                return tm_ptr_short;
+                                if(PL_STATE != 0x03)
+                                {   
+                                    Base_tm *tm_ptr_science;
+                                    SET_PL_BEE_SCIENCE(tm_ptr_science);
+                                }
+                                if(PL_RCV_SC_STATUS == 1)
+                                {
+                                    EN_RCV_SC = 1;
+                                    P_PL_RCV_SC_DATA();
+                                    EN_RCV_SC = 0;
+                                    PL_STATE = 0x03;
+                                    ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
+                                    return tm_ptr_short;
+                                }
+                                else if(PL_RCV_SC_STATUS == 2)
+                                {
+                                    gPC.printf("Not in Sci Ack failure\r\n");
+                                    ACK_L234(tm_ptr_short,0x8B,GETpacket_seq_count(tc_ptr));
+                                    return tm_ptr_short;
+                                }
+                                else if(PL_RCV_SC_STATUS == 3)
+                                {
+                                    gPC.printf("Not in Sci CRC failure\r\n");
+                                    ACK_L234(tm_ptr_short,0x8C,GETpacket_seq_count(tc_ptr));
+                                    return tm_ptr_short;
+                                }
                             }                
-                            else if(CDMS_STANDBY==0)
+                            else
                             {
                                 ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
                                 return tm_ptr_short;
@@ -741,7 +750,7 @@
                         else if(GETpid(tc_ptr)==0x06)
                         {                            
                             Base_tm *tm_ptr_short = new Short_tm;
-                            if(CDMS_STANDBY==1)
+                            if(EN_CDMS_HK == 0 && EN_PL == 0 && EN_RCV_SC == 0)
                             {   
                                 //gPC.printf("TC_SW_ON_RTC\r\n"); // call PWR_SWCH_ON function
                                 gPC.printf("SD _INIT\r\n");
@@ -750,7 +759,7 @@
                                 ACK_L234(tm_ptr_short,0xA0,GETpacket_seq_count(tc_ptr));
                                 return tm_ptr_short;
                             }                
-                            else if(CDMS_STANDBY==0)
+                            else
                             {
                                 ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr));                        //TC cannot be processed now
                                 return tm_ptr_short;
@@ -927,9 +936,9 @@
                             
                             if(tc_ptr->TC_string[4] == 0x00 || tc_ptr->TC_string[4] == 0x01)
                             EN_PL = tc_ptr->TC_string[4];
-                            else if(tc_ptr->TC_string[5] == 0x00 || tc_ptr->TC_string[5] == 0x01)
+                            if(tc_ptr->TC_string[5] == 0x00 || tc_ptr->TC_string[5] == 0x01)        //was else if changed to if to match the flowcharts - J
                             EN_CDMS_HK = tc_ptr->TC_string[5];
-                            else if(tc_ptr->TC_string[6] == 0x00 || tc_ptr->TC_string[6] == 0x01)
+                            if(tc_ptr->TC_string[6] == 0x00 || tc_ptr->TC_string[6] == 0x01)
                             EN_RCV_SC = tc_ptr->TC_string[6];
                             
                             Base_tm *tm_ptr_short = new Short_tm;
@@ -949,19 +958,22 @@
                         {          
                             //gPC.printf("TC_CDMS_RD_RTC\r\n"); // call PWR_SWCH_ON function
                             
-                            uint32_t time_temp = FCTN_CDMS_RD_RTC();                        //RTC_RD_EROR has to incorporated
+                            uint64_t time_temp = FCTN_CDMS_RD_RTC();                        //RTC_RD_EROR has to incorporated
                             Base_tm *tm_ptr = new Long_tm;
                             tm_ptr->TM_string[0] = 0x78;     
                             tm_ptr->TM_string[1] = GETpacket_seq_count(tc_ptr);                                    
                             tm_ptr->TM_string[2] = 0xA0;
                             tm_ptr->TM_string[3] = 0x00;
-                            tm_ptr->TM_string[4] = (uint8_t)((time_temp & 0xFF000000)>>24);
-                            tm_ptr->TM_string[5] = (uint8_t)((time_temp & 0x00FF0000)>>16);
-                            tm_ptr->TM_string[6] = (uint8_t)((time_temp & 0x0000FF00)>>8);
-                            tm_ptr->TM_string[7] = (uint8_t)((time_temp & 0x000000FF));
-                            for(uint8_t i=0;i<124;i++)
+                            tm_ptr->TM_string[4] = (uint8_t)((time_temp & 0x600000000)>>33);
+                            tm_ptr->TM_string[5] = (uint8_t)((time_temp & 0x1E0000000)>>29);
+                            tm_ptr->TM_string[6] = (uint8_t)((time_temp & 0x01F000000)>>24);
+                            tm_ptr->TM_string[7] = (uint8_t)((time_temp & 0x000F80000)>>19);
+                            tm_ptr->TM_string[8] = (uint8_t)((time_temp & 0x00007E000)>>13);
+                            tm_ptr->TM_string[9] = (uint8_t)((time_temp & 0x000001F80)>>7);
+                            tm_ptr->TM_string[10] = (uint8_t)((time_temp & 0x00000007F));
+                            for(uint8_t i=0;i<121;i++)
                             {
-                                tm_ptr->TM_string[i+8] = 0x00;
+                                tm_ptr->TM_string[i+11] = 0x00;
                             }
                             crc16 = crc16_gen(tm_ptr->TM_string,132);
                             tm_ptr->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
@@ -1000,9 +1012,9 @@
                                 return tm_ptr;
                             }
                         }
-                        else if(GETpid(tc_ptr)==0xF1)
+                        else if(GETpid(tc_ptr)==0xF2)
                         {
-                            CDMS_CALIB_RTC((uint64_t)(tc_ptr->TC_string[4])<<32 + (uint64_t)(tc_ptr->TC_string[5])<<24 + (uint64_t)(tc_ptr->TC_string[5])<<16 + (uint64_t)(tc_ptr->TC_string[6])<<8  +(uint64_t)(tc_ptr->TC_string[7]));
+                            CDMS_CALIB_RTC(((uint32_t)(tc_ptr->TC_string[5])<<24) + ((uint32_t)(tc_ptr->TC_string[6])<<16) + ((uint32_t)(tc_ptr->TC_string[7])<<8) + ((uint32_t)(tc_ptr->TC_string[8])));
                             Base_tm *tm_ptr_short = new Short_tm;
                             ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
                             return tm_ptr_short;
@@ -1162,10 +1174,11 @@
                 TIME_LATEST_I2C_SPEED = FCTN_CDMS_RD_RTC() >> 7;
                 //wait(0.2);
                 int poll=0;
-                while(poll<2000 && PL_I2C_Intr==0)
+                //gPC.printf("\n\r%d",PL_I2C_Intr);
+                while(poll<12000 && PL_I2C_Intr==0)
                 {
-                 // gPC.printf("\n\rPL_I2C_Intr is low");
-                    wait_us(10);
+                    //gPC.printf("\n\rPL_I2C_Intr is low");
+                    wait_us(500);
                     poll+=1;
                 }    
             if(PL_I2C_Intr == 1)
@@ -1430,7 +1443,7 @@
         /*Enable threads*/\
         gPAY_SPI->bulkRead_resume(&payload_isr_fun);\
         HK_counter->start(10000);\
-        gSESSION_TIMEOUT.detach();\
+        /*.detach();*/\
     }\
 }
 
@@ -1612,8 +1625,12 @@
                             }\
                             /*SEND call sign, ACK_L1, NON OBSRS TM TO GS*/\
                             snd_tm.head_pointer(tm_ptr_head);\
+                            sent_tmfrom_SDcard = false;\
                             gPC.puts("enter_adf\r\n");\
+                            COM_RST.reset();\
+                            COM_RST.start();\
                             transmit_adf();\
+                            COM_RST.stop();\
                             gPC.puts("exit_adf\r\n");\
                             /*DELETE THE TM AFTER USE*/\
                             tm_ptr = tm_ptr_head;\
@@ -1637,7 +1654,10 @@
                             /*EXECUTION OF SD-CARD DATA SENDING (OBSRS)*/\
                             execute_OBSRS_TC(current_TC);\
                             gPC.puts("en_adf");\
+                            COM_RST.reset();\
+                            COM_RST.start();\
                             transmit_adf();\
+                            COM_RST.stop();\
                             gPC.puts("ex_adf");\
                         }\
                     }\
@@ -1683,13 +1703,14 @@
             gPC.printf("completed or session timed out: %x\r\n", gMASTER_STATE);\
         /*COMPLETED EXECUTION OF TC*/\
         gMASTER_STATE = TCL_STATE_COMPLETED;\
+        gPC.printf("\n flags2 = %u \n", gFLAGS);\
         COM_POWER_OFF_TX;\
         reset_all;\
         /*ENABLE THREADS*/\
         resume_pl_dma = 1;\
         /*gPAY_SPI->bulkRead_resume(&payload_isr_fun)*/;\
         HK_counter->start(10000);\
-        gSESSION_TIMEOUT.detach();\
+        /*.detach();*/\
         gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
         gFLAGS = gFLAGS & (~COM_SESSION_FLAG);\
     }\