Latest FM Code with EEPROM
Dependencies: FreescaleIAP SimpleDMA eeprom mbed-rtos mbed
Fork of CDMS_QM_03MAR2017_Flash_with_obsrs by
Diff: COM_MNG_TMTC.h
- Revision:
- 356:4484bf39526f
- Parent:
- 354:eb6c863756a8
diff -r a5e72222ff26 -r 4484bf39526f COM_MNG_TMTC.h --- 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);\ }\