11th feb i2c checking chaitu's code
Dependencies: SimpleDMA eeprom mbed-rtos mbed
Fork of CDMS_CODE_FM_28JAN2017 by
Diff: Compression.h
- Revision:
- 340:d05e7b4b6690
- Parent:
- 332:7d2431ce979f
--- 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