Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SimpleDMA eeprom mbed-rtos mbed FreescaleIAP
Fork of CDMS_CODE by
Revision 215:570251b23c7b, committed 2016-07-03
- Comitter:
- chaithanyarss
- Date:
- Sun Jul 03 09:47:05 2016 +0000
- Parent:
- 213:867de6d350fa
- Child:
- 216:93505a6f8db7
- Commit message:
- Reset added
Changed in this revision
--- a/CDMS_HK.h Sun Jul 03 09:26:42 2016 +0000
+++ b/CDMS_HK.h Sun Jul 03 09:47:05 2016 +0000
@@ -1,11 +1,11 @@
//CDMS HK
- #define COMRX_ALIVE 0xFF
- #define COMRX_DEAD 0x00
- #define DEVICE_ENABLED 0x00
- #define DEVICE_POWERED 0x01
- #define DEVICE_OC_FAULT 0x02
- #define DEVICE_DISABLED 0x03
+#define COMRX_ALIVE 0x01
+#define COMRX_DEAD 0x00
+#define DEVICE_ENABLED 0x00
+#define DEVICE_POWERED 0x01
+#define DEVICE_OC_FAULT 0x02
+#define DEVICE_DISABLED 0x03
void FCTN_CDMS_HK_MAIN();
void FCTN_CDMS_HK();
@@ -35,119 +35,116 @@
void FCTN_CDMS_HK_MAIN(void const *args)
{
- unsigned char CDMS_HK_FRAME[134] = {0};
- char BAE_HK[128] = {0};
- uint8_t convoluted_CDMS_HK[270];
- uint8_t interleave_CDMS_HK[288];
- uint8_t CDMS_HEALTH_FINAL[512] = {0};
- uint8_t convoluted_BAE_HK[270];
- uint8_t interleave_BAE_HK[288];
- uint8_t BAE_HEALTH_FINAL[512] = {0};
- unsigned char BAE_HK_FRAME[134] = {0};
+ unsigned char CDMS_HK_FRAME[134] = {0};
+ char BAE_HK[128] = {0};
+ uint8_t convoluted_CDMS_HK[270];
+ uint8_t interleave_CDMS_HK[288];
+ uint8_t CDMS_HEALTH_FINAL[512] = {0};
+ uint8_t convoluted_BAE_HK[270];
+ uint8_t interleave_BAE_HK[288];
+ uint8_t BAE_HEALTH_FINAL[512] = {0};
+ unsigned char BAE_HK_FRAME[134] = {0};
+
+ CDMS_HK_MAIN_STATUS = 0x01;
+ CDMS_HK_MAIN_COUNTER++;
- CDMS_HK_MAIN_STATUS = 0x01;
- CDMS_HK_MAIN_COUNTER++;
+ FCTN_CDMS_HK();
+ RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;
+ VERIFY_COMRX();
+ VERIFY_RTC();
+ HANDLE_HW_FAULTS();
+ FUNC_CDMS_GPIO_STATUS(); //yet to be done
- FCTN_CDMS_HK();
- RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;
- VERIFY_COMRX();
- VERIFY_RTC();
- HANDLE_HW_FAULTS();
- FUNC_CDMS_GPIO_STATUS(); //yet to be done
+ uint8_t CDMS_quant[19];
+ for(int i=0; i<16; i++) {
+ CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
+ }
+ CDMS_quant[16]= (uint8_t)RSSI_volatge;
+ CDMS_quant[17]= (uint8_t)quant_data.CDMS_temp_quant;
+ minMaxHkData();
+
+ uint64_t time = FCTN_CDMS_RD_RTC(); //Reading Time from RTC
+ time = time>>7;
+ uint32_t HK_time = (uint32_t)time;
+ for(int i = 0; i<4; i++)
+ CDMS_HEALTH_DATA[i] = HK_time >> i;
- uint8_t CDMS_quant[19];
- for(int i=0;i<16;i++)
- {
- CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
- }
- CDMS_quant[16]= (uint8_t)RSSI_volatge;
- CDMS_quant[17]= (uint8_t)quant_data.CDMS_temp_quant;
- minMaxHkData();
-
- uint64_t time = FCTN_CDMS_RD_RTC(); //Reading Time from RTC
- time = time>>7;
- uint32_t HK_time = (uint32_t)time;
- for(int i = 0;i<4;i++)
- CDMS_HEALTH_DATA[i] = HK_time >> i;
+ // Here: Have to FIT flash data.
+ for(int i = 0; i<19; i++) //Collecting Data from Temp sensors
+ CDMS_HEALTH_DATA[i+24] = CDMS_quant[i];
+
+ COLLECT_CDMS_RAM(); //Reading RAM parameters
+
+ CDMS_HEALTH_DATA[126] = GPIO_STATUS; //Reading GPIO Pins
+ CDMS_HEALTH_DATA[127] = GPIO_STATUS >> 8;
+
+ FCTN_SD_MNGR(); //Adding FSC & TMID to TM frame
+ CDMS_HK_FRAME[0] = 0x20;
+ CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1;
+ CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8;
+ CDMS_HK_FRAME[3] = (FSC_CURRENT[4]+1) >> 16;
- // Here: Have to FIT flash data.
- for(int i = 0;i<19;i++) //Collecting Data from Temp sensors
- CDMS_HEALTH_DATA[i+24] = CDMS_quant[i];
-
- COLLECT_CDMS_RAM(); //Reading RAM parameters
-
- CDMS_HEALTH_DATA[126] = GPIO_STATUS; //Reading GPIO Pins
- CDMS_HEALTH_DATA[127] = GPIO_STATUS >> 8;
-
- FCTN_SD_MNGR(); //Adding FSC & TMID to TM frame
- CDMS_HK_FRAME[0] = 0x20;
- CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1;
- CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8;
- CDMS_HK_FRAME[3] = (FSC_CURRENT[4]+1) >> 16;
-
- for(int i = 0;i<128;i++) /*Adding actual CDMS Health data to TM frame*/
- CDMS_HK_FRAME[4+i] = CDMS_HEALTH_DATA[i];
-
- uint16_t crc = crc16_gen(CDMS_HK_FRAME,132); /*Adding CRC to TM frame*/
- CDMS_HK_FRAME[133] = crc;
- CDMS_HK_FRAME[132] = crc >> 8;
+ for(int i = 0; i<128; i++) /*Adding actual CDMS Health data to TM frame*/
+ CDMS_HK_FRAME[4+i] = CDMS_HEALTH_DATA[i];
+
+ uint16_t crc = crc16_gen(CDMS_HK_FRAME,132); /*Adding CRC to TM frame*/
+ CDMS_HK_FRAME[133] = crc;
+ CDMS_HK_FRAME[132] = crc >> 8;
- Convolution CDMS_HEALTH;
- Convolution BAE_HEALTH;
- CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK);
- CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135);
- interleave(convoluted_CDMS_HK , interleave_CDMS_HK);
- interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144);
- for(int i=0;i<288;i++)
- CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i];
+ Convolution CDMS_HEALTH;
+ Convolution BAE_HEALTH;
+ CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK);
+ CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135);
+ interleave(convoluted_CDMS_HK , interleave_CDMS_HK);
+ interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144);
+ for(int i=0; i<288; i++)
+ CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i];
- SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
- hk_cdms.printf("CDMS hk succesfully completed\r\n");
+ SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
+ hk_cdms.printf("CDMS hk succesfully completed\r\n");
-/*---------------------------------- BAE HK --------------------------------------------*/
-
-
- BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134);
- if(BAE_HK_I2C == 0){
- TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
- hk_cdms.printf("Bae hk data received");
- }
- else
- {
- for(int i = 0;i<128;i++)
- BAE_HK[i] = 0;
- }
- for(int i = 0;i<4;i++)
- BAE_HK[i] = HK_time >> i;
- BAE_HK_FRAME[0] = 0x28;
- BAE_HK_FRAME[1] = FSC_CURRENT[5]+1;
- BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8;
- BAE_HK_FRAME[3] = (FSC_CURRENT[5]+1) >> 16;
- for(int i = 0;i<128;i++) /*Adding actual CDMS Health data to TM frame*/
- BAE_HK_FRAME[4+i] = BAE_HK[i];
- crc = crc16_gen(BAE_HK_FRAME,132); /*Adding CRC to TM frame*/
- BAE_HK_FRAME[133] = crc;
- BAE_HK_FRAME[132] = crc >> 8;
- BAE_HEALTH.convolutionEncode(BAE_HK_FRAME , convoluted_BAE_HK);
- BAE_HEALTH.convolutionEncode(BAE_HK_FRAME + 67, convoluted_BAE_HK + 135);
- interleave(convoluted_BAE_HK , interleave_BAE_HK);
- interleave(convoluted_BAE_HK +135, interleave_BAE_HK + 144);
- for(int i=0;i<288;i++)
- BAE_HEALTH_FINAL[i] = interleave_BAE_HK[i];
- SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5);
- hk_cdms.printf("BAE hk succesfully completed\r\n");
-
- /*----------------------------------Beacon message--------------------------------------*/
- unsigned char SC_HK_LBM_0[135];
- SC_HK_LBM_0[0] = 0; // Sending long beacon msg as telecommand with Packet sequence count 0x00
- // Add HK bits
-
- // Add SC bits
- crc = crc16_gen(SC_HK_LBM_0,133);
- SC_HK_LBM_0[132] = crc;
- SC_HK_LBM_0[133] = crc >> 8;
- FCTN_I2C_WRITE((char *)SC_HK_LBM_0,135);
+ /*---------------------------------- BAE HK --------------------------------------------*/
+
+
+ BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134);
+ if(BAE_HK_I2C == 0) {
+ TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
+ hk_cdms.printf("Bae hk data received");
+ } else {
+ for(int i = 0; i<128; i++)
+ BAE_HK[i] = 0;
+ }
+ for(int i = 0; i<4; i++)
+ BAE_HK[i] = HK_time >> i;
+ BAE_HK_FRAME[0] = 0x28;
+ BAE_HK_FRAME[1] = FSC_CURRENT[5]+1;
+ BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8;
+ BAE_HK_FRAME[3] = (FSC_CURRENT[5]+1) >> 16;
+ for(int i = 0; i<128; i++) /*Adding actual CDMS Health data to TM frame*/
+ BAE_HK_FRAME[4+i] = BAE_HK[i];
+ crc = crc16_gen(BAE_HK_FRAME,132); /*Adding CRC to TM frame*/
+ BAE_HK_FRAME[133] = crc;
+ BAE_HK_FRAME[132] = crc >> 8;
+ BAE_HEALTH.convolutionEncode(BAE_HK_FRAME , convoluted_BAE_HK);
+ BAE_HEALTH.convolutionEncode(BAE_HK_FRAME + 67, convoluted_BAE_HK + 135);
+ interleave(convoluted_BAE_HK , interleave_BAE_HK);
+ interleave(convoluted_BAE_HK +135, interleave_BAE_HK + 144);
+ for(int i=0; i<288; i++)
+ BAE_HEALTH_FINAL[i] = interleave_BAE_HK[i];
+ SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5);
+ hk_cdms.printf("BAE hk succesfully completed\r\n");
+
+ /*----------------------------------Beacon message--------------------------------------*/
+ unsigned char SC_HK_LBM_0[135];
+ SC_HK_LBM_0[0] = 0; // Sending long beacon msg as telecommand with Packet sequence count 0x00
+ // Add HK bits
+
+ // Add SC bits
+ crc = crc16_gen(SC_HK_LBM_0,133);
+ SC_HK_LBM_0[132] = crc;
+ SC_HK_LBM_0[133] = crc >> 8;
+ FCTN_I2C_WRITE((char *)SC_HK_LBM_0,135);
}
int quantiz(float start,float step,float x)
@@ -169,32 +166,30 @@
}
void minMaxHkData()
-{
- if(firstCount==true){
- for (int i = 0; i < 16; ++i){
- min_max_data.temp_min[i] = quant_data.temp_quant[i];
- min_max_data.temp_max[i] = quant_data.temp_quant[i];
+{
+ if(firstCount==true) {
+ for (int i = 0; i < 16; ++i) {
+ min_max_data.temp_min[i] = quant_data.temp_quant[i];
+ min_max_data.temp_max[i] = quant_data.temp_quant[i];
}
min_max_data.CDMS_temp_min=quant_data.CDMS_temp_quant;
min_max_data.CDMS_temp_max=quant_data.CDMS_temp_quant;
- }
- else {
- for (int i = 0; i < 16; ++i)
- {
- min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
- min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
+ } else {
+ for (int i = 0; i < 16; ++i) {
+ min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
+ min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
}
-
+
min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant);
min_max_data.CDMS_temp_max = saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant);
- }
+ }
firstCount=false;
}
void FCTN_CDMS_HK()
{
-
+
int Iteration=0;
SelectLinec0=0;
@@ -202,7 +197,7 @@
SelectLinec2=0;
SelectLinec3=0;
- for(Iteration=0; Iteration<16; Iteration++){
+ for(Iteration=0; Iteration<16; Iteration++) {
actual_data.temp_actual[Iteration]=TempInput.read();
@@ -212,39 +207,35 @@
if(Iteration%4==3)
SelectLinec2=!(SelectLinec2);
if(Iteration%8==7)
- SelectLinec3=!(SelectLinec3);
+ SelectLinec3=!(SelectLinec3);
}
actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543;
-
- for(Iteration=0;Iteration<16;Iteration++){
- if(Iteration<14){
+ for(Iteration=0; Iteration<16; Iteration++) {
+
+ if(Iteration<14) {
actual_data.temp_actual[Iteration]=actual_data.temp_actual[Iteration]*3.3;
- int resistance;
-
+ int resistance;
+
resistance=24000*actual_data.temp_actual[Iteration]/(3.3-actual_data.temp_actual[Iteration]);
- if(actual_data.temp_actual[Iteration]>1.47)
- {
+ if(actual_data.temp_actual[Iteration]>1.47) {
actual_data.temp_actual[Iteration]=3694/log(24.032242*resistance);
- }
- else{
-
+ } else {
+
actual_data.temp_actual[Iteration]=3365.4/log(7.60573*resistance);
}
- }
- else
+ } else
actual_data.temp_actual[Iteration]=(-90.7*3.3*actual_data.temp_actual[Iteration])+190.1543;
}
- for(Iteration=0;Iteration<16;Iteration++){
+ for(Iteration=0; Iteration<16; Iteration++) {
- if(Iteration<14){
+ if(Iteration<14) {
quant_data.temp_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.temp_actual[Iteration]);
- }
- else
+ } else
quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]);
}
@@ -255,211 +246,195 @@
void FUNC_CDMS_GPIO_STATUS() //Polls the status of Input GPIO PINS
{
- //V_A_PGOOD //TRZ EN
- GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15)));
- //V_B_PGOOD_1 //3V3BPGOOD //$
- GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)||((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14)));
- //V_B_PGOOD_2 //3V3BEN //$
- GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)||((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13)));
- //V_C_PGOOD //3V3CPGOOD //$
- GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12)));
- //COMRX_OC_FAULT //$
- GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11)));
- // COMTX_OC_FAULT //$
- GPIO_STATUS=(COMTX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10)));
- //BAE_OC_FAULT //$
- GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9)));
- //PL_GPIO_1_STATUS //$
- GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8)));
- //PL_GPIO_2_STATUS //$
- GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7)));
- //PL_GPIO_3_STATUS //$
- GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6)));
- //PL_BEE_SW_OC_FAULT //to be verified
- GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<5)):(GPIO_STATUS)&(~((uint16_t)(0x1<<5)));
- //PL_EPS_LATCH_SW_OC_FAULT // to be verified
- GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4)));
+ //V_A_PGOOD //TRZ EN
+ GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15)));
+ //V_B_PGOOD_1 //3V3BPGOOD //$
+ GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)||((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14)));
+ //V_B_PGOOD_2 //3V3BEN //$
+ GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)||((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13)));
+ //V_C_PGOOD //3V3CPGOOD //$
+ GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12)));
+ //COMRX_OC_FAULT //$
+ GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11)));
+ // COMTX_OC_FAULT //$
+ GPIO_STATUS=(COMTX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10)));
+ //BAE_OC_FAULT //$
+ GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9)));
+ //PL_GPIO_1_STATUS //$
+ GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8)));
+ //PL_GPIO_2_STATUS //$
+ GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7)));
+ //PL_GPIO_3_STATUS //$
+ GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6)));
+ //PL_BEE_SW_OC_FAULT //to be verified
+ GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<5)):(GPIO_STATUS)&(~((uint16_t)(0x1<<5)));
+ //PL_EPS_LATCH_SW_OC_FAULT // to be verified
+ GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4)));
}
void VERIFY_COMRX()
{
- //COMRX_OC_FAULT //$
- if(PIN68==0 && RSSI_volatge > 0.4)
- {
- COMRX_STATUS = COMRX_ALIVE;
- }
- else
- {
- RESET_COMRX();
- COMRX_RESET_COUNTER++;
- if(PIN68==0 && RSSI_volatge > 0.4)
- COMRX_STATUS = COMRX_ALIVE;
- else
- COMRX_STATUS = COMRX_DEAD;
- }
+ //COMRX_OC_FAULT //$
+ if(PIN68==0 && RSSI_volatge > 0.4) {
+ COMRX_STATUS = COMRX_ALIVE;
+ } else {
+ RESET_COMRX();
+ COMRX_RESET_COUNTER++;
+ if(PIN68==0 && RSSI_volatge > 0.4)
+ COMRX_STATUS = COMRX_ALIVE;
+ else
+ COMRX_STATUS = COMRX_DEAD;
+ }
}
-void VERIFY_RTC(){
+void VERIFY_RTC()
+{
- if(RTC_STATUS == 0x00)
- {
- SPI_mutex.lock();
- gCS_RTC=1;
- gCS_RTC=0;
- spi.write(0x0F);
- if(spi.write(0x00) & 0x04 == 0x04)
- {
- RTC_STATUS = 0x00;
- RESET_RTC();
- RTC_FAULTCOUNT++;
+ if(RTC_STATUS == 0x00) {
+ SPI_mutex.lock();
+ gCS_RTC=1;
+ gCS_RTC=0;
+ spi.write(0x0F);
+ if(spi.write(0x00) & 0x04 == 0x04) {
+ RTC_STATUS = 0x00;
+ RESET_RTC();
+ RTC_FAULTCOUNT++;
+ }
+ gCS_RTC=1;
+ SPI_mutex.unlock();
}
- gCS_RTC=1;
- SPI_mutex.unlock();
- }
}
void HANDLE_HW_FAULTS()
{
- HANDLE_HW_FAULT_SD();
- HANDLE_HW_FAULT_BAE();
- HANDLE_HW_FAULT_PL();
+ HANDLE_HW_FAULT_SD();
+ HANDLE_HW_FAULT_BAE();
+ HANDLE_HW_FAULT_PL();
}
void HANDLE_HW_FAULT_SD()
{
- if(SD_STATUS != DEVICE_DISABLED)
- {
- if(SD_STATUS == DEVICE_OC_FAULT)
- SD_SW_EN_DS = 0; //powering on SD
+ if(SD_STATUS != DEVICE_DISABLED) {
+ if(SD_STATUS == DEVICE_OC_FAULT)
+ SD_SW_EN_DS = 0; //powering on SD
+
+ if(SD_OC_FAULT == 0) {
+ SD_SW_EN_DS = 1; //switching off SD card
- if(SD_OC_FAULT == 0)
- {
- SD_SW_EN_DS = 1; //switching off SD card
-
- SD_FAULTCOUNT++;
- SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT;
+ SD_FAULTCOUNT++;
+ SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT;
+ } else {
+ SD_STATUS = DEVICE_POWERED;
+ SD_FAULTCOUNT = 0;
+ }
}
- else
- {
- SD_STATUS = DEVICE_POWERED;
- SD_FAULTCOUNT = 0;
- }
- }
}
void HANDLE_HW_FAULT_BAE()
{
- if(BAE_STATUS != DEVICE_DISABLED)
- {
- if(BAE_STATUS == DEVICE_OC_FAULT)
- BAE_SW_EN_DS = 0; //Power ON BAE
+ if(BAE_STATUS != DEVICE_DISABLED) {
+ if(BAE_STATUS == DEVICE_OC_FAULT)
+ BAE_SW_EN_DS = 0; //Power ON BAE
- if(BAE_OC_FAULT == 0) // If OC Fault
- {
- BAE_SW_EN_DS = 1; //Switch OFF BAE
- BAE_FAULTCOUNT++;
- BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+ if(BAE_OC_FAULT == 0) { // If OC Fault
+ BAE_SW_EN_DS = 1; //Switch OFF BAE
+ BAE_FAULTCOUNT++;
+ BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+ } else {
+ BAE_STATUS = DEVICE_POWERED;
+ BAE_FAULTCOUNT = 0;
+ }
}
- else
- {
- BAE_STATUS = DEVICE_POWERED;
- BAE_FAULTCOUNT = 0;
- }
- }
}
void HANDLE_HW_FAULT_PL()
{
- if(PL_STATUS != DEVICE_DISABLED)
- {
- if(PL_STATUS == DEVICE_OC_FAULT)
- PL_SW_EN_DS = 0; //Power ON PL
+ if(PL_STATUS != DEVICE_DISABLED) {
+ if(PL_STATUS == DEVICE_OC_FAULT)
+ PL_SW_EN_DS = 0; //Power ON PL
- if(PL_BEE_SW_OC_FAULT == 0) // if OC Fault
- {
- PL_SW_EN_DS = 1; // switching OFF PL
- PL_FAULTCOUNT++;
- PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+ if(PL_BEE_SW_OC_FAULT == 0) { // if OC Fault
+ PL_SW_EN_DS = 1; // switching OFF PL
+ PL_FAULTCOUNT++;
+ PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
+ } else {
+ if(PL_STATUS == DEVICE_OC_FAULT)
+ PL_SW_EN_DS = 0; //Switching OFF PL
+ PL_STATUS = DEVICE_ENABLED;
+ PL_FAULTCOUNT = 0;
+ }
}
- else
- {
- if(PL_STATUS == DEVICE_OC_FAULT)
- PL_SW_EN_DS = 0; //Switching OFF PL
- PL_STATUS = DEVICE_ENABLED;
- PL_FAULTCOUNT = 0;
- }
- }
}
-
+
void COLLECT_CDMS_RAM()
-{
- /*--------------------Current FSC's---------------------*/
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+43] = FSC_LAST[5] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+47] = FSC_CURRENT[5] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+51] = FSC_LAST[4] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+55] = FSC_CURRENT[4] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+59] = FSC_LAST[3] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+63] = FSC_CURRENT[3] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+67] = FSC_LAST[2] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+71] = FSC_CURRENT[2] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+75] = FSC_LAST[1] >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+79] = FSC_CURRENT[1] >> (i*8);
- /*---------------------Latest Time----------------------*/
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+83] = TIME_LATEST_SPI_SPEED >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+87] = TIME_LATEST_SD_RD >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+91] = TIME_LATEST_SD_WR >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+95] = TIME_LATEST_I2C_SPEED >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+99] = TIME_LATEST_I2C_BAE >> (i*8);
- for(int i=0;i<4;i++)
- CDMS_HEALTH_DATA[i+103] = TIME_LATEST_RTC >> (i*8);
- for(int i=0;i<2;i++)
- CDMS_HEALTH_DATA[i+107] = COMRX_RESET_COUNTER >> (i*8);
- for(int i=0;i<2;i++)
- CDMS_HEALTH_DATA[i+107] = PL_RCV_SC_DATA_COUNTER >> (i*8);
- for(int i=0;i<2;i++)
- CDMS_HEALTH_DATA[i+111] = PL_MAIN_COUNTER >> (i*8);
- for(int i=0;i<2;i++)
- CDMS_HEALTH_DATA[i+113] = CDMS_HK_MAIN_COUNTER >> (i*8);
- for(int i=0;i<2;i++)
- CDMS_HEALTH_DATA[i+115] = CDMS_I2C_ERR_BAE_COUNTER >> (i*8);
- for(int i=0;i<2;i++)
- CDMS_HEALTH_DATA[i+117] = CDMS_I2C_ERR_SPEED_COUNTER >> (i*8);
- CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | CDMS_STANDBY_PL << 7;
- CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_INIT_STATUS << 6) & 0x40);
- CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_MAIN_STATUS << 5) & 0x20);
- CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_STATUS << 3) & 0x18);
- CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((COMRX_STATUS << 2) & 0x04);
- CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_RTC_BL << 1) & 0x02);
- CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] & 0xFE;
-
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | PL_RCV_SC_DATA_STATUS << 7;
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_SESSION << 6) & 0x40);
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_RX << 5) & 0x20);
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((RF_SW_STATUS << 4) & 0x10);
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX << 3) & 0x08);
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX_STATUS << 2) & 0x04);
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_MNG_TMTC << 1) & 0x02);
- CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | (CDMS_STANDBY_HK & 0x01);
+{
+ /*--------------------Current FSC's---------------------*/
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+43] = FSC_LAST[5] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+47] = FSC_CURRENT[5] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+51] = FSC_LAST[4] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+55] = FSC_CURRENT[4] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+59] = FSC_LAST[3] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+63] = FSC_CURRENT[3] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+67] = FSC_LAST[2] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+71] = FSC_CURRENT[2] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+75] = FSC_LAST[1] >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+79] = FSC_CURRENT[1] >> (i*8);
+ /*---------------------Latest Time----------------------*/
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+83] = TIME_LATEST_SPI_SPEED >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+87] = TIME_LATEST_SD_RD >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+91] = TIME_LATEST_SD_WR >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+95] = TIME_LATEST_I2C_SPEED >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+99] = TIME_LATEST_I2C_BAE >> (i*8);
+ for(int i=0; i<4; i++)
+ CDMS_HEALTH_DATA[i+103] = TIME_LATEST_RTC >> (i*8);
+ for(int i=0; i<2; i++)
+ CDMS_HEALTH_DATA[i+107] = COMRX_RESET_COUNTER >> (i*8);
+ for(int i=0; i<2; i++)
+ CDMS_HEALTH_DATA[i+107] = PL_RCV_SC_DATA_COUNTER >> (i*8);
+ for(int i=0; i<2; i++)
+ CDMS_HEALTH_DATA[i+111] = PL_MAIN_COUNTER >> (i*8);
+ for(int i=0; i<2; i++)
+ CDMS_HEALTH_DATA[i+113] = CDMS_HK_MAIN_COUNTER >> (i*8);
+ for(int i=0; i<2; i++)
+ CDMS_HEALTH_DATA[i+115] = CDMS_I2C_ERR_BAE_COUNTER >> (i*8);
+ for(int i=0; i<2; i++)
+ CDMS_HEALTH_DATA[i+117] = CDMS_I2C_ERR_SPEED_COUNTER >> (i*8);
+ CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | CDMS_STANDBY_PL << 7;
+ CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_INIT_STATUS << 6) & 0x40);
+ CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_MAIN_STATUS << 5) & 0x20);
+ CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_STATUS << 3) & 0x18);
+ CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((COMRX_STATUS << 2) & 0x04);
+ CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_RTC_BL << 1) & 0x02);
+ CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] & 0xFE;
- CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | PL_INIT_STATUS << 7;
- CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_MAIN_STATUS << 6) & 0x40);
- CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_LOW_POWER << 5) & 0x20);
- CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_STATE << 3) & 0x18);
- CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | (PL_STATUS & 0x07);
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | PL_RCV_SC_DATA_STATUS << 7;
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_SESSION << 6) & 0x40);
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_RX << 5) & 0x20);
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((RF_SW_STATUS << 4) & 0x10);
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX << 3) & 0x08);
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX_STATUS << 2) & 0x04);
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_MNG_TMTC << 1) & 0x02);
+ CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | (CDMS_STANDBY_HK & 0x01);
+
+ CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | PL_INIT_STATUS << 7;
+ CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_MAIN_STATUS << 6) & 0x40);
+ CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_LOW_POWER << 5) & 0x20);
+ CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_STATE << 3) & 0x18);
+ CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | (PL_STATUS & 0x07);
}
\ No newline at end of file
--- a/CDMS_PL.h Sun Jul 03 09:26:42 2016 +0000 +++ b/CDMS_PL.h Sun Jul 03 09:47:05 2016 +0000 @@ -6,7 +6,6 @@ uint32_t pl_time; uint32_t TIME_LATEST_PL=0; uint8_t i; -uint8_t PL_BEE_SW_STATUS=0; //Serial pc(USBTX,USBRX);
--- a/COM_MNG_TMTC.h Sun Jul 03 09:26:42 2016 +0000
+++ b/COM_MNG_TMTC.h Sun Jul 03 09:47:05 2016 +0000
@@ -45,7 +45,7 @@
-#define detect_ack(tm_ptr, temp_ack) {\
+#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 ){\
@@ -62,20 +62,20 @@
if( (temp8 == 0xC0) || (temp8 == 0xA0) )\
temp_ack = 0x01;\
else{\
- temp_ack = 0x02;\
+ 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 ){\
- temp_ack = 0x04;\
+ tm_ptr->TM_string[2] = tc_psc;\
}\
}\
}\
else\
- temp_ack = 0x03;\
+ temp_ack = 0x00;\
}\
else{\
- temp_ack = 0x02;\
+ temp_ack = 0x00;\
}\
}
@@ -942,7 +942,6 @@
return;
}
// CDMS TEAM CODE END
-
// EXECUTE OBOSC
#define execute_obosc_core(tc_ptr, tm_ptr, reset_flag) {\
if (DEBUG)\
@@ -975,7 +974,7 @@
++modify_overflow;\
}\
else{\
- RESET_CDMS;\
+ RESET_CDMS();\
break;\
}\
}\
@@ -998,7 +997,7 @@
++modify_overflow;\
}\
else{\
- RESET_CDMS;\
+ RESET_CDMS();\
break;\
}\
}\
@@ -1042,11 +1041,13 @@
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] = 0xAF;\
+ ackl234new->TM_string[2] = 0xA2;\
}\
if (DEBUG)\
gPC.puts("completed obosc\r\n");\
@@ -1056,7 +1057,6 @@
#define EXECUTE_OBOSC_ONLY {\
- gMASTER_STATE = TCL_STATE_EXECUTING;\
int reset_flag = 0;\
if (DEBUG)\
gPC.puts("iNSIDE EXECUTE_OBOSC_ONLY\r\n");\
@@ -1085,14 +1085,8 @@
while(obosc_tm_core != NULL){\
obosc_tm_core = obosc_tm_core->next_TM;\
}\
- if(obosc_tm_current->TM_string[2] == 0xA0){\
- uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
- PUTexec_status(current_TC, temp16);\
- }\
- else{\
- uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
- PUTexec_status(current_TC, temp16);\
- }\
+ uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
+ PUTexec_status(current_TC, temp16);\
while( obosc_tm_current != NULL ){\
int length = TM_SHORT_SIZE;\
if( GETshort_or_long_tm(obosc_tm_current) == SHORT_TM_CODE ){\
@@ -1106,6 +1100,9 @@
}\
obosc_tm_current = obosc_tm_current->next_TM;\
}\
+ if ( reset_flag ==1 ){\
+ reset_all;\
+ }\
}\
}\
}\
@@ -1113,7 +1110,7 @@
++overCount;\
}\
else{\
- RESET_CDMS;\
+ /*PENDING: REST CDMS: MEMORY LEAK FOUND*/\
break;\
}\
}\
@@ -1130,7 +1127,7 @@
++overflowCountOBONLY;\
}\
else{\
- RESET_CDMS;\
+ RESET_CDMS();\
break;\
}\
}\
@@ -1149,17 +1146,11 @@
++overCount;\
}\
else{\
- RESET_CDMS;\
+ RESET_CDMS();\
break;\
}\
}\
- }\
- if ( reset_flag == 1 ){\
- reset_all;\
- /*PENDING: Enable threads*/\
- /*gCDMS_HK_TIMER.start(5000);*/\
- gSESSION_TIMEOUT.detach();\
- }\
+ }\
}
#define EXECUTE_TC {\
@@ -1222,7 +1213,7 @@
++overflowCountExecute;\
}\
else{\
- RESET_CDMS;\
+ RESET_CDMS();\
break;\
}\
}\
@@ -1250,37 +1241,25 @@
}\
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;\
- detect_ack(put_tm_here, temp83);\
+ 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 if( temp83 == 0x03){\
- /*gPC.puts("TC_STATE_EXECUTION_UNKNOWN");*/\
- uint16_t temp16 = TC_STATE_EXECUTION_UNKNOWN;\
- PUTexec_status(current_TC, temp16);\
- }\
- else if( temp83 == 0x04){\
- /*gPC.puts("TC_STATE_EXECUTION_UNKNOWN");*/\
- uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
- PUTexec_status(current_TC, temp16);\
- uint8_t temp84 = GETpacket_seq_count(current_TC);\
- put_tm_here->TM_string[2] = temp84;\
- uint16_t crc16 = crc16_gen(put_tm_here->TM_string, 11);\
- put_tm_here->TM_string[11] = (crc16 & 0xFF00)>>8;\
- put_tm_here->TM_string[12] = (crc16 & 0x00FF);\
- }\
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) || (GETexec_status(current_TC) == TC_STATE_EXECUTION_UNKNOWN)) && (GETabort_on_nack(current_TC) == 1) ){\
+ 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) ){\
@@ -1289,23 +1268,20 @@
}\
/*update last executed L1_ack*/\
if( put_tm_here != NULL ){\
- Base_tm *ptr_tm = put_tm_here;\
- while(ptr_tm->next_TM != NULL)\
- ptr_tm = ptr_tm->next_TM;\
- if( GETshort_or_long_tm(ptr_tm) == SHORT_TM_CODE ){\
+ if( GETshort_or_long_tm(put_tm_here) == SHORT_TM_CODE ){\
for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
- gLAST_TM[i] = ptr_tm->TM_string[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] = ptr_tm->TM_string[i];\
+ gLAST_TM[i] = put_tm_here->TM_string[i];\
gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;\
}\
}\
}\
- P_COM_HK;\
+ /*PENDING: APPEND ACK L1*/\
Base_tm *tm_ptr = tm_ptr_head;\
get_ack_l1(tm_ptr->next_TM);\
int overflowCountExecute = 0;\
@@ -1315,11 +1291,16 @@
++overflowCountExecute;\
}\
else{\
- RESET_CDMS;\
+ 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;\
@@ -1351,7 +1332,7 @@
++overflowCountExecute;\
}\
else{\
- RESET_CDMS;\
+ RESET_CDMS();\
break;\
}\
}\
@@ -1360,7 +1341,112 @@
if (DEBUG)\
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{\
+ 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);*/\
+ /*transmit_adf;*/\
+ /*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{\
+ RESET_CDMS();\
+ break;\
+ }\
+ }\
}\
}\
break;\
@@ -1369,7 +1455,7 @@
++overflowCount;\
}\
else{\
- RESET_CDMS;\
+ RESET_CDMS();\
break;\
}\
}\
@@ -1380,15 +1466,15 @@
if (DEBUG)\
gPC.puts("ABORTING DUE TO ABORT ON NACK\r\n");\
/*EXITED DUE TO ABORT ON NACK:*/\
- COM_TX_CNTRL = 0;\
+ /*COM_TX_CNTRL = 0;*/\
RX1M.attach(&rx_read, Serial::RxIrq);\
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
break;\
}\
- else if( (gFLAGS & COM_PA_HOT_FLAG) || (gFLAGS & COM_PA_OC_FLAG) ){\
+ 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);\
- COM_TX_CNTRL = 0;\
+ /*COM_TX_CNTRL = 0;*/\
RX1M.attach(&rx_read, Serial::RxIrq);\
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
break;\
@@ -1401,10 +1487,9 @@
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;\
+ /*COM_POWER_OFF_TX;*/\
reset_all;\
/*PENDING : ENABLE THREADS*/\
- /*gCDMS_HK_TIMER.start(5000);*/\
gPAY_SPI.bulkRead_start();\
gSESSION_TIMEOUT.detach();\
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/COM_MNG_TMTC.h.orig Sun Jul 03 09:47:05 2016 +0000
@@ -0,0 +1,1413 @@
+// 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"
+
+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;
+
+uint8_t ACK_CODE;
+
+void TM_PMS_PL_SCHEDULE(Base_tm* tm_pointer1,uint8_t psc);
+void ACK_L234(Base_tm* tm_pointer_short1,uint8_t ackCode,uint8_t psc);
+
+#define delete_TC(tc_ptr) {\
+ if(tc_ptr == gHEAD_NODE_TCL){\
+ 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 detect_ack(tm_ptr, temp_ack) {\
+ 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 = 0x02;\
+ /*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 ){\
+ temp_ack = 0x04;\
+ }\
+ }\
+ }\
+ else\
+ temp_ack = 0x03;\
+ }\
+ else{\
+ temp_ack = 0x02;\
+ }\
+}
+
+#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;\
+ }\
+ }\
+}
+
+
+
+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_ABORTED) ){\
+ 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 */
+
+/*tm_ptr is the next_TM of a linked list, and should have the value NULL, i.e. tm_ptr should be the next_TM pointer of thte last node */
+
+// CDMS TEAM CODE START
+void ACK_L234(Base_tm* tm_pointer_short1,uint8_t ackCode,uint8_t psc)
+{
+ tm_pointer_short1->TM_string[0] = 0xB0;
+ tm_pointer_short1->TM_string[1] = psc;
+ tm_pointer_short1->TM_string[2] = ackCode;
+ tm_pointer_short1->TM_string[3] = 0x00;
+ tm_pointer_short1->TM_string[4] = 0x00;
+ for(uint8_t i=0;i<6;i++)
+ tm_pointer_short1->TM_string[i+5] = 0;
+ crc16 = crc16_gen(tm_pointer_short1->TM_string,11);
+ tm_pointer_short1->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer_short1->TM_string[12] = (uint8_t)(crc16&0x00FF);
+ tm_pointer_short1->next_TM = NULL;
+}
+void TM_PMS_PL_SCHEDULE(Base_tm *tm_pointer1,uint8_t psc)
+{
+ Base_tm *tm_pointer2 = NULL;
+ if(!(tm_pointer2 = new Long_tm))
+ {
+ gPC.printf("\n\rError: out of memory");
+ return;
+ }
+ Base_tm *tm_pointer3 = NULL;
+ if(!(tm_pointer3 = new Long_tm))
+ {
+ gPC.printf("\n\rError: out of memory");
+ return;
+ }
+ Base_tm *tm_pointer4 = NULL;
+ if(!(tm_pointer4 = new Long_tm))
+ {
+ gPC.printf("\n\rError: out of memory");
+ return;
+ }
+ Base_tm *tm_pointer5 = NULL;
+ if(!(tm_pointer5 = new Long_tm))
+ {
+ gPC.printf("\n\rError: out of memory");
+ return;
+ }
+ Base_tm *tm_pointer6 = NULL;
+ if(!(tm_pointer6 = new Long_tm))
+ {
+ gPC.printf("\n\rError: out of memory");
+ return;
+ }
+ tm_pointer1->TM_string[0] = 0x48;
+ tm_pointer1->TM_string[1] = psc;
+ tm_pointer1->TM_string[2] = 0xA0;
+ tm_pointer1->TM_string[3] = 0x01;
+ for(uint8_t i=0;i<128;i+=4)
+ {
+ tm_pointer1->TM_string[i+4] = (uint8_t)((pl_block[i/4] & 0xFF000000)>>24);
+ tm_pointer1->TM_string[i+5] = (uint8_t)((pl_block[i/4] & 0x00FF0000)>>16);
+ tm_pointer1->TM_string[i+6] = (uint8_t)((pl_block[i/4] & 0x0000FF00)>>8);
+ tm_pointer1->TM_string[i+7] = (uint8_t)((pl_block[i/4] & 0x000000FF));
+ }
+ crc16 = crc16_gen(tm_pointer1->TM_string,132);
+ tm_pointer1->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer1->TM_string[133] = (uint8_t)(crc16&0x00FF);
+ tm_pointer1->next_TM = tm_pointer2;
+
+ tm_pointer2->TM_string[0] = 0x48;
+ tm_pointer2->TM_string[1] = psc;
+ tm_pointer2->TM_string[2] = 0xA0;
+ tm_pointer2->TM_string[3] = 0x02;
+ for(uint8_t i=0;i<128;i+=4)
+ {
+ tm_pointer2->TM_string[i+4] = (uint8_t)((pl_block[(i/4)+32] & 0xFF000000)>>24);
+ tm_pointer2->TM_string[i+5] = (uint8_t)((pl_block[(i/4)+32] & 0x00FF0000)>>16);
+ tm_pointer2->TM_string[i+6] = (uint8_t)((pl_block[(i/4)+32] & 0x0000FF00)>>8);
+ tm_pointer2->TM_string[i+7] = (uint8_t)((pl_block[(i/4)+32] & 0x000000FF));
+ }
+ crc16 = crc16_gen(tm_pointer2->TM_string,132);
+ tm_pointer2->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer2->TM_string[133] = (uint8_t)(crc16&0x00FF);
+ tm_pointer2->next_TM = tm_pointer3;
+
+ tm_pointer3->TM_string[0] = 0x48;
+ tm_pointer3->TM_string[1] = psc;
+ tm_pointer3->TM_string[2] = 0xA0;
+ tm_pointer3->TM_string[3] = 0x03;
+ for(uint8_t i=0;i<128;i+=4)
+ {
+ tm_pointer3->TM_string[i+4] = (uint8_t)((pl_block[(i/4)+64] & 0xFF000000)>>24);
+ tm_pointer3->TM_string[i+5] = (uint8_t)((pl_block[(i/4)+64] & 0x00FF0000)>>16);
+ tm_pointer3->TM_string[i+6] = (uint8_t)((pl_block[(i/4)+64] & 0x0000FF00)>>8);
+ tm_pointer3->TM_string[i+7] = (uint8_t)((pl_block[(i/4)+64] & 0x000000FF));
+ }
+ crc16 = crc16_gen(tm_pointer3->TM_string,132);
+ tm_pointer3->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer3->TM_string[133] = (uint8_t)(crc16&0x00FF);
+ tm_pointer3->next_TM = tm_pointer4;
+
+ tm_pointer4->TM_string[0] = 0x48;
+ tm_pointer4->TM_string[1] = psc;
+ tm_pointer4->TM_string[2] = 0xA0;
+ tm_pointer4->TM_string[3] = 0x04;
+ for(uint8_t i=0;i<128;i+=4)
+ {
+ tm_pointer4->TM_string[i+4] = (uint8_t)((pl_block[(i/4)+96] & 0xFF000000)>>24);
+ tm_pointer4->TM_string[i+5] = (uint8_t)((pl_block[(i/4)+96] & 0x00FF0000)>>16);
+ tm_pointer4->TM_string[i+6] = (uint8_t)((pl_block[(i/4)+96] & 0x0000FF00)>>8);
+ tm_pointer4->TM_string[i+7] = (uint8_t)((pl_block[(i/4)+96] & 0x000000FF));
+ }
+ crc16 = crc16_gen(tm_pointer4->TM_string,132);
+ tm_pointer4->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer4->TM_string[133] = (uint8_t)(crc16&0x00FF);
+ tm_pointer4->next_TM = tm_pointer5;
+
+ tm_pointer5->TM_string[0] = 0x48;
+ tm_pointer5->TM_string[1] = psc;
+ tm_pointer5->TM_string[2] = 0xA0;
+ tm_pointer5->TM_string[3] = 0x05;
+ for(uint8_t i=0;i<128;i+=4)
+ {
+ tm_pointer5->TM_string[i+4] = (uint8_t)((pl_block[(i/4)+128] & 0xFF000000)>>24);
+ tm_pointer5->TM_string[i+5] = (uint8_t)((pl_block[(i/4)+128] & 0x00FF0000)>>16);
+ tm_pointer5->TM_string[i+6] = (uint8_t)((pl_block[(i/4)+128] & 0x0000FF00)>>8);
+ tm_pointer5->TM_string[i+7] = (uint8_t)((pl_block[(i/4)+128] & 0x000000FF));
+ }
+ crc16 = crc16_gen(tm_pointer5->TM_string,132);
+ tm_pointer5->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer5->TM_string[133] = (uint8_t)(crc16&0x00FF);
+ tm_pointer5->next_TM = tm_pointer6;
+
+ tm_pointer6->TM_string[0] = 0x48;
+ tm_pointer6->TM_string[1] = psc;
+ tm_pointer6->TM_string[2] = 0xA0;
+ tm_pointer6->TM_string[3] = 0x06;
+ for(uint8_t i=0;i<128;i+=4)
+ {
+ tm_pointer6->TM_string[i+4] = (uint8_t)((pl_block[(i/4)+160] & 0xFF000000)>>24);
+ tm_pointer6->TM_string[i+5] = (uint8_t)((pl_block[(i/4)+160] & 0x00FF0000)>>16);
+ tm_pointer6->TM_string[i+6] = (uint8_t)((pl_block[(i/4)+160] & 0x0000FF00)>>8);
+ tm_pointer6->TM_string[i+7] = (uint8_t)((pl_block[(i/4)+160] & 0x000000FF));
+ }
+ crc16 = crc16_gen(tm_pointer6->TM_string,132);
+ tm_pointer6->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer6->TM_string[133] = (uint8_t)(crc16&0x00FF);
+ tm_pointer6->next_TM = NULL;
+}
+Base_tm* FCTN_CDMS_RLY_TMTC(Base_tc *tc_ptr)
+{
+ //uint8_t ACKCODE = 0xB0;
+ bool y;
+ //gPC.printf("\rTC execution in progress\r\n");
+ Base_tm *tm_pointer = new Long_tm;
+ Base_tm *tm_ptr = tm_pointer;
+ //Base_tm *tm_ptr = new Long_tm;
+ Base_tm *tm_pointer_short = new Short_tm;
+ Base_tm *tm_ptr_short = tm_pointer_short;
+ received = 0;
+ switch(GETapid(tc_ptr)) //checking APID's
+ {
+ case 1: //apid=01 implies it corresponds to bae
+ {
+ BAE_I2C_mutex.lock();
+ gPC.printf("Telecommand is for BAE\r\n");
+ gPC.printf("Sending TC to BAE...\r\n"); //interrupt to be sent to the bae
+ y = FCTN_I2C_WRITE((char*)tc_ptr->TC_string,TC_LONG_SIZE); // Check for SHORT and LONG TC and then send
+
+ if(y==1)
+ {
+ ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(y==0)
+ {
+ //wait(0.2);
+ uint8_t poll=0;
+ while(poll<60 && BAE_I2C_GPIO==0)
+ {
+ wait_ms(50);
+ poll+=1;
+ }
+ if(BAE_I2C_GPIO == 1) //name to be changed later
+ {
+ gPC.printf("BAE_I2C_GPIO is high\r\n");
+
+ y=FCTN_I2C_READ((char*)tm_pointer->TM_string,TM_LONG_SIZE); //rify later about the size
+ if(y==0)
+ {
+ tm_pointer->next_TM=NULL;
+ return tm_ptr;
+ }
+ else if(y==1)
+ {
+ ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));
+ //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
+ return tm_ptr_short;
+ break;
+ }
+ }
+ else if(BAE_I2C_GPIO == 0) //name to be changed later
+ {
+ gPC.printf("BAE_I2C_GPIO is not high\r\n");
+ ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ BAE_I2C_mutex.unlock();
+ }
+
+ case 2: // APID = 2 corresponds to CDMS
+ {
+ //gPC.printf("Telecommand is for CDMS\r\n"); //apid = 10 corresponds to cdms
+ switch(GETservice_type(tc_ptr))
+ {
+ /*case 0x60: //service type = 0x6
+ {
+ gPC.printf("service:MMS\r\n");
+ switch(GETservice_subtype(tc_ptr))
+ {
+ case 0x2: //service subtye
+ {
+ //gPC.printf("sub_service:Read LONG_RAM_Memory\r\n");
+ mid=((uint16_t)(tc_ptr->TC_string[3]<<4))+((uint16_t)(tc_ptr->TC_string[4]));
+ if(mid!=0x0000 && mid!=0x0001)
+ {
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ FCTN_CDMS_RD_L_RAM(tm_pointer);
+
+ tm_pointer->TM_string[0] = 0x30;
+ tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
+ tm_pointer->TM_string[2] = 0xA0;
+ tm_pointer->TM_string[3] = 0x00; //spare bits
+
+ crc16 = crc16_gen(tm_ptr->TM_string,132);
+ 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: // change the cases appropriately
+ {
+ //gPC.printf("WRITE ON SHORT_FLASH_MEMORY\r\n");
+ mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
+ //32 bits at a time
+
+ if(mid!= && mid!=) //allowable MID values?
+ {
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+
+ FCTN_CDMS_WR_S_FLASH(tc_ptr);
+
+ ACK_L234(tm_ptr_short,???,GETpacket_seq_count(tc_ptr)); //ackCode = ? for success
+
+ return tm_ptr_short;
+ }
+ case 0x6:
+ {
+ //gPC.printf("WRITE ON LONG_FLASH_MEMORY\r\n");
+ mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
+ //1024 bits at a time
+
+ if(mid<0x0002 || mid>0x000A) //allowable MID values?
+ {
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr)); //ackCode = ? for invalid mid
+ return tm_ptr_short;
+ }
+
+ ///Send TM for success after writing onto flash
+ FCTN_CDMS_WR_L_FLASH(mid);
+
+ return tm_ptr_short;
+ }
+ default:
+ {
+ gPC.printf("INVALID SERVICE SUBTYPE\r\n");
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ } */
+ case 0x80:
+ {
+ gPC.printf("service:FUNCTION MANAGEMENT SERVICE\r\n");
+ if(GETservice_subtype(tc_ptr)==0x1)
+ {
+ if(GETpid(tc_ptr)==0x01)
+ {
+ if(CDMS_STANDBY==1)
+ {
+ //gPC.printf("TC_PL_INIT\r\n"); // call PWR_SWCH_ON function
+
+ P_PL_INIT();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(CDMS_STANDBY==0)
+ {
+ ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr)); //TC cannot be processed now
+ return tm_ptr_short;
+ }
+ }
+ else if(GETpid(tc_ptr)==0x02)
+ {
+ if(CDMS_STANDBY==1)
+ {
+ //gPC.printf("TC_PL_MAIN\r\n"); // call PWR_SWCH_ON function
+
+ P_PL_MAIN();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(CDMS_STANDBY==0)
+ {
+ ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr)); //TC cannot be processed now
+ return tm_ptr_short;
+ }
+ }
+ else if(GETpid(tc_ptr)==0x03)
+ {
+ if(CDMS_STANDBY==1)
+ {
+ //gPC.printf("PL_COM_INIT\r\n"); // call PWR_SWCH_ON function
+
+ P_COM_INIT();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(CDMS_STANDBY==0)
+ {
+ ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr)); //TC cannot be processed now
+ return tm_ptr_short;
+ }
+ }
+ else if(GETpid(tc_ptr)==0x04)
+ {
+ if(CDMS_STANDBY==1)
+ {
+ //gPC.printf("TC_P_CDMS_HK_MAIN\r\n"); // call PWR_SWCH_ON function
+
+ P_CDMS_HK_MAIN();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(CDMS_STANDBY==0)
+ {
+ 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)
+ {
+ if(CDMS_STANDBY==1)
+ {
+ //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
+
+ P_PL_RCV_SC_DATA();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(CDMS_STANDBY==0)
+ {
+ ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr)); //TC cannot be processed now
+ return tm_ptr_short;
+ }
+ }
+ else if(GETpid(tc_ptr)==0x06)
+ {
+ if(CDMS_STANDBY==1)
+ {
+ //gPC.printf("TC_SW_ON_RTC\r\n"); // call PWR_SWCH_ON function
+
+ P_CDMS_INIT_SD();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(CDMS_STANDBY==0)
+ {
+ ACK_L234(tm_ptr_short,0x87,GETpacket_seq_count(tc_ptr)); //TC cannot be processed now
+ return tm_ptr_short;
+ }
+ }
+ else if(GETpid(tc_ptr)==0x11)
+ {
+ //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
+
+ CDMS_SD_SW_ON();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x21)
+ {
+ //gPC.printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
+
+ CDMS_SD_SW_OFF();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x13)
+ {
+ //gPC.printf("TC_SW_ON_BAE\r\n"); // call PWR_SWCH_ON function
+
+ SW_ON_BAE();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x23)
+ {
+ //gPC.printf("TC_SW_OFF_BAE\r\n"); // call PWR_SWCH_ON function
+
+ SW_OFF_BAE();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x14)
+ {
+ //gPC.printf("TC_SW_ON_PL_BEE\r\n"); // call PWR_SWCH_ON function
+
+ SW_ON_PL_BEE();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x24)
+ {
+ //gPC.printf("TC_SW_OFF_PL_BEE\r\n"); // call PWR_SWCH_ON function
+
+ SW_OFF_PL_BEE();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x15)
+ {
+ //gPC.printf("TC_SW_ON_PL_EPS\r\n"); // call PWR_SWCH_ON function
+
+ SW_ON_PL_EPS();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x25)
+ {
+ //gPC.printf("TC_SW_OFF_PL_EPS\r\n"); // call PWR_SWCH_ON function
+
+ SW_OFF_PL_EPS();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x16)
+ {
+
+ //gPC.printf("TC_SW_ON_V_A_EN\r\n"); // call PWR_SWCH_ON function
+
+ SW_ON_V_A_EN();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x26)
+ {
+ //gPC.printf("TC_SW_OFF_V_A_EN\r\n"); // call PWR_SWCH_ON function
+
+ SW_OFF_V_A_EN();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x31)
+ {
+ //gPC.printf("TC_RST_SD\r\n"); // call PWR_SWCH_ON function
+
+ RST_SD();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x33)
+ {
+ //gPC.printf("TC_RST_BAE\r\n"); // call PWR_SWCH_ON function
+
+ RST_BAE();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x34)
+ {
+ //gPC.printf("TC_RST_PL_BEE\r\n"); // call PWR_SWCH_ON function
+
+ RST_PL_BEE();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x38)
+ {
+ //gPC.printf()
+
+ CDMS_INTERNAL_RESET();
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ }
+ else if(GETpid(tc_ptr)==0x40)
+ {
+ //gPC.printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
+
+ RST_HK_COUNTER();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0x41)
+ {
+ //gPC.printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
+
+ RST_HK_COUNTER();
+
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ else if(GETpid(tc_ptr)==0xF1)
+ {
+ //gPC.printf("TC_CDMS_RD_RTC\r\n"); // call PWR_SWCH_ON function
+
+ /*uint32_t time_temp = FCTN_CDMS_RD_RTC(); //RTC_RD_EROR has to incorporated
+ tm_pointer->TM_string[0] = 0x78;
+ tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
+ tm_pointer->TM_string[2] = 0xA0;
+ tm_pointer->TM_string[3] = 0x00;
+ tm_pointer->TM_string[4] = (uint8_t)((time & 0xFF000000)>>24);
+ tm_pointer->TM_string[5] = (uint8_t)((time & 0x00FF0000)>>16);
+ tm_pointer->TM_string[6] = (uint8_t)((time & 0x0000FF00)>>8);
+ tm_pointer->TM_string[7] = (uint8_t)((time & 0x000000FF));
+ for(uint8_t i=0;i<124;i++)
+ {
+ tm_pointer->TM_string[i+8] = 0x00;
+ }
+ crc16 = crc16_gen(tm_ptr->TM_string,132);
+ tm_pointer->TM_string[132] = (uint8_t)((crc16&0xFF00)>>8);
+ tm_pointer->TM_string[133] = (uint8_t)(crc16&0x00FF);
+ tm_pointer->next_TM = NULL;
+ return tm_ptr; */ //incomplete
+ }
+ else if(GETpid(tc_ptr)==0xF0)
+ {
+ uint8_t statusbits[64];
+ CDMS_RD_SD_HK(statusbits);
+ ACK_L234(tm_ptr_short,0xC0,GETpacket_seq_count(tc_ptr));
+ }
+ else
+ {
+ gPC.printf("INVALID FID\r\n");
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ else
+ {
+ gPC.printf("INVALID SERVICE SUBTYPE\r\n");
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ case 0x70:
+ {
+ gPC.printf("\n\n\rService:PAYLOAD MANAGEMENT SERVICE");
+ if(GETservice_subtype(tc_ptr)==0x1) //make sure it is LONG TC before executing else INVALID TC
+ {
+ gPC.printf("\n\rTC with subtype = 0x1");
+ TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
+ for(uint8_t i=0,j=0;i<32;i++)
+ {
+ pl_block[i] &= 0x00000000;
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[3+j]))<<24);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[4+j]))<<16);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[5+j]))<<8);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[6+j])));
+ j+=4;
+ }
+ return tm_ptr;
+ }
+ else if(GETservice_subtype(tc_ptr)==0x2)
+ {
+ gPC.printf("\n\rTC with subtype = 0x2");
+ TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
+ for(uint8_t i=32,j=0;i<64;i++,j+=4)
+ {
+ pl_block[i] &= 0x00000000;
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[3+j]))<<24);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[4+j]))<<16);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[5+j]))<<8);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[6+j])));
+ }
+ return tm_ptr;
+ }
+ else if(GETservice_subtype(tc_ptr)==0x3)
+ {
+ gPC.printf("\n\rTC with subtype = 0x3");
+ TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
+ for(uint8_t i=64,j=0;i<96;i++,j+=4)
+ {
+ pl_block[i] &= 0x00000000;
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[3+j]))<<24);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[4+j]))<<16);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[5+j]))<<8);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[6+j])));
+ }
+ return tm_ptr;
+ }
+ else if(GETservice_subtype(tc_ptr)==0x4)
+ {
+ gPC.printf("\n\rTC with subtype = 0x4");
+ TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
+ for(uint8_t i=96,j=0;i<128;i++,j+=4)
+ {
+ pl_block[i] &= 0x00000000;
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[3+j]))<<24);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[4+j]))<<16);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[5+j]))<<8);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[6+j])));
+ }
+ return tm_ptr;
+ }
+ else if(GETservice_subtype(tc_ptr)==0x5)
+ {
+ gPC.printf("\n\rTC with subtype = 0x5");
+ TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
+ for(uint8_t i=128,j=0;i<160;i++,j+=4)
+ {
+ pl_block[i] &= 0x00000000;
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[3+j]))<<24);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[4+j]))<<16);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[5+j]))<<8);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[6+j])));
+ }
+ return tm_ptr;
+ }
+ else if(GETservice_subtype(tc_ptr)==0x6)
+ {
+ gPC.printf("\n\rTC with subtype = 0x6");
+ TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
+ for(uint8_t i=160,j=0;i<192;i++,j+=4)
+ {
+ pl_block[i] &= 0x00000000;
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[3+j]))<<24);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[4+j]))<<16);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[5+j]))<<8);
+ pl_block[i] |= (((uint32_t)(tc_ptr->TC_string[6+j])));
+ }
+ return tm_ptr;
+ }
+ else if(GETservice_subtype(tc_ptr)==0xF)
+ {
+ gPC.printf("\n\rTC with subtype = 0xF");
+ TM_PMS_PL_SCHEDULE(tm_ptr,GETpacket_seq_count(tc_ptr));
+ return tm_ptr;
+ }
+ else
+ {
+ gPC.printf("INVALID SERVICE SUBTYPE\r\n");
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ default:
+ {
+ gPC.printf("ILLEGAL TC");
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ }
+ case 3:
+ {
+ //#if DEBUG
+ gPC.printf("\n\rTelecommand is for PL\r\n");
+ //#endif
+ if(GETshort_or_long_tc(tc_ptr) == LONG_TC_CODE)
+ y=FCTN_I2C_WRITE_PL((char*)tc_ptr->TC_string,TC_LONG_SIZE);
+ else if(GETshort_or_long_tc(tc_ptr) == SHORT_TC_CODE)
+ y=FCTN_I2C_WRITE_PL((char*)tc_ptr->TC_string,TC_SHORT_SIZE);
+
+ if(y==1)
+ {
+ ACK_L234(tm_ptr_short,0x03,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ break;
+ }
+ else if(y==0)
+ {
+ //wait(0.2);
+ uint8_t poll=0;
+ while(poll<60 && PL_I2C_Intr==0)
+ {
+ wait_ms(50);
+ poll+=1;
+ }
+ if(PL_I2C_Intr == 1) //name to be changed later
+ {
+ gPC.printf("PL_I2C_Intr is high\r\n");
+
+ y=FCTN_I2C_READ_PL((char*)tm_pointer->TM_string,TM_LONG_SIZE); //rify later about the size
+ if(y==0)
+ {
+ tm_pointer->next_TM=NULL;
+ return tm_ptr;
+ break;
+ }
+ else if(y==1)
+ {
+ ACK_L234(tm_ptr_short,0x85,GETpacket_seq_count(tc_ptr));
+ //gPC.printf("\n\rPTE->PDIR = 0x%08X",PTE->PDIR);
+ return tm_ptr_short;
+ break;
+ }
+ }
+ else if(PL_I2C_Intr == 0) //name to be changed later
+ {
+ gPC.printf("PL_I2C_Intr is not high\r\n");
+ ACK_L234(tm_ptr_short,0x84,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ }
+ default: //invalid TC
+ {
+ gPC.printf("INVALID TC\r\n");
+ ACK_L234(tm_ptr_short,0x02,GETpacket_seq_count(tc_ptr));
+ return tm_ptr_short;
+ }
+ }
+ return;
+}
+// CDMS TEAM CODE END
+
+// EXECUTE OBOSC
+#define execute_obosc_core(tc_ptr, tm_ptr, reset_flag) {\
+ if (DEBUG)\
+ gPC.puts("Inside execute_obosc_core\r\n");\
+ 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{\
+ 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{\
+ 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_flag = 1;\
+ }\
+ else if( (service_subtype != OBOSC_SUB_DISABLE) && (service_subtype != OBOSC_SUB_RETRY) ){\
+ /*CHANGE THE ACK CODE TO INVALID TC*/\
+ ackl234new->TM_string[2] = 0xAF;\
+ }\
+ if (DEBUG)\
+ 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 EXECUTE_OBOSC_ONLY {\
+ gMASTER_STATE = TCL_STATE_EXECUTING;\
+ int reset_flag = 0;\
+ if (DEBUG)\
+ gPC.puts("iNSIDE EXECUTE_OBOSC_ONLY\r\n");\
+ Base_tm *obosc_tm_core = NULL;\
+ Base_tm *obosc_tm = obosc_tm_core;\
+ 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) ){\
+ if (DEBUG)\
+ gPC.printf("It is obosc: %u\r\n", execute_psc);\
+ /*EXECUTION OF OBOSC TC*/\
+ /*WARNING: LARGE MEMORY UTILIZATION FOR TC-LIST-REPORT */\
+ execute_obosc_core(current_TC, obosc_tm_core, reset_flag);\
+ Base_tm *obosc_tm_current = obosc_tm_core;\
+ while(obosc_tm_core != NULL){\
+ obosc_tm_core = obosc_tm_core->next_TM;\
+ }\
+ if(obosc_tm_current->TM_string[2] == 0xA0){\
+ uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
+ PUTexec_status(current_TC, temp16);\
+ }\
+ else{\
+ uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
+ PUTexec_status(current_TC, temp16);\
+ }\
+ 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;\
+ }\
+ }\
+ }\
+ }\
+ current_TC = current_TC->next_TC;\
+ ++overCount;\
+ }\
+ else{\
+ RESET_CDMS;\
+ break;\
+ }\
+ }\
+ }\
+ if(obosc_tm_core != NULL){\
+ Base_tm *obosc_tm_head = NULL;\
+ get_call_sign(obosc_tm_head);\
+ 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{\
+ RESET_CDMS;\
+ break;\
+ }\
+ }\
+ obosc_tm_current->next_TM = obosc_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{\
+ RESET_CDMS;\
+ break;\
+ }\
+ }\
+ }\
+ if ( reset_flag == 1 ){\
+ reset_all;\
+ /*PENDING: Enable threads*/\
+ /*gCDMS_HK_TIMER.start(5000);*/\
+ gSESSION_TIMEOUT.detach();\
+ }\
+}
+
+#define EXECUTE_TC {\
+ gMASTER_STATE = TCL_STATE_EXECUTING;\
+ if (DEBUG)\
+ gPC.puts("iNSIDE EXECUTE_TC\r\n");\
+ /*gPC.printf("%u\r\n", gTOTAL_VALID_TC);*/\
+ for(uint8_t execute_psc = PSC_START_VALUE ; execute_psc < gTOTAL_VALID_TC ; ++execute_psc ){\
+ if (DEBUG)\
+ 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);*/\
+ if( execute_psc == (gTOTAL_VALID_TC-1) ){\
+ /*LAST TC IS EXECUTED*/\
+ gMASTER_STATE = TCL_STATE_COMPLETED;\
+ }\
+ 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{\
+ 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 ){\
+ if (DEBUG)\
+ 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);*/\
+ put_tm_here = FCTN_CDMS_RLY_TMTC(current_TC);\
+ }\
+ /*DETECT ACK OR NACK*/\
+ uint8_t temp83 = 0x00;\
+ detect_ack(put_tm_here, temp83);\
+ if( temp83 == 0x01){\
+ uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
+ PUTexec_status(current_TC, temp16);\
+ }\
+ else if( temp83 == 0x03){\
+ /*gPC.puts("TC_STATE_EXECUTION_UNKNOWN");*/\
+ uint16_t temp16 = TC_STATE_EXECUTION_UNKNOWN;\
+ PUTexec_status(current_TC, temp16);\
+ }\
+ else if( temp83 == 0x04){\
+ /*gPC.puts("TC_STATE_EXECUTION_UNKNOWN");*/\
+ uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
+ PUTexec_status(current_TC, temp16);\
+ uint8_t temp84 = GETpacket_seq_count(current_TC);\
+ put_tm_here->TM_string[2] = temp84;\
+ uint16_t crc16 = crc16_gen(put_tm_here->TM_string, 11);\
+ put_tm_here->TM_string[11] = (crc16 & 0xFF00)>>8;\
+ put_tm_here->TM_string[12] = (crc16 & 0x00FF);\
+ }\
+ 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) || (GETexec_status(current_TC) == TC_STATE_EXECUTION_UNKNOWN)) && (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;\
+ }\
+ /*update last executed L1_ack*/\
+ if( put_tm_here != NULL ){\
+ Base_tm *ptr_tm = put_tm_here;\
+ while(ptr_tm->next_TM != NULL)\
+ ptr_tm = ptr_tm->next_TM;\
+ if( GETshort_or_long_tm(ptr_tm) == SHORT_TM_CODE ){\
+ for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
+ gLAST_TM[i] = ptr_tm->TM_string[i];\
+ gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;\
+ }\
+ }\
+ else{\
+ for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){\
+ gLAST_TM[i] = ptr_tm->TM_string[i];\
+ gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;\
+ }\
+ }\
+ }\
+ P_COM_HK;\
+ 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{\
+ RESET_CDMS;\
+ break;\
+ }\
+ }\
+ tm_ptr->next_TM = put_tm_here;\
+ 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{\
+ RESET_CDMS;\
+ break;\
+ }\
+ }\
+ }\
+ else{\
+ if (DEBUG)\
+ gPC.printf("sd card at %u\r\n", execute_psc);\
+ /*EXECUTION OF SD-CARD DATA SENDING (OBSRS)*/\
+ execute_OBSRS_TC(current_TC);\
+ }\
+ }\
+ break;\
+ }\
+ current_TC = current_TC->next_TC;\
+ ++overflowCount;\
+ }\
+ else{\
+ RESET_CDMS;\
+ break;\
+ }\
+ }\
+ if( gFLAGS & COM_SESSION_TIMEOUT_FLAG ){\
+ break;\
+ }\
+ else if( gMASTER_STATE == TCL_STATE_ABORTED ){\
+ if (DEBUG)\
+ gPC.puts("ABORTING DUE TO ABORT ON NACK\r\n");\
+ /*EXITED DUE TO ABORT ON NACK:*/\
+ COM_TX_CNTRL = 0;\
+ RX1M.attach(&rx_read, Serial::RxIrq);\
+ gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
+ break;\
+ }\
+ else if( (gFLAGS & COM_PA_HOT_FLAG) || (gFLAGS & COM_PA_OC_FLAG) ){\
+ /*PA HOT: WAIT FOR TIMEOUT*/\
+ gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);\
+ COM_TX_CNTRL = 0;\
+ RX1M.attach(&rx_read, Serial::RxIrq);\
+ gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
+ break;\
+ }\
+ if (DEBUG)\
+ gPC.printf("successflly executed %u tc\r\n", execute_psc);\
+ }\
+ if( (gMASTER_STATE == TCL_STATE_COMPLETED) || (gFLAGS & COM_SESSION_TIMEOUT_FLAG) ){\
+ if (DEBUG)\
+ 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*/\
+ /*gCDMS_HK_TIMER.start(5000);*/\
+ gPAY_SPI.bulkRead_start();\
+ gSESSION_TIMEOUT.detach();\
+ gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
+ gFLAGS = gFLAGS & (~COM_SESSION_FLAG);\
+ }\
+}
\ No newline at end of file
--- a/COM_POWER_OFF_TX.h Sun Jul 03 09:26:42 2016 +0000
+++ b/COM_POWER_OFF_TX.h Sun Jul 03 09:47:05 2016 +0000
@@ -1,136 +1,15 @@
-#define RESET_CDMS {\
- Base_tc *RESET_tc = new Short_tc;\
- RESET_tc->next_TC = NULL;\
- PUTshort_or_long(RESET_tc,SHORT_TC_CODE);\
- PUTcrc_pass(RESET_tc,0x1);\
- PUTexec_status(RESET_tc,0);\
- RESET_tc->TC_string[0] = 0x01;\
- RESET_tc->TC_string[1] = 0x81;\
- RESET_tc->TC_string[2] = 0x81;\
- RESET_tc->TC_string[3] = 0x38;\
- RESET_tc->TC_string[4] = 0;\
- RESET_tc->TC_string[5] = 0;\
- RESET_tc->TC_string[6] = 0;\
- RESET_tc->TC_string[7] = 0;\
- RESET_tc->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(RESET_tc->TC_string, 9);\
- RESET_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\
- RESET_tc->TC_string[10] = (crc16 & 0x00FF);\
- Base_tm *tm_ptr = NULL;\
- tm_ptr = FCTN_CDMS_RLY_TMTC(RESET_tc);\
- delete RESET_tc;\
- /*DELETE THE TM AFTER USE*/\
- Base_tm *del_tm = tm_ptr;\
- while( del_tm != NULL ){\
- Base_tm *temp = del_tm->next_TM;\
- delete del_tm;\
- del_tm = temp;\
- }\
-}
-
-#define power_on_bae {\
- Base_tc *power_on_BAE = new Short_tc;\
- power_on_BAE->next_TC = NULL;\
- PUTshort_or_long(power_on_BAE,SHORT_TC_CODE);\
- PUTcrc_pass(power_on_BAE,0x1);\
- PUTexec_status(power_on_BAE,0);\
- power_on_BAE->TC_string[0] = 0x01;\
- power_on_BAE->TC_string[1] = BAE_APID_SOURCE;\
- power_on_BAE->TC_string[2] = BAE_SERVICE;\
- power_on_BAE->TC_string[3] = BAE_POWER_ON_PID;\
- power_on_BAE->TC_string[4] = 0;\
- power_on_BAE->TC_string[5] = 0;\
- power_on_BAE->TC_string[6] = 0;\
- power_on_BAE->TC_string[7] = 0;\
- power_on_BAE->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(power_on_BAE->TC_string, 9);\
- power_on_BAE->TC_string[9] = (crc16 & 0xFF00)>>8;\
- power_on_BAE->TC_string[10] = (crc16 & 0x00FF);\
- Base_tm *tm_ptr = NULL;\
- tm_ptr = FCTN_CDMS_RLY_TMTC(power_on_BAE);\
- delete power_on_BAE;\
- /*DELETE THE TM AFTER USE*/\
- Base_tm *del_tm = tm_ptr;\
- int overCount = 0;\
- while( del_tm != NULL ){\
- if( (overCount < TM_OVERFLOW_CONSTANT) ){\
- Base_tm *temp = del_tm->next_TM;\
- delete del_tm;\
- del_tm = temp;\
- ++overCount;\
- }\
- else{\
- RESET_CDMS;\
- break;\
- }\
- }\
-}
-
-#define resume_bcn {\
- Base_tc *beacon_tc = new Long_tc;\
- beacon_tc->next_TC = NULL;\
- PUTshort_or_long(beacon_tc,LONG_TC_CODE);\
- PUTcrc_pass(beacon_tc,0x1);\
- PUTexec_status(beacon_tc,0);\
- beacon_tc->TC_string[0] = 0x01;\
- beacon_tc->TC_string[1] = BCN_APID_SOURCE;\
- beacon_tc->TC_string[2] = BCN_SERVICE;\
- beacon_tc->TC_string[3] = 0xE2;\
- beacon_tc->TC_string[4] = 0x00;\
- beacon_tc->TC_string[5] = 0;\
- beacon_tc->TC_string[6] = 0;\
- beacon_tc->TC_string[7] = 0;\
- beacon_tc->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(beacon_tc->TC_string, 9);\
- beacon_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\
- beacon_tc->TC_string[10] = (crc16 & 0x00FF);\
- for(int i = 11; i < 135; i++){\
- beacon_tc->TC_string[i] = 0;\
- }\
- Base_tm *tm_ptr = NULL;\
- tm_ptr = FCTN_CDMS_RLY_TMTC(beacon_tc);\
- delete beacon_tc;\
- /*DELETE THE TM AFTER USE*/\
- Base_tm *del_tm = tm_ptr;\
- int overCount = 0;\
- while( del_tm != NULL ){\
- if( (overCount < TM_OVERFLOW_CONSTANT) ){\
- Base_tm *temp = del_tm->next_TM;\
- delete del_tm;\
- del_tm = temp;\
- ++overCount;\
- }\
- else{\
- RESET_CDMS;\
- break;\
- }\
- }\
-}
-
#define COM_POWER_OFF_TX {\
/*gPC.puts("Inside COM_POWER_OFF_TX\r\n");*/\
- COM_TX_CNTRL = 0;\
+ /*PENDING: POWER OFF TRANSMITTER*/\
RX1M.attach(&rx_read, Serial::RxIrq);\
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
- RF_SW_CNTRL_BCN = 1;\
- Thread::wait(25);\
- RF_SW_CNTRL_BCN = 0;\
- gFLAGS = gFLAGS | RF_SW_STATUS_FLAG;\
- if( gFLAGS & COM_AUTO_POWER_OFF_BAE_FLAG ){\
- power_on_bae;\
- gFLAGS = gFLAGS | BAE_SW_EN_FLAG;\
- gFLAGS & (~COM_AUTO_POWER_OFF_BAE_FLAG);\
- resume_bcn;\
- }\
- else{\
- if( gFLAGS & BAE_SW_EN_FLAG ){\
- resume_bcn;\
- }\
- }\
+ /*PENDING: SWITCH RF RELAY TO BEACON*/\
+ /*PENDING: RF_SW_STATUS = RF_BCN*/\
+ /*PENDING: POWER ON BAE*/\
+ /*PENDING: SET BAE SW_EN_STATUS*/\
+ /*PENDING: RESUME BEACON*/\
gFLAGS = gFLAGS & (~COM_PA_HOT_FLAG);\
- gFLAGS = gFLAGS & (~COM_PA_OC_FLAG);\
gCOM_PA_COOLING_TIMEOUT.detach();\
gFLAGS = gFLAGS & (~COM_TX_FLAG);\
- gFLAGS = gFLAGS & (~COM_SESSION_TIMEOUT_FLAG);\
- /*gPC.puts("completed com_power_off tx\r\n");*/\
+ /*gPC.puts("ompleted com_power_off tx\r\n");*/\
}
\ No newline at end of file
--- a/COM_POWER_ON_TX.h Sun Jul 03 09:26:42 2016 +0000
+++ b/COM_POWER_ON_TX.h Sun Jul 03 09:47:05 2016 +0000
@@ -1,444 +1,107 @@
-#define STANDBY_PRCS(tm_ptr){\
- Base_tc *stdby_tc = new Long_tc;\
- stdby_tc->next_TC = NULL;\
- PUTshort_or_long(stdby_tc,LONG_TC_CODE);\
- PUTcrc_pass(stdby_tc,0x1);\
- PUTexec_status(stdby_tc,0);\
- stdby_tc->TC_string[0] = 0x01;\
- stdby_tc->TC_string[1] = 0x41;\
- stdby_tc->TC_string[2] = 0x81;\
- stdby_tc->TC_string[3] = 0x40;\
- stdby_tc->TC_string[4] = 0x01;\
- stdby_tc->TC_string[5] = 0x01;\
- stdby_tc->TC_string[6] = 0x01;\
- stdby_tc->TC_string[7] = 0;\
- stdby_tc->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(stdby_tc->TC_string, 9);\
- stdby_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\
- stdby_tc->TC_string[10] = (crc16 & 0x00FF);\
- for(int i = 11; i < 135; i++){\
- stdby_tc->TC_string[i] = 0;\
- }\
- tm_ptr = FCTN_CDMS_RLY_TMTC(stdby_tc);\
- delete stdby_tc;\
-}
-
-#define SET_BCN_STANDBY(tm_ptr){\
- Base_tc *beacon_tc = new Long_tc;\
- beacon_tc->next_TC = NULL;\
- PUTshort_or_long(beacon_tc,LONG_TC_CODE);\
- PUTcrc_pass(beacon_tc,0x1);\
- PUTexec_status(beacon_tc,0);\
- beacon_tc->TC_string[0] = 0x01;\
- beacon_tc->TC_string[1] = BCN_APID_SOURCE;\
- beacon_tc->TC_string[2] = BCN_SERVICE;\
- beacon_tc->TC_string[3] = 0xE2;\
- beacon_tc->TC_string[4] = 0x01;\
- beacon_tc->TC_string[5] = 0;\
- beacon_tc->TC_string[6] = 0;\
- beacon_tc->TC_string[7] = 0;\
- beacon_tc->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(beacon_tc->TC_string, 9);\
- beacon_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\
- beacon_tc->TC_string[10] = (crc16 & 0x00FF);\
- for(int i = 11; i < 135; i++){\
- beacon_tc->TC_string[i] = 0;\
- }\
- tm_ptr = FCTN_CDMS_RLY_TMTC(beacon_tc);\
- delete beacon_tc;\
-}
-
-#define reset_bae {\
- Base_tc *reset_BAE = new Short_tc;\
- reset_BAE->next_TC = NULL;\
- PUTshort_or_long(reset_BAE,SHORT_TC_CODE);\
- PUTcrc_pass(reset_BAE,0x1);\
- PUTexec_status(reset_BAE,0);\
- reset_BAE->TC_string[0] = 0x01;\
- reset_BAE->TC_string[1] = BAE_APID_SOURCE;\
- reset_BAE->TC_string[2] = BAE_SERVICE;\
- reset_BAE->TC_string[3] = BAE_RESET_PID;\
- reset_BAE->TC_string[4] = 0;\
- reset_BAE->TC_string[5] = 0;\
- reset_BAE->TC_string[6] = 0;\
- reset_BAE->TC_string[7] = 0;\
- reset_BAE->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(reset_BAE->TC_string, 9);\
- reset_BAE->TC_string[9] = (crc16 & 0xFF00)>>8;\
- reset_BAE->TC_string[10] = (crc16 & 0x00FF);\
- Base_tm *tm_ptr = NULL;\
- tm_ptr = FCTN_CDMS_RLY_TMTC(reset_BAE);\
- delete reset_BAE;\
- /*DELETE THE TM AFTER USE*/\
- Base_tm *del_tm = tm_ptr;\
- int overCount = 0;\
- while( del_tm != NULL ){\
- if( (overCount < TM_OVERFLOW_CONSTANT) ){\
- Base_tm *temp = del_tm->next_TM;\
- delete del_tm;\
- del_tm = temp;\
- ++overCount;\
- }\
- else{\
- RESET_CDMS;\
- break;\
+#define COM_POWER_ON_TX {\
+ /*gPC.puts("Inside COM_POWER_ON_TX\r\n");*/\
+ if( !(gFLAGS & COM_TX_FLAG) ){\
+ gFLAGS = gFLAGS | COM_TX_FLAG;\
+ /*WARNING: INFINITE WHILE LOOP POSSIBLE: if standby ack received and bcn tx main status = 0*/\
+ bool retryFlag = true;\
+ while( retryFlag == true ){\
+ uint8_t standbyAck = 0xFF;\
+ /*PENDING: SET BEACON TO STANDBY*/\
+ if( standbyAck == 0xFF ){\
+ /*ACK RECCEIVED*/\
+ /*PENDING: BEACON TX MAIN STATUS*/\
+ if( true ){\
+ retryFlag = false;\
+ /*PENDING: SWITCH RELAY TO COM_TX*/\
+ /*PENDING: RF_SW_STATUS = RF_COM_TX*/\
+ }\
+ else{\
+ gCOM_MNG_TMTC_THREAD->wait(5000);\
+ }\
+ }\
+ else{\
+ /*PENDING: RESET BAE*/\
+ uint8_t standbyAck2 = 0x00;\
+ /*PENDING: SET BEACON TO STANDBY*/\
+ if( standbyAck2 == 0xFF ){\
+ /*PENDING: BEACON TX MAIN STAUTS*/\
+ if( true ){\
+ retryFlag = false;\
+ /*PENDING: SWITCH RF RELAY TO COM TX*/\
+ /*PENDING: RF_SW_STATUS = RF_COM_TX*/\
+ }\
+ }\
+ else{\
+ retryFlag = false;\
+ /*PENDING: POWER OFF BEACON*/\
+ /*PENDING: CLEAR BAE SW_EN*/\
+ /*PENDING: SWITCH RF RELAY TO COM TX*/\
+ /*PENDING: RF_SW_STATUS = RF_COM_TX*/\
+ }\
+ }\
}\
}\
-}
-
-#define power_off_bae {\
- Base_tc *power_off_BAE = new Short_tc;\
- power_off_BAE->next_TC = NULL;\
- PUTshort_or_long(power_off_BAE,SHORT_TC_CODE);\
- PUTcrc_pass(power_off_BAE,0x1);\
- PUTexec_status(power_off_BAE,0);\
- power_off_BAE->TC_string[0] = 0x01;\
- power_off_BAE->TC_string[1] = BAE_APID_SOURCE;\
- power_off_BAE->TC_string[2] = BAE_SERVICE;\
- power_off_BAE->TC_string[3] = BAE_POWER_OFF_PID;\
- power_off_BAE->TC_string[4] = 0;\
- power_off_BAE->TC_string[5] = 0;\
- power_off_BAE->TC_string[6] = 0;\
- power_off_BAE->TC_string[7] = 0;\
- power_off_BAE->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(power_off_BAE->TC_string, 9);\
- power_off_BAE->TC_string[9] = (crc16 & 0xFF00)>>8;\
- power_off_BAE->TC_string[10] = (crc16 & 0x00FF);\
- Base_tm *tm_ptr = NULL;\
- tm_ptr = FCTN_CDMS_RLY_TMTC(power_off_BAE);\
- delete power_off_BAE;\
- /*DELETE THE TM AFTER USE*/\
- Base_tm *del_tm = tm_ptr;\
- int overCount = 0;\
- while( del_tm != NULL ){\
- if( (overCount < TM_OVERFLOW_CONSTANT) ){\
- Base_tm *temp = del_tm->next_TM;\
- delete del_tm;\
- del_tm = temp;\
- ++overCount;\
- }\
- else{\
- RESET_CDMS;\
- break;\
- }\
- }\
-}
-
-#define P_CDMS_HK_MAIN {\
- Base_tc *hk_main_ptr = new Short_tc;\
- hk_main_ptr->next_TC = NULL;\
- PUTshort_or_long(hk_main_ptr,SHORT_TC_CODE);\
- PUTcrc_pass(hk_main_ptr,0x1);\
- PUTexec_status(hk_main_ptr,0);\
- hk_main_ptr->TC_string[0] = 0x01;\
- hk_main_ptr->TC_string[1] = 0x81;\
- hk_main_ptr->TC_string[2] = 0x81;\
- hk_main_ptr->TC_string[3] = 0x04;\
- hk_main_ptr->TC_string[4] = 0;\
- hk_main_ptr->TC_string[5] = 0;\
- hk_main_ptr->TC_string[6] = 0;\
- hk_main_ptr->TC_string[7] = 0;\
- hk_main_ptr->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(hk_main_ptr->TC_string, 9);\
- hk_main_ptr->TC_string[9] = (crc16 & 0xFF00)>>8;\
- hk_main_ptr->TC_string[10] = (crc16 & 0x00FF);\
- Base_tm *tm_ptr = NULL;\
- tm_ptr = FCTN_CDMS_RLY_TMTC(hk_main_ptr);\
- delete hk_main_ptr;\
- /*DELETE THE TM AFTER USE*/\
- Base_tm *del_tm = tm_ptr;\
- int overCount = 0;\
- while( del_tm != NULL ){\
- if( (overCount < TM_OVERFLOW_CONSTANT) ){\
- Base_tm *temp = del_tm->next_TM;\
- delete del_tm;\
- del_tm = temp;\
- ++overCount;\
- }\
- else{\
- RESET_CDMS;\
+ /*PENDING: POWER ON COM_TX*/\
+ uint8_t adfConfigPass = 0xFF;\
+ for( int i = 0 ; i < COM_TX_CONFIG_LIMIT ; ++i ){\
+ /*PENDING: CONFIGURE ADF*/\
+ if( adfConfigPass == 0xFF ){\
break;\
}\
}\
-}
-
-#define P_BCN_TX_MAIN(tm_ptr) {\
- Base_tc *bcn_tx_main_ptr = new Long_tc;\
- bcn_tx_main_ptr->next_TC = NULL;\
- PUTshort_or_long(bcn_tx_main_ptr,LONG_TC_CODE);\
- PUTcrc_pass(bcn_tx_main_ptr,0x1);\
- PUTexec_status(bcn_tx_main_ptr,0);\
- bcn_tx_main_ptr->TC_string[0] = 0x01;\
- bcn_tx_main_ptr->TC_string[1] = 0x41;\
- bcn_tx_main_ptr->TC_string[2] = 0x81;\
- bcn_tx_main_ptr->TC_string[3] = 0x07;\
- bcn_tx_main_ptr->TC_string[4] = 0;\
- bcn_tx_main_ptr->TC_string[5] = 0;\
- bcn_tx_main_ptr->TC_string[6] = 0;\
- bcn_tx_main_ptr->TC_string[7] = 0;\
- bcn_tx_main_ptr->TC_string[8] = 0;\
- uint16_t crc16 = crc16_gen(bcn_tx_main_ptr->TC_string, 9);\
- bcn_tx_main_ptr->TC_string[9] = (crc16 & 0xFF00)>>8;\
- bcn_tx_main_ptr->TC_string[10] = (crc16 & 0x00FF);\
- for(int i = 11; i < 135; i++){\
- bcn_tx_main_ptr->TC_string[i] = 0;\
+ if( adfConfigPass == 0xFF ){\
+ /*adf successfully configured*/\
+ /*CALL SIGN*/\
+ Base_tm *power_on_tm = NULL;\
+ Base_tm *power_on_tm_head = NULL;\
+ get_call_sign( power_on_tm_head );\
+ power_on_tm = power_on_tm_head;\
+ /*ACK L1*/\
+ get_ack_l1(power_on_tm->next_TM);\
+ int overFlowCountADF = 0;\
+ while( power_on_tm->next_TM != NULL ){\
+ if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){\
+ power_on_tm = power_on_tm->next_TM;\
+ ++overFlowCountADF;\
+ }\
+ else{\
+ /*PENDING: RESET CDMS*/\
+ break;\
+ }\
+ }\
+ get_tc_list(power_on_tm->next_TM, 0x00);\
+ /*PENDING: TRANSMIT ABOVE TM*/\
+ /*Call Sign, ACK_L1, TC_LIST*/\
+ /*snd_tm.head_pointer(power_on_tm_head);*/\
+ /*transmit_adf;*/\
+ /*deleting the telemetry*/\
+ power_on_tm = power_on_tm_head;\
+ overFlowCountADF = 0;\
+ while( power_on_tm != NULL ){\
+ if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){\
+ Base_tm *temp = power_on_tm->next_TM;\
+ delete power_on_tm;\
+ power_on_tm = temp;\
+ ++overFlowCountADF;\
+ }\
+ else{\
+ /*PENDING: RESET CDMS*/\
+ break;\
+ }\
+ }\
}\
- tm_ptr = FCTN_CDMS_RLY_TMTC(bcn_tx_main_ptr);\
- delete bcn_tx_main_ptr;\
-}
-
-void COM_POWER_ON_TX() {
- if (DEBUG)
- gPC.puts("Inside COM_POWER_ON_TX\r\n");
- if( !(gFLAGS & COM_TX_FLAG) ){
- gFLAGS = gFLAGS | COM_TX_FLAG;
- if( gFLAGS & BAE_SW_EN_FLAG ){
- /*WARNING: INFINITE WHILE LOOP POSSIBLE: if standby ack received and bcn tx main status = 0*/
- bool retryFlag = true;
- while( retryFlag == true ){
- Base_tm *tm_ptr = NULL;
- SET_BCN_STANDBY(tm_ptr);
- uint8_t bcn_main_status = (tm_ptr->TM_string[2] & 0xEF);
- if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 )){
- /*ACK RECCEIVED*/
- if( bcn_main_status == 0xA0 ){
- retryFlag = false;
- RF_SW_CNTRL_TX = 1;
- Thread::wait(25);
- RF_SW_CNTRL_TX = 0;
- gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);/*RF_SW_STATUS_FLAG set to RF_COM_TX*/
- }
- else{
- Thread::wait(5000);
- }
- }
- else{
- reset_bae;
- Base_tm *tm_ptr2 = NULL;
- SET_BCN_STANDBY(tm_ptr2);
- uint8_t standbyAck2 = 0;
- uint8_t bcn_main_status2 = (tm_ptr2->TM_string[2] & 0xEF);
- if( ( bcn_main_status2 == 0xC0 )||( bcn_main_status2 == 0xA0 ) ){
- if( bcn_main_status2 == 0xA0 ){
- retryFlag = false;
- RF_SW_CNTRL_TX = 1;
- Thread::wait(25);
- RF_SW_CNTRL_TX = 0;
- gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);
- }
- else{
- Thread::wait(5000);
- }
- }
- else{
- retryFlag = false;
- power_off_bae;
- gFLAGS = gFLAGS | COM_AUTO_POWER_OFF_BAE_FLAG;
- gFLAGS = gFLAGS & (~BAE_SW_EN_FLAG);
- RF_SW_CNTRL_TX = 1;
- Thread::wait(25);
- RF_SW_CNTRL_TX = 0;
- gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);/*RF_SW_STATUS_FLAG set to RF_COM_TX*/
- }
- /*DELETE THE TM AFTER USE*/
- Base_tm *del_tm = tm_ptr2;
- int overCount = 0;
- while( del_tm != NULL ){
- if( (overCount < TM_OVERFLOW_CONSTANT) ){
- Base_tm *temp = del_tm->next_TM;
- delete del_tm;
- del_tm = temp;
- ++overCount;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- }
- /*DELETE THE TM AFTER USE*/
- Base_tm *del_tm = tm_ptr;
- int overCount = 0;
- while( del_tm != NULL ){
- if( (overCount < TM_OVERFLOW_CONSTANT) ){
- Base_tm *temp = del_tm->next_TM;
- delete del_tm;
- del_tm = temp;
- ++overCount;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- }
- }
- else{
- RF_SW_CNTRL_TX = 1;
- Thread::wait(25);
- RF_SW_CNTRL_TX = 0;
- gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);/*RF_SW_STATUS_FLAG set to RF_COM_TX*/
- }
- }
- COM_TX_CNTRL = 1;
- uint8_t adfConfigPass = 0xFF;
- for( int i = 0 ; i < COM_TX_CONFIG_LIMIT ; ++i ){
- /*PENDING: CONFIGURE ADF and set adfConfigPass*/
- if( adfConfigPass == 0xFF ){
- break;
- }
- }
- if( adfConfigPass == 0xFF ){
- /*adf successfully configured*/
- gFLAGS = gFLAGS | COM_TX_STATUS_FLAG;
- /*CALL SIGN*/
- Base_tm *power_on_tm = NULL;
- Base_tm *power_on_tm_head = NULL;
- get_call_sign( power_on_tm_head );
- power_on_tm = power_on_tm_head;
- /*ACK L1*/
- get_ack_l1(power_on_tm->next_TM);
- int overFlowCountADF = 0;
- while( power_on_tm->next_TM != NULL ){
- if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){
- power_on_tm = power_on_tm->next_TM;
- ++overFlowCountADF;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- get_tc_list(power_on_tm->next_TM, 0x00);
- /*Call Sign, ACK_L1, TC_LIST*/
- /*snd_tm.head_pointer(power_on_tm_head);*/
- /*transmit_adf;*/
- uint8_t transmissionPass = 0xFF;
- /*PENDING: get acknowledgement of transmission*/
- /*deleting the telemetry*/
- power_on_tm = power_on_tm_head;
- overFlowCountADF = 0;
- while( power_on_tm != NULL ){
- if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){
- Base_tm *temp = power_on_tm->next_TM;
- delete power_on_tm;
- power_on_tm = temp;
- ++overFlowCountADF;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- if( transmissionPass == 0 ){
- /*NOT Transmitted succesfully*/
- COM_POWER_OFF_TX;
- P_CDMS_HK_MAIN;
- Base_tm *ptr_tm = NULL;
- STANDBY_PRCS(ptr_tm);
- uint8_t standbyACK = 0x00;
- uint8_t bcn_main_status = (ptr_tm->TM_string[2] & 0xEF);
- if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 )){
- standbyACK = 1;
- }
- if(standbyACK == 1){
- uint8_t ackReceived = 0x00;
- Base_tm *tm_ptr = NULL;
- P_BCN_TX_MAIN(tm_ptr);
- uint8_t ackcode = tm_ptr->TM_string[2] & 0xEF;
- if( (ackcode == 0xA0) || (ackcode == 0xC0))
- ackReceived = 0xFF;
- /*DELETE THE TM AFTER USE*/
- Base_tm *del_tm = tm_ptr;
- int overCount = 0;
- while( del_tm != NULL ){
- if( (overCount < TM_OVERFLOW_CONSTANT) ){
- Base_tm *temp = del_tm->next_TM;
- delete del_tm;
- del_tm = temp;
- ++overCount;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- if( ackReceived == 0xFF ){
- Thread::wait(5000);
- }
- }
- /*DELETE THE TM AFTER USE*/
- Base_tm *del_tm = ptr_tm;
- int overCount = 0;
- while( del_tm != NULL ){
- if( (overCount < TM_OVERFLOW_CONSTANT) ){
- Base_tm *temp = del_tm->next_TM;
- delete del_tm;
- del_tm = temp;
- ++overCount;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- RESET_CDMS;
- }
- }
- else{
- /*ADF not configured*/
- gFLAGS = gFLAGS & (~COM_TX_STATUS_FLAG);
- COM_POWER_OFF_TX;
- P_CDMS_HK_MAIN;
- Base_tm *ptr_tm = NULL;
- STANDBY_PRCS(ptr_tm);
- uint8_t standbyACK = 0x00;
- uint8_t bcn_main_status = (ptr_tm->TM_string[2] & 0xEF);
- if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 )){
- standbyACK = 1;
- }
- if(standbyACK == 1){
- uint8_t ackReceived = 0x00;
- Base_tm *tm_ptr = NULL;
- P_BCN_TX_MAIN(tm_ptr);
- uint8_t ackcode = tm_ptr->TM_string[2] & 0xEF;
- if( (ackcode == 0xA0) || (ackcode == 0xC0))
- ackReceived = 0xFF;
- /*DELETE THE TM AFTER USE*/
- Base_tm *del_tm = tm_ptr;
- int overCount = 0;
- while( del_tm != NULL ){
- if( (overCount < TM_OVERFLOW_CONSTANT) ){
- Base_tm *temp = del_tm->next_TM;
- delete del_tm;
- del_tm = temp;
- ++overCount;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- if( ackReceived == 0xFF ){
- Thread::wait(5000);
- }
- }
- /*DELETE THE TM AFTER USE*/
- Base_tm *del_tm = ptr_tm;
- int overCount = 0;
- while( del_tm != NULL ){
- if( (overCount < TM_OVERFLOW_CONSTANT) ){
- Base_tm *temp = del_tm->next_TM;
- delete del_tm;
- del_tm = temp;
- ++overCount;
- }
- else{
- RESET_CDMS;
- break;
- }
- }
- RESET_CDMS;
- }
- /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/
+ else{\
+ /*PENDING: COM_POWER OFF TX*/\
+ /*PENDING: CDMS HK MAIN*/\
+ uint8_t ackReceived = 0x00;\
+ /*PENDING: BCN TX MAIN*/\
+ if( ackReceived == 0xFF ){\
+ gCOM_MNG_TMTC_THREAD->wait(5000);\
+ /*PENDING: RESET CDMS*/\
+ }\
+ else{\
+ /*PENDING: RESET CDMS*/\
+ }\
+ }\
+ /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/\
}
\ No newline at end of file
--- a/COM_RCV_TC.h Sun Jul 03 09:26:42 2016 +0000
+++ b/COM_RCV_TC.h Sun Jul 03 09:47:05 2016 +0000
@@ -261,4 +261,5 @@
gRX_COUNT = 0;
/*gPC.puts("Completed conversion of raw_data\r\n")*/;
+ // PENDING: SORT THE LINKED LIST ACCORDING TO PSC VALUE
}
\ No newline at end of file
--- a/Compression.h Sun Jul 03 09:26:42 2016 +0000
+++ b/Compression.h Sun Jul 03 09:47:05 2016 +0000
@@ -74,7 +74,8 @@
sci_time = 0;
gPC.puts("enter srp");
-
+ TIME_LATEST_SPI_SPEED = FCTN_CDMS_RD_RTC() >> 7;
+ PL_RCV_SC_DATA_COUNTER++;
//Call FCTN_SD_MNGR for latest fsc
FCTN_SD_MNGR();
--- a/DefinitionsAndGlobals.h Sun Jul 03 09:26:42 2016 +0000 +++ b/DefinitionsAndGlobals.h Sun Jul 03 09:47:05 2016 +0000 @@ -3,152 +3,150 @@ #define bypass_adf 1 // 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 - +#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 - +#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 +#define COM_TX_CONFIG_LIMIT 3 +#define COM_TX_TICKER_LIMIT 32 // ADF INTERRUPT - #define ADF_IRQ PTA14 - +#define ADF_IRQ PTA14 + //I2C - Payload to CDMS (need to change while using CDMS hardware); - I2C master(PIN32,PIN31); - DigitalIn PL_I2C_Intr(PTC13); - DigitalOut PL_I2C_GPIO(PTC1); - +I2C master(PIN32,PIN31); +DigitalIn PL_I2C_Intr(PTC13); +DigitalOut PL_I2C_GPIO(PTC1); + //I2C - CDMS to BAE - DigitalIn BAE_I2C_GPIO(PIN39); - DigitalOut CDMS_I2C_GPIO(PIN67); +DigitalIn BAE_I2C_GPIO(PIN39); +DigitalOut CDMS_I2C_GPIO(PIN67); // TC LIST - #define TCL_STATE_INCOMPLETE 0x00 - #define TCL_STATE_ABORTED 0x01 - #define TCL_STATE_EXECUTING 0x02 - #define TCL_STATE_COMPLETED 0x03 +#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_PA_OC_FLAG 0x8000 - #define COM_TX_FLAG 0x0100 - #define COM_SESSION_TIMEOUT_FLAG 0x0200 - #define COM_AUTO_POWER_OFF_BAE_FLAG 0x0400 - #define BAE_SW_EN_FLAG 0x0800 - #define RF_SW_STATUS_FLAG 0x1000 - #define COM_INIT_STATUS_FLAG 0x2000 - #define COM_TX_STATUS_FLAG 0x4000 +#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 +#define COM_AUTO_POWER_OFF_BAE_FLAG 0x0400 +#define BAE_SW_EN_FLAG 0x0800 +#define RF_SW_STATUS_FLAG 0x1000 +#define COM_INIT_STATUS_FLAG 0x2000 +#define COM_TX_STATUS_FLAG 0x4000 //RF relay STATUS - #define RF_COM_TX 0 - #define RF_BCN 1 +#define RF_COM_TX 0 +#define RF_BCN 1 // COM_MNG_TMTC THREAD - #define SESSION_TIME_LIMIT 1500 - #define COM_RX_DISABLE_TIMEOUT 10 - #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 +#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 256 - #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 - #define BYTE_OVERFLOW_CONSTANT 35000 +#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 - // 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 +// 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_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 - +#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 +#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 //BEACON - #define BCN_APID_SOURCE 0x41 - #define BCN_SERVICE 0x81 - +#define BCN_APID_SOURCE 0x41 +#define BCN_SERVICE 0x81 + //BAE - #define BAE_APID_SOURCE 0x81 - #define BAE_SERVICE 0x81 - #define BAE_POWER_ON_PID 0x13 - #define BAE_POWER_OFF_PID 0x23 - #define BAE_RESET_PID 0x33 +#define BAE_APID_SOURCE 0x81 +#define BAE_SERVICE 0x81 +#define BAE_POWER_ON_PID 0x13 +#define BAE_POWER_OFF_PID 0x23 +#define BAE_RESET_PID 0x33 //RF RELAY - #define RF_RELAY_CNTRL_TX PTA7 - #define RF_RELAY_CNTRL_BCN PTA12 +#define RF_RELAY_CNTRL_TX PTA7 +#define RF_RELAY_CNTRL_BCN PTA12 - + // ****************GLOBAL VARIABLES****************** // DEBUG Serial gPC( USBTX, USBRX ); @@ -161,7 +159,6 @@ COM_RX_DATA_NODE *gRX_CURRENT_DATA_NODE = NULL; // uint8_t *gRX_CURRENT_PTR = NULL; uint32_t gRX_COUNT = 0; -uint16_t gTOTAL_RAW_BYTES = 0; uint16_t gTOTAL_INCORRECT_SIZE_TC = 0x00; uint16_t gTOTAL_CRC_FAIL_TC = 0x00; uint16_t gTOTAL_REPEATED_TC = 0x00; @@ -194,7 +191,6 @@ Thread* gCOM_MNG_TMTC_THREAD = NULL; Timeout gRX_TIMEOUT; Timeout gSESSION_TIMEOUT; -Timeout gCOM_RX_DISABLE; // COM_MNG_TMTC @@ -226,7 +222,7 @@ uint8_t CDMS_HEALTH_DATA[128]; uint8_t CDMS_RAM[59]; uint16_t GPIO_STATUS; -uint8_t CDMS_HK_MAIN_STATUS; +uint8_t CDMS_HK_MAIN_STATUS; uint8_t COMRX_STATUS; uint8_t RTC_FAULTCOUNT; uint16_t SD_FAULTCOUNT; @@ -303,4 +299,23 @@ uint8_t CDMS_STANDBY_PL; uint8_t CDMS_INIT_STATUS; uint8_t CDMS_HK_STATUS; -uint8_t CDMS_RTC_BL; \ No newline at end of file +uint8_t CDMS_RTC_BL; + +//FLASH parameters +uint8_t EPS_V_A_EN_STATUS; +uint8_t BAE_SW_STATUS; +uint8_t CDMS_SD_SW_STATUS; +uint8_t PL_BEE_SW_STATUS =0 ; +uint8_t PL_EPS_LATCH_SW_EN; +uint8_t RTC_INIT_STATUS; +uint8_t CDMS_RTC_DISABLE; +uint8_t CDMS_RESET_COUNTER; +uint8_t TIME_LATEST_CDSMS_RESET; +uint8_t COM_TC_BYTES_LIMIT; +uint8_t COM_RX_CURRENT_MAX; +uint8_t COM_RX_DISABLE_TIMEOUT; +uint8_t COM_PA_TMP_HIGH; +uint8_t COM_PA_RECOVERY_TIMEOUT; +uint8_t COM_SESSION_TIMEOUT; +uint8_t COM_RSSI_MIN; +uint8_t SD_LIB_BLK_CURRENT_NMBR; \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DefinitionsAndGlobals.h.orig Sun Jul 03 09:47:05 2016 +0000
@@ -0,0 +1,306 @@
+// **************DEFINITIONS*********************
+
+#define bypass_adf 1
+
+// 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 INTERRUPT
+ #define ADF_IRQ PTA14
+
+//I2C - Payload to CDMS (need to change while using CDMS hardware);
+ I2C master(PIN32,PIN31);
+ DigitalIn PL_I2C_Intr(PTC13);
+ DigitalOut PL_I2C_GPIO(PTC1);
+
+//I2C - CDMS to BAE
+ DigitalIn BAE_I2C_GPIO(PIN39);
+ DigitalOut CDMS_I2C_GPIO(PIN67);
+
+// TC LIST
+ #define TCL_STATE_INCOMPLETE 0x00
+ #define TCL_STATE_ABORTED 0x01
+ #define TCL_STATE_EXECUTING 0x02
+ #define TCL_STATE_COMPLETED 0x03
+
+// 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_PA_OC_FLAG 0x8000
+ #define COM_TX_FLAG 0x0100
+ #define COM_SESSION_TIMEOUT_FLAG 0x0200
+ #define COM_AUTO_POWER_OFF_BAE_FLAG 0x0400
+ #define BAE_SW_EN_FLAG 0x0800
+ #define RF_SW_STATUS_FLAG 0x1000
+ #define COM_INIT_STATUS_FLAG 0x2000
+ #define COM_TX_STATUS_FLAG 0x4000
+
+//RF relay STATUS
+ #define RF_COM_TX 0
+ #define RF_BCN 1
+
+// COM_MNG_TMTC THREAD
+ #define SESSION_TIME_LIMIT 1500
+ #define COM_RX_DISABLE_TIMEOUT 10
+ #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 256
+ #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
+ #define BYTE_OVERFLOW_CONSTANT 35000
+
+ // 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
+
+//BEACON
+ #define BCN_APID_SOURCE 0x41
+ #define BCN_SERVICE 0x81
+
+//BAE
+ #define BAE_APID_SOURCE 0x81
+ #define BAE_SERVICE 0x81
+ #define BAE_POWER_ON_PID 0x13
+ #define BAE_POWER_OFF_PID 0x23
+ #define BAE_RESET_PID 0x33
+
+//RF RELAY
+ #define RF_RELAY_CNTRL_TX PTA7
+ #define RF_RELAY_CNTRL_BCN PTA12
+
+
+// ****************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_RAW_BYTES = 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;
+
+//I2C
+Mutex BAE_I2C_mutex;
+
+//RF Relay
+DigitalOut RF_SW_CNTRL_BCN(RF_RELAY_CNTRL_BCN);
+DigitalOut RF_SW_CNTRL_TX(RF_RELAY_CNTRL_TX);
+
+//COM_RX
+DigitalOut COM_RX_CNTRL(PIN72);
+DigitalOut COM_TX_CNTRL(PIN56);
+
+// 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;
+Timeout gCOM_RX_DISABLE;
+
+// 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] = {0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41};
+RtosTimer *PL_wo_dma;
+
+
+// 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
+uint8_t CDMS_STANDBY;
+uint8_t CDMS_HEALTH_DATA[128];
+uint8_t CDMS_RAM[59];
+uint16_t GPIO_STATUS;
+uint8_t CDMS_HK_MAIN_STATUS;
+uint8_t COMRX_STATUS;
+uint8_t RTC_FAULTCOUNT;
+uint16_t SD_FAULTCOUNT;
+uint8_t SD_STATUS;
+uint8_t BAE_FAULTCOUNT;
+uint8_t BAE_STATUS;
+uint8_t PL_STATUS;
+uint16_t PL_FAULTCOUNT;
+bool BAE_HK_I2C;
+uint8_t RTC_STATUS;
+float RSSI_volatge;
+
+CDMS_HK_actual actual_data;
+CDMS_HK_quant quant_data;
+CDMS_HK_min_max min_max_data;
+bool firstCount=true;
+
+//GPIO PINS
+DigitalIn V_A_PGOOD (PIN88);
+DigitalIn V_B_PGOOD_1 (PIN6);
+DigitalIn V_B_PGOOD_2 (PIN7);
+DigitalIn V_C_PGOOD (PIN54);
+DigitalIn COMRX_OC_FAULT (PIN68);
+DigitalIn COMTX_OC_FAULT (PIN69);
+DigitalIn BAE_OC_FAULT (PIN92);
+DigitalIn PL_GPIO_1_STATUS (PIN71);
+DigitalIn PL_GPIO_2_STATUS (PIN81);
+DigitalIn PL_GPIO_3_STATUS (PIN80);
+DigitalIn PL_BEE_SW_OC_FAULT (PIN4);
+DigitalIn PL_EPS_LATCH_SW_OC_FAULT ();
+DigitalIn V_C_EN_STATUS ();
+DigitalIn V_D_EN_STATUS ();
+
+
+DigitalIn SD_OC_FAULT (PIN90);
+DigitalOut SD_SW_EN_DS (PIN97);
+DigitalOut BAE_SW_EN_DS (PIN47);
+DigitalOut PL_SW_EN_DS (PIN73);
+
+//SD HK
+uint32_t FSC_CURRENT[6];
+uint32_t FSC_LAST[6];
+uint8_t SD_RD_ERROR;
+
+//Time's
+uint32_t TIME_LATEST_RTC;
+uint32_t TIME_LATEST_I2C_BAE;
+uint32_t TIME_LATEST_I2C_SPEED;
+uint32_t TIME_LATEST_SD_WR;
+uint32_t TIME_LATEST_SD_RD;
+uint32_t TIME_LATEST_SPI_SPEED;
+
+//Counter's
+uint16_t CDMS_I2C_ERR_SPEED_COUNTER;
+uint16_t CDMS_I2C_ERR_BAE_COUNTER;
+uint16_t CDMS_HK_MAIN_COUNTER;
+uint16_t COMRX_RESET_COUNTER;
+uint16_t PL_MAIN_COUNTER;
+uint16_t PL_RCV_SC_DATA_COUNTER;
+
+//CDMS RAM parameters
+uint8_t PL_INIT_STATUS;
+uint8_t PL_MAIN_STATUS;
+uint8_t PL_LOW_POWER;
+uint8_t PL_STATE;
+uint8_t PL_RCV_SC_DATA_STATUS;
+uint8_t COM_SESSION;
+uint8_t COM_RX;
+uint8_t RF_SW_STATUS;
+uint8_t COM_TX;
+uint8_t COM_TX_STATUS;
+uint8_t COM_MNG_TMTC;
+uint8_t CDMS_STANDBY_HK;
+uint8_t CDMS_STANDBY_PL;
+uint8_t CDMS_INIT_STATUS;
+uint8_t CDMS_HK_STATUS;
+uint8_t CDMS_RTC_BL;
\ No newline at end of file
--- a/FMS_all.h Sun Jul 03 09:26:42 2016 +0000
+++ b/FMS_all.h Sun Jul 03 09:47:05 2016 +0000
@@ -20,6 +20,7 @@
void RST_PL_BEE();
void RST_HK_COUNTER();
uint8_t CDMS_RD_SD_HK(uint8_t *);
+void RESET_CDMS();
void CDMS_INTERNAL_RESET();
void P_PL_INIT()
@@ -150,7 +151,12 @@
return ACK;
}
+void RESET_CDMS()
+{
+
+}
+
void CDMS_INTERNAL_RESET()
{
-
+
}
\ No newline at end of file
--- a/Flash.h Sun Jul 03 09:26:42 2016 +0000
+++ b/Flash.h Sun Jul 03 09:47:05 2016 +0000
@@ -4,6 +4,70 @@
uint32_t flasharray[256+(3*1024)];
char *nativeflash = (char*)strt_add;
+/*Initiation of Flash*/
+void FLASH_INIT()
+{
+ uint32_t read[8];
+ for(int i=0;i<8;i++)
+ {
+ read[i] = FCTN_CDMS_RD_FLASH(i);
+ //printf("\n\r val is read after starting %x ",read[i]);
+ }
+
+ if(read[0] == -1)
+ for(int j=0;j<8;j++)
+ {
+ FCTN_CDMS_WR_FLASH(j,ARR_INITIAL_VAL[j]);
+ }
+ else
+ {
+ for(int j=0;j<8;j++)
+ {
+ read[j] = FCTN_CDMS_RD_FLASH(j);
+ }
+ ACS_ATS_STATUS = read[0]>>24;
+ ACS_TR_XY_SW_STATUS = ((uint8_t)(read[0]>>22))&0x03;
+ ACS_TR_Z_SW_STATUS = (read[0]>>20)&0x03;
+ ACS_DETUMBLING_ALGO_TYPE = (read[0]>>19)&0x01;
+ ACS_STATE = (read[0]>>16)&0x07;
+ BCN_TX_SW_STATUS = ((uint8_t)(read[0]>>14))&0x03;
+ BCN_SPND_TX = ((uint8_t)(read[0]>>13))&0x01;
+ BCN_FEN = ((uint8_t)(read[0]>>12))&0x01;
+ BCN_LONG_MSG_TYPE = ((uint8_t)(read[0]>>11))&0x01;
+ EPS_BTRY_HTR_AUTO = ((uint8_t)(read[0]>>10))&0x03;//EPS_BATTERY_HEATER_ENABLE
+ //now two spares in telemetry[5]
+
+ //updating the reset counter
+ BAE_RESET_COUNTER = ((uint8_t)(read[0]))+1;
+ read[0]=(read[0]&0xffffff00) | (uint32_t)BAE_RESET_COUNTER;
+ FCTN_CDMS_WR_FLASH(0,read[0]);
+
+
+ EPS_SOC_LEVEL_12 = (uint8_t)(read[1]>>24);
+ EPS_SOC_LEVEL_23 = (uint8_t)(read[1]>>16);
+ ACS_MAG_TIME_DELAY = (uint8_t)(read[1]>>8);
+ ACS_DEMAG_TIME_DELAY = (uint8_t)read[1];
+
+ EPS_BAT_TEMP_LOW = (uint8_t)(read[2]>>24);
+ EPS_BAT_TEMP_HIGH = (uint8_t)(read[2]>>16);
+ EPS_BAT_TEMP_DEFAULT = (uint8_t)(read[2]>>8);
+
+ ACS_MM_X_COMSN = (uint16_t)(read[3]>>16);
+ ACS_MM_Y_COMSN = (uint16_t)read[3];
+
+ ACS_MG_X_COMSN = (uint16_t)(read[4]>>16);
+ ACS_MG_Y_COMSN = (uint16_t)read[4];
+
+ ACS_MM_Z_COMSN = (uint16_t)(read[5]>>16);
+ ACS_MG_Z_COMSN = (uint16_t)read[5];
+
+ ACS_Z_FIXED_MOMENT = (uint16_t)(read[6]>>16);//assignvalues
+
+ }
+
+}
+
+
/*Writing to the Flash*/
void FCTN_CDMS_WR_FLASH(uint16_t j,uint32_t block)
{
@@ -15,7 +79,6 @@
erase_sector(strt_add);
program_flash(strt_add, (char*)&flasharray,4*(256+(1024*3)));
}
-/*End*/
/*Reading from Flash*/
uint32_t FCTN_CDMS_RD_FLASH(uint16_t j)
--- a/P_COM_INIT.h Sun Jul 03 09:26:42 2016 +0000
+++ b/P_COM_INIT.h Sun Jul 03 09:47:05 2016 +0000
@@ -4,7 +4,7 @@
Thread::wait(25);\
RF_SW_CNTRL_BCN = 0;\
gFLAGS = gFLAGS | RF_SW_STATUS_FLAG;\
- COM_RX_CNTRL = 0;\
+ //COM_RX_CNTRL = 0;\
Thread::wait(200);\
COM_RX_CNTRL = 1;\
gFLAGS = gFLAGS & (~COM_INIT_STATUS_FLAG);\
--- a/RESET_functions.h Sun Jul 03 09:26:42 2016 +0000
+++ b/RESET_functions.h Sun Jul 03 09:47:05 2016 +0000
@@ -8,6 +8,7 @@
pwr_comrx = 0;
wait_ms(10);
pwr_comrx =1;
+ COMRX_RESET_COUNTER++;
}
void RESET_RTC()
--- a/Structures.h Sun Jul 03 09:26:42 2016 +0000 +++ b/Structures.h Sun Jul 03 09:47:05 2016 +0000 @@ -27,9 +27,8 @@ 0: unexecuted 1: successfully executed 2: Execution Failed -3: CRC error -4: Disabled -5: Marked For retry +3: Disabled +4: Marked For retry */ #define TC_STATE_UNEXECUTED 0x00 #define TC_STATE_SUCCESSFULLY_EXECUTED 0x01
--- a/ThreadsAndFunctions.h Sun Jul 03 09:26:42 2016 +0000
+++ b/ThreadsAndFunctions.h Sun Jul 03 09:47:05 2016 +0000
@@ -36,12 +36,6 @@
gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
}
-// COM_RX_DISABLE ISR
-void after_com_disable(){
- gCOM_RX_DISABLE.detach();
- RX1M.attach(&rx_read, Serial::RxIrq);
-}
-
// RX_TIMEOUT ISR
void after_receive(){
gRX_TIMEOUT.detach();
@@ -69,15 +63,15 @@
}\
gHEAD_NODE_TCL = NULL;\
gLAST_NODE_TCL = NULL;\
- gMASTER_STATE = TCL_STATE_COMPLETED;\
+ gMASTER_STATE = TCL_STATE_INCOMPLETE;\
gTOTAL_INCORRECT_SIZE_TC = 0;\
gTOTAL_CRC_FAIL_TC = 0;\
gTOTAL_REPEATED_TC = 0;\
gTOTAL_VALID_TC = 0;\
for(int i = 0 ; i < TM_LONG_SIZE ; ++i){\
- /*gLAST_TM[i] = 0x00;*/\
+ gLAST_TM[i] = 0x00;\
}\
- /*gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;*/\
+ gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;\
COM_RX_DATA_NODE *dataptr = gRX_HEAD_DATA_NODE;\
while( dataptr != NULL ){\
COM_RX_DATA_NODE *temp = dataptr->next_node;\
@@ -88,7 +82,6 @@
gRX_HEAD_DATA_NODE->next_node = NULL;\
gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;\
gRX_COUNT = 0;\
- gTOTAL_RAW_BYTES = 0;\
/*PENDING : ALL GLOBAL VAARIABLES AND FLAGS*/\
/*gPC.puts("finished reset all\r\n");*/\
}
@@ -103,7 +96,6 @@
gRX_CURRENT_DATA_NODE = gRX_CURRENT_DATA_NODE->next_node;\
gRX_CURRENT_DATA_NODE->next_node = NULL;\
}\
- ++gTOTAL_RAW_BYTES;\
gRX_TIMEOUT.attach(&after_receive, RX_TIMEOUT_LIMIT);\
}
@@ -118,12 +110,10 @@
gFLAGS = gFLAGS & (~UART_INT_FLAG);
if( !(gFLAGS & COM_SESSION_FLAG) ){
// PENDING : DISABLE THREADS
- // gCDMS_HK_TIMER.stop();
PL_wo_dma->stop();
gFLAGS = gFLAGS | COM_SESSION_FLAG;
gSESSION_TIMEOUT.attach(&after_session, SESSION_TIME_LIMIT);
gFLAGS = gFLAGS | COM_RX_FLAG;
- gTOTAL_RAW_BYTES = 0;
PUT_RAW_BYTE;
// PENDING : MEASURE RSSI
if( gFLAGS & COM_SESSION_FLAG ){
@@ -142,15 +132,10 @@
gFLAGS = gFLAGS | COM_RX_FLAG;
PUT_RAW_BYTE;
}
- if(gTOTAL_RAW_BYTES > BYTE_OVERFLOW_CONSTANT){
- RX1M.attach(NULL);
- gCOM_RX_DISABLE.attach(&after_com_disable, COM_RX_DISABLE_TIMEOUT);
- after_receive();
- }
}
else if( gFLAGS & NEW_TC_RECEIVED ){
gPC.puts("NEW TC RECEIVED\r\n");
- Thread::wait(1000);/*For testing with transmitter. To be removed later*/
+ Thread::wait(1000);
gFLAGS = gFLAGS & (~NEW_TC_RECEIVED);
gFLAGS = gFLAGS | COM_MNG_TMTC_RUNNING_FLAG;
@@ -178,24 +163,30 @@
// CHECK WEATHER GS VERIFICATION CODE MATCHES
uint8_t tempGSver = 0x00;
GScodeVerification(tempGSver);
+ /*PENDING: INCLUDE GS VERIFICATION CODE*/
if( tempGSver == 0xFF ){
/*gPC.puts("GS code match !!\r\n");*/
gFLAGS = gFLAGS | COM_SESSION_VALIDITY;
COM_POWER_ON_TX;
- P_COM_HK;
- if( (gFLAGS & COM_PA_HOT_FLAG) || ( gFLAGS & COM_PA_OC_FLAG ) ){
- COM_TX_CNTRL = 0;
+ // PENDING: PA HOT HANDLED IN EXECUTE_XXX FUNCTIONS
+ uint8_t tempPAHot = 0x00;
+ isPAhot(tempPAHot);
+ if( tempPAHot == 0xFF ){
+ gFLAGS = gFLAGS & ~(COM_PA_HOT_FLAG);
+ gCOM_PA_COOLING_TIMEOUT.detach();
+ gPC.puts("EXECUTING TELECOMMANDS\r\n");
+// DEBUF_PRINT("EXECUTING TELECOMMANDS\r\n");
+ EXECUTE_OBOSC_ONLY;
+ EXECUTE_TC;
+ gPC.puts("COMPLETED EXECUTION\r\n");
+ }
+ else{
+ gFLAGS = gFLAGS | COM_PA_HOT_FLAG;
+ // PENDING: power off transmitter only
gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
RX1M.attach(&rx_read, Serial::RxIrq);
}
- else{
- gCOM_PA_COOLING_TIMEOUT.detach();
- gPC.puts("EXECUTING TELECOMMANDS\r\n");
- EXECUTE_OBOSC_ONLY;
- EXECUTE_TC;
- gPC.puts("COMPLETED EXECUTION\r\n");
- }
}
else{
/*gPC.puts("GS code mismatch !!\r\n");*/
@@ -203,11 +194,10 @@
reset_all;
gFLAGS = gFLAGS & (~COM_SESSION_VALIDITY);
// PENDING : ENABLE THREADS
- // gCDMS_HK_TIMER.start(5000);
PL_wo_dma->start(6000);
gSESSION_TIMEOUT.detach();
gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
- gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
+ // WARNING: clear COM_MNG_TMTC ?
}
}
else{
@@ -238,16 +228,15 @@
}
//gPC.puts("\r\n");
COM_POWER_ON_TX;
- COM_TX_CNTRL = 0;
+ // PENDING : POWER OFF TX
RX1M.attach(&rx_read, Serial::RxIrq);
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
}
}
else{
COM_POWER_ON_TX;
- COM_TX_CNTRL = 0;
- reset_all;
- gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
+ // POWER OFF TX transmitter only
+ // WARNING: reset_all ? clear com_session ?
RX1M.attach(&rx_read, Serial::RxIrq);
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
}
@@ -258,7 +247,6 @@
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
reset_all;
// PENDING : ENABLE THREADS
- // gCDMS_HK_TIMER.start(5000);
PL_wo_dma->start(6000);
gSESSION_TIMEOUT.detach();
gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
@@ -266,17 +254,29 @@
}
else if( gFLAGS & COM_PA_HOT_FLAG ){
/*gPC.puts("checking for PA hot in main\r\n");*/
- P_COM_HK;
- if((gFLAGS & COM_PA_HOT_FLAG) || (gFLAGS & COM_PA_OC_FLAG)){
- COM_TX_CNTRL = 0;
- gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);
+ if( gFLAGS & COM_RX_FLAG ){
+ uint8_t tempPA = 0xFF;
+ isPAhot(tempPA);
+ if( tempPA == 0x00 ){
+ gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);
+ }
+ else{
+ gFLAGS = gFLAGS & ~(COM_PA_HOT_FLAG);
+ gCOM_PA_COOLING_TIMEOUT.detach();
+ }
}
else{
- gCOM_PA_COOLING_TIMEOUT.detach();
- if( !(gFLAGS & COM_RX_FLAG) ){
+ uint8_t tempPA = 0xFF;
+ isPAhot(tempPA);
+ if( tempPA == 0x00 ){
+ gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);
+ }
+ else{
/*gPC.puts("PA IS COOLED DOWN\r\n");*/
+ gFLAGS = gFLAGS & (~COM_PA_HOT_FLAG);
gFLAGS = gFLAGS | COM_MNG_TMTC_RUNNING_FLAG;
RX1M.attach(NULL);
+ gCOM_PA_COOLING_TIMEOUT.detach();
COM_POWER_ON_TX;
EXECUTE_OBOSC_ONLY;
EXECUTE_TC;
@@ -287,7 +287,7 @@
/*gPC.puts("session timeout: resetting in main\r\n");*/
COM_POWER_OFF_TX;
/*PENDING : ENABLE THREADS*/
- // gCDMS_HK_TIMER.start(5000);
+
gSESSION_TIMEOUT.detach();
gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
--- a/cdms_rtc.h Sun Jul 03 09:26:42 2016 +0000
+++ b/cdms_rtc.h Sun Jul 03 09:47:05 2016 +0000
@@ -1,5 +1,9 @@
void FCTN_CDMS_INIT_RTC()
{
+ if(RTC_INIT_STATUS = 1)
+ {
+
+ }
SPI_mutex.lock();
gCS_RTC=1;
spi.format(8,0);
@@ -82,11 +86,16 @@
{
SPI_mutex.lock();
uint8_t response;
-
+ uint64_t time = 0;
+
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x0F);
response = (spi.write(0x00))&0x04;
+ if(response == 0x04)
+ {
+ goto END;
+ }
gCS_RTC=1;
gCS_RTC=0;
@@ -116,7 +125,6 @@
year = (year == 17)?0x00:(year == 18)?0x01:(year == 19)?0x02:(year == 20)?0x03:0x00;
gCS_RTC=1;
- uint64_t time;
time = 0;
time = time|(((uint64_t)(centiseconds&0x7F)));
time = time|(((uint64_t)(seconds&0x3F))<<7);
@@ -128,6 +136,8 @@
time = (time&0x00000007FFFFFFFF);
SPI_mutex.unlock();
+ TIME_LATEST_RTC = time >> 7;
+ END:
return time;
}
--- a/cdms_sd.h Sun Jul 03 09:26:42 2016 +0000
+++ b/cdms_sd.h Sun Jul 03 09:47:05 2016 +0000
@@ -1,4 +1,4 @@
-//SPI spi(PTE1, PTE3, PTE2); // MOSI,MISO, CLOCK microcontroller(in order)
+//SPI spi(PTE1, PTE3, PTE2); // MOSI,MISO, CLOCK microcontroller(in order)
//DigitalOut cs_sd(PTE22);
//Serial sd1(USBTX,USBRX);
@@ -67,7 +67,7 @@
uint64_t sectors;
int FCTN_CDMS_SD_INIT()
-{
+{
int i = initialise_card();
debug_if(SD_DBG, "init card = %d\n", i);
sectors = sd_sectors();
@@ -77,7 +77,7 @@
debug("\rSet 512-byte block timed out\r\n");
return 1;
} else {
- //printf("\rDisk initialization successfull\r\n");
+ //printf("\rDisk initialization successfull\r\n");
}
spi.frequency(1000000); // Set to 1MHz for data transfer
@@ -90,7 +90,7 @@
uint32_t start_fsc;
uint8_t buffer[512];
int b=disk_read(buffer, SD_MNG_SECT);
-
+
fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3];
start_fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7];
FSC_CURRENT[1] = fsc;
@@ -126,8 +126,7 @@
SD_MNG_SECT += SD_LIB_WRITES/(int)0xFFFF;
SD_LIB_WRITES = SD_LIB_WRITES%(int)0xFFFF;
disk_read(buffer,SD_MNG_SECT);
- if(sid==0x01)
- {
+ if(sid==0x01) {
fsc=(uint32_t)(buffer[0]<<24)+(uint32_t)(buffer[1]<<16)+(uint32_t)(buffer[2]<<8)+(uint32_t)buffer[3];
start_fsc=(uint32_t)(buffer[4]<<24)+(uint32_t)(buffer[5]<<16)+(uint32_t)(buffer[6]<<8)+(uint32_t)buffer[7];
fsc++;
@@ -135,25 +134,22 @@
buffer[1]=(uint8_t) (fsc>>16 & 0xFF);
buffer[2]=(uint8_t) (fsc>>8 & 0xFF);
buffer[3]=(uint8_t) (fsc & 0xFF);
- if(fsc > SD_SCP_LAST-SD_SCP_FIRST+1)
- {
+ if(fsc > SD_SCP_LAST-SD_SCP_FIRST+1) {
start_fsc = start_fsc+1;
buffer[4]=(uint8_t) (start_fsc>>24 & 0xFF);
buffer[5]=(uint8_t) (start_fsc>>16 & 0xFF);
buffer[6]=(uint8_t) (start_fsc>>8 & 0xFF);
buffer[7]=(uint8_t) (start_fsc & 0xFF);
}
-
+
i = disk_write(buffer,SD_MNG_SECT);
- if(i == 0)
- {
+ if(i == 0) {
FSC_CURRENT[1] = fsc;
FSC_LAST[1] = start_fsc;
return i;
- }
+ }
}
- if(sid==0x02)
- {
+ if(sid==0x02) {
fsc=(uint32_t)(buffer[8]<<24)+(uint32_t)(buffer[9]<<16)+(uint32_t)(buffer[10]<<8)+(uint32_t)buffer[11];
start_fsc=(uint32_t)(buffer[12]<<24)+(uint32_t)(buffer[13]<<16)+(uint32_t)(buffer[14]<<8)+(uint32_t)buffer[15];
fsc++;
@@ -161,8 +157,7 @@
buffer[9]=(uint8_t) (fsc>>16 & 0xFF);
buffer[10]=(uint8_t) (fsc>>8 & 0xFF);
buffer[11]=(uint8_t) (fsc & 0xFF);
- if(fsc > SD_SFF_AT_LAST-SD_SFF_AT_FIRST+1)
- {
+ if(fsc > SD_SFF_AT_LAST-SD_SFF_AT_FIRST+1) {
start_fsc = start_fsc+1;
buffer[12]=(uint8_t) (start_fsc>>24 & 0xFF);
buffer[13]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -170,15 +165,13 @@
buffer[15]=(uint8_t) (start_fsc & 0xFF);
}
i = disk_write(buffer,SD_MNG_SECT);
- if(i == 0)
- {
+ if(i == 0) {
FSC_CURRENT[2] = fsc;
FSC_LAST[2] = start_fsc;
return i;
}
}
- if(sid==0x03)
- {
+ if(sid==0x03) {
fsc=(uint32_t)(buffer[16]<<24)+(uint32_t)(buffer[17]<<16)+(uint32_t)(buffer[18]<<8)+(uint32_t)buffer[19];
start_fsc=(uint32_t)(buffer[20]<<24)+(uint32_t)(buffer[21]<<16)+(uint32_t)(buffer[22]<<8)+(uint32_t)buffer[23];
fsc++;
@@ -186,8 +179,7 @@
buffer[17]=(uint8_t) (fsc>>16 & 0xFF);
buffer[18]=(uint8_t) (fsc>>8 & 0xFF);
buffer[19]=(uint8_t) (fsc & 0xFF);
- if(fsc > SD_SFF_BT_LAST-SD_SFF_BT_FIRST+1)
- {
+ if(fsc > SD_SFF_BT_LAST-SD_SFF_BT_FIRST+1) {
start_fsc = start_fsc+1;
buffer[20]=(uint8_t) (start_fsc>>24 & 0xFF);
buffer[21]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -195,15 +187,13 @@
buffer[23]=(uint8_t) (start_fsc & 0xFF);
}
i = disk_write(buffer,SD_MNG_SECT);
- if(i == 0)
- {
+ if(i == 0) {
FSC_CURRENT[3] = fsc;
FSC_LAST[3] = start_fsc;
return i;
}
}
- if(sid==0x04)
- {
+ if(sid==0x04) {
fsc=(uint32_t)(buffer[24]<<24)+(uint32_t)(buffer[25]<<16)+(uint32_t)(buffer[26]<<8)+(uint32_t)buffer[27];
start_fsc=(uint32_t)(buffer[28]<<24)+(uint32_t)(buffer[29]<<16)+(uint32_t)(buffer[30]<<8)+(uint32_t)buffer[31];
fsc++;
@@ -211,8 +201,7 @@
buffer[25]=(uint8_t) (fsc>>16 & 0xFF);
buffer[26]=(uint8_t) (fsc>>8 & 0xFF);
buffer[27]=(uint8_t) (fsc & 0xFF);
- if(fsc > SD_HK_ARCH_LAST-SD_HK_ARCH_FIRST+1)
- {
+ if(fsc > SD_HK_ARCH_LAST-SD_HK_ARCH_FIRST+1) {
start_fsc = start_fsc+1;
buffer[28]=(uint8_t) (start_fsc>>24 & 0xFF);
buffer[29]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -220,15 +209,13 @@
buffer[31]=(uint8_t) (start_fsc & 0xFF);
}
i = disk_write(buffer,SD_MNG_SECT);
- if(i == 0)
- {
+ if(i == 0) {
FSC_CURRENT[4] = fsc;
FSC_LAST[4] = start_fsc;
return i;
}
}
- if(sid==0x05)
- {
+ if(sid==0x05) {
fsc=(uint32_t)(buffer[32]<<24)+(uint32_t)(buffer[33]<<16)+(uint32_t)(buffer[34]<<8)+(uint32_t)buffer[35];
start_fsc=(uint32_t)(buffer[36]<<24)+(uint32_t)(buffer[37]<<16)+(uint32_t)(buffer[38]<<8)+(uint32_t)buffer[39];
fsc++;
@@ -236,8 +223,7 @@
buffer[33]=(uint8_t) (fsc>>16 & 0xFF);
buffer[34]=(uint8_t) (fsc>>8 & 0xFF);
buffer[35]=(uint8_t) (fsc & 0xFF);
- if(fsc > LOG_LAST-LOG_FIRST+1)
- {
+ if(fsc > LOG_LAST-LOG_FIRST+1) {
start_fsc = start_fsc+1;
buffer[36]=(uint8_t) (start_fsc>>24 & 0xFF);
buffer[37]=(uint8_t) (start_fsc>>16 & 0xFF);
@@ -245,8 +231,7 @@
buffer[39]=(uint8_t) (start_fsc & 0xFF);
}
i = disk_write(buffer,SD_MNG_SECT);
- if(i == 0)
- {
+ if(i == 0) {
FSC_CURRENT[5] = fsc;
FSC_LAST[5] = start_fsc;
return i;
@@ -260,61 +245,51 @@
{
uint32_t block_number;
int result = 10;
- if(sid==0x01)
- {
+ if(sid==0x01) {
//block_number=SD_SCP_FIRST+(fsc%(SD_SCP_LAST-SD_SCP_FIRST+1))-1;
block_number=SD_SCP_FIRST+fsc;
result= disk_write(buffer,block_number);
- if(result == 0)
- {
+ if(result == 0) {
if(INCREMENT_SD_LIB(sid) == 0)
SD_LIB_WRITES++;
}
return result;
}
- if(sid==0x02)
- {
+ if(sid==0x02) {
//block_number= SD_SFF_AT_FIRST+(fsc%(SD_SFF_AT_LAST - SD_SFF_AT_FIRST+1))-1;
block_number= SD_SFF_AT_FIRST+fsc;
result= disk_write(buffer,block_number);
- if(result == 0)
- {
+ if(result == 0) {
if(INCREMENT_SD_LIB(sid) == 0)
SD_LIB_WRITES++;
}
return result;
}
- if(sid==0x03)
- {
+ if(sid==0x03) {
//block_number= SD_SFF_BT_FIRST +(fsc%(SD_SFF_BT_LAST - SD_SFF_BT_FIRST +1))-1;
block_number= SD_SFF_BT_FIRST +fsc;
result= disk_write(buffer,block_number);
- if(result == 0)
- {
+ if(result == 0) {
if(INCREMENT_SD_LIB(sid) == 0)
SD_LIB_WRITES++;
}
return result;
}
- if(sid==0x04)
- {
+ if(sid==0x04) {
//block_number=SD_HK_ARCH_FIRST +(fsc%(SD_HK_ARCH_LAST - SD_HK_ARCH_FIRST +1))-1;
block_number=SD_HK_ARCH_FIRST +fsc;
result= disk_write(buffer,block_number);
- if(result == 0)
- {
+ if(result == 0) {
if(INCREMENT_SD_LIB(sid) == 0)
SD_LIB_WRITES++;
}
return result;
}
- if(sid==0x05)
- {
+ if(sid==0x05) {
//block_number= LOG_FIRST +(fsc%(LOG_FIRST - LOG_FIRST +1))-1;
block_number= LOG_FIRST +fsc;
result= disk_write(buffer,block_number);
- if(result == 0)
- {
+ if(result == 0) {
if(INCREMENT_SD_LIB(sid) == 0)
SD_LIB_WRITES++;
}
@@ -330,48 +305,37 @@
int result;
if(SD_SW_EN_DS == 1)
return 0x89;
- if(sid==0x01)
- {
- if(!(FSC_LAST[1]<=fsc && fsc<=FSC_CURRENT[1])){
+ if(sid==0x01) {
+ if(!(FSC_LAST[1]<=fsc && fsc<=FSC_CURRENT[1])) {
return 0x86;
}
block_number=SD_SCP_FIRST + fsc;
result= disk_read(buffer,block_number);
- }
- else if(sid==0x02)
- {
- if(!(FSC_LAST[2]<=fsc && fsc<=FSC_CURRENT[2])){
+ } else if(sid==0x02) {
+ if(!(FSC_LAST[2]<=fsc && fsc<=FSC_CURRENT[2])) {
return 0x86;
}
block_number=SD_SFF_AT_FIRST + fsc;
result= disk_read(buffer,block_number);
- }
- else if(sid==0x03)
- {
- if(!(FSC_LAST[3]<=fsc && fsc<=FSC_CURRENT[3])){
+ } else if(sid==0x03) {
+ if(!(FSC_LAST[3]<=fsc && fsc<=FSC_CURRENT[3])) {
return 0x86;
}
block_number=SD_SFF_BT_FIRST + fsc;
result= disk_read(buffer,block_number);
- }
- else if(sid==0x04)
- {
- if(!(FSC_LAST[4]<=fsc && fsc<=FSC_CURRENT[4])){
+ } else if(sid==0x04) {
+ if(!(FSC_LAST[4]<=fsc && fsc<=FSC_CURRENT[4])) {
return 0x86;
}
block_number=SD_HK_ARCH_FIRST + fsc;
result= disk_read(buffer,block_number);
- }
- else if(sid==0x05)
- {
- if(!(FSC_LAST[5]<=fsc && fsc<=FSC_CURRENT[5])){
+ } else if(sid==0x05) {
+ if(!(FSC_LAST[5]<=fsc && fsc<=FSC_CURRENT[5])) {
return 0x86;
}
block_number=LOG_FIRST +fsc;
result= disk_read(buffer,block_number);
- }
- else
- {
+ } else {
return 0x02;
}
if(result == 0)
@@ -384,7 +348,7 @@
int initialise_card()
{
// Set to 100kHz for initialisation, and clock card with cs_sd = 1
- spi.frequency(100000); // changed on 31 12 2015 to 1 MHz
+ spi.frequency(100000); // changed on 31 12 2015 to 1 MHz
cs_sd = 1;
for (int i = 0; i < 16; i++) {
spi.write(0xFF);
@@ -395,9 +359,8 @@
if (R1_response != R1_IDLE_STATE) {
debug("No disk, or could not put SD card in to spi idle state\r\n");
return SDCARD_FAIL;
- }
- else
- gPC.puts("SD Card is in IDLE state\n\r");
+ } else
+ gPC.puts("SD Card is in IDLE state\n\r");
// send CMD8 to determine whther it is ver 2.x
int r = cmd8();
@@ -643,13 +606,10 @@
if (cmd(24, block_number * cdv) != 0) {
return 1;
}
-
- uint64_t temp;
+
int r = write(buffer, 512);
- if(r == 0 ){
- temp = FCTN_CDMS_RD_RTC();
- TIME_LATEST_SD_RD = temp >> 7;
- }
+ if(r == 0 )
+ TIME_LATEST_SD_WR = FCTN_CDMS_RD_RTC() >> 7;
return r;
}
@@ -694,8 +654,7 @@
// receive the data
read(buffer, 512);
- uint64_t temp = FCTN_CDMS_RD_RTC();
- TIME_LATEST_SD_RD = temp >> 7;
+ TIME_LATEST_SD_RD = FCTN_CDMS_RD_RTC() >> 7;
return 0;
}
@@ -729,14 +688,14 @@
if (cmd(38,0) != 0) {
return 1;
}
-
+
return 0; //normal return
}
int disk_read_statusbits(uint8_t *buffer)
{
if (cmd(17, 0) != 0) {
- SD_RD_ERROR = 1;
+ SD_RD_ERROR = 1;
return -1;
}
--- a/common_functions.h Sun Jul 03 09:26:42 2016 +0000
+++ b/common_functions.h Sun Jul 03 09:47:05 2016 +0000
@@ -77,7 +77,7 @@
}\
}\
else{\
- RESET_CDMS;\
+ /*PENDING: reset cdms*/\
break;\
}\
}\
@@ -99,24 +99,18 @@
/*Attach this new node at the end*/\
}\
else{\
- RESET_CDMS;\
+ /*PENDING: reset CDMS*/\
break;\
}\
}\
}
#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 << 6) & 0xC0;\
+ tm_ptr->TM_string[3] |= (gMASTER_STATE << 5) & 0xE0;\
/*PA HOT*/\
if( gFLAGS & COM_PA_HOT_FLAG ){\
- tm_ptr->TM_string[3] |= (1 << 5);\
- }\
- else{\
- tm_ptr->TM_string[3] &= ~(1 << 5);\
- }\
- /*PA OC*/\
- if( gFLAGS & COM_PA_OC_FLAG ){\
tm_ptr->TM_string[3] |= (1 << 4);\
}\
else{\
@@ -130,39 +124,16 @@
#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 P_COM_HK{\
- uint8_t returnHere;\
- isPAhot(returnHere);\
- if (returnHere == 0xFF)\
- gFLAGS = gFLAGS & ~(COM_PA_HOT_FLAG);\
- else\
- gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\
- if (gFLAGS & COM_PA_OC_FLAG){\
- COM_TX_CNTRL = 1;\
- wait_ms(5);\
- }\
- isPAoc(returnHere);\
- if (returnHere == 0xFF)\
- gFLAGS = gFLAGS & ~(COM_PA_OC_FLAG);\
- else\
- gFLAGS = gFLAGS | COM_PA_OC_FLAG;\
- /*P_CDMS_HANDLE_HW_FAULTS*/\
-}
-
#define isPAhot(returnHere){\
/*PENDING : COMPLETE THIS FUNCTION*/\
returnHere = 0xFF;\
}
-#define isPAoc(returnHere){\
- /*PENDING : COMPLETE THIS FUNCTION*/\
- returnHere = 0xFF;\
-}
-
#define get_call_sign(tm_ptr) {\
Base_tm* call_sign_tm = new Short_tm;\
call_sign_tm->next_TM = NULL;\
@@ -185,6 +156,7 @@
/*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;\
@@ -217,7 +189,7 @@
++overflowCountL1;\
}\
else{\
- RESET_CDMS;\
+ /*PENDING: RESET CDMS*/\
break;\
}\
}\
--- a/i2c.h Sun Jul 03 09:26:42 2016 +0000
+++ b/i2c.h Sun Jul 03 09:47:05 2016 +0000
@@ -26,29 +26,31 @@
I2C0->C1 |= 0x80; //Enabling I2C module
PORTE->PCR[1] |= 0x00000004; //Disabling high slew rates for SDA and SCL lines
PORTE->PCR[0] |= 0x00000004; //Disabling high slew rates for SDA and SCL lines
- Thread::wait(1); //Wait for all I2C registers to be updates to their their values
+ wait_ms(1); //Wait for all I2C registers to be updates to their their values
}
bool FCTN_I2C_READ_PL(char *data,int length) // Returns 0 for success
{
PL_I2C_GPIO = 1;
read_ack = master.read(addr_pl|1,data,length);
- Thread::wait(1); //as per tests Thread::wait not required on master side. But its safe to give 1ms
+ wait_ms(1); //as per tests Thread::wait not required on master side. But its safe to give 1ms
pdirr1=PTE->PDIR;
uint8_t i2c_count = 0;
if(read_ack == 0) //if read_ack says success, it may or may not be successful.Hence we check SCL and SDA
{
while(((pdirr1 & 0x03000000)!=0x03000000)&& i2c_count<10)//checking SCL and SDA for time=10ms
{
- Thread::wait(1);
+ wait_ms(1);
pdirr1=PTE->PDIR;
i2c_count++;
}
if(((pdirr1 & 0x03000000)==0x03000000))//if SCL and SDA are both high
{
- gPC.printf("\n\rData received from BAE");
+ TIME_LATEST_I2C_SPEED = FCTN_CDMS_RD_RTC() >> 7;
+ gPC.printf("\n\rData received from PL");
}
else
- {
+ {
+ CDMS_I2C_ERR_SPEED_COUNTER++;
I2C_busreset();
read_ack = 1;
}
@@ -65,23 +67,25 @@
bool FCTN_I2C_WRITE_PL(char *data2,uint8_t tc_len2) // Returns 0 for success
{
write_ack = master.write(addr_pl|0x00,data2,tc_len2);//address to be defined in payload
- Thread::wait(1); //As per the tests Thread::wait is not required on master side but its safe to give 1ms
+ wait_ms(1); //As per the tests Thread::wait is not required on master side but its safe to give 1ms
pdirw1=PTE->PDIR;
uint8_t i2c_count = 0;
if(write_ack == 0)
{
while(((pdirw1 & 0x03000000)!=0x03000000)&& i2c_count<10)
{
- Thread::wait(1);
+ wait_ms(1);
pdirw1=PTE->PDIR;
i2c_count++;
}
if(((pdirw1 & 0x03000000)==0x03000000))
{
- gPC.printf("\n\r Data sent");
+ TIME_LATEST_I2C_SPEED = FCTN_CDMS_RD_RTC() >> 7;
+ gPC.printf("\n\r Data sent to PL");
}
else
{
+ CDMS_I2C_ERR_SPEED_COUNTER++;
I2C_busreset();
write_ack = 1;
}
@@ -97,23 +101,25 @@
{
CDMS_I2C_GPIO = 1;
read_ack = master.read(addr_bae|1,data,length);
- Thread::wait(1); //as per tests Thread::wait not required on master side. But its safe to give 1ms
+ wait_ms(1); //as per tests Thread::wait not required on master side. But its safe to give 1ms
pdirr1=PTE->PDIR;
uint8_t i2c_count = 0;
if(read_ack == 0) //if read_ack says success, it may or may not be successful.Hence we check SCL and SDA
{
while(((pdirr1 & 0x03000000)!=0x03000000)&& i2c_count<10)//checking SCL and SDA for time=10ms
{
- Thread::wait(1);
+ wait_ms(1);
pdirr1=PTE->PDIR;
i2c_count++;
}
if(((pdirr1 & 0x03000000)==0x03000000))//if SCL and SDA are both high
{
+ TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
gPC.printf("\n\rData received from BAE");
}
else
- {
+ {
+ CDMS_I2C_ERR_BAE_COUNTER++;
I2C_busreset();
read_ack = 1;
}
@@ -131,23 +137,25 @@
{
CDMS_I2C_GPIO = 1;
write_ack = master.write(addr_bae|0x00,data,tc_len2);
- Thread::wait(1); //As per the tests Thread::wait is not required on master side but its safe to give 1ms
+ wait_ms(1); //As per the tests Thread::wait is not required on master side but its safe to give 1ms
pdirw1=PTE->PDIR;
uint8_t i2c_count = 0;
if(write_ack == 0)
{
while(((pdirw1 & 0x03000000)!=0x03000000)&& i2c_count<10)
{
- Thread::wait(1);
+ wait_ms(1);
pdirw1=PTE->PDIR;
i2c_count++;
}
if(((pdirw1 & 0x03000000)==0x03000000))
{
- gPC.printf("\n\r Data sent");
+ TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
+ gPC.printf("\n\r Data sent BAE");
}
else
{
+ CDMS_I2C_ERR_BAE_COUNTER++;
I2C_busreset();
write_ack = 1;
}
--- a/main.cpp Sun Jul 03 09:26:42 2016 +0000
+++ b/main.cpp Sun Jul 03 09:47:05 2016 +0000
@@ -1,7 +1,4 @@
-
// TESTING PUSH PULL IN MAIN CPP
-
-
#include "mbed.h"
#define DEBUG 1
@@ -10,32 +7,34 @@
#include "dmaSPIslave.h"
#include "rtos.h"
#include "mbed_debug.h"
-void rx_read();
+
#include "Structures.h"
#include "pinconfig.h"
#include "DefinitionsAndGlobals.h"
#include "crc.h"
+#include "cdms_rtc.h"
+#include "cdms_sd.h"
#include "i2c.h"
#include "COM_SND_TM_functions.h"
#include "COM_SND_TM.h"
-#include "cdms_rtc.h"
-#include "cdms_sd.h"
#include "common_functions.h"
#include "RESET_functions.h"
#include "CDMS_HK.h"
+#include "OBSRS.h"
#include "adf.h"
#include "COM_RCV_TC.h"
-//#include "Flash.h"
+#include "Flash.h"
#include "FMS_all.h"
#include "CDMS_PL.h"
#include "COM_MNG_TMTC.h"
+#include "COM_POWER_ON_TX.h"
#include "COM_POWER_OFF_TX.h"
-#include "COM_POWER_ON_TX.h"
-#include "OBSRS.h"
#include "Compression.h"
#include "ThreadsAndFunctions.h"
#include "TEST_PL.h"
+void CDMS_INIT();
+
#define PL_TC(tm_ptr){\
Base_tc *beacon_tc = new Short_tc;\
beacon_tc->next_TC = NULL;\
@@ -84,108 +83,112 @@
transmit_adf;\
gPC.puts("exit_adf\r\n");\
}
-//void set_sig(){gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);}
+
+void CDMS_INIT()
+{
+ CDMS_INIT_STATUS = 1;
+
+ spi.format(8,0);
+ spi.frequency(1000000);
+
+ cs_sd = 1;
+ gCS_RTC = 1;
+ gCS_ADF = 1;
+
+ FCTN_CDMS_INIT_RTC();
+ FCTN_CDMS_SD_INIT();
+
+}
+
int main()
{
-
- CDMS_I2C_GPIO = 0;
- PL_I2C_GPIO = 0;
-
- //gLEDR = 1;
-
+
+ CDMS_I2C_GPIO = 0;
+ PL_I2C_GPIO = 0;
+
// ******************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;
+ //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(115200);//changed for bypassing COM
-
- // 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*/
-
-
+
+
uint8_t test[512] = {0};
disk_write(test,7000); //to be used only just before launch
-
- #if DEBUG
+
+#if DEBUG
gPC.puts("welcome to mng_tmtc\r\n");
- #endif
-
-
-
+#endif
+
+
+
// COM_MNG_TMTC THREAD
gCOM_MNG_TMTC_THREAD = new Thread(COM_MNG_TMTC_FUN);
gCOM_MNG_TMTC_THREAD->set_priority(osPriorityHigh);
- #if DEBUG
+#if DEBUG
gPC.puts("allocating threads\r\n");
- #endif
+#endif
gSCIENCE_THREAD = new Thread(SCIENCE_FUN);
- // gPC.puts("step one complete\r\n");
+ // gPC.puts("step one complete\r\n");
gSCIENCE_THREAD->set_priority(osPriorityAboveNormal);
- #if DEBUG
+#if DEBUG
gPC.puts("competed allocating threads\r\n");
- #endif
-
-
+#endif
+
+
master.frequency(400000);
PL_wo_dma = new RtosTimer(payload_isr_fun_dma, osTimerPeriodic,(void * )NULL);
//PL_wo_dma->start(6000);//
gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);
-
-
-
-
+
+
+
+
/*gPC.printf("PL_TC sending\r\n");
-
+
Base_tm *tm_ptr = new Short_tm;
OBSRS_TC(tm_ptr);
-
+
gPC.printf("PL_TC sent");
*/
// *******************INITIALISATIONS END********************
-
+
//RtosTimer gCDMS_HK_TIMER(FCTN_CDMS_HK_MAIN, osTimerPeriodic);
//gCDMS_HK_TIMER.start(5000);
-
+
/*starting the thread with signal*/
//set_sig();
//payload_isr_fun();
-
+
/*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)
+ /*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){
+
+
+
+ while(true) {
Thread::wait(osWaitForever);
//state = gCOM_MNG_TMTC_THREAD->get_state() + '0';
- gLEDG = !gLEDG;
- //gPC.putc(state);
+ gLEDG = !gLEDG;
+ //gPC.putc(state);
}
}
\ No newline at end of file
