June 30

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Committer:
chaithanyarss
Date:
Sat Jul 02 13:36:18 2016 +0000
Revision:
191:d14b1c783736
Parent:
190:28a07943dded
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chaithanyarss 190:28a07943dded 1
chaithanyarss 190:28a07943dded 2 //CDMS HK
chaithanyarss 190:28a07943dded 3 #define COMRX_ALIVE 0xFF
chaithanyarss 190:28a07943dded 4 #define COMRX_DEAD 0x00
chaithanyarss 190:28a07943dded 5 #define DEVICE_ENABLED 0x00
chaithanyarss 190:28a07943dded 6 #define DEVICE_POWERED 0x01
chaithanyarss 190:28a07943dded 7 #define DEVICE_OC_FAULT 0x02
chaithanyarss 190:28a07943dded 8 #define DEVICE_DISABLED 0x03
shreeshas95 103:b55559925dc1 9
shreeshas95 103:b55559925dc1 10 void FCTN_CDMS_HK_MAIN();
shreeshas95 103:b55559925dc1 11 void FCTN_CDMS_HK();
chaithanyarss 187:2c7263530c57 12 void VERIFY_COMRX();
chaithanyarss 187:2c7263530c57 13 void VERIFY_RTC();
chaithanyarss 187:2c7263530c57 14 void CDMS_HK_SD();
chaithanyarss 190:28a07943dded 15 void HANDLE_HW_FAULTS();
chaithanyarss 187:2c7263530c57 16 void HANDLE_HW_FAULT_SD();
chaithanyarss 187:2c7263530c57 17 void HANDLE_HW_FAULT_BAE();
chaithanyarss 187:2c7263530c57 18 void HANDLE_HW_FAULT_PL();
chaithanyarss 190:28a07943dded 19 void FUNC_CDMS_GPIO_STATUS();
chaithanyarss 190:28a07943dded 20 void minMaxHkData();
chaithanyarss 187:2c7263530c57 21 void COLLECT_CDMS_RAM();
shreeshas95 103:b55559925dc1 22
shreeshas95 103:b55559925dc1 23 Serial hk_cdms(USBTX, USBRX);
shreeshas95 103:b55559925dc1 24
chaithanyarss 187:2c7263530c57 25 AnalogIn TempInput(PIN27); // Input from Current Multiplexer
shreeshas95 103:b55559925dc1 26 AnalogIn CDMS_temp_sensor(PIN53);
chaithanyarss 187:2c7263530c57 27 AnalogIn COMRX_RSSI_volatge(PIN70);
chaithanyarss 187:2c7263530c57 28
shreeshas95 103:b55559925dc1 29
shreeshas95 103:b55559925dc1 30 DigitalOut SelectLinec3 (PIN79); // MSB of Select Lines
shreeshas95 103:b55559925dc1 31 DigitalOut SelectLinec2 (PIN78);
shreeshas95 103:b55559925dc1 32 DigitalOut SelectLinec1 (PIN77);
shreeshas95 103:b55559925dc1 33 DigitalOut SelectLinec0 (PIN76); // LSB of Select Lines
shreeshas95 103:b55559925dc1 34
shreeshas95 104:a50ae79ca36e 35 void FCTN_CDMS_HK_MAIN(void const *args)
shreeshas95 103:b55559925dc1 36 {
chaithanyarss 189:fba4aeebf004 37
chaithanyarss 189:fba4aeebf004 38 unsigned char CDMS_HK_FRAME[134] = {0};
chaithanyarss 189:fba4aeebf004 39 char BAE_HK[128] = {0};
chaithanyarss 189:fba4aeebf004 40 uint8_t convoluted_CDMS_HK[270];
chaithanyarss 189:fba4aeebf004 41 uint8_t interleave_CDMS_HK[288];
chaithanyarss 189:fba4aeebf004 42 uint8_t CDMS_HEALTH_FINAL[512] = {0};
chaithanyarss 189:fba4aeebf004 43 uint8_t convoluted_BAE_HK[270];
chaithanyarss 189:fba4aeebf004 44 uint8_t interleave_BAE_HK[288];
chaithanyarss 189:fba4aeebf004 45 uint8_t BAE_HEALTH_FINAL[512] = {0};
chaithanyarss 189:fba4aeebf004 46 unsigned char BAE_HK_FRAME[134] = {0};
chaithanyarss 189:fba4aeebf004 47
chaithanyarss 187:2c7263530c57 48 CDMS_HK_MAIN_STATUS = 0x01;
chaithanyarss 187:2c7263530c57 49 CDMS_HK_MAIN_COUNTER++;
chaithanyarss 187:2c7263530c57 50
chaithanyarss 187:2c7263530c57 51 FCTN_CDMS_HK();
chaithanyarss 187:2c7263530c57 52 RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;
chaithanyarss 187:2c7263530c57 53 VERIFY_COMRX();
chaithanyarss 187:2c7263530c57 54 VERIFY_RTC();
chaithanyarss 187:2c7263530c57 55 HANDLE_HW_FAULTS();
chaithanyarss 187:2c7263530c57 56 FUNC_CDMS_GPIO_STATUS(); //yet to be done
chaithanyarss 187:2c7263530c57 57
chaithanyarss 187:2c7263530c57 58 uint8_t CDMS_quant[19];
chaithanyarss 187:2c7263530c57 59 for(int i=0;i<16;i++)
chaithanyarss 187:2c7263530c57 60 {
chaithanyarss 187:2c7263530c57 61 CDMS_quant[i]= (uint8_t)quant_data.temp_quant[i];
chaithanyarss 187:2c7263530c57 62 }
chaithanyarss 187:2c7263530c57 63 CDMS_quant[16]= (uint8_t)RSSI_volatge;
chaithanyarss 187:2c7263530c57 64 CDMS_quant[17]= (uint8_t)quant_data.CDMS_temp_quant;
chaithanyarss 190:28a07943dded 65 minMaxHkData();
chaithanyarss 187:2c7263530c57 66
chaithanyarss 189:fba4aeebf004 67 uint64_t time = FCTN_CDMS_RD_RTC(); //Reading Time from RTC
chaithanyarss 187:2c7263530c57 68 time = time>>7;
chaithanyarss 187:2c7263530c57 69 uint32_t HK_time = (uint32_t)time;
chaithanyarss 187:2c7263530c57 70 for(int i = 0;i<4;i++)
chaithanyarss 190:28a07943dded 71 CDMS_HEALTH_DATA[i] = HK_time >> i;
chaithanyarss 189:fba4aeebf004 72
chaithanyarss 187:2c7263530c57 73 // Here: Have to FIT flash data.
chaithanyarss 189:fba4aeebf004 74 for(int i = 0;i<19;i++) //Collecting Data from Temp sensors
chaithanyarss 189:fba4aeebf004 75 CDMS_HEALTH_DATA[i+24] = CDMS_quant[i];
chaithanyarss 189:fba4aeebf004 76
chaithanyarss 189:fba4aeebf004 77 COLLECT_CDMS_RAM(); //Reading RAM parameters
chaithanyarss 187:2c7263530c57 78
chaithanyarss 189:fba4aeebf004 79 CDMS_HEALTH_DATA[126] = GPIO_STATUS; //Reading GPIO Pins
chaithanyarss 189:fba4aeebf004 80 CDMS_HEALTH_DATA[127] = GPIO_STATUS >> 8;
chaithanyarss 189:fba4aeebf004 81
chaithanyarss 189:fba4aeebf004 82 FCTN_SD_MNGR(); //Adding FSC & TMID to TM frame
chaithanyarss 189:fba4aeebf004 83 CDMS_HK_FRAME[0] = 0x20;
chaithanyarss 189:fba4aeebf004 84 CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1;
chaithanyarss 189:fba4aeebf004 85 CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8;
chaithanyarss 189:fba4aeebf004 86 CDMS_HK_FRAME[3] = (FSC_CURRENT[4]+1) >> 16;
chaithanyarss 189:fba4aeebf004 87
chaithanyarss 189:fba4aeebf004 88 for(int i = 0;i<128;i++) /*Adding actual CDMS Health data to TM frame*/
chaithanyarss 189:fba4aeebf004 89 CDMS_HK_FRAME[4+i] = CDMS_HEALTH_DATA[i];
chaithanyarss 187:2c7263530c57 90
chaithanyarss 189:fba4aeebf004 91 uint16_t crc = crc16_gen(CDMS_HK_FRAME,132); /*Adding CRC to TM frame*/
chaithanyarss 189:fba4aeebf004 92 CDMS_HK_FRAME[133] = crc;
chaithanyarss 189:fba4aeebf004 93 CDMS_HK_FRAME[132] = crc >> 8;
chaithanyarss 189:fba4aeebf004 94
chaithanyarss 189:fba4aeebf004 95 Convolution CDMS_HEALTH;
chaithanyarss 189:fba4aeebf004 96 Convolution BAE_HEALTH;
chaithanyarss 189:fba4aeebf004 97 CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK);
chaithanyarss 189:fba4aeebf004 98 CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135);
chaithanyarss 189:fba4aeebf004 99 interleave(convoluted_CDMS_HK , interleave_CDMS_HK);
chaithanyarss 189:fba4aeebf004 100 interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144);
chaithanyarss 189:fba4aeebf004 101 for(int i=0;i<288;i++)
chaithanyarss 189:fba4aeebf004 102 CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i];
chaithanyarss 189:fba4aeebf004 103
chaithanyarss 189:fba4aeebf004 104 SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4);
chaithanyarss 189:fba4aeebf004 105 hk_cdms.printf("CDMS hk succesfully completed\r\n");
chaithanyarss 189:fba4aeebf004 106
chaithanyarss 189:fba4aeebf004 107
chaithanyarss 189:fba4aeebf004 108 /*---------------------------------- BAE HK --------------------------------------------*/
chaithanyarss 189:fba4aeebf004 109
chaithanyarss 190:28a07943dded 110
chaithanyarss 189:fba4aeebf004 111 BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134);
chaithanyarss 189:fba4aeebf004 112 if(BAE_HK_I2C == 0){
chaithanyarss 190:28a07943dded 113 TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7;
chaithanyarss 189:fba4aeebf004 114 hk_cdms.printf("Bae hk data received");
chaithanyarss 187:2c7263530c57 115 }
chaithanyarss 189:fba4aeebf004 116 else
chaithanyarss 189:fba4aeebf004 117 {
chaithanyarss 189:fba4aeebf004 118 for(int i = 0;i<128;i++)
chaithanyarss 189:fba4aeebf004 119 BAE_HK[i] = 0;
chaithanyarss 189:fba4aeebf004 120 }
chaithanyarss 189:fba4aeebf004 121 for(int i = 0;i<4;i++)
chaithanyarss 190:28a07943dded 122 BAE_HK[i] = HK_time >> i;
chaithanyarss 189:fba4aeebf004 123 BAE_HK_FRAME[0] = 0x28;
chaithanyarss 189:fba4aeebf004 124 BAE_HK_FRAME[1] = FSC_CURRENT[5]+1;
chaithanyarss 189:fba4aeebf004 125 BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8;
chaithanyarss 189:fba4aeebf004 126 BAE_HK_FRAME[3] = (FSC_CURRENT[5]+1) >> 16;
chaithanyarss 189:fba4aeebf004 127 for(int i = 0;i<128;i++) /*Adding actual CDMS Health data to TM frame*/
chaithanyarss 189:fba4aeebf004 128 BAE_HK_FRAME[4+i] = BAE_HK[i];
chaithanyarss 189:fba4aeebf004 129 crc = crc16_gen(BAE_HK_FRAME,132); /*Adding CRC to TM frame*/
chaithanyarss 189:fba4aeebf004 130 BAE_HK_FRAME[133] = crc;
chaithanyarss 189:fba4aeebf004 131 BAE_HK_FRAME[132] = crc >> 8;
chaithanyarss 189:fba4aeebf004 132 BAE_HEALTH.convolutionEncode(BAE_HK_FRAME , convoluted_BAE_HK);
chaithanyarss 189:fba4aeebf004 133 BAE_HEALTH.convolutionEncode(BAE_HK_FRAME + 67, convoluted_BAE_HK + 135);
chaithanyarss 189:fba4aeebf004 134 interleave(convoluted_BAE_HK , interleave_BAE_HK);
chaithanyarss 189:fba4aeebf004 135 interleave(convoluted_BAE_HK +135, interleave_BAE_HK + 144);
chaithanyarss 189:fba4aeebf004 136 for(int i=0;i<288;i++)
chaithanyarss 189:fba4aeebf004 137 BAE_HEALTH_FINAL[i] = interleave_BAE_HK[i];
chaithanyarss 189:fba4aeebf004 138 SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5);
chaithanyarss 189:fba4aeebf004 139 hk_cdms.printf("BAE hk succesfully completed\r\n");
chaithanyarss 190:28a07943dded 140
chaithanyarss 190:28a07943dded 141 /*----------------------------------Beacon message--------------------------------------*/
chaithanyarss 190:28a07943dded 142 unsigned char SC_HK_LBM_0[135];
chaithanyarss 190:28a07943dded 143 SC_HK_LBM_0[0] = 0; // Sending long beacon msg as telecommand with Packet sequence count 0x00
chaithanyarss 190:28a07943dded 144 // Add HK bits
chaithanyarss 190:28a07943dded 145
chaithanyarss 190:28a07943dded 146 // Add SC bits
chaithanyarss 190:28a07943dded 147 crc = crc16_gen(SC_HK_LBM_0,133);
chaithanyarss 190:28a07943dded 148 SC_HK_LBM_0[132] = crc;
chaithanyarss 190:28a07943dded 149 SC_HK_LBM_0[133] = crc >> 8;
chaithanyarss 190:28a07943dded 150 FCTN_I2C_WRITE((char *)SC_HK_LBM_0,135);
shreeshas95 103:b55559925dc1 151 }
shreeshas95 103:b55559925dc1 152
shreeshas95 103:b55559925dc1 153 int quantiz(float start,float step,float x)
shreeshas95 103:b55559925dc1 154 {
shreeshas95 103:b55559925dc1 155 int y=(x-start)/step;
shreeshas95 103:b55559925dc1 156 if(y<=0)y=0;
shreeshas95 103:b55559925dc1 157 if(y>=255)y=255;
shreeshas95 103:b55559925dc1 158 return y;
shreeshas95 103:b55559925dc1 159 }
shreeshas95 103:b55559925dc1 160
chaithanyarss 190:28a07943dded 161 char saveMin(char x,char y)
chaithanyarss 187:2c7263530c57 162 {
chaithanyarss 187:2c7263530c57 163 return (y<x)?y:x;
shreeshas95 103:b55559925dc1 164 }
chaithanyarss 187:2c7263530c57 165
chaithanyarss 190:28a07943dded 166 char saveMax(char x,char y)
chaithanyarss 187:2c7263530c57 167 {
chaithanyarss 187:2c7263530c57 168 return (y>x)?y:x;
shreeshas95 103:b55559925dc1 169 }
chaithanyarss 187:2c7263530c57 170
chaithanyarss 187:2c7263530c57 171 void minMaxHkData()
chaithanyarss 187:2c7263530c57 172 {
shreeshas95 103:b55559925dc1 173 if(firstCount==true){
shreeshas95 103:b55559925dc1 174 for (int i = 0; i < 16; ++i){
shreeshas95 103:b55559925dc1 175 min_max_data.temp_min[i] = quant_data.temp_quant[i];
shreeshas95 103:b55559925dc1 176 min_max_data.temp_max[i] = quant_data.temp_quant[i];
shreeshas95 103:b55559925dc1 177 }
shreeshas95 103:b55559925dc1 178
shreeshas95 103:b55559925dc1 179 min_max_data.CDMS_temp_min=quant_data.CDMS_temp_quant;
shreeshas95 103:b55559925dc1 180 min_max_data.CDMS_temp_max=quant_data.CDMS_temp_quant;
shreeshas95 103:b55559925dc1 181 }
shreeshas95 103:b55559925dc1 182 else {
shreeshas95 103:b55559925dc1 183 for (int i = 0; i < 16; ++i)
shreeshas95 103:b55559925dc1 184 {
chaithanyarss 187:2c7263530c57 185 min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]);
chaithanyarss 187:2c7263530c57 186 min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]);
shreeshas95 103:b55559925dc1 187 }
shreeshas95 103:b55559925dc1 188
chaithanyarss 187:2c7263530c57 189 min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant);
chaithanyarss 187:2c7263530c57 190 min_max_data.CDMS_temp_max = saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant);
shreeshas95 103:b55559925dc1 191 }
shreeshas95 103:b55559925dc1 192 firstCount=false;
shreeshas95 103:b55559925dc1 193 }
shreeshas95 103:b55559925dc1 194
shreeshas95 103:b55559925dc1 195 void FCTN_CDMS_HK()
shreeshas95 103:b55559925dc1 196 {
shreeshas95 103:b55559925dc1 197
shreeshas95 103:b55559925dc1 198 int Iteration=0;
shreeshas95 103:b55559925dc1 199
shreeshas95 103:b55559925dc1 200 SelectLinec0=0;
shreeshas95 103:b55559925dc1 201 SelectLinec1=0;
shreeshas95 103:b55559925dc1 202 SelectLinec2=0;
shreeshas95 103:b55559925dc1 203 SelectLinec3=0;
shreeshas95 103:b55559925dc1 204
shreeshas95 103:b55559925dc1 205 for(Iteration=0; Iteration<16; Iteration++){
shreeshas95 103:b55559925dc1 206
shreeshas95 103:b55559925dc1 207 actual_data.temp_actual[Iteration]=TempInput.read();
shreeshas95 103:b55559925dc1 208
shreeshas95 103:b55559925dc1 209 SelectLinec0=!(SelectLinec0);
shreeshas95 103:b55559925dc1 210 if(Iteration%2==1)
shreeshas95 103:b55559925dc1 211 SelectLinec1=!(SelectLinec1);
shreeshas95 103:b55559925dc1 212 if(Iteration%4==3)
shreeshas95 103:b55559925dc1 213 SelectLinec2=!(SelectLinec2);
chaithanyarss 190:28a07943dded 214 if(Iteration%8==7)
shreeshas95 103:b55559925dc1 215 SelectLinec3=!(SelectLinec3);
shreeshas95 103:b55559925dc1 216 }
shreeshas95 103:b55559925dc1 217
chaithanyarss 187:2c7263530c57 218 actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543;
shreeshas95 103:b55559925dc1 219
shreeshas95 103:b55559925dc1 220 for(Iteration=0;Iteration<16;Iteration++){
shreeshas95 103:b55559925dc1 221
shreeshas95 103:b55559925dc1 222 if(Iteration<14){
shreeshas95 103:b55559925dc1 223
shreeshas95 103:b55559925dc1 224 actual_data.temp_actual[Iteration]=actual_data.temp_actual[Iteration]*3.3;
shreeshas95 103:b55559925dc1 225 int resistance;
shreeshas95 103:b55559925dc1 226
shreeshas95 103:b55559925dc1 227 resistance=24000*actual_data.temp_actual[Iteration]/(3.3-actual_data.temp_actual[Iteration]);
shreeshas95 103:b55559925dc1 228 if(actual_data.temp_actual[Iteration]>1.47)
shreeshas95 103:b55559925dc1 229 {
shreeshas95 103:b55559925dc1 230 actual_data.temp_actual[Iteration]=3694/log(24.032242*resistance);
shreeshas95 103:b55559925dc1 231 }
shreeshas95 103:b55559925dc1 232 else{
shreeshas95 103:b55559925dc1 233
shreeshas95 103:b55559925dc1 234 actual_data.temp_actual[Iteration]=3365.4/log(7.60573*resistance);
shreeshas95 103:b55559925dc1 235 }
shreeshas95 103:b55559925dc1 236 }
shreeshas95 103:b55559925dc1 237 else
shreeshas95 103:b55559925dc1 238 actual_data.temp_actual[Iteration]=(-90.7*3.3*actual_data.temp_actual[Iteration])+190.1543;
shreeshas95 103:b55559925dc1 239 }
shreeshas95 103:b55559925dc1 240
shreeshas95 103:b55559925dc1 241 for(Iteration=0;Iteration<16;Iteration++){
shreeshas95 103:b55559925dc1 242
shreeshas95 103:b55559925dc1 243 if(Iteration<14){
shreeshas95 103:b55559925dc1 244
shreeshas95 103:b55559925dc1 245 quant_data.temp_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.temp_actual[Iteration]);
shreeshas95 103:b55559925dc1 246 }
shreeshas95 103:b55559925dc1 247 else
shreeshas95 103:b55559925dc1 248 quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]);
shreeshas95 103:b55559925dc1 249 }
shreeshas95 103:b55559925dc1 250
shreeshas95 103:b55559925dc1 251 quant_data.CDMS_temp_quant=quantiz(tstart,tstep,actual_data.CDMS_temp_actual);
shreeshas95 103:b55559925dc1 252
shreeshas95 103:b55559925dc1 253 minMaxHkData();
chaithanyarss 187:2c7263530c57 254 }
chaithanyarss 187:2c7263530c57 255
chaithanyarss 187:2c7263530c57 256 void FUNC_CDMS_GPIO_STATUS() //Polls the status of Input GPIO PINS
chaithanyarss 187:2c7263530c57 257 {
chaithanyarss 187:2c7263530c57 258 //V_A_PGOOD //TRZ EN
chaithanyarss 187:2c7263530c57 259 GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15)));
chaithanyarss 187:2c7263530c57 260 //V_B_PGOOD_1 //3V3BPGOOD //$
chaithanyarss 187:2c7263530c57 261 GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)||((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14)));
chaithanyarss 187:2c7263530c57 262 //V_B_PGOOD_2 //3V3BEN //$
chaithanyarss 187:2c7263530c57 263 GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)||((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13)));
chaithanyarss 187:2c7263530c57 264 //V_C_PGOOD //3V3CPGOOD //$
chaithanyarss 187:2c7263530c57 265 GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)||((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12)));
chaithanyarss 187:2c7263530c57 266 //COMRX_OC_FAULT //$
chaithanyarss 187:2c7263530c57 267 GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11)));
chaithanyarss 187:2c7263530c57 268 // COMTX_OC_FAULT //$
chaithanyarss 187:2c7263530c57 269 GPIO_STATUS=(COMTX_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10)));
chaithanyarss 187:2c7263530c57 270 //BAE_OC_FAULT //$
chaithanyarss 187:2c7263530c57 271 GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9)));
chaithanyarss 187:2c7263530c57 272 //PL_GPIO_1_STATUS //$
chaithanyarss 187:2c7263530c57 273 GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8)));
chaithanyarss 187:2c7263530c57 274 //PL_GPIO_2_STATUS //$
chaithanyarss 187:2c7263530c57 275 GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7)));
chaithanyarss 187:2c7263530c57 276 //PL_GPIO_3_STATUS //$
chaithanyarss 187:2c7263530c57 277 GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)||((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6)));
chaithanyarss 187:2c7263530c57 278 //PL_BEE_SW_OC_FAULT //to be verified
chaithanyarss 187:2c7263530c57 279 GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<5)):(GPIO_STATUS)&(~((uint16_t)(0x1<<5)));
chaithanyarss 187:2c7263530c57 280 //PL_EPS_LATCH_SW_OC_FAULT // to be verified
chaithanyarss 187:2c7263530c57 281 GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)||((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4)));
chaithanyarss 187:2c7263530c57 282
chaithanyarss 187:2c7263530c57 283 }
chaithanyarss 187:2c7263530c57 284
chaithanyarss 187:2c7263530c57 285 void VERIFY_COMRX()
chaithanyarss 187:2c7263530c57 286 {
chaithanyarss 187:2c7263530c57 287 //COMRX_OC_FAULT //$
chaithanyarss 187:2c7263530c57 288 if(PIN68==0 && RSSI_volatge > 0.4)
chaithanyarss 190:28a07943dded 289 {
chaithanyarss 187:2c7263530c57 290 COMRX_STATUS = COMRX_ALIVE;
chaithanyarss 190:28a07943dded 291 }
chaithanyarss 187:2c7263530c57 292 else
chaithanyarss 187:2c7263530c57 293 {
chaithanyarss 187:2c7263530c57 294 RESET_COMRX();
chaithanyarss 187:2c7263530c57 295 COMRX_RESET_COUNTER++;
chaithanyarss 187:2c7263530c57 296 if(PIN68==0 && RSSI_volatge > 0.4)
chaithanyarss 187:2c7263530c57 297 COMRX_STATUS = COMRX_ALIVE;
chaithanyarss 187:2c7263530c57 298 else
chaithanyarss 187:2c7263530c57 299 COMRX_STATUS = COMRX_DEAD;
chaithanyarss 187:2c7263530c57 300 }
chaithanyarss 187:2c7263530c57 301 }
chaithanyarss 187:2c7263530c57 302
chaithanyarss 187:2c7263530c57 303 void VERIFY_RTC(){
chaithanyarss 187:2c7263530c57 304
chaithanyarss 190:28a07943dded 305 if(RTC_STATUS == 0x00)
chaithanyarss 187:2c7263530c57 306 {
chaithanyarss 187:2c7263530c57 307 SPI_mutex.lock();
chaithanyarss 187:2c7263530c57 308 gCS_RTC=1;
chaithanyarss 187:2c7263530c57 309 gCS_RTC=0;
chaithanyarss 187:2c7263530c57 310 spi.write(0x0F);
chaithanyarss 187:2c7263530c57 311 if(spi.write(0x00) & 0x04 == 0x04)
chaithanyarss 187:2c7263530c57 312 {
chaithanyarss 190:28a07943dded 313 RTC_STATUS = 0x00;
chaithanyarss 187:2c7263530c57 314 RESET_RTC();
chaithanyarss 187:2c7263530c57 315 RTC_FAULTCOUNT++;
chaithanyarss 187:2c7263530c57 316 }
chaithanyarss 187:2c7263530c57 317 gCS_RTC=1;
chaithanyarss 187:2c7263530c57 318 SPI_mutex.unlock();
chaithanyarss 187:2c7263530c57 319 }
chaithanyarss 187:2c7263530c57 320 }
chaithanyarss 187:2c7263530c57 321
chaithanyarss 187:2c7263530c57 322 void HANDLE_HW_FAULTS()
chaithanyarss 187:2c7263530c57 323 {
chaithanyarss 187:2c7263530c57 324 HANDLE_HW_FAULT_SD();
chaithanyarss 187:2c7263530c57 325 HANDLE_HW_FAULT_BAE();
chaithanyarss 190:28a07943dded 326 HANDLE_HW_FAULT_PL();
chaithanyarss 187:2c7263530c57 327 }
chaithanyarss 187:2c7263530c57 328
chaithanyarss 187:2c7263530c57 329 void HANDLE_HW_FAULT_SD()
chaithanyarss 187:2c7263530c57 330 {
chaithanyarss 187:2c7263530c57 331 if(SD_STATUS != DEVICE_DISABLED)
chaithanyarss 187:2c7263530c57 332 {
chaithanyarss 190:28a07943dded 333 if(SD_STATUS == DEVICE_OC_FAULT)
chaithanyarss 187:2c7263530c57 334 SD_SW_EN_DS = 0; //powering on SD
chaithanyarss 187:2c7263530c57 335
chaithanyarss 187:2c7263530c57 336 if(SD_OC_FAULT == 0)
chaithanyarss 187:2c7263530c57 337 {
chaithanyarss 187:2c7263530c57 338 SD_SW_EN_DS = 1; //switching off SD card
chaithanyarss 187:2c7263530c57 339
chaithanyarss 187:2c7263530c57 340 SD_FAULTCOUNT++;
chaithanyarss 190:28a07943dded 341 SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT;
chaithanyarss 187:2c7263530c57 342 }
chaithanyarss 187:2c7263530c57 343 else
chaithanyarss 187:2c7263530c57 344 {
chaithanyarss 187:2c7263530c57 345 SD_STATUS = DEVICE_POWERED;
chaithanyarss 187:2c7263530c57 346 SD_FAULTCOUNT = 0;
chaithanyarss 187:2c7263530c57 347 }
chaithanyarss 187:2c7263530c57 348 }
chaithanyarss 187:2c7263530c57 349 }
chaithanyarss 187:2c7263530c57 350
chaithanyarss 187:2c7263530c57 351 void HANDLE_HW_FAULT_BAE()
chaithanyarss 187:2c7263530c57 352 {
chaithanyarss 187:2c7263530c57 353 if(BAE_STATUS != DEVICE_DISABLED)
chaithanyarss 187:2c7263530c57 354 {
chaithanyarss 190:28a07943dded 355 if(BAE_STATUS == DEVICE_OC_FAULT)
chaithanyarss 189:fba4aeebf004 356 BAE_SW_EN_DS = 0; //Power ON BAE
chaithanyarss 187:2c7263530c57 357
chaithanyarss 187:2c7263530c57 358 if(BAE_OC_FAULT == 0) // If OC Fault
chaithanyarss 187:2c7263530c57 359 {
chaithanyarss 189:fba4aeebf004 360 BAE_SW_EN_DS = 1; //Switch OFF BAE
chaithanyarss 187:2c7263530c57 361 BAE_FAULTCOUNT++;
chaithanyarss 187:2c7263530c57 362 BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
chaithanyarss 187:2c7263530c57 363 }
chaithanyarss 187:2c7263530c57 364 else
chaithanyarss 187:2c7263530c57 365 {
chaithanyarss 187:2c7263530c57 366 BAE_STATUS = DEVICE_POWERED;
chaithanyarss 187:2c7263530c57 367 BAE_FAULTCOUNT = 0;
chaithanyarss 187:2c7263530c57 368 }
chaithanyarss 187:2c7263530c57 369 }
chaithanyarss 187:2c7263530c57 370 }
chaithanyarss 187:2c7263530c57 371
chaithanyarss 187:2c7263530c57 372 void HANDLE_HW_FAULT_PL()
chaithanyarss 187:2c7263530c57 373 {
chaithanyarss 187:2c7263530c57 374 if(PL_STATUS != DEVICE_DISABLED)
chaithanyarss 187:2c7263530c57 375 {
chaithanyarss 190:28a07943dded 376 if(PL_STATUS == DEVICE_OC_FAULT)
chaithanyarss 189:fba4aeebf004 377 PL_SW_EN_DS = 0; //Power ON PL
chaithanyarss 187:2c7263530c57 378
chaithanyarss 189:fba4aeebf004 379 if(PL_BEE_SW_OC_FAULT == 0) // if OC Fault
chaithanyarss 187:2c7263530c57 380 {
chaithanyarss 189:fba4aeebf004 381 PL_SW_EN_DS = 1; // switching OFF PL
chaithanyarss 187:2c7263530c57 382 PL_FAULTCOUNT++;
chaithanyarss 187:2c7263530c57 383 PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT;
chaithanyarss 187:2c7263530c57 384 }
chaithanyarss 187:2c7263530c57 385 else
chaithanyarss 187:2c7263530c57 386 {
chaithanyarss 187:2c7263530c57 387 if(PL_STATUS == DEVICE_OC_FAULT)
chaithanyarss 187:2c7263530c57 388 PL_SW_EN_DS = 0; //Switching OFF PL
chaithanyarss 187:2c7263530c57 389 PL_STATUS = DEVICE_ENABLED;
chaithanyarss 187:2c7263530c57 390 PL_FAULTCOUNT = 0;
chaithanyarss 187:2c7263530c57 391 }
chaithanyarss 187:2c7263530c57 392 }
chaithanyarss 190:28a07943dded 393 }
chaithanyarss 187:2c7263530c57 394
chaithanyarss 187:2c7263530c57 395 void COLLECT_CDMS_RAM()
chaithanyarss 187:2c7263530c57 396 {
chaithanyarss 190:28a07943dded 397 /*--------------------Current FSC's---------------------*/
chaithanyarss 187:2c7263530c57 398 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 399 CDMS_HEALTH_DATA[i+43] = FSC_LAST[5] >> (i*8);
chaithanyarss 189:fba4aeebf004 400 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 401 CDMS_HEALTH_DATA[i+47] = FSC_CURRENT[5] >> (i*8);
chaithanyarss 187:2c7263530c57 402 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 403 CDMS_HEALTH_DATA[i+51] = FSC_LAST[4] >> (i*8);
chaithanyarss 189:fba4aeebf004 404 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 405 CDMS_HEALTH_DATA[i+55] = FSC_CURRENT[4] >> (i*8);
chaithanyarss 189:fba4aeebf004 406 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 407 CDMS_HEALTH_DATA[i+59] = FSC_LAST[3] >> (i*8);
chaithanyarss 187:2c7263530c57 408 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 409 CDMS_HEALTH_DATA[i+63] = FSC_CURRENT[3] >> (i*8);
chaithanyarss 189:fba4aeebf004 410 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 411 CDMS_HEALTH_DATA[i+67] = FSC_LAST[2] >> (i*8);
chaithanyarss 187:2c7263530c57 412 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 413 CDMS_HEALTH_DATA[i+71] = FSC_CURRENT[2] >> (i*8);
chaithanyarss 187:2c7263530c57 414 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 415 CDMS_HEALTH_DATA[i+75] = FSC_LAST[1] >> (i*8);
chaithanyarss 189:fba4aeebf004 416 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 417 CDMS_HEALTH_DATA[i+79] = FSC_CURRENT[1] >> (i*8);
chaithanyarss 187:2c7263530c57 418 /*---------------------Latest Time----------------------*/
chaithanyarss 187:2c7263530c57 419 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 420 CDMS_HEALTH_DATA[i+83] = TIME_LATEST_SPI_SPEED >> (i*8);
chaithanyarss 187:2c7263530c57 421 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 422 CDMS_HEALTH_DATA[i+87] = TIME_LATEST_SD_RD >> (i*8);
chaithanyarss 187:2c7263530c57 423 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 424 CDMS_HEALTH_DATA[i+91] = TIME_LATEST_SD_WR >> (i*8);
chaithanyarss 187:2c7263530c57 425 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 426 CDMS_HEALTH_DATA[i+95] = TIME_LATEST_I2C_SPEED >> (i*8);
chaithanyarss 187:2c7263530c57 427 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 428 CDMS_HEALTH_DATA[i+99] = TIME_LATEST_I2C_BAE >> (i*8);
chaithanyarss 187:2c7263530c57 429 for(int i=0;i<4;i++)
chaithanyarss 189:fba4aeebf004 430 CDMS_HEALTH_DATA[i+103] = TIME_LATEST_RTC >> (i*8);
chaithanyarss 187:2c7263530c57 431 for(int i=0;i<2;i++)
chaithanyarss 189:fba4aeebf004 432 CDMS_HEALTH_DATA[i+107] = COMRX_RESET_COUNTER >> (i*8);
chaithanyarss 187:2c7263530c57 433 for(int i=0;i<2;i++)
chaithanyarss 189:fba4aeebf004 434 CDMS_HEALTH_DATA[i+107] = PL_RCV_SC_DATA_COUNTER >> (i*8);
chaithanyarss 187:2c7263530c57 435 for(int i=0;i<2;i++)
chaithanyarss 189:fba4aeebf004 436 CDMS_HEALTH_DATA[i+111] = PL_MAIN_COUNTER >> (i*8);
chaithanyarss 187:2c7263530c57 437 for(int i=0;i<2;i++)
chaithanyarss 189:fba4aeebf004 438 CDMS_HEALTH_DATA[i+113] = CDMS_HK_MAIN_COUNTER >> (i*8);
chaithanyarss 187:2c7263530c57 439 for(int i=0;i<2;i++)
chaithanyarss 189:fba4aeebf004 440 CDMS_HEALTH_DATA[i+115] = CDMS_I2C_ERR_BAE_COUNTER >> (i*8);
chaithanyarss 187:2c7263530c57 441 for(int i=0;i<2;i++)
chaithanyarss 189:fba4aeebf004 442 CDMS_HEALTH_DATA[i+117] = CDMS_I2C_ERR_SPEED_COUNTER >> (i*8);
chaithanyarss 189:fba4aeebf004 443 CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | CDMS_STANDBY_PL << 7;
chaithanyarss 189:fba4aeebf004 444 CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_INIT_STATUS << 6) & 0x40);
chaithanyarss 189:fba4aeebf004 445 CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_MAIN_STATUS << 5) & 0x20);
chaithanyarss 189:fba4aeebf004 446 CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_HK_STATUS << 3) & 0x18);
chaithanyarss 189:fba4aeebf004 447 CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((COMRX_STATUS << 2) & 0x04);
chaithanyarss 189:fba4aeebf004 448 CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] | ((CDMS_RTC_BL << 1) & 0x02);
chaithanyarss 189:fba4aeebf004 449 CDMS_HEALTH_DATA[120] = CDMS_HEALTH_DATA[120] & 0xFE;
chaithanyarss 187:2c7263530c57 450
chaithanyarss 189:fba4aeebf004 451 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | PL_RCV_SC_DATA_STATUS << 7;
chaithanyarss 189:fba4aeebf004 452 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_SESSION << 6) & 0x40);
chaithanyarss 189:fba4aeebf004 453 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_RX << 5) & 0x20);
chaithanyarss 189:fba4aeebf004 454 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((RF_SW_STATUS << 4) & 0x10);
chaithanyarss 189:fba4aeebf004 455 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX << 3) & 0x08);
chaithanyarss 189:fba4aeebf004 456 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_TX_STATUS << 2) & 0x04);
chaithanyarss 189:fba4aeebf004 457 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | ((COM_MNG_TMTC << 1) & 0x02);
chaithanyarss 189:fba4aeebf004 458 CDMS_HEALTH_DATA[121] = CDMS_HEALTH_DATA[121] | (CDMS_STANDBY_HK & 0x01);
chaithanyarss 187:2c7263530c57 459
chaithanyarss 189:fba4aeebf004 460 CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | PL_INIT_STATUS << 7;
chaithanyarss 189:fba4aeebf004 461 CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_MAIN_STATUS << 6) & 0x40);
chaithanyarss 189:fba4aeebf004 462 CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_LOW_POWER << 5) & 0x20);
chaithanyarss 189:fba4aeebf004 463 CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | ((PL_STATE << 3) & 0x18);
chaithanyarss 189:fba4aeebf004 464 CDMS_HEALTH_DATA[122] = CDMS_HEALTH_DATA[122] | (PL_STATUS & 0x07);
shreeshas95 103:b55559925dc1 465 }