FM
Dependencies: SimpleDMA eeprom mbed-rtos mbed FreescaleIAP
Fork of CDMS_CODE by
Revision 340:d05e7b4b6690, committed 2017-01-07
- Comitter:
- chaithanyarss
- Date:
- Sat Jan 07 01:35:54 2017 +0000
- Parent:
- 339:5c4bda268e08
- Commit message:
- Reverting changes to 326 version
Changed in this revision
--- a/CDMS_HK.h Sat Jan 07 00:40:47 2017 +0000 +++ b/CDMS_HK.h Sat Jan 07 01:35:54 2017 +0000 @@ -18,6 +18,7 @@ AnalogIn COMRX_RSSI_VOLTAGE(PIN70); AnalogIn EPS_BTRY_VOLT (PIN54); + DigitalOut SelectLinec3 (PIN79); // MSB of Select Lines DigitalOut SelectLinec2 (PIN78); DigitalOut SelectLinec1 (PIN76); @@ -47,204 +48,196 @@ { uint8_t sd_stat = 0; uint8_t hk_count=0; - while(1) { - gHK_THREAD->signal_wait(HK_SIGNAL); - gMutex.lock(); - if(hk_count == 1 || hk_count == 2) { - FCTN_CDMS_PL_MAIN((void const *)NULL); - hk_count--; - gMutex.unlock(); - continue; - } else if(hk_count == 0) { - FCTN_CDMS_PL_MAIN((void const *)NULL); - hk_count = 2; - } - // gPC.printf("\n\rEntering HK thread\n"); - //gPC.printf("\n\r%d\n",CDMS_WR_SD_FAULT_COUNTER); - if(EN_CDMS_HK == 0x00) - continue; - CDMS_HK_MAIN_STATUS = 0x01; - CDMS_HK_MAIN_COUNTER++; + while(1) + { + gHK_THREAD->signal_wait(HK_SIGNAL); + gMutex.lock(); + if(hk_count == 1 || hk_count == 2) + { + FCTN_CDMS_PL_MAIN((void const *)NULL); + hk_count--; + gMutex.unlock(); + continue; + } + else if(hk_count == 0) + { + FCTN_CDMS_PL_MAIN((void const *)NULL); + hk_count = 2; + } + // gPC.printf("\n\rEntering HK thread\n"); + gPC.printf("\n\r%d\n",CDMS_WR_SD_FAULT_COUNTER); + if(EN_CDMS_HK == 0x00) + continue; + CDMS_HK_MAIN_STATUS = 0x01; + CDMS_HK_MAIN_COUNTER++; - FCTN_CDMS_HK(); //collects temperatures - if(!COM_RSSI_SET) - { - RSSI_VOLTAGE = COMRX_RSSI_VOLTAGE.read() * 3.3;//to be checked - } - else COM_RSSI_SET = 0; - //VERIFY_COMRX(); - VERIFY_RTC(); - HANDLE_HW_FAULTS(); - FUNC_CDMS_GPIO_STATUS(); + FCTN_CDMS_HK(); //collects temperatures + RSSI_VOLTAGE = COMRX_RSSI_VOLTAGE.read() * 3.3;//to be checked + //gPC.printf("\n\rRSSI voltage = %f",RSSI_volatge); + VERIFY_COMRX(); + VERIFY_RTC(); + HANDLE_HW_FAULTS(); + FUNC_CDMS_GPIO_STATUS(); - uint8_t CDMS_quant[20]; - CDMS_quant[0]= COM_ADF_TMP+40; - CDMS_quant[1]= (uint8_t)quant_data.CDMS_temp_quant; - CDMS_quant[2]= (uint8_t)(RSSI_VOLTAGE*10); - CDMS_quant[3]= (uint8_t)(EPS_BTRY_VOLT*33*(62.0/11)); - for(int i=0; i<16; i++) { - CDMS_quant[i+4]= (uint8_t)quant_data.temp_quant[i]; - } - minMaxHkData(); + uint8_t CDMS_quant[20]; + CDMS_quant[1]= (uint8_t)quant_data.CDMS_temp_quant; + CDMS_quant[2]= (uint8_t)RSSI_VOLTAGE; + CDMS_quant[3]= (uint8_t)(EPS_BTRY_VOLT*33*(62.0/11)); + for(int i=0; i<16; i++) { + CDMS_quant[i+4]= (uint8_t)quant_data.temp_quant[i]; + } + minMaxHkData(); - CDMS_HEALTH_DATA[1] = GPIO_STATUS; //Reading GPIO Pins - CDMS_HEALTH_DATA[0] = GPIO_STATUS >> 8; - COLLECT_CDMS_RAM(); - for(int i = 0; i<84; i++) - CDMS_HEALTH_DATA[2+i] = CDMS_RAM[i]; //Reading RAM parameters - for(int i = 0; i<20; i++) //Collecting Data from Temp sensors - CDMS_HEALTH_DATA[86+i] = CDMS_quant[i]; + CDMS_HEALTH_DATA[1] = GPIO_STATUS; //Reading GPIO Pins + CDMS_HEALTH_DATA[0] = GPIO_STATUS >> 8; + COLLECT_CDMS_RAM(); + for(int i = 0;i<84;i++) + CDMS_HEALTH_DATA[2+i] = CDMS_RAM[i]; //Reading RAM parameters + for(int i = 0;i<20;i++) //Collecting Data from Temp sensors + CDMS_HEALTH_DATA[86+i] = CDMS_quant[i]; - // Here: Have to FIT flash data. - CDMS_HEALTH_DATA[106] = (EPS_V_A_EN_STATUS<<7) | ((BAE_STATUS<<5)&0x60) | ((SD_STATUS<<3)&0x18) | ((PL_STATUS<<1)&0x06) | (PL_EPS_LATCH_SW_EN & 0x01); - CDMS_HEALTH_DATA[107] = (RTC_INIT_STATUS<<6) | ((CDMS_RTC_DISABLE<<5)&0x20); - CDMS_HEALTH_DATA[108] = CDMS_RESET_COUNTER >>8; - CDMS_HEALTH_DATA[109] = CDMS_RESET_COUNTER; - CDMS_HEALTH_DATA[110] = TIME_LATEST_CDSMS_RESET >>24; - CDMS_HEALTH_DATA[111] = TIME_LATEST_CDSMS_RESET >>16; - CDMS_HEALTH_DATA[112] = TIME_LATEST_CDSMS_RESET >>8; - CDMS_HEALTH_DATA[113] = TIME_LATEST_CDSMS_RESET; - COM_TC_BYTES_LIMIT = BYTE_OVERFLOW_CONSTANT; - CDMS_HEALTH_DATA[114] = COM_TC_BYTES_LIMIT>>8; - CDMS_HEALTH_DATA[115] = COM_TC_BYTES_LIMIT; - CDMS_HEALTH_DATA[116] = COM_RX_CURRENT_MAX; - CDMS_HEALTH_DATA[117] = COM_RX_DISABLE_TIMEOUT; - CDMS_HEALTH_DATA[118] = COM_PA_TMP_HIGH; - CDMS_HEALTH_DATA[119] = COM_PA_RECOVERY_TIMEOUT; - CDMS_HEALTH_DATA[120] = COM_SESSION_TIMEOUT/60; - CDMS_HEALTH_DATA[121] = COM_RSSI_MIN; - CDMS_HEALTH_DATA[122] = SD_LIB_BLK_CURRENT>>8; - CDMS_HEALTH_DATA[122] = SD_LIB_BLK_CURRENT; - - uint32_t time = FCTN_CDMS_RD_RTC() >> 7; //Reading Time from RTC - for(int i = 124; i<128; i++) - CDMS_HEALTH_DATA[i] = time >> (127-i)*8; - - gPC.printf("\t\t%d/%d/%d ",((time & 0x003E0000)>>17),((time & 0x03C00000)>>22),((time & 0x0C000000)>>26)+2016); - gPC.printf("%d:%d:%d\n",((time & 0x0001F000)>>12),((time & 0x00000FC0)>>6),(time & 0x0000003F)); - - FCTN_SD_MNGR(); //Adding FSC & TMID to TM frame - CDMS_HK_FRAME[0] = 0x20; - CDMS_HK_FRAME[1] = (FSC_CURRENT[4]+1) >> 16; - CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8; - CDMS_HK_FRAME[3] = FSC_CURRENT[4]+1; - // gPC.printf("\n"); - for(int i = 0; i<128; i++) { /*Adding actual CDMS Health data to TM frame*/ - CDMS_HK_FRAME[i+4] = CDMS_HEALTH_DATA[i]; - //gPC.printf("%02x",CDMS_HEALTH_DATA[i]); - } -// gPC.printf("\n"); - uint16_t crc = crc16_gen(CDMS_HK_FRAME,132); /*Adding CRC to TM frame*/ - CDMS_HK_FRAME[132] = crc >> 8; - CDMS_HK_FRAME[133] = crc; + // Here: Have to FIT flash data. + CDMS_HEALTH_DATA[106] = (EPS_V_A_EN_STATUS<<7) | ((BAE_STATUS<<5)&0x60) | ((SD_STATUS<<3)&0x18) | ((PL_STATUS<<1)&0x06) | (PL_EPS_LATCH_SW_EN & 0x01); + CDMS_HEALTH_DATA[107] = (RTC_INIT_STATUS<<6) | ((CDMS_RTC_DISABLE<<5)&0x20); + CDMS_HEALTH_DATA[108] = CDMS_RESET_COUNTER >>8; + CDMS_HEALTH_DATA[109] = CDMS_RESET_COUNTER; + CDMS_HEALTH_DATA[110] = TIME_LATEST_CDSMS_RESET >>24; + CDMS_HEALTH_DATA[111] = TIME_LATEST_CDSMS_RESET >>16; + CDMS_HEALTH_DATA[112] = TIME_LATEST_CDSMS_RESET >>8; + CDMS_HEALTH_DATA[113] = TIME_LATEST_CDSMS_RESET; + CDMS_HEALTH_DATA[114] = COM_TC_BYTES_LIMIT>>8; + CDMS_HEALTH_DATA[115] = COM_TC_BYTES_LIMIT; + CDMS_HEALTH_DATA[116] = COM_RX_CURRENT_MAX; + CDMS_HEALTH_DATA[117] = COM_RX_DISABLE_TIMEOUT; + CDMS_HEALTH_DATA[118] = COM_PA_TMP_HIGH; + CDMS_HEALTH_DATA[119] = COM_PA_RECOVERY_TIMEOUT; + CDMS_HEALTH_DATA[120] = COM_SESSION_TIMEOUT; + CDMS_HEALTH_DATA[121] = COM_RSSI_MIN; + CDMS_HEALTH_DATA[122] = SD_LIB_BLK_CURRENT>>8; + CDMS_HEALTH_DATA[122] = SD_LIB_BLK_CURRENT; + + uint64_t time = FCTN_CDMS_RD_RTC() >> 7; //Reading Time from RTC + for(int i = 124; i<128; i++) + CDMS_HEALTH_DATA[i] = time >> (i-124)*8; + gPC.printf("0x%d\n",time); + gPC.printf("HK ARCH TIME TAGGED"); + 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; + // gPC.printf("\n"); + for(int i = 0; i<128; i++){ /*Adding actual CDMS Health data to TM frame*/ + CDMS_HK_FRAME[i+4] = CDMS_HEALTH_DATA[i]; + //gPC.printf("%02x",CDMS_HEALTH_DATA[i]); + } + // gPC.printf("\n"); + 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; - exor(CDMS_HK_FRAME); - CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK); - CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135); - //gPC.printf("\n\r reached here"); - interleave(convoluted_CDMS_HK , interleave_CDMS_HK); - interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144); - //gPC.printf("\n\r reached here"); - for(int i=0; i<288; i++) - CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i]; - //gPC.printf("\n\r reached here"); - sd_stat = SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4); - if(sd_stat) { - gPC.puts("sd write failure $*&^@!~!"); - // break; + exor(CDMS_HK_FRAME); + CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK); + CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135); + //gPC.printf("\n\r reached here"); + interleave(convoluted_CDMS_HK , interleave_CDMS_HK); + interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144); + //gPC.printf("\n\r reached here"); + for(int i=0; i<288; i++) + CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i]; + //gPC.printf("\n\r reached here"); + sd_stat = SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4); + if(sd_stat) + { + gPC.puts("sd write failure $*&^@!~!"); + // break; } - // gPC.printf("Completed CDMS HK\t"); - - /*---------------------------------- BAE HK --------------------------------------------*/ + // gPC.printf("Completed CDMS HK\t"); - BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134); - // gPC.printf("Entering BAE HK\t"); - if(BAE_HK_I2C == 0) { - crc = crc16_gen((unsigned char *)BAE_HK,132); - if(crc == ((uint16_t)BAE_HK[132] << 8) | (uint16_t)BAE_HK[133]) { - //gPC.printf("BAE HK data recieved through I2C\t"); - TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7; - /*for(int i = 0; i<15; i++) - gPC.printf("\r 0x%02X\n",BAE_HK[i]);*/ - for(int i = 0; i<4; i++) - BAE_HK[i] = time >> (3-i)*8; - BAE_HK_FRAME[0] = 0x28; - BAE_HK_FRAME[1] = (FSC_CURRENT[5]+1) >> 16; - BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8; - BAE_HK_FRAME[3] = FSC_CURRENT[5]+1; - 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[132] = crc >> 8; - BAE_HK_FRAME[133] = crc; - exor(BAE_HK_FRAME); - 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_stat = SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5); - if(sd_stat) { - gPC.puts("sd write failure"); - //break; - } - } + /*---------------------------------- BAE HK --------------------------------------------*/ - } else { - gPC.printf("BAE HK data not recieved through I2C\t"); - for(int i = 0; i<134; i++) - BAE_HK[i] = 0; + BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134); + // gPC.printf("Entering BAE HK\t"); + if(BAE_HK_I2C == 0) { + crc = crc16_gen((unsigned char *)BAE_HK,132); + if(crc == ((uint16_t)BAE_HK[132] << 8) | (uint16_t)BAE_HK[133]){ + //gPC.printf("BAE HK data recieved through I2C\t"); + TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7; + /*for(int i = 0; i<15; i++) + gPC.printf("\r 0x%02X\n",BAE_HK[i]);*/ + for(int i = 0; i<4; i++) + BAE_HK[i] = 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; + exor(BAE_HK_FRAME); + 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_stat = SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5); + if(sd_stat) + { + gPC.puts("sd write failure"); + //break; } - // gPC.printf("Completed BAE HK\n"); - - /*----------------------------------Beacon message--------------------------------------*/ - + } + + } else { + gPC.printf("BAE HK data not recieved through I2C\t"); + for(int i = 0; i<134; i++) + BAE_HK[i] = 0; + } + // gPC.printf("Completed BAE HK\n"); - // Add HK bits - beacon_array[0] = 0x00; - beacon_array[1] = time >> 32; - beacon_array[2] = time >> 24; - beacon_array[3] = time >> 16; - beacon_array[4] = time >> 8; - beacon_array[5] = time; - beacon_array[6] = SD_FAULTCOUNT >> 8; - beacon_array[7] = SD_FAULTCOUNT; - beacon_array[8] = RTC_FAULTCOUNT >> 8; - beacon_array[9] = RTC_FAULTCOUNT; - if(!COM_OC_SET) - beacon_array[10] = (((SD_STATUS == DEVICE_DISABLED || SD_STATUS == DEVICE_OC_FAULT)?1:0)<<7)|(RTC_STATUS <<6)|(COM_RX_STATUS<<3)|(0<<2)|(COMRX_OC_FAULT<<1)|(COM_TX_OC_FAULT); + /*----------------------------------Beacon message--------------------------------------*/ + + + // Add HK bits + beacon_array[0] = 0x00; + beacon_array[1] = time >> 32; + beacon_array[2] = time >> 24; + beacon_array[3] = time >> 16; + beacon_array[4] = time >> 8; + beacon_array[5] = time; + beacon_array[6] = SD_FAULTCOUNT >> 8; + beacon_array[7] = SD_FAULTCOUNT; + beacon_array[8] = RTC_FAULTCOUNT >> 8; + beacon_array[9] = RTC_FAULTCOUNT; + beacon_array[10] = (((SD_STATUS == DEVICE_DISABLED || SD_STATUS == DEVICE_OC_FAULT)?1:0)<<7)|(RTC_STATUS <<6)|(COM_RX_STATUS<<3)|(0<<2)|(COMRX_OC_FAULT<<1)|(COM_TX_OC_FAULT); + beacon_array[11] = (COM_RX_CNTRL <<7)|(COM_TX_CNTRL); + beacon_array[12] = CDMS_HK_MAIN_COUNTER >>8; + beacon_array[13] = CDMS_HK_MAIN_COUNTER; + beacon_array[14] = PL_MAIN_COUNTER >>8; + beacon_array[15] = PL_MAIN_COUNTER; + beacon_array[16] = PL_RCV_SC_DATA_COUNTER >>8; + beacon_array[17] = PL_RCV_SC_DATA_COUNTER; + beacon_array[18] = TIME_LATEST_SPI_SPEED >>24; + beacon_array[19] = TIME_LATEST_SPI_SPEED >>16; + beacon_array[20] = TIME_LATEST_SPI_SPEED >>8; + beacon_array[21] = TIME_LATEST_SPI_SPEED; + beacon_array[22] = (uint8_t)RSSI_VOLTAGE; + + // Add SC bits + crc = crc16_gen(beacon_array,132); + beacon_array[132] = crc; + beacon_array[133] = crc >> 8; + bool y; + y = FCTN_I2C_WRITE((char *)beacon_array,134); + if(y == 0) + gPC.printf("long Bcn sent\n\r"); else - { - beacon_array[10] = (((SD_STATUS == DEVICE_DISABLED || SD_STATUS == DEVICE_OC_FAULT)?1:0)<<7)|(RTC_STATUS <<6)|(COM_RX_STATUS<<3)|(0<<2)|(COMRX_OC_FAULT<<1)|(com_oc_sw_status); - COM_OC_SET = 0; - } - beacon_array[11] = (COM_RX_CNTRL <<7)|(COM_TX_CNTRL); - beacon_array[12] = CDMS_HK_MAIN_COUNTER >>8; - beacon_array[13] = CDMS_HK_MAIN_COUNTER; - beacon_array[14] = PL_MAIN_COUNTER >>8; - beacon_array[15] = PL_MAIN_COUNTER; - beacon_array[16] = PL_RCV_SC_DATA_COUNTER >>8; - beacon_array[17] = PL_RCV_SC_DATA_COUNTER; - beacon_array[18] = TIME_LATEST_SPI_SPEED >>24; - beacon_array[19] = TIME_LATEST_SPI_SPEED >>16; - beacon_array[20] = TIME_LATEST_SPI_SPEED >>8; - beacon_array[21] = TIME_LATEST_SPI_SPEED; - beacon_array[22] = (uint8_t)(RSSI_VOLTAGE*10); - - // Add SC bits - crc = crc16_gen(beacon_array,132); - beacon_array[132] = crc; - beacon_array[133] = crc >> 8; - bool y; - y = FCTN_I2C_WRITE((char *)beacon_array,134); - if(y == 0) { - TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7; - //gPC.printf("long Bcn sent\n\r"); - } else - gPC.printf("long Bcn not sent\r\n"); - //gPC.printf("\rCompleted Beacon\n"); - gMutex.unlock(); + gPC.printf("long Bcn not sent\r\n"); + //gPC.printf("\rCompleted Beacon\n"); + gMutex.unlock(); } } @@ -268,14 +261,8 @@ void minMaxHkData() { - MAX_COM_ADF_TMP = (MAX_COM_ADF_TMP < COM_ADF_TMP)?COM_ADF_TMP:MAX_COM_ADF_TMP; - MIN_COM_ADF_TMP = (MIN_COM_ADF_TMP > COM_ADF_TMP)?COM_ADF_TMP:MIN_COM_ADF_TMP; - - MAX_RSSI_VOLTAGE = (MAX_RSSI_VOLTAGE < RSSI_VOLTAGE)?RSSI_VOLTAGE:MAX_RSSI_VOLTAGE; - MIN_RSSI_VOLTAGE = (MIN_RSSI_VOLTAGE > RSSI_VOLTAGE)?RSSI_VOLTAGE:MIN_RSSI_VOLTAGE; - if(firstCount==true) { - for (int i = 0; i < 16; ++i) { + for (int i = 4; 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]; } @@ -283,9 +270,11 @@ 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) { + for (int i = 4; 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]); + //gPC.printf("\rMax reading, iteration = %d, %d \n",min_max_data.temp_max[i], i); + //gPC.printf("\rMin reading, iteration = %d, %d \n",min_max_data.temp_min[i], i); } min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant); @@ -317,42 +306,45 @@ SelectLinec2=!(SelectLinec2); if(Iteration%8==7) SelectLinec3=!(SelectLinec3); - wait_ms(1); - // gPC.printf("\r%d %d %d %d\n",SelectLinec3.read(),SelectLinec2.read(),SelectLinec1.read(),SelectLinec0.read()); + wait_ms(1); + // gPC.printf("\r%d %d %d %d\n",SelectLinec3.read(),SelectLinec2.read(),SelectLinec1.read(),SelectLinec0.read()); } actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543; - + - + for(Iteration=0; Iteration<16; Iteration++) { - if(Iteration<4) { + if(Iteration<4) + { actual_data.temp_actual[Iteration]=actual_data.temp_actual[Iteration]*3.3*2*10; - } else if(Iteration<14) { - resistance=22000*actual_data.temp_actual[Iteration]*3.3/(3.3-actual_data.temp_actual[Iteration]*3.3); - + } + else if(Iteration<14) + { + resistance=24000*actual_data.temp_actual[Iteration]*3.3/(3.3-actual_data.temp_actual[Iteration]*3.3); + if(actual_data.temp_actual[Iteration]*3.3<1.47) //Document says 1.378 .Pls Check - - actual_data.temp_actual[Iteration]=(3694/log(24.032242*resistance))-273; + + actual_data.temp_actual[Iteration]=(3694/log(24.032242*resistance))-273; else - + actual_data.temp_actual[Iteration]=(3365.4/log(7.60573*resistance))-273; - - } else + + } + else actual_data.temp_actual[Iteration]=(-90.7*3.3*actual_data.temp_actual[Iteration])+190.1543; } for(Iteration=0; Iteration<16; Iteration++) { - if(Iteration<4) { - quant_data.temp_quant[Iteration]=actual_data.temp_actual[Iteration]; - wait(0.001); - } else if(Iteration<14) + if(Iteration<4) + quant_data.temp_quant[Iteration]=actual_data.temp_actual[Iteration] * 10; + else if(Iteration<14) quant_data.temp_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.temp_actual[Iteration]); - // quant_data.temp_quant[Iteration]=quantiz(0,1,actual_data.temp_actual[Iteration]); + // quant_data.temp_quant[Iteration]=quantiz(0,1,actual_data.temp_actual[Iteration]); else - // quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]); - quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]); + // quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]); + quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]); } quant_data.CDMS_temp_quant=quantiz(tstart,tstep,actual_data.CDMS_temp_actual); @@ -371,7 +363,7 @@ //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 //$ @@ -380,7 +372,7 @@ GPIO_STATUS=(SD_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9))); //BAE_OC_FAULT //$ GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8))); - + /* //PL_GPIO_1_STATUS //$ GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)|((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8))); @@ -389,7 +381,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<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4))); //PL_EPS_LATCH_SW_OC_FAULT // to be verified @@ -398,8 +390,8 @@ GPIO_STATUS=(COM_RX_CNTRL)?(GPIO_STATUS)|((uint16_t)(0x1<<2)):(GPIO_STATUS)&(~((uint16_t)(0x1<<2))); //EPS_V_D_EN_STATUS GPIO_STATUS=(COM_TX_CNTRL)?(GPIO_STATUS)|((uint16_t)(0x1<<1)):(GPIO_STATUS)&(~((uint16_t)(0x1<<1))); - // gPC.printf("%04x\n",GPIO_STATUS); - gPC.printf("\n\rBAE_OC STATE = %04x",GPIO_STATUS); + // gPC.printf("%04x\n",GPIO_STATUS); + gPC.printf("\rBAE_OC STATE = %04x \n",GPIO_STATUS); } void VERIFY_COMRX() @@ -419,20 +411,20 @@ void VERIFY_RTC() { - uint8_t response; - if(EN_RTC == 0x00) + uint8_t response; + if(EN_RTC == 0x00) return; - gCS_RTC=1; - gCS_RTC=0; - spi.write(0x0F); - response = spi.write(0x00); - CDMS_RTC_BL = (response & 0x10) >>4; - if(response & 0x04 == 0x04) { - //RESET_RTC(); - RTC_STATUS = 0x01; - RTC_FAULTCOUNT++; - } - gCS_RTC=1; + gCS_RTC=1; + gCS_RTC=0; + spi.write(0x0F); + response = spi.write(0x00); + CDMS_RTC_BL = (response & 0x10) >>4; + if(response & 0x04 == 0x04) { + //RESET_RTC(); + RTC_STATUS = 0x01; + RTC_FAULTCOUNT++; + } + gCS_RTC=1; } void HANDLE_HW_FAULTS() @@ -445,19 +437,19 @@ void HANDLE_HW_FAULT_SD() { if(SD_STATUS != DEVICE_DISABLED) { - if(SD_STATUS == DEVICE_OC_FAULT) { + if(SD_STATUS == DEVICE_OC_FAULT){ gPC.printf("Switching on SD card"); SD_SW_EN_DS = 1; //powering on SD wait_ms(10); } - + if(SD_OC_FAULT == 0) { gPC.printf("Switching off SD card"); SD_SW_EN_DS = 0; //switching off SD card SD_FAULTCOUNT++; SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT; - if(SD_FAULTCOUNT == 3) { - FCTN_CDMS_WR_FLASH(2,DEVICE_DISABLED); + if(SD_FAULTCOUNT == 3){ + FCTN_CDMS_WR_FLASH(2,DEVICE_DISABLED); gPC.printf("Declaring SD card permanantly Disabled"); } } else { @@ -472,25 +464,25 @@ void HANDLE_HW_FAULT_BAE() { if(BAE_STATUS != DEVICE_DISABLED) { - if(BAE_STATUS == DEVICE_OC_FAULT) { + if(BAE_STATUS == DEVICE_OC_FAULT){ gPC.printf("Switching on BAE"); BAE_SW_EN_DS = 1; //Power ON BAE wait_ms(10); } - + if(BAE_OC_FAULT == 0) { gPC.printf("Switching off BAE"); BAE_SW_EN_DS = 0; //Switch OFF BAE BAE_FAULTCOUNT++; BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; - if(BAE_FAULTCOUNT == 3) { + if(BAE_FAULTCOUNT == 3){ FCTN_CDMS_WR_FLASH(1,DEVICE_DISABLED); gPC.printf("Declaring BAE permanantly Disabled"); } } else { BAE_STATUS = DEVICE_POWERED; if(SD_STATUS != DEVICE_POWERED); - FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED); + FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED); BAE_FAULTCOUNT = 0; } } @@ -499,7 +491,7 @@ void HANDLE_HW_FAULT_PL() { if(PL_STATUS != DEVICE_DISABLED) { - if(PL_STATUS == DEVICE_OC_FAULT) { + if(PL_STATUS == DEVICE_OC_FAULT){ gPC.printf("Switching on PL_BEE"); PYLD_DFF_CLK = 0; PYLD_DFF = 1; // Switching ON PL @@ -507,11 +499,11 @@ PYLD_DFF_CLK = 1; wait_us(1); PYLD_DFF_CLK = 0; - wait_us(1); + wait_us(1); } if(PL_BEE_SW_OC_FAULT == 0) { // if OC Fault gPC.printf("Switching off PL_BEE"); - PYLD_DFF_CLK = 0; + PYLD_DFF_CLK = 0; PYLD_DFF = 0; //Switching OFF PL wait_us(1); PYLD_DFF_CLK = 1; @@ -520,14 +512,14 @@ wait_us(1); PL_FAULTCOUNT++; PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; - if(PL_FAULTCOUNT == 3) { + if(PL_FAULTCOUNT == 3){ FCTN_CDMS_WR_FLASH(3,DEVICE_DISABLED); gPC.printf("Declaring PL_BEE permanantly Disabled"); } } else { - if(PL_STATUS == DEVICE_OC_FAULT) { + if(PL_STATUS == DEVICE_OC_FAULT){ gPC.printf("Switching off PL_BEE"); - PYLD_DFF_CLK = 0; + PYLD_DFF_CLK = 0; PYLD_DFF = 0; //Switching OFF PL wait_us(1); PYLD_DFF_CLK = 1; @@ -546,21 +538,11 @@ void COLLECT_CDMS_RAM() { CDMS_RAM[0] = ((PL_INIT_STATUS<<7)&0x80)|((PL_MAIN_status<<6)&0x40)|((PL_LOW_power<<5)&0x20)|((PL_STATE<<3)&0x18)|(PL_STATUS&0x07); - - CDMS_RAM[1] = ( (PL_RCV_SC_DATA_STATUS<<7) & 0x80 )| - ( ((gFLAGS & COM_SESSION_FLAG)<<3) & 0x40 )| - ( ((gFLAGS & COM_RX_FLAG)<<1) & 0x20 )| - ( ((gFLAGS & RF_SW_STATUS_FLAG)>>8)&0x10 )| - ( ((gFLAGS & COM_TX_FLAG)>>5)&0x08 )| - ( (COM_TX_STATUS<<2)&0x04 )| - ( ((gFLAGS & COM_MNG_TMTC_RUNNING_FLAG)>>3) & 0x02 )| - (EN_CDMS_HK&0x01); - CDMS_RAM[2] = ((EN_PL<<7)&0x80)|((EN_RCV_SC<<6)&0x40)| - ((CDMS_INIT_STATUS<<5)&0x20)| - ((CDMS_HK_MAIN_STATUS<<4)&0x10)| - ((CDMS_HK_STATUS<<2)&0x0C)| - ((COM_RX_STATUS<<1)&0x02)| - (CDMS_RTC_BL&0x01); + //gPC.printf("\n\rPL_STATUS : %d",PL_STATUS); + //gPC.printf("\n\rPL_STATE : %d",PL_STATE); + //gPC.printf("\n\rpl bits = %02x\n",CDMS_RAM[0]); + CDMS_RAM[1] = ((PL_RCV_SC_DATA_STATUS<<7)&0x80)|((COM_SESSION<<6)&0x40)|((COM_RX<<5)&0x20)|((RF_SW_STATUS<<4)&0x10)|((COM_TX<<3)&0x08)|((COM_TX_STATUS<<2)&0x04)|((COM_MNG_TMTC<<1)&0x02)|(EN_CDMS_HK&0x01); + CDMS_RAM[2] = ((EN_PL<<7)&0x80)|((EN_RCV_SC<<6)&0x40)|((CDMS_INIT_STATUS<<5)&0x20)|((CDMS_HK_MAIN_STATUS<<4)&0x10)|((CDMS_HK_STATUS<<2)&0x0C)|((COM_RX_STATUS<<1)&0x02)|(CDMS_RTC_BL&0x01); CDMS_RAM[3] = CDMS_I2C_ERR_SPEED_COUNTER >> 8; CDMS_RAM[4] = CDMS_I2C_ERR_SPEED_COUNTER; CDMS_RAM[5] = CDMS_I2C_ERR_BAE_COUNTER >> 8; @@ -579,7 +561,7 @@ CDMS_RAM[18] = SD_LIB_WRITES; TIME_LATEST_RTC= FCTN_CDMS_RD_RTC() >> 7; // added by samp for(int i = 0; i<4; i++) - CDMS_RAM[19+i] = TIME_LATEST_RTC >> (3-i)*8; + CDMS_RAM[19+i] = TIME_LATEST_RTC >> (3-i)*8; for(int i = 0; i<4; i++) CDMS_RAM[23+i] = TIME_LATEST_I2C_BAE >> (3-i)*8; for(int i = 0; i<4; i++)
--- a/COM_RCV_TC.h Sat Jan 07 00:40:47 2017 +0000 +++ b/COM_RCV_TC.h Sat Jan 07 01:35:54 2017 +0000 @@ -121,13 +121,9 @@ COM_RX_DATA_NODE *data_node = gRX_HEAD_DATA_NODE; // read byte by byte - - //gPC.puts("received data : \n"); - while( data_node != NULL ){ for(int iBuf = 0 ; iBuf < RX_BUFFER_LENGTH ; ++iBuf ){ uint8_t test_this = data_node->values[iBuf]; - //gPC.printf("0x%02X ",test_this); ++bytes_read; // read bit by bit
--- a/Compression.h Sat Jan 07 00:40:47 2017 +0000 +++ b/Compression.h Sat Jan 07 01:35:54 2017 +0000 @@ -1,14 +1,10 @@ -/*-----------------------------------------to_do_compression.h--------------------------------------------------------------- +/*-----------------------------------------to_do_compression.h-------------------------------------------------- - -> SD_Write error to be checked(refer to flowchart) - -> compression algo not yet changed - -> inform Nandu that in extreme data conservation mode alone, even if pzf,ezf=1 the bins are present but have junk values - -> attitude tag not updated anywhere - -> packet_pp to be verified ------------------------------------------------------------------------------------------------------------------------------*/ + -> SD_Write error to be checked + -> fsc_counter is 32 bit but in the code 24 bit. Talk to chaitu +---------------------------------------------------------------------------------------------------------------*/ -//last updated on 18 Dec 2016 - +//updated compression algorithm /*#include <iostream> #include "stdio.h" #include "crc.h" @@ -23,10 +19,8 @@ #define scpz_last 0 #define srpz_last 0 #define debug_fsc 0 -#define debug_time 0 //used for testing without rtc, assigns constant time to all frames -#define debug_dma 0 //byte reading order in dma, used to read test_cases 4 to 16 since they're in the wrong order -#define test_science 0 -#define tabulation 0 +#define debug_time 0 +#define debug_dma 1 #if debug_dma uint16_t read_2byte(uint8_t* ptr) @@ -35,6 +29,7 @@ output += (((uint16_t)(*ptr))); return output; } + uint32_t read_4byte(uint8_t* ptr) { uint32_t output = (uint32_t)(*(ptr+3))<<24; @@ -51,6 +46,7 @@ output += ( (uint8_t )(*ptr) ) << 8; return output; } + uint32_t read_4byte(uint8_t* ptr) { uint32_t output = (uint32_t) (*(ptr+3)); @@ -87,27 +83,12 @@ return ( ((data>>i*2)<<y) + i); } } - if ( data > (( (1<<x)-1) * (1<<(2*((1<<y)-1)))) ) //if value of data is more than that can be stored by compressed bits then return maximum value + if ( data > (( (1<<x)-1) * (1<<(2*((1<<y)-1)))) ) { //cout <<"compression exception"<<endl; - return (1<<(x+y))-1; //maximum value is nothing but a number with(x+y) bits with all 1's + return (((1<<x)-1) * (1<<(2*((1<<y)-1)))); } } -int compress2 (int data, int x, int y) //to be compressed with scheme (msb x)*8^y; -{ - for(int i = 0 ; i < (1<<y) ; i++) - { - if(data <= ( (1<<x)-1) * (1<<(3*i)) ) - { - return ( ((data>>i*3)<<y) + i); - } - } - if ( data > (( (1<<x)-1) * (1<<(3*((1<<y)-1)))) ) //if value of data is more than that can be stored by compressed bits then return maximum value - { - //cout <<"compression exception"<<endl; - return (1<<(x+y))-1; //maximum value is nothing but a number with(x+y) bits with all 1's - } -} //--------------------------------------------------------beacon uint8_t beacon_array[134]; @@ -137,7 +118,7 @@ uint32_t beacon_threshold[9] = {114688,245760,245760,245760,245760,114688,114688,65472,65472}; /*----------------------------temporary counters used for testing purposes---------------------------*/ -uint32_t test_fsc[4]={0,0,0,0}; +uint32_t test_fsc[4]={1,1,1,1}; /*---------------------------------------------------------------------------------------------------*/ @@ -146,1315 +127,50 @@ ConvObj.convolutionEncode(ptr, TM_convoluted_data); ConvObj.convolutionEncode(ptr + 67, TM_convoluted_data + 135); } -#if test_science -char srp_calibrated[][34] = { //names of different bins in calibrated mode, refer to excel sheet having testcases - "NA", //packet sequnce count (not important here) - "NA", //science data mode + compression mode (not important here) - "proton energy", - "electron energy", - "Ion dEdX response", - "Ion bulk response", - "proton angles [0,40]", - "proton angles [40,50]", - "proton angles [50,60]", - "proton angles [60,70]", - "proton angles [70,80]", - "electron angles [0,60]", - "high energy protons and electrons", - "proton energy overlap events", - "dEdX & bulk & Veto counts", - "dEdX fast counts", - "bulk fast counts", - "veto fast counts" -}; -char srp_scattered[][33] = { //names of different bins in scattered mode, refer to excel sheet having testcases - "NA", - "NA", - "dEdX & bulk & not veto 2d dEdX..", - "dEdX & bulk & veto counts", - "dEdX fast counts", - "bulk fast counts", - "veto fast counts" -}; -#endif -uint32_t data_srp_calibrated[] = { // this data will be copied 60 times(except for the first two elements which are included only at the start of dma) and to fill the dma - 1, //packet sequence count - 0, //last bit for calibrated mode and next two bits for compression mode - 20, //proton energy(18 bins) - 60, //Electron energy(6 bins) - 700, //Ion dEdX response - 600, //Ion bulk response - 100, //proton angles [0,40] - 200, //proton angles [40,50] - 500, //proton angles [50,60] - 600, //proton angles [60,70] - 720, //proton angles [70,80] - 246, //electron angles [0,60] - 10, //high energy protons and electrons - 250, //proton energy overlap events - 120, //dEdX & bulk & Veto counts - 8129, //dEdX fast counts - 3000, //bulk fast counts - 4000 //veto fast counts -}; -/*uint8_t calib_sfp_at_com[] = {0,0,0,0,700,600,100,200,500,600,720,246,10,250,120,3500,3000,4000}; -uint8_t data_sfp_calib_at[][2] = { - {20,300} //64 bytes - {300,0}, //58 bytes - {0,300}, //43 bytes - {0,0} //36 bytes -}; //36 bytes -uint16_t packet_insert_dma(uint8_t *head,uint8_t size,uint16_t j) -{ - if(size==64){ - for(count=0;count<18;count++,j+=2){ - head[j] = (calib_sfp_at_com[0][0]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[0][0]) & 0xff; - } - for(count=0;count<6;count++,j+=2){ - head[j] = (calib_sfp_at_com[0][1]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[0][1]) & 0xff; - } - } - else if(size==58){ - for(count=0;count<18;count++,j+=2){ - head[j] = (calib_sfp_at_com[1][0]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[1][0]) & 0xff; - } - for(count=0;count<6;count++,j+=2){ - head[j] = (calib_sfp_at_com[1][1]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[1][1]) & 0xff; - } - } - else if(size==43){ - for(count=0;count<18;count++,j+=2){ - head[j] = (calib_sfp_at_com[2][0]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[2][0]) & 0xff; - } - for(count=0;count<6;count++,j+=2){ - head[j] = (calib_sfp_at_com[2][1]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[2][1]) & 0xff; - } - } - else if(size==36){ - for(count=0;count<18;count++,j+=2){ - head[j] = (calib_sfp_at_com[3][0]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[3][0]) & 0xff; - } - for(count=0;count<6;count++,j+=2){ - head[j] = (calib_sfp_at_com[3][1]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[3][1]) & 0xff; - } - } - else{ - gPC.printf("\n\rError: Invalid length in inserting packet DMA"); - return 3; - } - for(count=0;count<4;count++,j+=2){ - head[j] = (calib_sfp_at_com[4]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[4]) & 0xff; - } - for(count=0;count<4;count++,j+=2){ - head[j] = (calib_sfp_at_com[5]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[5]) & 0xff; - } - for(uint8_t count2 = 0;count2<6;count2++) - for(uint8_t count=0;count<2;count++,j+=2){ - head[j] = (calib_sfp_at_com[6+count2]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[6+count2]) & 0xff; - } - head[j++] = (calib_sfp_at_com[12]>>8) & 0xff; - head[j++] = (calib_sfp_at_com[12]) & 0xff; - for(count=0;count<3;count++,j+=2){ - head[j] = (calib_sfp_at_com[13]>>8) & 0xff; - head[j+1] = (calib_sfp_at_com[13]) & 0xff; - } - for(uint8_t count2 =0;count2<4;count2++) - for(uint8_t count=0;count<1;count++,j+=4){ - head[j] = (calib_sfp_at_com[14+count2]>>24) & 0xff; - head[j+1] = (calib_sfp_at_com[14+count2]>>16) & 0xff; - head[j+2] = (calib_sfp_at_com[14+count2]>>8) & 0xff; - head[j+3] = (calib_sfp_at_com[14+count2]) & 0xff; - } - return j; -} -void generate_dma_tmid2(uint8_t *head) -{ - uint8_t dma_index = 3; - head[0] = 0; - head[1] = 1; - head[2] = 0; - for(uint8_t count=1;count<=2;count++){ - dma_index = packet_insert_dma(head,64,dma_index); - dma_index = packet_insert_dma(head,58,dma_index); - dma_index = packet_insert_dma(head,43,dma_index); - dma_index = packet_insert_dma(head,36,dma_index); - } -} -*/ -//uint8_t data_sfp_scat_at10[] ={}; -//uint8_t data_sfp_scat_at -/*uint32_t data_srp_calibrated2[] = { // this data will be copied 60 times(except for the first two elements which are included only at the start of dma) and to fill the dma - 1, //packet sequence count - 0, //last bit for calibrated mode and next two bits for compression mode - 1, //proton energy(18 bins) - 60, //Electron energy(6 bins) - 700, //Ion dEdX response - 600, //Ion bulk response - 100, //proton angles [0,40] - 200, //proton angles [40,50] - 500, //proton angles [50,60] - 600, //proton angles [60,70] - 720, //proton angles [70,80] - 246, //electron angles [0,60] - 10, //high energy protons and electrons - 250, //proton energy overlap events - 120, //dEdX & bulk & Veto counts - 3500, //dEdX fast counts - 3000, //bulk fast counts - 4000 //veto fast counts -};*/ -uint32_t data_srp_scattered[] = {// this data will be copied 60 times(except for the first two elements which are included only at the start of dma) and to fill the dma - 1, //packet sequence count - 5, //last bit for scattered plot mode and next two bits for compression mode - 1980, //dEdX & bulk & not veto 2d dEdX bulk response - 10, //dEdX & bulk & veto counts - 8100, //dEdX fast counts - 1500, //bulk fast counts - 10295 //veto fast counts -}; -#if test_science -uint8_t dma_sfp_at_count=0,dma_scp_at_count=0,calib_thres_index[16][60],scat_thres_index[5][60],calib_thres_index_scp[16],scat_thres_index_scp[5]; -uint8_t calib_thres_subindex[16],scat_thres_subindex[5],thres_scp_index[16],proton_scp_sum_at,electron_scp_sum_at,sfp_mode_count[2],scp_mode_count[5]; -#endif -#if tabulation -uint8_t pack_curr_det,pack_prev_det,pack_split_det= 0,pack_buf[3][70] = {0}; -uint8_t fsc_incomplete[3]={0},len_prev[3]={0},len_correct[3]={0},len_current; -//uint8_t test_tm[3][134] = {0}; -uint64_t decompress(uint16_t data, uint8_t x,uint8_t y){ //x * 4^y - uint64_t value = 0; - value = ((data>>y)&((1<<x)-1))*(1<<(2*(data &((1<<y)-1)))); - return value; -} -uint64_t decompress2(uint16_t data, uint8_t x,uint8_t y){ //x * 8^y for proton and electron angles bins in SCP_AT(calibrated) - uint64_t value = 0; - value = ((data>>y)&((1<<x)-1))*(1<<(3*(data &((1<<y)-1)))); - return value; -} -uint8_t calc_length(uint8_t tmid,uint8_t srp_mode,uint8_t comp_opt,uint8_t zf){ - uint16_t length; - if(tmid==1){ - if(srp_mode == 0 && (comp_opt>>1 & 0x03) == 0){ - if((comp_opt&0x01) == 0){ - length = 228; - if(((zf>>1)&0x01) == 0) - length += 121; - if((zf&0x01) == 0) - length +=41; - }else if((comp_opt&0x01) == 1){ - length = 266; - if(((zf>>1)&0x01) == 0) - length += 136; - if((zf&0x01) == 0) - length += 40; - } - }else if(srp_mode == 0 && (comp_opt>>1 & 0x03) == 1){ //data conservation mode - if((comp_opt&0x01) == 0){ - length = 94; - if(((zf>>1)&0x01) == 0) - length += 12; - if((zf&0x01) == 0) - length += 12; - }else if((comp_opt&0x01) == 1){ - length = 123; - if(((zf>>1)&0x01) == 0) - length += 9; - if((zf&0x01) == 0) - length += 9; - } - } - else if( srp_mode == 1){ - if((comp_opt&0x01) == 0) - length = 368; - else if((comp_opt&0x01) == 1) - length = 432; - } - else if(((comp_opt>>1 & 0x03)==2)&&(srp_mode==0)) - { - if((comp_opt&0x01) == 0){ - length = 31; - if(((zf>>1)&0x01) == 0) - length += 12; - if((zf&0x01) == 0) - length += 12; - }else if((comp_opt&0x01) == 1){ - length = 36; - if(((zf>>1)&0x01) == 0) - length += 9; - if((zf&0x01) == 0) - length += 9; - } - } - else if(((comp_opt>>1 & 0x03)==2)&&(srp_mode==1)) - { - length = 56; - } - } - else if(tmid==2){ - if(srp_mode==0){ - length = 288; - if(((zf>>1)&0x01) == 0) - length += 170; - if((zf&0x01) == 0) - length += 50; - } - else if(srp_mode==1) - length = 568; - } - else if(tmid==3){ - if(srp_mode==0){ - length = 241; - if(((zf>>1)&0x01) == 0) - length += 87; - if((zf&0x01) == 0) - length += 35; - } - else if(srp_mode==1) - length = 384; - } - length = (length%8==0)?(length/8):(length/8)+1; - return (uint8_t)length; -} -uint64_t decode(uint8_t size,uint8_t *space,uint8_t **ptr){ - /* This function accepts a double pointer, pointing to the header pointer of an array, - example if TM[135] is a telemetry array, then create a new "temporary" pointer as ptr=&TM and pass &ptr to the function - Given this pointer and size, this function reads the number of bits(=size) and returns the decimal value and updates (*space). - "space" is nothing but how many bits have been not been read in the current byte. - example: when reading an array for the first time,(*space) will be 8 coz none of the bits have been decoded, once we decode a few bits(say 5), then (*space) will be 3 - This function can be used to decode bins(which have varying number of bits) from telemetry - */ - uint64_t data = 0; - while(size!=0){ - if((*space)>=size){ - data |= (((**ptr)>>((*space)-size)) & ((1<<size)-1)); - (*space) = (*space)-size; - size = 0; - } - else{ - data |= (((**ptr) & ((1<<(*space))-1))<<(size-(*space))); - size -= (*space); - (*space) = 8; - (*ptr)++; - } - } - return data; -} -uint8_t print_packet(uint8_t tmid,uint8_t *ptr) -{ - //prints each bin values of a packet in a row separated by tab spaces and returns the length of the packet printed - uint8_t *temp,space; - uint8_t len = 0; - temp = ptr; space = 8; - uint8_t temp_x,srp_mode; //temp_x = header(compression option) - uint8_t pzf=0,ezf=0; - if(tmid==1) //SCP packet - { - gPC.printf("\n\r%d",decode(1,&space,&temp)); - gPC.printf("\t%d",decode(6,&space,&temp)); - gPC.printf("\t%d",decode(7,&space,&temp)); - gPC.printf("\t%d",decode(4,&space,&temp)); - temp_x = decode(3,&space,&temp); - gPC.printf("\t%d",temp_x); - srp_mode = decode(1,&space,&temp); - gPC.printf("\t%d",srp_mode); - if((temp_x>>1 & 0x03)!=2){ - gPC.printf("\t%d",decode(24,&space,&temp)); //SFP_AT starting counter not present in extreme conservation mode - } - if(srp_mode==0){ //scp calibrated - pzf = decode(1,&space,&temp); - ezf = decode(1,&space,&temp); - gPC.printf("\t%d",pzf); - gPC.printf("\t%d",ezf); - len = calc_length(tmid,srp_mode,temp_x,((uint8_t)((pzf<<1)|ezf))); - if(temp_x==0){ - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");} - } - for(uint8_t i=0;i<12;i++){ - if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(5,&space,&temp),2,3)); if(i%2==0){gPC.printf(",");} - } - } - if(temp_x==1){ - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");} - } - for(uint8_t i=0;i<12;i++){ - if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress2(decode(5,&space,&temp),2,3)); if(i%2==0){gPC.printf(",");} - } - } - if(temp_x==0){ //SCP calibrated below threshold - gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3)); - for(uint8_t i=0;i<3;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),3,3)); if(i!=2){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3)); - } - for(uint8_t i=0;i<2;i++) - gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3)); - if(pzf==0){ - for(uint8_t i=0;i<2;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),6,2)); if(i==0){gPC.printf(",");} - } - for(uint8_t i=0;i<15;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),5,2)); if(i!=14){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - if(ezf==0){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),7,2)); - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),7,2)); if(i!=3){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - } - else if(temp_x==1){ //SCP calibrated above threshold - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - for(uint8_t i=0;i<3;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(9,&space,&temp),6,3)); if(i!=2){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3)); - } - for(uint8_t i=0;i<2;i++){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - } - if(pzf==0){ - for(uint8_t i=0;i<2;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),5,3)); if(i==0){gPC.printf(",");} - } - for(uint8_t i=0;i<15;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),5,3)); if(i!=14){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - if(ezf==0){ - gPC.printf("\t%d",decompress(decode(8,&space,&temp),5,3)); - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),5,3)); if(i!=3){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - } - else if(temp_x ==2){ - gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3)); - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3)); - } - gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3)); - gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3)); - gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2)); - gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2)); - } - else if(temp_x==3){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3)); - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - } - } - else if(temp_x==4){ - gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3)); - gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2)); - gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2)); - } - else if(temp_x==5){ - gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3)); - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - } - } - else if(srp_mode==1){ //scattered mode - len = calc_length(tmid,srp_mode,temp_x,0); - if(temp_x==0){ - for(uint8_t i=0;i<48;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),3,3)); if(i!=47){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3)); - } - } - else if(temp_x==1){ - gPC.printf("\t%d",2*decompress(decode(7,&space,&temp),4,3)); - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3)); - } - } - else if(temp_x==4){ - gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3)); - gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2)); - gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2)); - } - else if(temp_x==5){ - gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3)); - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - } - } - } - else{ - if(tmid==2){ - gPC.printf("\n\r%d",decode(2,&space,&temp)); //splitting first 35 bits of time into year,month....... - gPC.printf("\t%d",decode(4,&space,&temp)); - gPC.printf("\t%d",decode(5,&space,&temp)); - gPC.printf("\t%d",decode(5,&space,&temp)); - gPC.printf("\t%d",decode(6,&space,&temp)); - gPC.printf("\t%d",decode(6,&space,&temp)); - gPC.printf("\t%d",decode(7,&space,&temp)); //time ends here - } - if(tmid==3) - gPC.printf("\n\r"); - gPC.printf("\t%d",decode(4,&space,&temp)); - gPC.printf("\t%d",decode(6,&space,&temp)); - srp_mode = decode(1,&space,&temp); - gPC.printf("\t%d",srp_mode); - if(srp_mode==0){ - //gPC.printf("\n\rspace before pzf = %d",space); - pzf = decode(1,&space,&temp); - //gPC.printf("\n\rspace after pzf = %d",space); - ezf = decode(1,&space,&temp); - //gPC.printf("\n\rspace after pzf = %d",space); - gPC.printf("\t%d",pzf); - gPC.printf("\t%d",ezf); - len = calc_length(tmid,srp_mode,0,((uint8_t)((pzf<<1)|ezf))); - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(9,&space,&temp),7,2)); if(i!=3){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(9,&space,&temp),7,2)); if(i!=3){gPC.printf(",");} - } - if(tmid==2){ - for(uint8_t i=0;i<12;i++){ - if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),3,3)); if(i%2==0){gPC.printf(",");} - } - gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2)); - for(uint8_t i=0;i<3;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=2){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - } - gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2)); - gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2)); - if(pzf==0){ - for(uint8_t i=0;i<2;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i==0){gPC.printf(",");} - } - for(uint8_t i=0;i<15;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=14){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - if(ezf==0){ - gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2)); - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=3){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - } - else if(tmid==3){ - for(uint8_t i=0;i<12;i++){ - if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),4,2)); if(i%2==0){gPC.printf(",");} - } - gPC.printf("\t%d",decompress(decode(8,&space,&temp),6,2)); - for(uint8_t i=0;i<3;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),6,2)); if(i!=2){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),7,2)); - } - gPC.printf("\t%d",decompress(decode(8,&space,&temp),6,2)); - gPC.printf("\t%d",decompress(decode(8,&space,&temp),6,2)); - if(pzf==0){ - for(uint8_t i=0;i<2;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),5,1)); if(i==0){gPC.printf(",");} - } - for(uint8_t i=0;i<15;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(5,&space,&temp),4,1)); if(i!=14){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - if(ezf==0){ - gPC.printf("\t%d",decompress(decode(7,&space,&temp),6,1)); - for(uint8_t i=0;i<4;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),6,1)); if(i!=3){gPC.printf(",");} - } - } - else{ - gPC.printf("\tNA"); - gPC.printf("\tNA"); - } - } - } - else if(srp_mode==1){ - len = calc_length(tmid,srp_mode,0,((uint8_t)((pzf<<1)|ezf))); - if(tmid==2){ - for(uint8_t i=0;i<48;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=47){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3)); - } - } - else if(tmid==3){ - for(uint8_t i=0;i<48;i++){ - if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),5,2)); if(i!=47){gPC.printf(",");} - } - for(uint8_t i=0;i<4;i++){ - gPC.printf("\t%d",decompress(decode(9,&space,&temp),7,2)); - } - } - } - } - return len; -} -#endif -void print_headings(uint8_t *pack_curr_det){ - switch(((*pack_curr_det) & 0x3F)){ - case 0x10: gPC.printf("\n\n\r----------------------------SCP_BT calibrated mode-----------------------------"); - break; - case 0x12: gPC.printf("\n\n\r----------------------------SCP_AT calibrated mode-----------------------------"); - break; - case 0x14: gPC.printf("\n\n\r-----------------SCP_BT calibrated with data conservation mode-----------------"); - break; - case 0x16: gPC.printf("\n\n\r-----------------SCP_AT calibrated with data conservation mode-----------------"); - break; - case 0x18: gPC.printf("\n\n\r----------------SCP_BT calibrated with extreme conservation mode---------------"); - break; - case 0x1A: gPC.printf("\n\n\r----------------SCP_AT calibrated with extreme conservation mode---------------"); - break; - case 0x11: gPC.printf("\n\n\r---------------------------SCP_BT scattered plot mode--------------------------"); - break; - case 0x13: gPC.printf("\n\n\r---------------------------SCP_AT scattered plot mode--------------------------"); - break; - case 0x19: gPC.printf("\n\n\r--------------SCP_BT scattered plot with extreme conservation mode-------------"); - break; - case 0x1B: gPC.printf("\n\n\r--------------SCP_AT scattered plot with extreme conservation mode-------------"); - break; - case 0x20: gPC.printf("\n\n\r---------------------------SFP_BT calibrated mode--------------------------"); - break; - case 0x22: gPC.printf("\n\n\r---------------------------SFP_AT calibrated mode--------------------------"); - break; - case 0x30: gPC.printf("\n\n\r---------------------------SFP_BT calibrated mode--------------------------"); - break; - case 0x32: gPC.printf("\n\n\r---------------------------SFP_AT calibrated mode--------------------------"); - break; - case 0x21: gPC.printf("\n\n\r---------------------------SFP_BT scattered plot mode--------------------------"); - break; - case 0x23: gPC.printf("\n\n\r---------------------------SFP_AT scattered plot mode--------------------------"); - break; - case 0x31: gPC.printf("\n\n\r---------------------------SFP_BT scattered plot mode--------------------------"); - break; - case 0x33: gPC.printf("\n\n\r---------------------------SFP_AT scattered plot mode--------------------------"); - break; - default: gPC.printf("\n\n\rxxxxxxxxxxxxxxxxxxxx INVALID packet type xxxxxxxxxxxxxxxxxxxxxx"); - break; - } -} -#if tabulation -void clear_buffer(uint8_t index){ //index = tmid-1; - for(uint8_t i=0;i<70;i++) - pack_buf[index][i] = 0; - fsc_incomplete[index] = 0; - len_prev[index] = 0; - len_correct[index] = 0; - pack_split_det &= (~(0x01<<(index))); //making the corresponding tmid bit 0 to indicate buffer is empty -} -void tabulate_TM(uint8_t *ptr){ - /* This function prints the TM packets info in the form of a table so that the data can be used to verify decoding - at the Ground Station(GS)."ptr" is the pointer to the TM frame extracted from SD card before transmitting to GS - */ - pack_curr_det = 0; - uint32_t fsc_TM; //to store the FSC of the current TM - uint8_t tmid = (ptr[0]>>3)&0x0f,temp_index; - pack_curr_det |= (ptr[0]<<1)& 0x30; //3rd and 4th bits(MSB) = tmid - if(tmid==1||tmid==2){ //the TMID corresponds to SCP or SFP_AT(both have FSC at the same location in the frame) - fsc_TM &= 0x00000000; - fsc_TM |= (((uint32_t)(ptr[1]<<16))&0x00ff0000); - fsc_TM |= (((uint32_t)(ptr[2]<<8)) &0x0000ff00); - fsc_TM |= (((uint32_t)(ptr[3])) &0x000000ff); - gPC.printf("\n\n\rFrame sequence count(tmid=%d): %d---------------------------------------------------------",tmid,fsc_TM); - if(tmid==1){ - gPC.printf("\n\rYear:%d\tMon:%d\tDate:%d",((ptr[5]>>4)&0x03),(ptr[5]&0x0f),((ptr[6]>>3)&0x1f)); - gPC.printf("\tHour:%d\tMin:%d\n\r",((ptr[6]&0x07)<<2)|((ptr[7]&0xC0)>>6),ptr[7]&0x3f); - } - if(ptr[4]!=(11-(3*tmid))){ //there is an incomplete packet present at the start of the current frame - if(!((pack_split_det>>(tmid-1))&0x01)){ - gPC.printf("\n\rError: TMID = %d frame contains split packet but buffer empty----------------------\n",tmid); - pack_split_det |= 0x08; //4 th bit (from LSB) if equal to 1 indicates error in packet splitting - } - if((fsc_TM-1)!=(fsc_incomplete[tmid-1])){ //fsc_incomplete[] - gPC.printf("\n\rError: FSC for TMID = %d is not continous---------------------------\n",tmid); - clear_buffer(tmid-1); - pack_split_det |= 0x08; //4 th bit (from LSB) indicates error in packet splitting - } - if(((pack_split_det>>3)&0x01)==0){ //no error upto now in split packet - len_current = ptr[4] - (11-(3*tmid)); //len_current - if((len_prev[tmid-1]+len_current)!=len_correct[tmid-1]){ //len_correct[] and len_prev[] - gPC.printf("\n\rError: Length of the split packet for TMID = %d not correct,len_correct=%d,len_prev=%d,len_current=%d",tmid,len_correct[tmid-1],len_prev[tmid-1],len_current); - clear_buffer(tmid-1); - pack_split_det &= (~0x08); //clear the packet splitting error bit - } - else{ - temp_index = 11-(3*tmid); - for(uint8_t i=0;i<len_current;i++) - pack_buf[tmid-1][len_prev[tmid-1]+i] = ptr[temp_index+i]; //storing the remaining part of the packet in appropriate buffer - if(tmid==1){ - pack_curr_det |= (pack_buf[0][2]>>2)&0x0f;//5th and 6th bits (start from MSB) bits = compression option, 7th bit = threshold bit and last bit = science data mode - } - else if(tmid==2){ - pack_curr_det |= (pack_buf[1][5]>>2)&0x01;//5th and 6th (start from MSB) bits = compression option, 7th bit = threshold bit and last bit = science data mode - pack_curr_det |= 0x02; //to indicate sfp is above threshold - } - //gPC.printf("\n\rpack_curr_det=0x%02X and pack_prev_det=0x%02X",pack_curr_det,pack_prev_det); - if(pack_curr_det!=pack_prev_det){ - print_headings(&pack_curr_det); - pack_prev_det = pack_curr_det; - pack_curr_det &= (~0x0f); //clearing last four bits to store next packet's info(but tmid remains same) - } - if(len_correct[tmid-1]!=print_packet(tmid,&(pack_buf[tmid-1][0]))){ - gPC.printf("\n\rError: print_packet() length not equal to len_correct (tmid=%d)-------------------------\n",tmid); - } - clear_buffer(tmid-1); - } - } - } - temp_index = ptr[4]; //index of the first complete packet in the frame - //gPC.printf("\n\rfirst header pointer = %d and temp_index = %d",ptr[4],temp_index); - while(temp_index!=0 && temp_index <132){ //temp_index = 0 implies no more complete packets left to display - if(tmid==1){ - pack_curr_det |= (ptr[temp_index+2]>>2)&0x0f;//5th and 6th (start from MSB) 2 bits = compression option, next bit = threshold bit and last bit = science data mode - } - else if(tmid==2){ - pack_curr_det |= (ptr[temp_index+5]>>2)&0x01;//5th and 6th (start from MSB) bits = compression option, next bit = threshold bit and last bit = science data mode - pack_curr_det |= 0x02; //to indicate sfp is above threshold - //gPC.printf("\n\rScience data mode:%d",pack_curr_det&0x1); - } - //gPC.printf("\n\rpack_curr_det=0x%02X and pack_prev_det=0x%02X",pack_curr_det,pack_prev_det); - if(pack_curr_det!=pack_prev_det){ - print_headings(&pack_curr_det); - pack_prev_det = pack_curr_det; - pack_curr_det &= (~0x0f); //clearing last four bits to store next packet's info(but tmid remains same) - } - temp_index = temp_index + print_packet(tmid,&ptr[temp_index]); - //gPC.printf("\n\rtemp_index = %d after one packet",temp_index); - //temp_index = 69; - if((132-temp_index)<(3*tmid)){ - temp_index = 0; //no more packets available, minimum number of bytes are not remaining(3 for SCP and 6 for SFP_AT) - } - else if((132-temp_index)<(41+(15*tmid))){ //space left in the frame is less than the maximum packet size for the corresponding tmid - if(tmid==1){ - pack_split_det |= ((ptr[temp_index+2]<<2)&0xf0); - //first(MSB) 3 bits = header(compression option),next bit=science data mode,next bit=errorbit,last 3 bits = to store if incomplete packet is present in the buffer - if((pack_split_det&0xd0)==0x80) //extreme data & calibrated mode - len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>4)&0x1,(pack_split_det>>5)&0x3,ptr[temp_index+2]&0x03); - else - len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>4)&0x1,(pack_split_det>>5)&0x3,ptr[temp_index+5]&0x03); - //scattered plot mode doesn't have pzf and ezf bits but even if we send junk values but they will not be used in the function - } - else if(tmid==2){ - pack_split_det |= ((ptr[temp_index+5]<<4)&0x70); - len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>6)&0x1,0,(pack_split_det>>4)&0x03); - //in this case(tmid = 2), 2nd bit(MSB) is srp_mode, next bit is pzf, next is ezf and next four bits are described before - } - pack_split_det &= (~0xf0); //first four bits(MSB) of pack_split_det not used anymore - if((132-temp_index)<len_correct[tmid-1]){ //incomplete packet present - len_prev[tmid-1] = 132 - temp_index; - fsc_incomplete[tmid-1] = fsc_TM; - for(uint8_t i=0;i<len_prev[tmid-1];i++) - pack_buf[tmid-1][i] = ptr[temp_index+i]; - pack_split_det |= (1<<(tmid-1));//1st bit(LSB) indicates scp incomplete packet,2nd bit indicates sfp_at incomplete - temp_index = 0; - } - } - } - } - else if(tmid==3){ //SFP_BT - fsc_TM &= 0x00000000; - fsc_TM |= (((uint32_t)(ptr[1]<<24))&0xff000000); - fsc_TM |= (((uint32_t)(ptr[2]<<16))&0x00ff0000); - fsc_TM |= (((uint32_t)(ptr[3]<<8)) &0x0000ff00); - fsc_TM |= (((uint32_t)(ptr[4])) &0x000000ff); - gPC.printf("\n\n\rFrame sequence count(tmid=%d): %d---------------------------------------------------------",tmid,fsc_TM); - gPC.printf("\n\rYear:%d\tMon:%d\tDate:%d",((ptr[6]>>1)&0x03),(((ptr[7]>>5)&0x07)|((ptr[6]&0x01)<<3)),(ptr[7]&0x1f)); - gPC.printf("\tHour:%d\tMin:%d\tSec:%d\tCenti:%d\n\r",(ptr[8]&0xf1)>>3,(((ptr[9]&0xE0)>>5)|((ptr[8]&0x07)<<3)),((ptr[10]&0x80)|((ptr[9]&0x1f)<<1)),ptr[10]&0x7f); - if(ptr[5]!=11){ //there is an incomplete packet present at the start of the current frame - if(!((pack_split_det>>(tmid-1))&0x01)){ - gPC.printf("\n\rError: TMID = %d frame contains split packet but buffer empty",tmid); - pack_split_det |= 0x08; //4 th bit (from LSB) indicates error in packet splitting - } - else if((fsc_TM-1)!=(fsc_incomplete[tmid-1])){ //fsc - gPC.printf("\n\rError: FSC for TMID = %d is not continous---------------------------\n",tmid); - clear_buffer(tmid-1); - pack_split_det |= 0x08; //4 th bit (from LSB) indicates error in packet splitting - } - if(((pack_split_det>>3)&0x01)==0){ //no error upto now in split packet - len_current = ptr[5] - 11; - if((len_prev[tmid-1]+len_current)!=len_correct[tmid-1]){ - gPC.printf("\n\rError: Length of the split packet for TMID = %d not correct,len_correct=%d,len_prev=%d,len_current=%d",tmid,len_correct[tmid-1],len_prev[tmid-1],len_current); - clear_buffer(tmid-1); - pack_split_det &= (~0x08); //clear the packet splitting error bit - } - else{ - temp_index = 11; - for(uint8_t i=0;i<len_current;i++) - pack_buf[tmid-1][len_prev[tmid-1]+i] = ptr[temp_index+i]; //storing the remaining part of the packet in appropriate buffer - pack_curr_det |= (pack_buf[2][1]>>5)&0x01;//5th and 6th (start from MSB) bits = compression option, 7th bit = threshold bit and last bit = science data mode - if(pack_curr_det!=pack_prev_det){ - print_headings(&pack_curr_det); - pack_prev_det = pack_curr_det; - pack_curr_det &= (~0x0f);//clearing last four bits to store next packet's info(but tmid remains same) - } - if(len_correct[tmid-1]!=print_packet(tmid,&(pack_buf[tmid-1][0]))){ - gPC.printf("\n\rError: print_packet() length not equal to len_correct (tmid=%d)-------------------------",tmid); - } - clear_buffer(tmid-1); - } - } - } - temp_index = ptr[5]; //index of the first complete packet in the frame - while(temp_index!=0){ //temp_index = 0 implies no more complete packets left to display - pack_curr_det |= (ptr[temp_index+1]>>5)&0x01; //calibrated or scattered mode - if(pack_curr_det!=pack_prev_det){ - print_headings(&pack_curr_det); - pack_prev_det = pack_curr_det; - pack_curr_det &= (~0x0f); //clearing last four bits to store next packet's info(but tmid remains same) - } - temp_index = temp_index + print_packet(tmid,&ptr[temp_index]); - if((132-temp_index)<2){ - temp_index = 0; //no more packets available, minimum number of bytes are not remaining(2 for SFP_BT) - } - else if((132-temp_index)<(46+(2*(pack_curr_det&0x01)))){ //space left in the frame is less than the maximum packet size(46 bytes for calib and 48 for scattered mode) - pack_split_det |= ((ptr[temp_index+1]<<1)&0x70); - len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>6)&0x1,0,(pack_split_det>>4)&0x03); - //gPC.printf("\n\rSFP_BT srp mode:%d",(pack_split_det>>6)&0x1); - //gPC.printf("\n\rSFP_BT: len_correct = %d",len_correct[tmid-1]); - //in this case(tmid = 3), 2nd bit(MSB) is srp_mode, next bit is pzf, next is ezf and next four bits are described before - pack_split_det &= (~0xf0); //first four bits(MSB) of pack_split_det not used anymore - if((132-temp_index)<len_correct[tmid-1]){ //incomplete packet present at the end of the frame - len_prev[tmid-1] = 132 - temp_index; - fsc_incomplete[tmid-1] = fsc_TM; - for(uint8_t i=0;i<len_prev[tmid-1];i++) - pack_buf[tmid-1][i] = ptr[temp_index+i]; - pack_split_det |= (1<<(tmid-1));//1st bit(LSB) indicates scp incomplete packet,2nd bit indicates sfp_at incomplete - //len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>6)&0x1,0,(pack_split_det>>4)&0x03); - temp_index = 0; - } - } - } - } -} -#endif -#if test_science -void generated_dma(uint8_t *head){ - uint8_t temp_buf[16] = {0}; - gPC.printf("\n\rDisplaying generated data"); - gPC.printf("\n\rhead[0,1] = %d",read_2byte(&head[0])); - for(uint8_t i=0,j=3;i<48;i++,j+=2) - gPC.printf("\n\rhead[%d] = %d",i,read_2byte(&head[j])); - for(uint8_t i=0,j=99;i<4;i++,j+=4) - gPC.printf("\n\rhead[%d] = %d",i+48,read_4byte(&head[j])); - for(uint16_t j=115;j<6723;j++) - if(head[j]!=head[j-112]){ - gPC.printf("\n\rDMA data repeat error at index = %d",j); - return; - } - gPC.printf("\n\rNo errors in generated repeated DMA data"); -} -void generate_dma_calibrated(uint8_t *head) -{ - head[0] = (data_srp_calibrated[0]>>8) & 0xff; - head[1] = (data_srp_calibrated[0]) & 0xff; - head[2] = (data_srp_calibrated[1]) & 0xff; - for(int j=3,count=0;count<18;count++,j+=2){ - head[j] = (data_srp_calibrated[2]>>8) & 0xff; - head[j+1] = (data_srp_calibrated[2]) & 0xff; - } - for(int j=39,count=0;count<6;count++,j+=2){ - head[j] = (data_srp_calibrated[3]>>8) & 0xff; - head[j+1] = (data_srp_calibrated[3]) & 0xff; - } - for(int j=51,count=0;count<4;count++,j+=2){ - head[j] = (data_srp_calibrated[4]>>8) & 0xff; - head[j+1] = (data_srp_calibrated[4]) & 0xff; - } - for(int j=59,count=0;count<4;count++,j+=2){ - head[j] = (data_srp_calibrated[5]>>8) & 0xff; - head[j+1] = (data_srp_calibrated[5]) & 0xff; - } - int j=67; - for(uint8_t count2 = 0;count2<6;count2++) - for(uint8_t count=0;count<2;count++,j+=2){ - head[j] = (data_srp_calibrated[6+count2]>>8) & 0xff; - head[j+1] = (data_srp_calibrated[6+count2]) & 0xff; - //gPC.printf("\n\rj = %d",j); - } - head[91] = (data_srp_calibrated[12]>>8) & 0xff; - head[92] = (data_srp_calibrated[12]) & 0xff; - for(j=93,count=0;count<3;count++,j+=2){ - head[j] = (data_srp_calibrated[13]>>8) & 0xff; - head[j+1] = (data_srp_calibrated[13]) & 0xff; - } - j=99; - for(uint8_t count2 =0;count2<4;count2++) - for(uint8_t count=0;count<1;count++,j+=4){ - head[j] = (data_srp_calibrated[14+count2]>>24) & 0xff; - head[j+1] = (data_srp_calibrated[14+count2]>>16) & 0xff; - head[j+2] = (data_srp_calibrated[14+count2]>>8) & 0xff; - head[j+3] = (data_srp_calibrated[14+count2]) & 0xff; - } - for(j=115;j<6723;j++) //copying the same data for all other 59 packets - head[j] = head[j-112]; - /*for(j=115;j<3363;j++) //copying the same data for all next 29 packets - head[j] = head[j-112]; - //next 30 packets will have following data - j=3363; - for(int count=0;count<18;count++,j+=2){ - head[j] = (data_srp_calibrated2[2]>>8) & 0xff; - head[j+1] = (data_srp_calibrated2[2]) & 0xff; - } - for(int j=3399,count=0;count<6;count++,j+=2){ - head[j] = (data_srp_calibrated2[3]>>8) & 0xff; - head[j+1] = (data_srp_calibrated2[3]) & 0xff; - } - for(int j=3411,count=0;count<4;count++,j+=2){ - head[j] = (data_srp_calibrated2[4]>>8) & 0xff; - head[j+1] = (data_srp_calibrated2[4]) & 0xff; - } - for(int j=3419,count=0;count<4;count++,j+=2){ - head[j] = (data_srp_calibrated2[5]>>8) & 0xff; - head[j+1] = (data_srp_calibrated2[5]) & 0xff; - } - j=3427; - for(uint8_t count2 = 0;count2<6;count2++) - for(uint8_t count=0;count<2;count++,j+=2){ - head[j] = (data_srp_calibrated2[6+count2]>>8) & 0xff; - head[j+1] = (data_srp_calibrated2[6+count2]) & 0xff; - //gPC.printf("\n\rj = %d",j); - } - head[3451] = (data_srp_calibrated2[12]>>8) & 0xff; - head[3452] = (data_srp_calibrated2[12]) & 0xff; - for(j=3453,count=0;count<3;count++,j+=2){ - head[j] = (data_srp_calibrated2[13]>>8) & 0xff; - head[j+1] = (data_srp_calibrated2[13]) & 0xff; - } - j=3459; - for(uint8_t count2 =0;count2<4;count2++) - for(uint8_t count=0;count<1;count++,j+=4){ - head[j] = (data_srp_calibrated2[14+count2]>>24) & 0xff; - head[j+1] = (data_srp_calibrated2[14+count2]>>16) & 0xff; - head[j+2] = (data_srp_calibrated2[14+count2]>>8) & 0xff; - head[j+3] = (data_srp_calibrated2[14+count2]) & 0xff; - } - for(j=3475;j<6723;j++) //copying the same data for last 29 packets - head[j] = head[j-112];*/ -} -void generate_dma_scattered(uint8_t *head) -{ - int j=3; - uint8_t count; - head[0] = (data_srp_scattered[0]>>8) & 0xff; - head[1] = (data_srp_scattered[0]) & 0xff; - head[2] = (data_srp_scattered[1]) & 0xff; - for (count=0,j=3;count<48;count++,j+=2){ - head[j] = (data_srp_scattered[2]>>8) & 0xff; - head[j+1] = (data_srp_scattered[2]) & 0xff; - } - j=99; - for(uint8_t count2 =0;count2<4;count2++) - for(uint8_t count=0;count<1;count++,j+=4){ - head[j] = (data_srp_scattered[3+count2]>>24) & 0xff; - head[j+1] = (data_srp_scattered[3+count2]>>16) & 0xff; - head[j+2] = (data_srp_scattered[3+count2]>>8) & 0xff; - head[j+3] = (data_srp_scattered[3+count2]) & 0xff; - } - for(int j=115;j<6723;j++) - head[j] = head[j-112]; -} -uint8_t map_index_bins_2_srp_index(uint8_t i,uint8_t srp_mode) -{ - /* This function is used to map sfp_indices to data_srp_calibrated[] or data_srp_scattered[] array indices - Example: indices 0 to 17 (the first 18 bins of sfp_bin[] array) correspond to index 2 of data_srp_calibrated[] array which is nothing - but proton energy. This function is used to update calib_thres_index[], scat_thresh_index[], calib_thres_index_scp[] - and scat_thres_index_scp[] which stores info about which bins is causing above threshold condition(refer to comments - in dma_packet_info() funtion regarding calib_thres_index[] array) - */ - if(srp_mode==0){ - if(i<18) return 2; - else if(i<24) return 3; - else if(i<28) return 4; - else if(i<32) return 5; - - else if(i<34) return 6; - else if(i<36) return 7; - else if(i<38) return 8; - else if(i<40) return 9; - else if(i<42) return 10; - else if(i<44) return 11; - - //else if(i<44) return 6+((i-32)/2); - else if(i<45) return 12; - else if(i<48) return 13; - - else if(i<49) return 14; - else if(i<50) return 15; - else if(i<51) return 16; - else if(i<52) return 17; - //else if(i<52) return i-34; - } - else if(srp_mode==1){ - if(i<48) return 2; - else if(i<52) return i-45; - } -} -void verify_read_dma(uint8_t srp_mode,uint8_t counter){ - /* This function verifies that correct data was generated in dma by comparing sfp_bin[i] with the - data in srp_calibrated[] or srp_scattered[]. This function assumes that all the 60 srp packets in DMA have - identical data. If not change the dma_generating functions and this function appropriately - */ - uint8_t i; - if(srp_mode==0){ - for(i=0;i<18;i++) //first 18 bins correspond to proton energy which is nothing but data_srp_calibrated[2] - if(sfp_bin[i]!=data_srp_calibrated[2]){ - gPC.printf("\n\rsfp_bin[%d]:%d\tdatasrp_calibrated[2]:%d",i,sfp_bin[i],data_srp_calibrated[2]); - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[2],counter); //print the name of the bin whose DMA value didn't match with value in the data_srp_calibrated[] array - return; - } - for(;i<24;i++) //next 6 bins correspond to electron energy - if(sfp_bin[i]!=data_srp_calibrated[3]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[3],counter); - return; - } - for(;i<28;i++) //refer to excel sheet with test cases - if(sfp_bin[i]!=data_srp_calibrated[4]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[4],counter); - return; - } - for(;i<32;i++) - if(sfp_bin[i]!=data_srp_calibrated[5]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[5],counter); - return; - } - for(i=0;i<12;i++) - if(sfp_bin[32+i]!=data_srp_calibrated[6+(i/2)]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[6+(i/2)],counter); - return; - } - if(sfp_bin[44]!=data_srp_calibrated[12]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[12],counter); - return; - } - for(i=45;i<48;i++) - if(sfp_bin[i]!=data_srp_calibrated[13]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[13],counter); - return; - } - if(sfp_bin[48]!=data_srp_calibrated[14]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[14],counter); - return; - } - if(sfp_bin[49]!=data_srp_calibrated[15]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[15],counter); - return; - } - if(sfp_bin[50]!=data_srp_calibrated[16]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[16],counter); - return; - } - if(sfp_bin[51]!=data_srp_calibrated[17]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[17],counter); - return; - } - } - else if(srp_mode==1){ - for(i=0;i<48;i++) //first 48 bins correspond to dEdX & bulk & not Veto..... which is nothing but data_srp_scattered[2] - if(sfp_bin[i]!=data_srp_scattered[2]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[2]); // //print the name of the bin whose DMA value didn't match with value in the srp_scattered[] array - return; - } - if(sfp_bin[48]!=data_srp_scattered[3]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[3]); - return; - } - if(sfp_bin[49]!=data_srp_scattered[4]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[4]); - return; - } - if(sfp_bin[50]!=data_srp_scattered[5]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[5]); - return; - } - if(sfp_bin[51]!=data_srp_scattered[6]){ - gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[6]); - return; - } - } - gPC.printf("\n\rNo errors in generated data"); -} -void dma_packets_info() -{ - gPC.printf("\n\n\r-------------------------------------------------------------------------------------------"); - gPC.printf("\n\rNumber of SFP_AT: %d",dma_sfp_at_count); // dma_sfp_at_count = number of sfp which are above threshold when dma is read every 6 seconds - gPC.printf("\n\rNumber of SCP_AT: %d",dma_scp_at_count); // dma_scp_at_count = number of scp which are above threshold when dma is read every 6 seconds - if(sfp_mode_count[0]!=0){ //number of sfp packets in calibrated mode when dma is read every 6 seconds - gPC.printf("\n\rNumber of SFP in calibrated mode: %d",sfp_mode_count[0]); - if(dma_sfp_at_count!=0) //if there are above threshold packets then display information - gPC.printf("\n\rSFP Above Threshold indices info:"); - for(uint8_t i=0;i<16;i++){ //for the 16 types of bins in calibrated mode - - /* calib_thres_index is a 2d array with 16 rows(for 16 differnt types of bins possible in calibrated mode which are named - in srp_calibrated character array) and each "i"th row contains the packet numbers(1 to 60) which is above threshold due to the "i"th row - example:if proton bins have energy above threshold for all the 60 srp packets in dma, then calib_thres_index[0] will have numbers - from {1,2,3...so on upto 60} which is why the column size of calib_thres_index is [16][60].the variable calib_thres_subindex[j] is - used to update packet numbers in each row of calib_thres_index[i][j] (0<=j<60) - */ - - if(calib_thres_index[i][0]!=0){ //display only those bins which have atleast one packet in which they are above threshold - gPC.printf("\n\r%s :{ ",srp_calibrated[i+2]); - /*srp_calibrated has index (i+2) because the first two indices have "NA" and index of "proton bins"=2 whereas, - in calib_thres_index[] the index of "proton_bins" is 0 and similarly for all other 15 bins of srp_calibrated - */ - } - //for(uint8_t j=0;j<60;j++){ - for(uint8_t j=0;(calib_thres_index[i][j]!=0)&&(j<60);j++){ //display only non zero elements - gPC.printf("%d ",calib_thres_index[i][j]); - } - if(calib_thres_index[i][0]!=0) - gPC.printf("}"); - } - } - if(sfp_mode_count[1]!=0){ //number of sfp/srp packets in scattered plot mode when dma is read every 6 seconds - gPC.printf("\n\rNumber of SFP in scattered plot mode: %d",sfp_mode_count[1]); - if(dma_sfp_at_count!=0) //same logic as stated above - gPC.printf("\n\rSFP Above Threshold indices info:"); - for(uint8_t i=0;i<5;i++){ //scat_thres_index[5][60] has only 5 rows because only 5 different bins are possible, refer to excel sheet having test cases - if(scat_thres_index[i][0]!=0){ //display only those bins which contribute to above threshold - gPC.printf("\n\r%s :{ ",srp_scattered[i+2]); - } - //for(uint8_t j=0;scat_thres_index[i][j]!=0;j++){ - for(uint8_t j=0;(scat_thres_index[i][j]!=0)&&(j<60);j++){ - gPC.printf("%d ",scat_thres_index[i][j]); - } - if(scat_thres_index[i][0]!=0) - gPC.printf("}"); - } - } - if(scp_mode_count[0]!=0){ //scp_mode_count[0] stores number of scp in calibrated mode - gPC.printf("\n\rNumber of SCP in calibrated mode: %d",scp_mode_count[0]); - if(dma_scp_at_count!=0) - gPC.printf("\n\rSCP Above Threshold indices info:"); - //for(uint8_t temp_i=0;temp_i<16;temp_i++) - //gPC.printf("\n\rcalib_thres_index_scp[%d]:%d",temp_i,calib_thres_index_scp[temp_i]); - for(uint8_t i=0;i<16;i++){ //same logic as srp/sfp above threshold stated above - if(calib_thres_index_scp[i]!=0){ - /*the array calib_thres_index_scp[16] is one dimensional because every 6 seconds only one scp packet is generated, so if a bin caused it to - be above threshold it is possible only in one scp packet whereas in sfp, the bin could have caused any of the 60 sfp's to be - above threshold(so we store the packet number also), we make the value of calib_thres_index_scp[i] = 1 if that bin caused above threshold in scp - */ - gPC.printf("\n\r%s is above threshold",srp_calibrated[i+2]); - } - } - } - if(scp_mode_count[1]!=0){ //scp_mode_count[1] stores number of scp in calibrated mode with data conservation - gPC.printf("\n\rNumber of SCP in calibrated mode with data conservation: %d",scp_mode_count[1]); - if(dma_scp_at_count!=0) - gPC.printf("\n\rSCP Above Threshold indices info:"); - for(uint8_t i=0;i<16;i++){ //same logic as above - if(calib_thres_index_scp[i]!=0){ - gPC.printf("\n\r%s is above threshold",srp_calibrated[i+2]); - } - } - if(proton_scp_sum_at==1){ - /* here two other things apart from the bins stated in test cases can cause above threshold, - namely proton_scp_sum and electron_scp_sum which are calculated as sum of proton enery bins, refer to excel sheet - hence we check these two cases saparately at the end - */ - gPC.printf("\n\rSum of proton bins is above threshold"); - } - if(electron_scp_sum_at==1) - gPC.printf("\n\rSum of electron bins is above threshold"); - } - if(scp_mode_count[2]!=0){ //scp_mode_count[2] stores number of scp packets in calibrated with extreme data conservation mode - gPC.printf("\n\rNumber of SCP in calibrated mode with Extreme data conservation: %d",scp_mode_count[2]); - if(dma_scp_at_count!=0) - gPC.printf("\n\rSCP Above Threshold indices info:"); - //for(uint8_t temp_i=0;temp_i<16;temp_i++) - //gPC.printf("\n\rcalib_thres_index_scp[%d]:%d",temp_i,calib_thres_index_scp[temp_i]); - if(calib_thres_index_scp[14]!=0) //only bulk fast counts bin is present other than sum of energies bins - gPC.printf("\n\rBulk fast counts is above threshold"); - if(proton_scp_sum_at==1) - gPC.printf("\n\rSum of proton bins is above threshold"); - if(electron_scp_sum_at==1) - gPC.printf("\n\rSum of electron bins is above threshold"); - } - if(scp_mode_count[3]!=0){ //scp_mode_count[3] stores number of scp packets in scattered plot mode - gPC.printf("\n\rNumber of SCP in scattered plot mode: %d",scp_mode_count[3]); - if(dma_scp_at_count!=0) - gPC.printf("\n\rSCP Above Threshold indices info:"); - //for(uint8_t temp_i=0;temp_i<5;temp_i++) - //gPC.printf("\n\rscat_thres_index_scp[%d]:%d",temp_i,scat_thres_index_scp[temp_i]); - for(uint8_t i=0;i<5;i++){ - if(scat_thres_index_scp[i]!=0){ - gPC.printf("\n\r%s is above index",srp_scattered[i+2]); - } - } - } - if(scp_mode_count[4]!=0){ //scp_mode_count[4] stores number of scp packets in scattered plot with extreme data conservation mode - gPC.printf("\n\rNumber of SCP in scattered mode with Extreme data conservation: %d",scp_mode_count[4]); - if(scat_thres_index_scp[3]!=0) //only bulk fast counts bin is present other than sum of energies bins - gPC.printf("\n\rBulk fast counts is above threshold"); - if(proton_scp_sum_at==1) - gPC.printf("\n\rSum of proton bins is above threshold"); - if(electron_scp_sum_at==1) - gPC.printf("\n\rSum of electron bins is above threshold"); - } -} -#endif //give the pointer of 6 second data to this function -void srp(uint8_t * head)//void const *args) +void srp(uint8_t * head) { uint8_t sd_stat = 0; - SCI_LED1 =1; + SCI_LED1 =1; + // SCI_LED1 = !SCI_LED1; - //gPC.printf("\n\rsrp"); + // gPC.printf("\n\rsrp"); debug_cntr = 0; sci_time = FCTN_CDMS_RD_RTC(); - TIME_LATEST_SPI_SPEED = sci_time; + TIME_LATEST_SPI_SPEED = sci_time>>7; #if debug_time - gPC.printf("\n\rAssigning time manually"); - sci_time = 0x000000055555555; + sci_time = 0x0000000021000000; #endif if(time_prev_scp==0){ time_prev_scp = sci_time; } FCTN_SD_MNGR(); ///changed recently - #if tabulation - if(head[0]==0 & head[1]==0){ - position_tm_frame[1] = position_tm_starting[1]; - position_tm_frame[2] = position_tm_starting[2]; - gPC.printf("\n\n\r--------------------------*************************************-------------------------------"); - //gPC.printf("\n\rFrame pointer reset done"); - gPC.printf("\n\rStart FSC for TMID=1 :%d",FSC_CURRENT[1]+1); - gPC.printf("\n\rStart FSC for TMID=2 :%d",FSC_CURRENT[2]+1); - gPC.printf("\n\rStart FSC for TMID=3 :%d",FSC_CURRENT[3]+1); - gPC.printf("\n\r--------------------------*************************************-------------------------------"); - } - #endif - ptr = head + 3; //ptr points to proton energy bin of srp - srp_mode = head[2]&0x01; - //for(uint8_t temp_counter=0;temp_counter<9;temp_counter++){ for (int i = 0; i < 52 ; i++) { scp_bin[i] = 0; } - #if test_science - gPC.printf("\n\n\rTesting science mode - initializing test indices and to zero"); - for(uint8_t i=0;i<5;i++) - for(uint8_t j=0;j<60;j++){ - calib_thres_index[i][j] = 0; - scat_thres_index[i][j] = 0; - } - for(uint8_t i=5;i<16;i++) - for(uint8_t j=0;j<60;j++){ - calib_thres_index[i][j] = 0; - calib_thres_index_scp[i] = 0; - } - for(uint8_t i=0;i<16;i++){ - if(i<5){ - scat_thres_subindex[i] = 0; - scat_thres_index_scp[i] = 0; - scp_mode_count[i] = 0; - } - calib_thres_subindex[i] = 0; - thres_scp_index[i] = 0; - calib_thres_index_scp[i] = 0; - } - dma_scp_at_count = 0; - dma_sfp_at_count = 0; - proton_scp_sum_at = 0; - electron_scp_sum_at = 0; - sfp_mode_count[0] = 0; - sfp_mode_count[1] = 0; - /*if((head[2]&0x01)==0){ - gPC.printf("\n\rGenerating DMA calibrated data"); - generate_dma_calibrated(head); //fill the dma with data given in data_srp_calibrated[] and repeat it 60 times to fill the entire dma - } - else if((head[2]&0x1)==1){ - gPC.printf("\n\rGenerating DMA scattered data"); - generate_dma_scattered(head); //fill the dma with data given in data_srp_scattered[] and repeat it 60 times to fill the entire dma - } - generated_dma(head);*/ - #endif + ptr = head + 3; //ptr points to proton energy bin of srp + srp_mode = head[2]&0x1; for(uint8_t counter = 0 ; counter < 60 ; counter++) { #if srpz - gPC.printf("\n\n\rSRP count:%d",counter+1); + // gPC.printf("\n\n\rSRP count:%d",counter+1); #endif - /*---------------------------------populating sfp_bin and scp_bin[] starts here(also tag AT or BT)-----------------------*/ + /*-------------------- ------------populating sfp_bin and scp_bin[] starts here(also tag AT or BT)-----------------------*/ at = 0; pzf = 1; ezf = 1; if(srp_mode == 0) //calibrated mode { #if srpz - gPC.printf("\n\rSRP - Calibrated Mode"); + // gPC.printf("\n\rSRP - Calibrated Mode"); #endif for(int i=0; i<48 ; i++) //first 48 bins or SRP are of 16 bits size { sfp_bin[i] = read_2byte(ptr + i*2); - /*if(counter==0){ - gPC.printf("\n\r sfp_bin[%d] = %d",i,sfp_bin[i]); - }*/ scp_bin[i] += sfp_bin[i]; if(sfp_bin[i]>sfp_threshold_m0[i]) { //gPC.printf("\n\rSFP above threshold index:%d",i); - #if test_science - //gPC.printf("\n\ri:%d",i); - //gPC.printf("\n\ri:%d\tj:%d",map_index_bins_2_srp_index(i,srp_mode)-2,calib_thres_subindex[map_index_bins_2_srp_index(i,srp_mode)-2]); - calib_thres_index[map_index_bins_2_srp_index(i,srp_mode)-2][calib_thres_subindex[map_index_bins_2_srp_index(i,srp_mode)-2]] = 1; - //gPC.printf("\n\ri:%d\tj:%d",map_index_bins_2_srp_index(i,srp_mode)-2,calib_thres_subindex[map_index_bins_2_srp_index(i,srp_mode)-2]); - #endif at = 1; } if(i<17) @@ -1471,21 +187,13 @@ for(int i=0; i<4; i++) //last 4 bins(excluding the spare bin) are 32 bit each { sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i ); - /*if(counter==0){ - gPC.printf("\n\rsfp_bin[%d] = %d",48+i,sfp_bin[i+48]); - }*/ scp_bin[i+48] += sfp_bin[i+48]; if(sfp_bin[i+48]>sfp_threshold_m0[i+48]){ //gPC.printf("\n\rSP above threshold index: %d",i+48); - #if test_science - //gPC.printf("\n\ri:%d\tj:%d",map_index_bins_2_srp_index(48+i,srp_mode)-2,calib_thres_subindex[map_index_bins_2_srp_index(48+i,srp_mode)-2]); - calib_thres_index[map_index_bins_2_srp_index(48+i,srp_mode)-2][calib_thres_subindex[map_index_bins_2_srp_index(48+i,srp_mode)-2]] = 1; - //gPC.printf("\n\ri:%d\tj:%d",map_index_bins_2_srp_index(48+i,srp_mode)-2,calib_thres_subindex[map_index_bins_2_srp_index(48+i,srp_mode)-2]); - #endif at = 1; } } - } + } else if(srp_mode == 1) //scattered mode { #if srpz @@ -1495,14 +203,9 @@ { sfp_bin[i] = read_2byte(ptr+2*i); scp_bin[i] += sfp_bin[i]; - /*if(counter==0){ - gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]); - }*/ + //gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]); if(sfp_bin[i] > sfp_threshold_m1[i]){ //gPC.printf("\n\rSP above threshold index: %d",i); - #if test_science - scat_thres_index[map_index_bins_2_srp_index(i,srp_mode)-2][scat_thres_subindex[map_index_bins_2_srp_index(i,srp_mode)-2]] = 1; - #endif at = 1; } } @@ -1510,44 +213,20 @@ { sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i ); scp_bin[i+48] += sfp_bin[i+48]; - - /*if(counter==0){ - gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]); - }*/ if(sfp_bin[i+48] > sfp_threshold_m1[i+48]){ //gPC.printf("\n\rSP above threshold index: %d",i+48); - #if test_science - scat_thres_index[map_index_bins_2_srp_index(48+i,srp_mode)-2][scat_thres_subindex[map_index_bins_2_srp_index(48+i,srp_mode)-2]] = 1; - #endif at = 1; } } } - #if test_science - for(uint8_t temp_i = 0;temp_i<16;temp_i++){ - if(calib_thres_index[temp_i][calib_thres_subindex[temp_i]]==1){ - calib_thres_index[temp_i][calib_thres_subindex[temp_i]] = counter+1; - calib_thres_subindex[temp_i]++; - } - } - for(uint8_t temp_i = 0;temp_i<5;temp_i++){ - if(scat_thres_index[temp_i][scat_thres_subindex[temp_i]]==1){ - scat_thres_index[temp_i][scat_thres_subindex[temp_i]] = counter+1; - scat_thres_subindex[temp_i]++; - } - } - #endif /*---------------------------populating sfp_bin[] and scp_bin[] from srp ends here(also tagging AT or BT)------------------*/ - #if test_science - //gPC.printf("\n\n\rCounter: %d",counter); - //verify_read_dma(srp_mode,counter); - #endif - ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer + + //ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer /*------------------------------------------forming a science fine packet starts here---------------------------------------- First we fill packet header, then fill packet data and finally assign its length ----------------------------------------------------------------------------------------------------------------------------*/ - for(int i = 0; i<71; i++) + for(int i = 0; i<71; i++) sfp[i] = 0; if(srp_mode == 0) //calibrated mode { @@ -1629,11 +308,9 @@ for(uint8_t i = 0; i<17 ; i++){ space = adjust(2, ((compress(sfp_bin[i],8,2))>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4; space = adjust(8, compress(sfp_bin[i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4; - //gPC.printf("%02X ",compress(sfp_bin[i],8,2)); + //printf("%02X ",compress(sfp_bin[i],8,2)); } } - //if(pzf==1) - //gPC.printf("\n\rAll proton bins empty"); if(ezf == 0){ //cout<<"electron bins "; #if srpz @@ -1642,34 +319,26 @@ for(int i = 0; i<5 ; i++){ space = adjust(2,((compress(sfp_bin[18+i],8,2))>>8),pointer,space); pointer += space>>4; debug_cntr += space>>4; space = adjust(8, compress(sfp_bin[18+i],8,2),pointer,space); pointer += space>>4; debug_cntr += space>>4; - //gPC.printf("%02X ",compress(sfp_bin[i],8,2)); + //printf("%02X ",compress(sfp_bin[i],8,2)); } } - //if(ezf==1) - //gPC.printf("\n\rAll electron bins empty"); } //above threshold ends here. if(at == 0) { - id = 1; length = 241; + id = 1; length = 241+5; //5 spare bits if(pzf == 0) length += 87; if(ezf == 0) - length += 35; + length += 35; } else { - id = 2; length = 288; + id = 2; length = 288; //0 spare bits if(pzf == 0) length += 170; if(ezf == 0) length += 50; - #if test_science - dma_sfp_at_count++; - #endif } - #if test_science - sfp_mode_count[0]++; - #endif } else if(srp_mode == 1) //scattered mode { @@ -1696,7 +365,7 @@ { #if srpz - gPC.printf("\n\rSFP above threshold"); + gPC.printf("\n\rSFP below threshold"); #endif pointer = sfp; debug_cntr = 0; space = 8; space = adjust(3, sci_time>>32 ,pointer,space); pointer += space>>4; debug_cntr += space>>4; @@ -1720,28 +389,21 @@ } if(at == 0) { - id = 1; length = 384; + id = 1; length = 384; //0 spare bits } else { - id = 2; length = 568; - #if test_science - dma_sfp_at_count++; - #endif + id = 2; length = 568; //0 spare bits } - #if test_science - sfp_mode_count[1]++; - #endif } length = (length%8==0)?(length/8):(length/8)+1; //converting length to mulitple of 8 #if srpz gPC.printf("\n\rLength of SFP packet in bytes = %d",length); #endif - //gPC.printf("\n\rLength of SFP packet in bytes = %d",length); - /*----------------------------------------filling the science fine packet array ends here------------------------------------------*/ + /*----------------------------------------forming a science packet ends here-----------------------------------------------*/ /*-----------------------------Inserting the above packet(sfp) into the TM frame(s) starts here----------------------------*/ - if(id==1){ //below threshold + if(id==1){ if(position_tm_frame[id]>130){ #if srpz gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame."); @@ -1750,10 +412,9 @@ frames[id][position_tm_frame[id]] = 0; position_tm_frame[id]++; } - //position_tm_frame[id]=position_tm_starting[id]; } } - else if(id==2){ //above threshold + else if(id==2){ if(position_tm_frame[id]>126){ #if srpz gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame."); @@ -1762,7 +423,6 @@ frames[id][position_tm_frame[id]] = 0; position_tm_frame[id]++; } - //position_tm_frame[id]=position_tm_starting[id]; // } } if(position_tm_frame[id]==position_tm_starting[id]){ @@ -1846,10 +506,8 @@ } gPC.printf("}\n\r"); #endif - #if tabulation - tabulate_TM(&frames[id][0]); - #endif /*------------------current TM frame completely filled-----------------------*/ + exor(frames[id]); convolution(frames[id]); interleave(TM_convoluted_data,TM_interleave_data); @@ -1864,27 +522,14 @@ } if(sd_stat) { - gPC.printf("\n\n\rsd write fail---------------------------------------"); + gPC.puts("sd write fail"); } position_tm_frame[id] = position_tm_starting[id]; - if(j!=0) - frames[id][6-id] = (length - j)+position_tm_starting[id]; - else if(j==0) - frames[id][6-id] = position_tm_starting[id]; + frames[id][6-id] = (length - j)+position_tm_starting[id]; } } /*------------------------------finished inserting the sfp packet into the TM frame(s)-------------------------------------*/ - } // for loop bracket which runs 60 times - //ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer - - #if test_science - if(pzf==1){ - gPC.printf("\n\rAll protons bins empty"); - } - if(ezf==1){ - gPC.printf("\n\rAll electrons bins are empty"); - } - #endif + } // for loop bracket which runs 60 times #if srpz_last //gPC.printf("\n\rPrinting the last SFP_TM frame"); //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]); @@ -1900,10 +545,10 @@ space = adjust(4,3,pointer,space); FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit #if debug_fsc - frames[id][1] = (test_fsc[3]>>24)&0xff; - frames[id][2] = (test_fsc[3]>>16)&0xff; - frames[id][3] = (test_fsc[3]>>8)&0xff; - frames[id][4] = test_fsc[3]&0xff; + frames[id][1] = (FSC_science>>24)&0xff; + frames[id][2] = (FSC_science>>16)&0xff; + frames[id][3] = (FSC_science>>8)&0xff; + frames[id][4] = FSC_science&0xff; test_fsc[3]++; #endif #if !debug_fsc @@ -1957,56 +602,33 @@ if(scp_bin[i] > scp_threshold_m0[i]) { //gPC.printf("\n\rSCP above threshold index: %d",i); - #if test_science - calib_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1; - #endif at = 1; - //break; + break; } } - #if test_science - scp_mode_count[0]++; - #endif } else if(compression_option == 1) { - if(scp_bin[44] > scp_threshold_m0_1[0]){ - //gPC.printf("\n\rSCP above threshold index: 44"); - #if test_science - //thres_scp_index[map_index_bins_2_srp_index(44,srp_mode)-2] = 1; - calib_thres_index_scp[map_index_bins_2_srp_index(44,srp_mode)-2] = 1; - #endif - at=1; - } + if(scp_bin[44] > scp_threshold_m0_1[0]){//gPC.printf("\n\rSCP above threshold index: 44"); + at=1;} for(int i=0; i<4 ;i++) { if(scp_bin[48+i] > scp_threshold_m0_1[i+1]) { //gPC.printf("\n\rSCP above threshold index: %d",i+48); - #if test_science - //thres_scp_index[map_index_bins_2_srp_index(48+i,srp_mode)-2] = 1; - calib_thres_index_scp[map_index_bins_2_srp_index(48+i,srp_mode)-2] = 1; - #endif at = 1; - //break; + break; } } if(scp_bin[17] > scp_threshold_m0_1[5]){ //gPC.printf("\n\rSP above threshold index: 17"); - #if test_science - //thres_scp_index[map_index_bins_2_srp_index(17,srp_mode)-2] = 1; - calib_thres_index_scp[map_index_bins_2_srp_index(17,srp_mode)-2] = 1; - #endif at=1; } if(scp_bin[23] > scp_threshold_m0_1[6]){ //gPC.printf("\n\rSP above threshold index: 23"); - #if test_science - //thres_scp_index[map_index_bins_2_srp_index(23,srp_mode)-2] = 1; - calib_thres_index_scp[map_index_bins_2_srp_index(23,srp_mode)-2] = 1; - #endif at=1; } + proton_scp_sum = 0; electron_scp_sum = 0; for(int i=0;i<17;i++) { @@ -2016,34 +638,15 @@ { electron_scp_sum += scp_bin[18+i]; } - if(proton_scp_sum > scp_threshold_m0_1[7]){ - //gPC.printf("\n\rProton_scp_sum above threshold"); - #if test_science - proton_scp_sum_at = 1; - #endif - at=1; - } - if(electron_scp_sum > scp_threshold_m0_1[8]){ - //gPC.printf("\n\rElectron_scp_sum above threshold"); - #if test_science - electron_scp_sum_at = 1; - #endif - at=1; - } - #if test_science - scp_mode_count[1]++; - #endif + if(proton_scp_sum > scp_threshold_m0_1[7]){ //gPC.printf("\n\rProton_scp_sum above threshold"); + at=1;} + if(electron_scp_sum > scp_threshold_m0_1[8]){//gPC.printf("\n\rElectron_scp_sum above threshold"); + at=1;} } else if(compression_option == 2) { - if(scp_bin[50] > scp_sfp_threshold_m0_2[0]){ - //gPC.printf("\n\rSCP above threshold index:50"); - #if test_science - //thres_scp_index[map_index_bins_2_srp_index(50,srp_mode)-2] = 1; - calib_thres_index_scp[map_index_bins_2_srp_index(50,srp_mode)-2] = 1; - #endif - at=1; - } + if(scp_bin[50] > scp_sfp_threshold_m0_2[0]){//gPC.printf("\n\rSCP above threshold index:50"); + at=1;} proton_scp_sum = 0; electron_scp_sum = 0; for(int i=0;i<17;i++) { @@ -2054,18 +657,9 @@ electron_scp_sum += scp_bin[18+i]; } if(proton_scp_sum > scp_sfp_threshold_m0_2[1]){//gPC.printf("\n\rProton_SCP_sum above threshold"); - #if test_science - proton_scp_sum_at = 1; - #endif at=1;} if(electron_scp_sum > scp_sfp_threshold_m0_2[2]){//gPC.printf("\n\rElectron above threshold"); - #if test_science - electron_scp_sum_at = 1; - #endif at=1;} - #if test_science - scp_mode_count[2]++; - #endif } } else if(srp_mode ==1) @@ -2075,46 +669,28 @@ { if(scp_bin[i] > scp_threshold_m1[i]){ //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]); - #if test_science - scat_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1; - #endif at = 1; - //break; + break; } } for(int i=48; i<52; i++) { if(scp_bin[i] > scp_threshold_m1[i]){ //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]); - #if test_science - scat_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1; - #endif at = 1; - //break; + break; } } - #if test_science - scp_mode_count[3]++; - #endif } else if(compression_option==2){ if(scp_bin[50]>scp_sfp_threshold_m0_2[0]){ //gPC.printf("\nSCP above threshold index:50, Value:%",scp_bin[50]); - #if test_science - //thres_scp_index[map_index_bins_2_srp_index(50,srp_mode)-2] = 1; - scat_thres_index_scp[map_index_bins_2_srp_index(50,srp_mode)-2] = 1; - #endif at=1; } - #if test_science - scp_mode_count[4]++; - #endif } } /*----------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT ends here--------------------------*/ - /*for(uint8_t temp_i=0;temp_i<52;temp_i++){ - gPC.printf("\n\rscp_bin[%d] =%d",temp_i+1,scp_bin[temp_i]); - }*/ + if(srp_mode == 0) { //determining if non zero values of proton and electron bins exist for calibrated mode (srp) @@ -2273,53 +849,17 @@ /*------------------------------------------Forming a science packet(scp) starts here----------------------------------------------*/ pointer = scp; debug_cntr = 0; space = 8; - time_diff = 0; - packet_pp = 1; //value 1 indicates there is no time jump, i.e. next packet in the frame arrived within 10 seconds - - /*upto line 892: if the time difference between two successive frames is greater than 10 seconds then packet_pp bit is set to 1 - to indicate this time jump*/ - if(time_prev_scp!=sci_time) + time_diff = 0; + + packet_pp = 1; + if((((uint8_t)(sci_time>>7))&0x3f)<(((uint8_t)(time_prev_scp>>7))&0x3f)) { - if((((uint8_t)(sci_time>>7))&0x3f)<(((uint8_t)(time_prev_scp>>7))&0x3f)) - { - time_diff = time_diff+60; - } - time_diff += (((uint8_t)(sci_time>>7))&0x3f); - time_diff -= (((uint8_t)(time_prev_scp>>7))&0x3f); - if(time_diff>10){ - packet_pp = 0; - } - else{ - uint8_t min[2],hour[2],day[2],month[2],year[2]; - min[0] = (((uint8_t)(sci_time>>13))&0x3f); - min[1] = (((uint8_t)(time_prev_scp>>13))&0x3f); - hour[0] = (((uint8_t)(sci_time>>19))&0x1f); - hour[1] = (((uint8_t)(time_prev_scp>>19))&0x1f); - day[0] = (((uint8_t)(sci_time>>24))&0x1f); - day[1] = (((uint8_t)(time_prev_scp>>24))&0x1f); - month[0] = (((uint8_t)(sci_time>>29))&0x0f); - month[1] = (((uint8_t)(time_prev_scp>>29))&0x0f); - year[0] = (((uint8_t)(sci_time>>33))&0x03); - year[1] = (((uint8_t)(time_prev_scp>>33))&0x03); - if(min[0]<min[1]){ - if(hour[0]<hour[1]){ - if(day[0]<day[1]){ - if(month[0]<month[1]){ - if((year[0]-year[1])!=1) - packet_pp = 0; - } - else if((month[0]-month[1])!=1) - packet_pp = 0; - } - else if((day[0]-day[1])!=1) - packet_pp = 0; - } - else if((hour[0]-hour[1])!=1) - packet_pp = 0; - } - else if((min[0]-min[1])!=1) - packet_pp = 0; - } + time_diff = time_diff+60; + } + time_diff += (((uint8_t)(sci_time>>7))&0x3f); + time_diff -= (((uint8_t)(time_prev_scp>>7))&0x3f); + if(time_diff>10){ + packet_pp = 0; } time_prev_scp = sci_time; uint32_t sfp_at_counter; @@ -2331,7 +871,7 @@ space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option space = adjust(1, at,pointer,space); pointer += space>>4; debug_cntr += space>>4; //last bit of compression option space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4; - if(!((srp_mode==0 && compression_option==2)|(srp_mode==1 && compression_option==2))) + if(!(srp_mode==0 && compression_option==2)) { space = adjust(8, sfp_at_counter>>16,pointer,space); pointer += space>>4; debug_cntr += space>>4; space = adjust(8, sfp_at_counter>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4; @@ -2385,7 +925,7 @@ space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4; } for(int i = 0; i<12 ;i++){ - space = adjust(5,compress2(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4; + space = adjust(5,compress(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4; } for(int i = 0; i<4 ;i++){ space = adjust(1,compress(scp_bin[44+i],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4; @@ -2558,88 +1098,65 @@ } } } - /*---------------------------------------------forming a science coarse packet ends here----------------------------------------------*/ + /*---------------------------------------------forming a science packet ends here----------------------------------------------*/ id = 0; if(srp_mode == 0 && compression_option == 0){ if(at == 0){ - length = 228; + length = 228+2; //2 spare bits if(pzf == 0) length += 121; if(ezf == 0) length +=41; }else if(at == 1){ - length = 266; + length = 266+6; //6 spare bits if(pzf == 0) length += 136; if(ezf == 0) length += 40; - #if test_science - dma_scp_at_count++; - #endif } }else if(srp_mode == 0 && compression_option == 1){ //data conservation mode if(at == 0){ - length = 94; + length = 94+2; //2 spare bits if(pzf == 0) length += 12; if(ezf == 0) length += 12; }else if(at == 1){ - length = 123; + length = 123+3; //3 spare bits if(pzf == 0) length += 9; if(ezf == 0) length += 9; - #if test_science - dma_scp_at_count++; - #endif } } else if( srp_mode == 1){ if(at == 0) length = 368; - else if(at == 1){ + else if(at == 1) length = 432; - #if test_science - dma_scp_at_count++; - #endif - } } - else if(compression_option == 2 && srp_mode==0) //in extreme data conservation mode, length is same for both srp_modes + else if(compression_option == 2) //in extreme data conservation mode, length is same for both srp_modes { if(at == 0){ - length = 31; + length = 31+1; //1 spare bits if(pzf == 0) length += 12; if(ezf == 0) length += 12; }else if(at == 1){ - length = 36; + length = 36+2; //2 spare bits if(pzf == 0) length += 9; if(ezf == 0) length += 9; - #if test_science - dma_scp_at_count++; - #endif - } - } - else if(compression_option == 2 && srp_mode==1){ - if(at==0) - length = 56; - else if(at==1){ - length = 56; - #if test_science - dma_scp_at_count++; - #endif } } length = (length%8==0)?(length/8):(length/8)+1; #if scpz - gPC.printf("\n\rLength of SCP packet in bytes = %d",length); + gPC.printf("\n\rSCP packet length = %d",length); #endif - /*if(position_tm_frame[id]>129){ + if(position_tm_frame[id]>129){ #if scpz gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame"); gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]); @@ -2648,42 +1165,6 @@ frames[id][position_tm_frame[id]] = 0; position_tm_frame[id]++; } - }*/ - if(srp_mode==0 && compression_option!=2){ - if(position_tm_frame[id]>126){ - #if scpz - gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame"); - gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]); - #endif - while(position_tm_frame[id]<132){ - frames[id][position_tm_frame[id]] = 0; - position_tm_frame[id]++; - } - } - } - else if(((srp_mode==0)||(srp_mode==1)) && compression_option==2){ - if(position_tm_frame[id]>129){ - #if scpz - gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame"); - gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]); - #endif - while(position_tm_frame[id]<132){ - frames[id][position_tm_frame[id]] = 0; - position_tm_frame[id]++; - } - } - } - else if(srp_mode==1){ - if(position_tm_frame[id]>129){ - #if scpz - gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame"); - gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]); - #endif - while(position_tm_frame[id]<132){ - frames[id][position_tm_frame[id]] = 0; - position_tm_frame[id]++; - } - } } if(position_tm_frame[id]==position_tm_starting[id]){ frames[id][4] = position_tm_starting[id]; @@ -2715,9 +1196,9 @@ //gPC.printf("1 = 0x%X",FSC_science); #if debug_fsc - frames[id][1] = (test_fsc[1]>>16)&0xff; - frames[id][2] = (test_fsc[1]>>8)&0xff; - frames[id][3] = (test_fsc[1])&0xff; + frames[id][1] = (FSC_science>>16)&0xff; + frames[id][2] = (FSC_science>>8)&0xff; + frames[id][3] = (FSC_science)&0xff; test_fsc[1]++; #endif #if !debug_fsc @@ -2730,17 +1211,14 @@ frames[id][132] = temp_crc>>8; frames[id][133] = temp_crc & 0xff; #if scpz - gPC.printf("\n\rFirst head pointer: 0x%02X",frames[id][4]); - gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]); - gPC.printf("\n\rPrinting SCP_TM\n\r{"); + //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]); + //gPC.printf("\n\rPrinting SCP_TM\n\r{"); + gPC.printf("\n\r{"); for(uint8_t z=0;z<134;z++){ gPC.printf("%02X",frames[id][z]); } gPC.printf("}\n\r"); #endif - #if tabulation - tabulate_TM(&frames[id][0]); - #endif exor(frames[id]); convolution(frames[id]); interleave(TM_convoluted_data,TM_interleave_data); @@ -2752,10 +1230,7 @@ gPC.puts("sd write fail"); } position_tm_frame[id] = position_tm_starting[id]; - if(j!=0) - frames[id][4] = (length - j)+position_tm_starting[id]; - else if(j==0) - frames[id][4] = position_tm_starting[id]; + frames[id][4] = (length - j)+position_tm_starting[id]; } } #if scpz_last @@ -2775,9 +1250,9 @@ //gPC.printf("1 = 0x%X",FSC_science); #if debug_fsc - frames[id][1] = (test_fsc[1]>>16)&0xff; - frames[id][2] = (test_fsc[1]>>8)&0xff; - frames[id][3] = (test_fsc[1])&0xff; + frames[id][1] = (FSC_science>>16)&0xff; + frames[id][2] = (FSC_science>>8)&0xff; + frames[id][3] = (FSC_science)&0xff; test_fsc[1]++; #endif #if !debug_fsc @@ -2799,107 +1274,10 @@ position_tm_frame[id] = position_tm_starting[id]; } #endif - //gPC.printf("fsc = %u, %u,%u\n\r", FSC_CURRENT[1],FSC_CURRENT[2],FSC_CURRENT[3]); - #if test_science - dma_packets_info(); - #endif - gPC.printf("\n\rEnd of SRP function"); - //SCI_LED1 = !SCI_LED1; - SCI_LED1 = 0; -} -/*void test_sci_main(){ - gPAYLOAD_BUFFER[2] &= (~0x01); //calibrated mode data generation - //gPAYLOAD_BUFFER[2] |= (0x01); //scattered plot mode data generation - srp(gPAYLOAD_BUFFER); -}*/ -/*void test_tabulate(){ - uint8_t tmid=2,temp_index,temp=13,space; - pointer = &test_tm[0][0]; - space = adjust(1, 0,pointer,8); pointer += space>>4; - space = adjust(4, 2,pointer,space); pointer += space>>4; - space = adjust(3, 0,pointer,space); pointer += space>>4; - - space = adjust(8, 0,pointer,space); pointer += space>>4; //fsc - space = adjust(8, 0,pointer,space); pointer += space>>4; - space = adjust(8, 1,pointer,space); pointer += space>>4; - - space = adjust(8, 5,pointer,space); pointer += space>>4; //first head pointer - - space = adjust(2, 2,pointer,space); pointer += space>>4; //time - space = adjust(4, 12,pointer,space); pointer += space>>4; - space = adjust(5, 8,pointer,space); pointer += space>>4; - space = adjust(5, 10,pointer,space); pointer += space>>4; - space = adjust(6, 25,pointer,space); pointer += space>>4; - space = adjust(6, 25,pointer,space); pointer += space>>4; - space = adjust(7, 69,pointer,space); pointer += space>>4; - - space = adjust(4, 15,pointer,space); pointer += space>>4; //attitude - - space = adjust(6, 60,pointer,space); pointer += space>>4; - space = adjust(1, 1,pointer,space); pointer += space>>4; //science data mode - - for(uint8_t i = 0 ; i < 48 ; i++){ - space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4; - space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4; - } - for(uint8_t i = 0 ; i < 4 ; i++){ - space = adjust(1, ((compress(1032192,6,3))>>8) ,pointer,space); pointer += space>>4; - space = adjust(8, ((compress(1032192,6,3))&0xff) ,pointer,space); pointer += space>>4; - } - space = adjust(6, 0,pointer,space); pointer += space>>4; //spare + gPC.printf("fsc = %u, %u,%u\n\r", FSC_CURRENT[1],FSC_CURRENT[2],FSC_CURRENT[3]); + //gPC.printf("\n\rEndSRP"); + // SCI_LED1 = !SCI_LED1; + SCI_LED1 = 0; - //next packet - space = adjust(2, 2,pointer,space); pointer += space>>4; //time - space = adjust(4, 12,pointer,space); pointer += space>>4; - space = adjust(5, 8,pointer,space); pointer += space>>4; - space = adjust(5, 10,pointer,space); pointer += space>>4; - space = adjust(6, 25,pointer,space); pointer += space>>4; - space = adjust(6, 25,pointer,space); pointer += space>>4; - space = adjust(7, 69,pointer,space); pointer += space>>4; - space = adjust(4, 15,pointer,space); pointer += space>>4; //attitude - - space = adjust(6, 61,pointer,space); pointer += space>>4; - space = adjust(1, 0,pointer,space); pointer += space>>4; //science data mode - space = adjust(1, 0,pointer,space); pointer += space>>4; //pzf - space = adjust(1, 0,pointer,space); pointer += space>>4; //ezf - - for(uint8_t i = 0 ; i < 8 ; i++){ - space = adjust(1, ((compress(8128,7,2))>>8) ,pointer,space); pointer += space>>4; - space = adjust(8, ((compress(8128,7,2))&0xff) ,pointer,space); pointer += space>>4; - } - for(uint8_t i = 0 ; i < 12 ; i++){ - space = adjust(6, ((compress(114688,3,3))) ,pointer,space); pointer += space>>4; - } - for(uint8_t i = 0 ; i < 4 ; i++){ - space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4; - space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4; - } - for(uint8_t i = 0 ; i < 4 ; i++){ - space = adjust(1, ((compress(1032192,6,3))>>8) ,pointer,space); pointer += space>>4; - space = adjust(8, ((compress(1032192,6,3))&0xff) ,pointer,space); pointer += space>>4; - } - for(uint8_t i = 0 ; i < 18 ; i++){ - space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4; - space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4; - } - tabulate_TM(&test_tm[0][0]); - - space=8; pointer = &test_tm[1][0]; - space = adjust(1, 0,pointer,8); pointer += space>>4; - space = adjust(4, 2,pointer,space); pointer += space>>4; - space = adjust(3, 0,pointer,space); pointer += space>>4; - - space = adjust(8, 0,pointer,space); pointer += space>>4; //fsc - space = adjust(8, 0,pointer,space); pointer += space>>4; - space = adjust(8, 2,pointer,space); pointer += space>>4; - - space = adjust(8, 13,pointer,space); pointer += space>>4; //first head pointer - - for(uint8_t i = 0 ; i < 6 ; i++){ - space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4; - space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4; - } - space = adjust(4, 0,pointer,space); pointer += space>>4; //spare - tabulate_TM(&test_tm[1][0]); -}*/ \ No newline at end of file +} \ No newline at end of file
--- a/adf.h Sat Jan 07 00:40:47 2017 +0000 +++ b/adf.h Sat Jan 07 01:35:54 2017 +0000 @@ -11,7 +11,7 @@ bool buffer_state; bool finish_write_data; uint8_t signal = 0x00; -unsigned char bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xFB,0xC2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,/*PA Level Byte*/0x57/*PA Parameters*/,0x08/*GMSK_modulation*/,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x20,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00}; +unsigned char bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xF4,0xC2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,/*PA Level Byte*/0x57/*PA Parameters*/,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x20,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00}; bool data_irq_err=0; bool data_err= false; unsigned char temp_byte=0x00; @@ -249,7 +249,9 @@ spi.write(0x59); spi.write(0x08); gCS_ADF=1; - + uint16_t sum_temp = 0; + for(int i =0; i< 10;i++) + { gCS_ADF=0; spi.write(0x3B); spi.write(0x27); @@ -268,28 +270,14 @@ spi.write(0xFF); secondbyte = spi.write(0xFF); gCS_ADF=1; - - COM_ADF_TMP = firstbyte & 0x03; - COM_ADF_TMP |= secondbyte & 0xfc; - COM_ADF_TMP = 0.9474*(COM_ADF_TMP - 28) +28.2; - - gPC.printf("\n\rCOM_ADF_TMP : %d \n",COM_ADF_TMP); - /*uint8_t txcurr = (3.3*COM_TX_OC_FAULT)/(0.05)*100;*/// ID_current - - - + COM_ADF_TMP = firstbyte<<6; + COM_ADF_TMP += secondbyte; + COM_ADF_TMP = (COM_ADF_TMP/1.83) - 118.43 + temp_correction_value; + sum_temp+=COM_ADF_TMP; + } + COM_ADF_TMP = sum_temp/10; + uint8_t txcurr = (3.3*COM_TX_OC_FAULT)/(0.05)*100; } - -void get_com_oc_sw_status() -{ - COM_OC_SET = 1; - if (COM_TX_OC_FAULT){\ - com_oc_sw_status = 0x1;\ - }\ - else{\ - com_oc_sw_status = 0;\ - }\ -} bool hardware_reset(int bcn_call) { @@ -473,7 +461,6 @@ check_status;\ /*gPC.printf("I 0x%X\r\n",(int)status);*/\ if(IRQ){\ - get_com_oc_sw_status();\ /*gPC.printf("det\r\n");*/\ if(!ADF_off) {\ if(finish_write_data || restart_adf_flag) {\