Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP SimpleDMA eeprom mbed-rtos mbed
Fork of CDMS_QM_03MAR2017_Flash_with_obsrs 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
