working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
ee12b079
Date:
Thu Jan 05 17:38:21 2017 +0000
Revision:
342:77b0d59897f7
Parent:
332:7d2431ce979f
Child:
346:204497974293
Added few printf statements

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chaithanyarss 331:1943be3fd178 1 /*-----------------------------------------to_do_compression.h---------------------------------------------------------------
prasanthbj05 266:ae588e75cfa4 2
chaithanyarss 331:1943be3fd178 3 -> SD_Write error to be checked(refer to flowchart)
chaithanyarss 331:1943be3fd178 4 -> compression algo not yet changed
chaithanyarss 331:1943be3fd178 5 -> inform Nandu that in extreme data conservation mode alone, even if pzf,ezf=1 the bins are present but have junk values
chaithanyarss 331:1943be3fd178 6 -> attitude tag not updated anywhere
chaithanyarss 331:1943be3fd178 7 -> packet_pp to be verified
chaithanyarss 331:1943be3fd178 8 -----------------------------------------------------------------------------------------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 9
chaithanyarss 331:1943be3fd178 10 //last updated on 18 Dec 2016
chaithanyarss 331:1943be3fd178 11
prasanthbj05 266:ae588e75cfa4 12 /*#include <iostream>
prasanthbj05 266:ae588e75cfa4 13 #include "stdio.h"
prasanthbj05 266:ae588e75cfa4 14 #include "crc.h"
prasanthbj05 266:ae588e75cfa4 15 #include "interleave.h"
prasanthbj05 266:ae588e75cfa4 16 #include "Convolution.h"
prasanthbj05 266:ae588e75cfa4 17 #include "bitset"*/
prasanthbj05 266:ae588e75cfa4 18 //using namespace std;
prasanthbj05 266:ae588e75cfa4 19
prasanthbj05 266:ae588e75cfa4 20 //reading functions 2byte, 4byte
ee12b079 278:1d837d6dfb6e 21 #define srpz 0
ee12b079 278:1d837d6dfb6e 22 #define scpz 0
chaithanyarss 290:3159ff1081a2 23 #define scpz_last 0
chaithanyarss 290:3159ff1081a2 24 #define srpz_last 0
chaithanyarss 290:3159ff1081a2 25 #define debug_fsc 0
chaithanyarss 331:1943be3fd178 26 #define debug_time 0 //used for testing without rtc, assigns constant time to all frames
chaithanyarss 331:1943be3fd178 27 #define debug_dma 0 //byte reading order in dma, used to read test_cases 4 to 16 since they're in the wrong order
chaithanyarss 331:1943be3fd178 28 #define test_science 0
chaithanyarss 331:1943be3fd178 29 #define tabulation 0
prasanthbj05 266:ae588e75cfa4 30
chaithanyarss 290:3159ff1081a2 31 #if debug_dma
chaithanyarss 290:3159ff1081a2 32 uint16_t read_2byte(uint8_t* ptr)
chaithanyarss 290:3159ff1081a2 33 {
chaithanyarss 290:3159ff1081a2 34 uint16_t output = (((uint16_t )(*(ptr+1)))<<8);
chaithanyarss 290:3159ff1081a2 35 output += (((uint16_t)(*ptr)));
chaithanyarss 290:3159ff1081a2 36 return output;
chaithanyarss 290:3159ff1081a2 37 }
chaithanyarss 290:3159ff1081a2 38 uint32_t read_4byte(uint8_t* ptr)
chaithanyarss 290:3159ff1081a2 39 {
chaithanyarss 290:3159ff1081a2 40 uint32_t output = (uint32_t)(*(ptr+3))<<24;
chaithanyarss 290:3159ff1081a2 41 output += (uint32_t)(*(ptr+2)<<16);
chaithanyarss 290:3159ff1081a2 42 output += (uint32_t)(*(ptr+1)<<8);
chaithanyarss 290:3159ff1081a2 43 output += (uint32_t)(*(ptr));
chaithanyarss 290:3159ff1081a2 44 return output;
chaithanyarss 290:3159ff1081a2 45 }
chaithanyarss 290:3159ff1081a2 46 #endif
chaithanyarss 290:3159ff1081a2 47 #if !debug_dma
prasanthbj05 266:ae588e75cfa4 48 uint16_t read_2byte(uint8_t* ptr)
prasanthbj05 266:ae588e75cfa4 49 {
prasanthbj05 266:ae588e75cfa4 50 uint16_t output = (uint8_t ) *(ptr+1);
prasanthbj05 266:ae588e75cfa4 51 output += ( (uint8_t )(*ptr) ) << 8;
ee12b079 93:4d76de54a699 52 return output;
ee12b079 93:4d76de54a699 53 }
prasanthbj05 266:ae588e75cfa4 54 uint32_t read_4byte(uint8_t* ptr)
prasanthbj05 266:ae588e75cfa4 55 {
prasanthbj05 266:ae588e75cfa4 56 uint32_t output = (uint32_t) (*(ptr+3));
prasanthbj05 266:ae588e75cfa4 57 output += (uint32_t)(*(ptr+2)<<8);
prasanthbj05 266:ae588e75cfa4 58 output += (uint32_t)(*(ptr+1)<<16);
prasanthbj05 266:ae588e75cfa4 59 output += (uint32_t)(*(ptr)<<24);
prasanthbj05 266:ae588e75cfa4 60 return output;
prasanthbj05 266:ae588e75cfa4 61 }
chaithanyarss 290:3159ff1081a2 62 #endif
prasanthbj05 266:ae588e75cfa4 63 uint8_t adjust(uint8_t size, uint8_t data, uint8_t* ptr , uint8_t space)
prasanthbj05 266:ae588e75cfa4 64 {
ee12b079 93:4d76de54a699 65 space = space&0x0f;
ee12b079 171:31bdf83591a1 66 if(space == 8) *ptr = 0;
ee12b079 93:4d76de54a699 67 data = data&((1<<size)-1);
ee12b079 93:4d76de54a699 68 if(space >= size){
ee12b079 93:4d76de54a699 69 *ptr += data<<(space-size);
ee12b079 93:4d76de54a699 70 if(space - size == 0){
ee12b079 93:4d76de54a699 71 return 0x18;
ee12b079 93:4d76de54a699 72 }else{
ee12b079 93:4d76de54a699 73 return space-size;
shreeshas95 1:a0055b3280c8 74 }
ee12b079 93:4d76de54a699 75 }else{
ee12b079 93:4d76de54a699 76 ptr[0] += data>>(size-space);
ee12b079 93:4d76de54a699 77 ptr[1] = (data<<(8-(size-space)))&0xff ;
ee12b079 93:4d76de54a699 78 return 0x10 + 8-(size - space);
ee12b079 93:4d76de54a699 79 }
ee12b079 93:4d76de54a699 80 }
prasanthbj05 266:ae588e75cfa4 81 int compress (int data, int x, int y) //to be compressed with scheme (msb x)*4^y ;
prasanthbj05 266:ae588e75cfa4 82 {
prasanthbj05 266:ae588e75cfa4 83 for(int i = 0 ; i < (1<<y) ; i++)
prasanthbj05 266:ae588e75cfa4 84 {
prasanthbj05 266:ae588e75cfa4 85 if(data <= ( (1<<x)-1) * (1<<(2*i)) )
prasanthbj05 266:ae588e75cfa4 86 {
ee12b079 93:4d76de54a699 87 return ( ((data>>i*2)<<y) + i);
shreeshas95 1:a0055b3280c8 88 }
ee12b079 93:4d76de54a699 89 }
chaithanyarss 331:1943be3fd178 90 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
prasanthbj05 266:ae588e75cfa4 91 {
prasanthbj05 266:ae588e75cfa4 92 //cout <<"compression exception"<<endl;
chaithanyarss 331:1943be3fd178 93 return (1<<(x+y))-1; //maximum value is nothing but a number with(x+y) bits with all 1's
ee12b079 93:4d76de54a699 94 }
ee12b079 93:4d76de54a699 95 }
chaithanyarss 331:1943be3fd178 96 int compress2 (int data, int x, int y) //to be compressed with scheme (msb x)*8^y;
chaithanyarss 331:1943be3fd178 97 {
chaithanyarss 331:1943be3fd178 98 for(int i = 0 ; i < (1<<y) ; i++)
chaithanyarss 331:1943be3fd178 99 {
chaithanyarss 331:1943be3fd178 100 if(data <= ( (1<<x)-1) * (1<<(3*i)) )
chaithanyarss 331:1943be3fd178 101 {
chaithanyarss 331:1943be3fd178 102 return ( ((data>>i*3)<<y) + i);
chaithanyarss 331:1943be3fd178 103 }
chaithanyarss 331:1943be3fd178 104 }
chaithanyarss 331:1943be3fd178 105 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
chaithanyarss 331:1943be3fd178 106 {
chaithanyarss 331:1943be3fd178 107 //cout <<"compression exception"<<endl;
chaithanyarss 331:1943be3fd178 108 return (1<<(x+y))-1; //maximum value is nothing but a number with(x+y) bits with all 1's
chaithanyarss 331:1943be3fd178 109 }
chaithanyarss 331:1943be3fd178 110 }
ee12b079 93:4d76de54a699 111
prasanthbj05 266:ae588e75cfa4 112 //--------------------------------------------------------beacon
prasanthbj05 266:ae588e75cfa4 113 uint8_t beacon_array[134];
prasanthbj05 266:ae588e75cfa4 114 uint8_t beacon_cntr = 1;
prasanthbj05 266:ae588e75cfa4 115 uint8_t *beacon_ptr;
prasanthbj05 266:ae588e75cfa4 116 //--------------------------------------------------------beacon
ee12b079 93:4d76de54a699 117
prasanthbj05 266:ae588e75cfa4 118 //variable declarations
prasanthbj05 266:ae588e75cfa4 119 uint8_t srp_mode , at , pzf , ezf ,sfp[71] ,scp[56],beacon_at; //tells which mode is calibrated or plot 0 for calibrated and 1 for scatterered, below threshold , proton zero flux, electron zero flux.
prasanthbj05 266:ae588e75cfa4 120 uint32_t sfp_bin[52] , scp_bin[52]; //storing the bin values.
prasanthbj05 266:ae588e75cfa4 121 uint32_t sfp_threshold_m0[52] = {124,124,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,4032,252,252,252,252,252,4032,8128,8128,8128,8128,8128,8128,8128,8128,960,960,960,960,960,960,960,960,960,960,960,960,4032,4032,4032,4032,8128,8128,8128,8128};
prasanthbj05 266:ae588e75cfa4 122 uint32_t scp_threshold_m0[52] = {4032,4032,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,114688,8128,4032,4032,4032,4032,114688,245760,245760,245760,245760,245760,245760,245760,245760,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,114688,114688,114688,114688,245760,245760,245760,245760};
prasanthbj05 266:ae588e75cfa4 123 uint32_t scp_threshold_m0_1[9] = {114688,245760,245760,245760,245760,114688,114688,65472,65472} ; //for callibrated mode with data conservation
prasanthbj05 266:ae588e75cfa4 124 uint32_t scp_sfp_threshold_m0_2[3] = {245760,65472,65472};
prasanthbj05 266:ae588e75cfa4 125 uint32_t sfp_threshold_m1[52] = {1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,8128,8128,8128,8128};
prasanthbj05 266:ae588e75cfa4 126 uint32_t scp_threshold_m1[52] = {114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,245760,245760,245760,245760};
ee12b079 171:31bdf83591a1 127 uint8_t frames[3][134] = {0};
ee12b079 171:31bdf83591a1 128 uint8_t position_tm_frame[3] = {8,11,5} , position_tm_starting[3] = {8,11,5}; //{sc,sf-bt,sf-at}
ee12b079 171:31bdf83591a1 129 uint8_t id; //sf = 0,sc-at = 1,sc-bt = 2;
ee12b079 171:31bdf83591a1 130 uint8_t TM_interleave_data[512] , TM_convoluted_data[270] = {0};
prasanthbj05 266:ae588e75cfa4 131 uint64_t proton_scp_sum,electron_scp_sum,FSC_science;
prasanthbj05 266:ae588e75cfa4 132 uint16_t temp_crc;
prasanthbj05 266:ae588e75cfa4 133 uint32_t debug_cntr, size,space,length;
ee12b079 171:31bdf83591a1 134 uint8_t *ptr ,* pointer;
prasanthbj05 266:ae588e75cfa4 135 uint64_t sci_time = 0, time_prev_scp = 0;
prasanthbj05 266:ae588e75cfa4 136 uint32_t attitude = 0;
prasanthbj05 266:ae588e75cfa4 137 uint32_t beacon_threshold[9] = {114688,245760,245760,245760,245760,114688,114688,65472,65472};
ee12b079 93:4d76de54a699 138
chaithanyarss 290:3159ff1081a2 139 /*----------------------------temporary counters used for testing purposes---------------------------*/
chaithanyarss 331:1943be3fd178 140 uint32_t test_fsc[4]={0,0,0,0};
chaithanyarss 290:3159ff1081a2 141 /*---------------------------------------------------------------------------------------------------*/
chaithanyarss 290:3159ff1081a2 142
chaithanyarss 290:3159ff1081a2 143
prasanthbj05 266:ae588e75cfa4 144 Convolution ConvObj;
prasanthbj05 266:ae588e75cfa4 145 void convolution (uint8_t * ptr){
prasanthbj05 266:ae588e75cfa4 146 ConvObj.convolutionEncode(ptr, TM_convoluted_data);
prasanthbj05 266:ae588e75cfa4 147 ConvObj.convolutionEncode(ptr + 67, TM_convoluted_data + 135);
prasanthbj05 266:ae588e75cfa4 148 }
chaithanyarss 331:1943be3fd178 149 #if test_science
chaithanyarss 331:1943be3fd178 150 char srp_calibrated[][34] = { //names of different bins in calibrated mode, refer to excel sheet having testcases
chaithanyarss 331:1943be3fd178 151 "NA", //packet sequnce count (not important here)
chaithanyarss 331:1943be3fd178 152 "NA", //science data mode + compression mode (not important here)
chaithanyarss 331:1943be3fd178 153 "proton energy",
chaithanyarss 331:1943be3fd178 154 "electron energy",
chaithanyarss 331:1943be3fd178 155 "Ion dEdX response",
chaithanyarss 331:1943be3fd178 156 "Ion bulk response",
chaithanyarss 331:1943be3fd178 157 "proton angles [0,40]",
chaithanyarss 331:1943be3fd178 158 "proton angles [40,50]",
chaithanyarss 331:1943be3fd178 159 "proton angles [50,60]",
chaithanyarss 331:1943be3fd178 160 "proton angles [60,70]",
chaithanyarss 331:1943be3fd178 161 "proton angles [70,80]",
chaithanyarss 331:1943be3fd178 162 "electron angles [0,60]",
chaithanyarss 331:1943be3fd178 163 "high energy protons and electrons",
chaithanyarss 331:1943be3fd178 164 "proton energy overlap events",
chaithanyarss 331:1943be3fd178 165 "dEdX & bulk & Veto counts",
chaithanyarss 331:1943be3fd178 166 "dEdX fast counts",
chaithanyarss 331:1943be3fd178 167 "bulk fast counts",
chaithanyarss 331:1943be3fd178 168 "veto fast counts"
chaithanyarss 331:1943be3fd178 169 };
chaithanyarss 331:1943be3fd178 170 char srp_scattered[][33] = { //names of different bins in scattered mode, refer to excel sheet having testcases
chaithanyarss 331:1943be3fd178 171 "NA",
chaithanyarss 331:1943be3fd178 172 "NA",
chaithanyarss 331:1943be3fd178 173 "dEdX & bulk & not veto 2d dEdX..",
chaithanyarss 331:1943be3fd178 174 "dEdX & bulk & veto counts",
chaithanyarss 331:1943be3fd178 175 "dEdX fast counts",
chaithanyarss 331:1943be3fd178 176 "bulk fast counts",
chaithanyarss 331:1943be3fd178 177 "veto fast counts"
chaithanyarss 331:1943be3fd178 178 };
chaithanyarss 331:1943be3fd178 179 #endif
chaithanyarss 331:1943be3fd178 180 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
chaithanyarss 331:1943be3fd178 181 1, //packet sequence count
chaithanyarss 331:1943be3fd178 182 0, //last bit for calibrated mode and next two bits for compression mode
chaithanyarss 331:1943be3fd178 183 20, //proton energy(18 bins)
chaithanyarss 331:1943be3fd178 184 60, //Electron energy(6 bins)
chaithanyarss 331:1943be3fd178 185 700, //Ion dEdX response
chaithanyarss 331:1943be3fd178 186 600, //Ion bulk response
chaithanyarss 331:1943be3fd178 187 100, //proton angles [0,40]
chaithanyarss 331:1943be3fd178 188 200, //proton angles [40,50]
chaithanyarss 331:1943be3fd178 189 500, //proton angles [50,60]
chaithanyarss 331:1943be3fd178 190 600, //proton angles [60,70]
chaithanyarss 331:1943be3fd178 191 720, //proton angles [70,80]
chaithanyarss 331:1943be3fd178 192 246, //electron angles [0,60]
chaithanyarss 331:1943be3fd178 193 10, //high energy protons and electrons
chaithanyarss 331:1943be3fd178 194 250, //proton energy overlap events
chaithanyarss 331:1943be3fd178 195 120, //dEdX & bulk & Veto counts
chaithanyarss 331:1943be3fd178 196 8129, //dEdX fast counts
chaithanyarss 331:1943be3fd178 197 3000, //bulk fast counts
chaithanyarss 331:1943be3fd178 198 4000 //veto fast counts
chaithanyarss 331:1943be3fd178 199 };
chaithanyarss 331:1943be3fd178 200 /*uint8_t calib_sfp_at_com[] = {0,0,0,0,700,600,100,200,500,600,720,246,10,250,120,3500,3000,4000};
chaithanyarss 331:1943be3fd178 201 uint8_t data_sfp_calib_at[][2] = {
chaithanyarss 331:1943be3fd178 202 {20,300} //64 bytes
chaithanyarss 331:1943be3fd178 203 {300,0}, //58 bytes
chaithanyarss 331:1943be3fd178 204 {0,300}, //43 bytes
chaithanyarss 331:1943be3fd178 205 {0,0} //36 bytes
chaithanyarss 331:1943be3fd178 206 }; //36 bytes
chaithanyarss 331:1943be3fd178 207 uint16_t packet_insert_dma(uint8_t *head,uint8_t size,uint16_t j)
chaithanyarss 331:1943be3fd178 208 {
chaithanyarss 331:1943be3fd178 209 if(size==64){
chaithanyarss 331:1943be3fd178 210 for(count=0;count<18;count++,j+=2){
chaithanyarss 331:1943be3fd178 211 head[j] = (calib_sfp_at_com[0][0]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 212 head[j+1] = (calib_sfp_at_com[0][0]) & 0xff;
chaithanyarss 331:1943be3fd178 213 }
chaithanyarss 331:1943be3fd178 214 for(count=0;count<6;count++,j+=2){
chaithanyarss 331:1943be3fd178 215 head[j] = (calib_sfp_at_com[0][1]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 216 head[j+1] = (calib_sfp_at_com[0][1]) & 0xff;
chaithanyarss 331:1943be3fd178 217 }
chaithanyarss 331:1943be3fd178 218 }
chaithanyarss 331:1943be3fd178 219 else if(size==58){
chaithanyarss 331:1943be3fd178 220 for(count=0;count<18;count++,j+=2){
chaithanyarss 331:1943be3fd178 221 head[j] = (calib_sfp_at_com[1][0]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 222 head[j+1] = (calib_sfp_at_com[1][0]) & 0xff;
chaithanyarss 331:1943be3fd178 223 }
chaithanyarss 331:1943be3fd178 224 for(count=0;count<6;count++,j+=2){
chaithanyarss 331:1943be3fd178 225 head[j] = (calib_sfp_at_com[1][1]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 226 head[j+1] = (calib_sfp_at_com[1][1]) & 0xff;
chaithanyarss 331:1943be3fd178 227 }
chaithanyarss 331:1943be3fd178 228 }
chaithanyarss 331:1943be3fd178 229 else if(size==43){
chaithanyarss 331:1943be3fd178 230 for(count=0;count<18;count++,j+=2){
chaithanyarss 331:1943be3fd178 231 head[j] = (calib_sfp_at_com[2][0]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 232 head[j+1] = (calib_sfp_at_com[2][0]) & 0xff;
chaithanyarss 331:1943be3fd178 233 }
chaithanyarss 331:1943be3fd178 234 for(count=0;count<6;count++,j+=2){
chaithanyarss 331:1943be3fd178 235 head[j] = (calib_sfp_at_com[2][1]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 236 head[j+1] = (calib_sfp_at_com[2][1]) & 0xff;
chaithanyarss 331:1943be3fd178 237 }
chaithanyarss 331:1943be3fd178 238 }
chaithanyarss 331:1943be3fd178 239 else if(size==36){
chaithanyarss 331:1943be3fd178 240 for(count=0;count<18;count++,j+=2){
chaithanyarss 331:1943be3fd178 241 head[j] = (calib_sfp_at_com[3][0]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 242 head[j+1] = (calib_sfp_at_com[3][0]) & 0xff;
chaithanyarss 331:1943be3fd178 243 }
chaithanyarss 331:1943be3fd178 244 for(count=0;count<6;count++,j+=2){
chaithanyarss 331:1943be3fd178 245 head[j] = (calib_sfp_at_com[3][1]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 246 head[j+1] = (calib_sfp_at_com[3][1]) & 0xff;
chaithanyarss 331:1943be3fd178 247 }
chaithanyarss 331:1943be3fd178 248 }
chaithanyarss 331:1943be3fd178 249 else{
chaithanyarss 331:1943be3fd178 250 gPC.printf("\n\rError: Invalid length in inserting packet DMA");
chaithanyarss 331:1943be3fd178 251 return 3;
chaithanyarss 331:1943be3fd178 252 }
chaithanyarss 331:1943be3fd178 253 for(count=0;count<4;count++,j+=2){
chaithanyarss 331:1943be3fd178 254 head[j] = (calib_sfp_at_com[4]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 255 head[j+1] = (calib_sfp_at_com[4]) & 0xff;
chaithanyarss 331:1943be3fd178 256 }
chaithanyarss 331:1943be3fd178 257 for(count=0;count<4;count++,j+=2){
chaithanyarss 331:1943be3fd178 258 head[j] = (calib_sfp_at_com[5]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 259 head[j+1] = (calib_sfp_at_com[5]) & 0xff;
chaithanyarss 331:1943be3fd178 260 }
chaithanyarss 331:1943be3fd178 261 for(uint8_t count2 = 0;count2<6;count2++)
chaithanyarss 331:1943be3fd178 262 for(uint8_t count=0;count<2;count++,j+=2){
chaithanyarss 331:1943be3fd178 263 head[j] = (calib_sfp_at_com[6+count2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 264 head[j+1] = (calib_sfp_at_com[6+count2]) & 0xff;
chaithanyarss 331:1943be3fd178 265 }
chaithanyarss 331:1943be3fd178 266 head[j++] = (calib_sfp_at_com[12]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 267 head[j++] = (calib_sfp_at_com[12]) & 0xff;
chaithanyarss 331:1943be3fd178 268 for(count=0;count<3;count++,j+=2){
chaithanyarss 331:1943be3fd178 269 head[j] = (calib_sfp_at_com[13]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 270 head[j+1] = (calib_sfp_at_com[13]) & 0xff;
chaithanyarss 331:1943be3fd178 271 }
chaithanyarss 331:1943be3fd178 272 for(uint8_t count2 =0;count2<4;count2++)
chaithanyarss 331:1943be3fd178 273 for(uint8_t count=0;count<1;count++,j+=4){
chaithanyarss 331:1943be3fd178 274 head[j] = (calib_sfp_at_com[14+count2]>>24) & 0xff;
chaithanyarss 331:1943be3fd178 275 head[j+1] = (calib_sfp_at_com[14+count2]>>16) & 0xff;
chaithanyarss 331:1943be3fd178 276 head[j+2] = (calib_sfp_at_com[14+count2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 277 head[j+3] = (calib_sfp_at_com[14+count2]) & 0xff;
chaithanyarss 331:1943be3fd178 278 }
chaithanyarss 331:1943be3fd178 279 return j;
chaithanyarss 331:1943be3fd178 280 }
chaithanyarss 331:1943be3fd178 281 void generate_dma_tmid2(uint8_t *head)
chaithanyarss 331:1943be3fd178 282 {
chaithanyarss 331:1943be3fd178 283 uint8_t dma_index = 3;
chaithanyarss 331:1943be3fd178 284 head[0] = 0;
chaithanyarss 331:1943be3fd178 285 head[1] = 1;
chaithanyarss 331:1943be3fd178 286 head[2] = 0;
chaithanyarss 331:1943be3fd178 287 for(uint8_t count=1;count<=2;count++){
chaithanyarss 331:1943be3fd178 288 dma_index = packet_insert_dma(head,64,dma_index);
chaithanyarss 331:1943be3fd178 289 dma_index = packet_insert_dma(head,58,dma_index);
chaithanyarss 331:1943be3fd178 290 dma_index = packet_insert_dma(head,43,dma_index);
chaithanyarss 331:1943be3fd178 291 dma_index = packet_insert_dma(head,36,dma_index);
chaithanyarss 331:1943be3fd178 292 }
chaithanyarss 331:1943be3fd178 293 }
chaithanyarss 331:1943be3fd178 294 */
chaithanyarss 331:1943be3fd178 295 //uint8_t data_sfp_scat_at10[] ={};
chaithanyarss 331:1943be3fd178 296 //uint8_t data_sfp_scat_at
chaithanyarss 331:1943be3fd178 297 /*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
chaithanyarss 331:1943be3fd178 298 1, //packet sequence count
chaithanyarss 331:1943be3fd178 299 0, //last bit for calibrated mode and next two bits for compression mode
chaithanyarss 331:1943be3fd178 300 1, //proton energy(18 bins)
chaithanyarss 331:1943be3fd178 301 60, //Electron energy(6 bins)
chaithanyarss 331:1943be3fd178 302 700, //Ion dEdX response
chaithanyarss 331:1943be3fd178 303 600, //Ion bulk response
chaithanyarss 331:1943be3fd178 304 100, //proton angles [0,40]
chaithanyarss 331:1943be3fd178 305 200, //proton angles [40,50]
chaithanyarss 331:1943be3fd178 306 500, //proton angles [50,60]
chaithanyarss 331:1943be3fd178 307 600, //proton angles [60,70]
chaithanyarss 331:1943be3fd178 308 720, //proton angles [70,80]
chaithanyarss 331:1943be3fd178 309 246, //electron angles [0,60]
chaithanyarss 331:1943be3fd178 310 10, //high energy protons and electrons
chaithanyarss 331:1943be3fd178 311 250, //proton energy overlap events
chaithanyarss 331:1943be3fd178 312 120, //dEdX & bulk & Veto counts
chaithanyarss 331:1943be3fd178 313 3500, //dEdX fast counts
chaithanyarss 331:1943be3fd178 314 3000, //bulk fast counts
chaithanyarss 331:1943be3fd178 315 4000 //veto fast counts
chaithanyarss 331:1943be3fd178 316 };*/
chaithanyarss 331:1943be3fd178 317 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
chaithanyarss 331:1943be3fd178 318 1, //packet sequence count
chaithanyarss 331:1943be3fd178 319 5, //last bit for scattered plot mode and next two bits for compression mode
chaithanyarss 331:1943be3fd178 320 1980, //dEdX & bulk & not veto 2d dEdX bulk response
chaithanyarss 331:1943be3fd178 321 10, //dEdX & bulk & veto counts
chaithanyarss 331:1943be3fd178 322 8100, //dEdX fast counts
chaithanyarss 331:1943be3fd178 323 1500, //bulk fast counts
chaithanyarss 331:1943be3fd178 324 10295 //veto fast counts
chaithanyarss 331:1943be3fd178 325 };
chaithanyarss 331:1943be3fd178 326 #if test_science
chaithanyarss 331:1943be3fd178 327 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];
chaithanyarss 331:1943be3fd178 328 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];
chaithanyarss 331:1943be3fd178 329 #endif
chaithanyarss 331:1943be3fd178 330 #if tabulation
chaithanyarss 331:1943be3fd178 331 uint8_t pack_curr_det,pack_prev_det,pack_split_det= 0,pack_buf[3][70] = {0};
chaithanyarss 331:1943be3fd178 332 uint8_t fsc_incomplete[3]={0},len_prev[3]={0},len_correct[3]={0},len_current;
ee12b079 93:4d76de54a699 333
chaithanyarss 331:1943be3fd178 334 //uint8_t test_tm[3][134] = {0};
chaithanyarss 331:1943be3fd178 335 uint64_t decompress(uint16_t data, uint8_t x,uint8_t y){ //x * 4^y
chaithanyarss 331:1943be3fd178 336 uint64_t value = 0;
chaithanyarss 331:1943be3fd178 337 value = ((data>>y)&((1<<x)-1))*(1<<(2*(data &((1<<y)-1))));
chaithanyarss 331:1943be3fd178 338 return value;
chaithanyarss 331:1943be3fd178 339 }
chaithanyarss 331:1943be3fd178 340 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)
chaithanyarss 331:1943be3fd178 341 uint64_t value = 0;
chaithanyarss 331:1943be3fd178 342 value = ((data>>y)&((1<<x)-1))*(1<<(3*(data &((1<<y)-1))));
chaithanyarss 331:1943be3fd178 343 return value;
chaithanyarss 331:1943be3fd178 344 }
chaithanyarss 331:1943be3fd178 345 uint8_t calc_length(uint8_t tmid,uint8_t srp_mode,uint8_t comp_opt,uint8_t zf){
chaithanyarss 331:1943be3fd178 346 uint16_t length;
chaithanyarss 331:1943be3fd178 347 if(tmid==1){
chaithanyarss 331:1943be3fd178 348 if(srp_mode == 0 && (comp_opt>>1 & 0x03) == 0){
chaithanyarss 331:1943be3fd178 349 if((comp_opt&0x01) == 0){
chaithanyarss 331:1943be3fd178 350 length = 228;
chaithanyarss 331:1943be3fd178 351 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 352 length += 121;
chaithanyarss 331:1943be3fd178 353 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 354 length +=41;
chaithanyarss 331:1943be3fd178 355 }else if((comp_opt&0x01) == 1){
chaithanyarss 331:1943be3fd178 356 length = 266;
chaithanyarss 331:1943be3fd178 357 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 358 length += 136;
chaithanyarss 331:1943be3fd178 359 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 360 length += 40;
chaithanyarss 331:1943be3fd178 361 }
chaithanyarss 331:1943be3fd178 362 }else if(srp_mode == 0 && (comp_opt>>1 & 0x03) == 1){ //data conservation mode
chaithanyarss 331:1943be3fd178 363 if((comp_opt&0x01) == 0){
chaithanyarss 331:1943be3fd178 364 length = 94;
chaithanyarss 331:1943be3fd178 365 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 366 length += 12;
chaithanyarss 331:1943be3fd178 367 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 368 length += 12;
chaithanyarss 331:1943be3fd178 369 }else if((comp_opt&0x01) == 1){
chaithanyarss 331:1943be3fd178 370 length = 123;
chaithanyarss 331:1943be3fd178 371 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 372 length += 9;
chaithanyarss 331:1943be3fd178 373 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 374 length += 9;
chaithanyarss 331:1943be3fd178 375 }
chaithanyarss 331:1943be3fd178 376 }
chaithanyarss 331:1943be3fd178 377 else if( srp_mode == 1){
chaithanyarss 331:1943be3fd178 378 if((comp_opt&0x01) == 0)
chaithanyarss 331:1943be3fd178 379 length = 368;
chaithanyarss 331:1943be3fd178 380 else if((comp_opt&0x01) == 1)
chaithanyarss 331:1943be3fd178 381 length = 432;
chaithanyarss 331:1943be3fd178 382 }
chaithanyarss 331:1943be3fd178 383 else if(((comp_opt>>1 & 0x03)==2)&&(srp_mode==0))
chaithanyarss 331:1943be3fd178 384 {
chaithanyarss 331:1943be3fd178 385 if((comp_opt&0x01) == 0){
chaithanyarss 331:1943be3fd178 386 length = 31;
chaithanyarss 331:1943be3fd178 387 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 388 length += 12;
chaithanyarss 331:1943be3fd178 389 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 390 length += 12;
chaithanyarss 331:1943be3fd178 391 }else if((comp_opt&0x01) == 1){
chaithanyarss 331:1943be3fd178 392 length = 36;
chaithanyarss 331:1943be3fd178 393 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 394 length += 9;
chaithanyarss 331:1943be3fd178 395 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 396 length += 9;
chaithanyarss 331:1943be3fd178 397 }
chaithanyarss 331:1943be3fd178 398 }
chaithanyarss 331:1943be3fd178 399 else if(((comp_opt>>1 & 0x03)==2)&&(srp_mode==1))
chaithanyarss 331:1943be3fd178 400 {
chaithanyarss 331:1943be3fd178 401 length = 56;
chaithanyarss 331:1943be3fd178 402 }
chaithanyarss 331:1943be3fd178 403 }
chaithanyarss 331:1943be3fd178 404 else if(tmid==2){
chaithanyarss 331:1943be3fd178 405 if(srp_mode==0){
chaithanyarss 331:1943be3fd178 406 length = 288;
chaithanyarss 331:1943be3fd178 407 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 408 length += 170;
chaithanyarss 331:1943be3fd178 409 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 410 length += 50;
chaithanyarss 331:1943be3fd178 411 }
chaithanyarss 331:1943be3fd178 412 else if(srp_mode==1)
chaithanyarss 331:1943be3fd178 413 length = 568;
chaithanyarss 331:1943be3fd178 414 }
chaithanyarss 331:1943be3fd178 415 else if(tmid==3){
chaithanyarss 331:1943be3fd178 416 if(srp_mode==0){
chaithanyarss 331:1943be3fd178 417 length = 241;
chaithanyarss 331:1943be3fd178 418 if(((zf>>1)&0x01) == 0)
chaithanyarss 331:1943be3fd178 419 length += 87;
chaithanyarss 331:1943be3fd178 420 if((zf&0x01) == 0)
chaithanyarss 331:1943be3fd178 421 length += 35;
chaithanyarss 331:1943be3fd178 422 }
chaithanyarss 331:1943be3fd178 423 else if(srp_mode==1)
chaithanyarss 331:1943be3fd178 424 length = 384;
chaithanyarss 331:1943be3fd178 425 }
chaithanyarss 331:1943be3fd178 426 length = (length%8==0)?(length/8):(length/8)+1;
chaithanyarss 331:1943be3fd178 427 return (uint8_t)length;
chaithanyarss 331:1943be3fd178 428 }
chaithanyarss 331:1943be3fd178 429 uint64_t decode(uint8_t size,uint8_t *space,uint8_t **ptr){
chaithanyarss 331:1943be3fd178 430 /* This function accepts a double pointer, pointing to the header pointer of an array,
chaithanyarss 331:1943be3fd178 431 example if TM[135] is a telemetry array, then create a new "temporary" pointer as ptr=&TM and pass &ptr to the function
chaithanyarss 331:1943be3fd178 432 Given this pointer and size, this function reads the number of bits(=size) and returns the decimal value and updates (*space).
chaithanyarss 331:1943be3fd178 433 "space" is nothing but how many bits have been not been read in the current byte.
chaithanyarss 331:1943be3fd178 434 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
chaithanyarss 331:1943be3fd178 435 This function can be used to decode bins(which have varying number of bits) from telemetry
chaithanyarss 331:1943be3fd178 436 */
chaithanyarss 331:1943be3fd178 437 uint64_t data = 0;
chaithanyarss 331:1943be3fd178 438 while(size!=0){
chaithanyarss 331:1943be3fd178 439 if((*space)>=size){
chaithanyarss 331:1943be3fd178 440 data |= (((**ptr)>>((*space)-size)) & ((1<<size)-1));
chaithanyarss 331:1943be3fd178 441 (*space) = (*space)-size;
chaithanyarss 331:1943be3fd178 442 size = 0;
chaithanyarss 331:1943be3fd178 443 }
chaithanyarss 331:1943be3fd178 444 else{
chaithanyarss 331:1943be3fd178 445 data |= (((**ptr) & ((1<<(*space))-1))<<(size-(*space)));
chaithanyarss 331:1943be3fd178 446 size -= (*space);
chaithanyarss 331:1943be3fd178 447 (*space) = 8;
chaithanyarss 331:1943be3fd178 448 (*ptr)++;
chaithanyarss 331:1943be3fd178 449 }
chaithanyarss 331:1943be3fd178 450 }
chaithanyarss 331:1943be3fd178 451 return data;
chaithanyarss 331:1943be3fd178 452 }
chaithanyarss 331:1943be3fd178 453 uint8_t print_packet(uint8_t tmid,uint8_t *ptr)
chaithanyarss 331:1943be3fd178 454 {
chaithanyarss 331:1943be3fd178 455 //prints each bin values of a packet in a row separated by tab spaces and returns the length of the packet printed
chaithanyarss 331:1943be3fd178 456 uint8_t *temp,space;
chaithanyarss 331:1943be3fd178 457 uint8_t len = 0;
chaithanyarss 331:1943be3fd178 458 temp = ptr; space = 8;
chaithanyarss 331:1943be3fd178 459 uint8_t temp_x,srp_mode; //temp_x = header(compression option)
chaithanyarss 331:1943be3fd178 460 uint8_t pzf=0,ezf=0;
chaithanyarss 331:1943be3fd178 461 if(tmid==1) //SCP packet
chaithanyarss 331:1943be3fd178 462 {
chaithanyarss 331:1943be3fd178 463 gPC.printf("\n\r%d",decode(1,&space,&temp));
chaithanyarss 331:1943be3fd178 464 gPC.printf("\t%d",decode(6,&space,&temp));
chaithanyarss 331:1943be3fd178 465 gPC.printf("\t%d",decode(7,&space,&temp));
chaithanyarss 331:1943be3fd178 466 gPC.printf("\t%d",decode(4,&space,&temp));
chaithanyarss 331:1943be3fd178 467 temp_x = decode(3,&space,&temp);
chaithanyarss 331:1943be3fd178 468 gPC.printf("\t%d",temp_x);
chaithanyarss 331:1943be3fd178 469 srp_mode = decode(1,&space,&temp);
chaithanyarss 331:1943be3fd178 470 gPC.printf("\t%d",srp_mode);
chaithanyarss 331:1943be3fd178 471 if((temp_x>>1 & 0x03)!=2){
chaithanyarss 331:1943be3fd178 472 gPC.printf("\t%d",decode(24,&space,&temp)); //SFP_AT starting counter not present in extreme conservation mode
chaithanyarss 331:1943be3fd178 473 }
chaithanyarss 331:1943be3fd178 474 if(srp_mode==0){ //scp calibrated
chaithanyarss 331:1943be3fd178 475 pzf = decode(1,&space,&temp);
chaithanyarss 331:1943be3fd178 476 ezf = decode(1,&space,&temp);
chaithanyarss 331:1943be3fd178 477 gPC.printf("\t%d",pzf);
chaithanyarss 331:1943be3fd178 478 gPC.printf("\t%d",ezf);
chaithanyarss 331:1943be3fd178 479 len = calc_length(tmid,srp_mode,temp_x,((uint8_t)((pzf<<1)|ezf)));
chaithanyarss 331:1943be3fd178 480 if(temp_x==0){
chaithanyarss 331:1943be3fd178 481 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 482 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 483 }
chaithanyarss 331:1943be3fd178 484 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 485 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 486 }
chaithanyarss 331:1943be3fd178 487 for(uint8_t i=0;i<12;i++){
chaithanyarss 331:1943be3fd178 488 if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(5,&space,&temp),2,3)); if(i%2==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 489 }
chaithanyarss 331:1943be3fd178 490 }
chaithanyarss 331:1943be3fd178 491 if(temp_x==1){
chaithanyarss 331:1943be3fd178 492 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 493 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 494 }
chaithanyarss 331:1943be3fd178 495 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 496 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),4,3)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 497 }
chaithanyarss 331:1943be3fd178 498 for(uint8_t i=0;i<12;i++){
chaithanyarss 331:1943be3fd178 499 if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress2(decode(5,&space,&temp),2,3)); if(i%2==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 500 }
chaithanyarss 331:1943be3fd178 501 }
chaithanyarss 331:1943be3fd178 502 if(temp_x==0){ //SCP calibrated below threshold
chaithanyarss 331:1943be3fd178 503 gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3));
chaithanyarss 331:1943be3fd178 504 for(uint8_t i=0;i<3;i++){
chaithanyarss 331:1943be3fd178 505 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),3,3)); if(i!=2){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 506 }
chaithanyarss 331:1943be3fd178 507 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 508 gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3));
chaithanyarss 331:1943be3fd178 509 }
chaithanyarss 331:1943be3fd178 510 for(uint8_t i=0;i<2;i++)
chaithanyarss 331:1943be3fd178 511 gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3));
chaithanyarss 331:1943be3fd178 512 if(pzf==0){
chaithanyarss 331:1943be3fd178 513 for(uint8_t i=0;i<2;i++){
chaithanyarss 331:1943be3fd178 514 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),6,2)); if(i==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 515 }
chaithanyarss 331:1943be3fd178 516 for(uint8_t i=0;i<15;i++){
chaithanyarss 331:1943be3fd178 517 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),5,2)); if(i!=14){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 518 }
chaithanyarss 331:1943be3fd178 519 }
chaithanyarss 331:1943be3fd178 520 else{
chaithanyarss 331:1943be3fd178 521 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 522 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 523 }
chaithanyarss 331:1943be3fd178 524 if(ezf==0){
chaithanyarss 331:1943be3fd178 525 gPC.printf("\t%d",decompress(decode(9,&space,&temp),7,2));
chaithanyarss 331:1943be3fd178 526 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 527 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),7,2)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 528 }
chaithanyarss 331:1943be3fd178 529 }
chaithanyarss 331:1943be3fd178 530 else{
chaithanyarss 331:1943be3fd178 531 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 532 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 533 }
chaithanyarss 331:1943be3fd178 534 }
chaithanyarss 331:1943be3fd178 535 else if(temp_x==1){ //SCP calibrated above threshold
chaithanyarss 331:1943be3fd178 536 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 537 for(uint8_t i=0;i<3;i++){
chaithanyarss 331:1943be3fd178 538 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(9,&space,&temp),6,3)); if(i!=2){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 539 }
chaithanyarss 331:1943be3fd178 540 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 541 gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3));
chaithanyarss 331:1943be3fd178 542 }
chaithanyarss 331:1943be3fd178 543 for(uint8_t i=0;i<2;i++){
chaithanyarss 331:1943be3fd178 544 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 545 }
chaithanyarss 331:1943be3fd178 546 if(pzf==0){
chaithanyarss 331:1943be3fd178 547 for(uint8_t i=0;i<2;i++){
chaithanyarss 331:1943be3fd178 548 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),5,3)); if(i==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 549 }
chaithanyarss 331:1943be3fd178 550 for(uint8_t i=0;i<15;i++){
chaithanyarss 331:1943be3fd178 551 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),5,3)); if(i!=14){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 552 }
chaithanyarss 331:1943be3fd178 553 }
chaithanyarss 331:1943be3fd178 554 else{
chaithanyarss 331:1943be3fd178 555 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 556 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 557 }
chaithanyarss 331:1943be3fd178 558 if(ezf==0){
chaithanyarss 331:1943be3fd178 559 gPC.printf("\t%d",decompress(decode(8,&space,&temp),5,3));
chaithanyarss 331:1943be3fd178 560 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 561 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),5,3)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 562 }
chaithanyarss 331:1943be3fd178 563 }
chaithanyarss 331:1943be3fd178 564 else{
chaithanyarss 331:1943be3fd178 565 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 566 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 567 }
chaithanyarss 331:1943be3fd178 568 }
chaithanyarss 331:1943be3fd178 569 else if(temp_x ==2){
chaithanyarss 331:1943be3fd178 570 gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3));
chaithanyarss 331:1943be3fd178 571 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 572 gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3));
chaithanyarss 331:1943be3fd178 573 }
chaithanyarss 331:1943be3fd178 574 gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3));
chaithanyarss 331:1943be3fd178 575 gPC.printf("\t%d",decompress(decode(6,&space,&temp),3,3));
chaithanyarss 331:1943be3fd178 576 gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2));
chaithanyarss 331:1943be3fd178 577 gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2));
chaithanyarss 331:1943be3fd178 578 }
chaithanyarss 331:1943be3fd178 579 else if(temp_x==3){
chaithanyarss 331:1943be3fd178 580 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 581 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 582 gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3));
chaithanyarss 331:1943be3fd178 583 }
chaithanyarss 331:1943be3fd178 584 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 585 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 586 }
chaithanyarss 331:1943be3fd178 587 }
chaithanyarss 331:1943be3fd178 588 else if(temp_x==4){
chaithanyarss 331:1943be3fd178 589 gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3));
chaithanyarss 331:1943be3fd178 590 gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2));
chaithanyarss 331:1943be3fd178 591 gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2));
chaithanyarss 331:1943be3fd178 592 }
chaithanyarss 331:1943be3fd178 593 else if(temp_x==5){
chaithanyarss 331:1943be3fd178 594 gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3));
chaithanyarss 331:1943be3fd178 595 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 596 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 597 }
chaithanyarss 331:1943be3fd178 598 }
chaithanyarss 331:1943be3fd178 599 else if(srp_mode==1){ //scattered mode
chaithanyarss 331:1943be3fd178 600 len = calc_length(tmid,srp_mode,temp_x,0);
chaithanyarss 331:1943be3fd178 601 if(temp_x==0){
chaithanyarss 331:1943be3fd178 602 for(uint8_t i=0;i<48;i++){
chaithanyarss 331:1943be3fd178 603 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),3,3)); if(i!=47){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 604 }
chaithanyarss 331:1943be3fd178 605 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 606 gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3));
chaithanyarss 331:1943be3fd178 607 }
chaithanyarss 331:1943be3fd178 608 }
chaithanyarss 331:1943be3fd178 609 else if(temp_x==1){
chaithanyarss 331:1943be3fd178 610 gPC.printf("\t%d",2*decompress(decode(7,&space,&temp),4,3));
chaithanyarss 331:1943be3fd178 611 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 612 gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3));
chaithanyarss 331:1943be3fd178 613 }
chaithanyarss 331:1943be3fd178 614 }
chaithanyarss 331:1943be3fd178 615 else if(temp_x==4){
chaithanyarss 331:1943be3fd178 616 gPC.printf("\t%d",decompress(decode(7,&space,&temp),4,3));
chaithanyarss 331:1943be3fd178 617 gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2));
chaithanyarss 331:1943be3fd178 618 gPC.printf("\t%d",decompress(decode(12,&space,&temp),10,2));
chaithanyarss 331:1943be3fd178 619 }
chaithanyarss 331:1943be3fd178 620 else if(temp_x==5){
chaithanyarss 331:1943be3fd178 621 gPC.printf("\t%d",decompress(decode(12,&space,&temp),9,3));
chaithanyarss 331:1943be3fd178 622 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 623 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 624 }
chaithanyarss 331:1943be3fd178 625 }
chaithanyarss 331:1943be3fd178 626 }
chaithanyarss 331:1943be3fd178 627 else{
chaithanyarss 331:1943be3fd178 628 if(tmid==2){
chaithanyarss 331:1943be3fd178 629 gPC.printf("\n\r%d",decode(2,&space,&temp)); //splitting first 35 bits of time into year,month.......
chaithanyarss 331:1943be3fd178 630 gPC.printf("\t%d",decode(4,&space,&temp));
chaithanyarss 331:1943be3fd178 631 gPC.printf("\t%d",decode(5,&space,&temp));
chaithanyarss 331:1943be3fd178 632 gPC.printf("\t%d",decode(5,&space,&temp));
chaithanyarss 331:1943be3fd178 633 gPC.printf("\t%d",decode(6,&space,&temp));
chaithanyarss 331:1943be3fd178 634 gPC.printf("\t%d",decode(6,&space,&temp));
chaithanyarss 331:1943be3fd178 635 gPC.printf("\t%d",decode(7,&space,&temp)); //time ends here
chaithanyarss 331:1943be3fd178 636 }
chaithanyarss 331:1943be3fd178 637 if(tmid==3)
chaithanyarss 331:1943be3fd178 638 gPC.printf("\n\r");
chaithanyarss 331:1943be3fd178 639 gPC.printf("\t%d",decode(4,&space,&temp));
chaithanyarss 331:1943be3fd178 640 gPC.printf("\t%d",decode(6,&space,&temp));
chaithanyarss 331:1943be3fd178 641 srp_mode = decode(1,&space,&temp);
chaithanyarss 331:1943be3fd178 642 gPC.printf("\t%d",srp_mode);
chaithanyarss 331:1943be3fd178 643 if(srp_mode==0){
chaithanyarss 331:1943be3fd178 644 //gPC.printf("\n\rspace before pzf = %d",space);
chaithanyarss 331:1943be3fd178 645 pzf = decode(1,&space,&temp);
chaithanyarss 331:1943be3fd178 646 //gPC.printf("\n\rspace after pzf = %d",space);
chaithanyarss 331:1943be3fd178 647 ezf = decode(1,&space,&temp);
chaithanyarss 331:1943be3fd178 648 //gPC.printf("\n\rspace after pzf = %d",space);
chaithanyarss 331:1943be3fd178 649 gPC.printf("\t%d",pzf);
chaithanyarss 331:1943be3fd178 650 gPC.printf("\t%d",ezf);
chaithanyarss 331:1943be3fd178 651 len = calc_length(tmid,srp_mode,0,((uint8_t)((pzf<<1)|ezf)));
chaithanyarss 331:1943be3fd178 652 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 653 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(9,&space,&temp),7,2)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 654 }
chaithanyarss 331:1943be3fd178 655 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 656 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(9,&space,&temp),7,2)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 657 }
chaithanyarss 331:1943be3fd178 658 if(tmid==2){
chaithanyarss 331:1943be3fd178 659 for(uint8_t i=0;i<12;i++){
chaithanyarss 331:1943be3fd178 660 if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),3,3)); if(i%2==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 661 }
chaithanyarss 331:1943be3fd178 662 gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2));
chaithanyarss 331:1943be3fd178 663 for(uint8_t i=0;i<3;i++){
chaithanyarss 331:1943be3fd178 664 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=2){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 665 }
chaithanyarss 331:1943be3fd178 666 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 667 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 668 }
chaithanyarss 331:1943be3fd178 669 gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2));
chaithanyarss 331:1943be3fd178 670 gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2));
chaithanyarss 331:1943be3fd178 671 if(pzf==0){
chaithanyarss 331:1943be3fd178 672 for(uint8_t i=0;i<2;i++){
chaithanyarss 331:1943be3fd178 673 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 674 }
chaithanyarss 331:1943be3fd178 675 for(uint8_t i=0;i<15;i++){
chaithanyarss 331:1943be3fd178 676 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=14){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 677 }
chaithanyarss 331:1943be3fd178 678 }
chaithanyarss 331:1943be3fd178 679 else{
chaithanyarss 331:1943be3fd178 680 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 681 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 682 }
chaithanyarss 331:1943be3fd178 683 if(ezf==0){
chaithanyarss 331:1943be3fd178 684 gPC.printf("\t%d",decompress(decode(10,&space,&temp),8,2));
chaithanyarss 331:1943be3fd178 685 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 686 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 687 }
chaithanyarss 331:1943be3fd178 688 }
chaithanyarss 331:1943be3fd178 689 else{
chaithanyarss 331:1943be3fd178 690 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 691 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 692 }
chaithanyarss 331:1943be3fd178 693 }
chaithanyarss 331:1943be3fd178 694 else if(tmid==3){
chaithanyarss 331:1943be3fd178 695 for(uint8_t i=0;i<12;i++){
chaithanyarss 331:1943be3fd178 696 if(i%2==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),4,2)); if(i%2==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 697 }
chaithanyarss 331:1943be3fd178 698 gPC.printf("\t%d",decompress(decode(8,&space,&temp),6,2));
chaithanyarss 331:1943be3fd178 699 for(uint8_t i=0;i<3;i++){
chaithanyarss 331:1943be3fd178 700 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(8,&space,&temp),6,2)); if(i!=2){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 701 }
chaithanyarss 331:1943be3fd178 702 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 703 gPC.printf("\t%d",decompress(decode(9,&space,&temp),7,2));
chaithanyarss 331:1943be3fd178 704 }
chaithanyarss 331:1943be3fd178 705 gPC.printf("\t%d",decompress(decode(8,&space,&temp),6,2));
chaithanyarss 331:1943be3fd178 706 gPC.printf("\t%d",decompress(decode(8,&space,&temp),6,2));
chaithanyarss 331:1943be3fd178 707 if(pzf==0){
chaithanyarss 331:1943be3fd178 708 for(uint8_t i=0;i<2;i++){
chaithanyarss 331:1943be3fd178 709 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(6,&space,&temp),5,1)); if(i==0){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 710 }
chaithanyarss 331:1943be3fd178 711 for(uint8_t i=0;i<15;i++){
chaithanyarss 331:1943be3fd178 712 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(5,&space,&temp),4,1)); if(i!=14){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 713 }
chaithanyarss 331:1943be3fd178 714 }
chaithanyarss 331:1943be3fd178 715 else{
chaithanyarss 331:1943be3fd178 716 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 717 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 718 }
chaithanyarss 331:1943be3fd178 719 if(ezf==0){
chaithanyarss 331:1943be3fd178 720 gPC.printf("\t%d",decompress(decode(7,&space,&temp),6,1));
chaithanyarss 331:1943be3fd178 721 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 722 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),6,1)); if(i!=3){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 723 }
chaithanyarss 331:1943be3fd178 724 }
chaithanyarss 331:1943be3fd178 725 else{
chaithanyarss 331:1943be3fd178 726 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 727 gPC.printf("\tNA");
chaithanyarss 331:1943be3fd178 728 }
chaithanyarss 331:1943be3fd178 729 }
chaithanyarss 331:1943be3fd178 730 }
chaithanyarss 331:1943be3fd178 731 else if(srp_mode==1){
chaithanyarss 331:1943be3fd178 732 len = calc_length(tmid,srp_mode,0,((uint8_t)((pzf<<1)|ezf)));
chaithanyarss 331:1943be3fd178 733 if(tmid==2){
chaithanyarss 331:1943be3fd178 734 for(uint8_t i=0;i<48;i++){
chaithanyarss 331:1943be3fd178 735 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(10,&space,&temp),8,2)); if(i!=47){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 736 }
chaithanyarss 331:1943be3fd178 737 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 738 gPC.printf("\t%d",decompress(decode(9,&space,&temp),6,3));
chaithanyarss 331:1943be3fd178 739 }
chaithanyarss 331:1943be3fd178 740 }
chaithanyarss 331:1943be3fd178 741 else if(tmid==3){
chaithanyarss 331:1943be3fd178 742 for(uint8_t i=0;i<48;i++){
chaithanyarss 331:1943be3fd178 743 if(i==0){gPC.printf("\t");} gPC.printf("%d",decompress(decode(7,&space,&temp),5,2)); if(i!=47){gPC.printf(",");}
chaithanyarss 331:1943be3fd178 744 }
chaithanyarss 331:1943be3fd178 745 for(uint8_t i=0;i<4;i++){
chaithanyarss 331:1943be3fd178 746 gPC.printf("\t%d",decompress(decode(9,&space,&temp),7,2));
chaithanyarss 331:1943be3fd178 747 }
chaithanyarss 331:1943be3fd178 748 }
chaithanyarss 331:1943be3fd178 749 }
chaithanyarss 331:1943be3fd178 750 }
chaithanyarss 331:1943be3fd178 751 return len;
chaithanyarss 331:1943be3fd178 752 }
chaithanyarss 331:1943be3fd178 753 #endif
chaithanyarss 331:1943be3fd178 754 void print_headings(uint8_t *pack_curr_det){
chaithanyarss 331:1943be3fd178 755 switch(((*pack_curr_det) & 0x3F)){
chaithanyarss 331:1943be3fd178 756 case 0x10: gPC.printf("\n\n\r----------------------------SCP_BT calibrated mode-----------------------------");
chaithanyarss 331:1943be3fd178 757 break;
chaithanyarss 331:1943be3fd178 758 case 0x12: gPC.printf("\n\n\r----------------------------SCP_AT calibrated mode-----------------------------");
chaithanyarss 331:1943be3fd178 759 break;
chaithanyarss 331:1943be3fd178 760 case 0x14: gPC.printf("\n\n\r-----------------SCP_BT calibrated with data conservation mode-----------------");
chaithanyarss 331:1943be3fd178 761 break;
chaithanyarss 331:1943be3fd178 762 case 0x16: gPC.printf("\n\n\r-----------------SCP_AT calibrated with data conservation mode-----------------");
chaithanyarss 331:1943be3fd178 763 break;
chaithanyarss 331:1943be3fd178 764 case 0x18: gPC.printf("\n\n\r----------------SCP_BT calibrated with extreme conservation mode---------------");
chaithanyarss 331:1943be3fd178 765 break;
chaithanyarss 331:1943be3fd178 766 case 0x1A: gPC.printf("\n\n\r----------------SCP_AT calibrated with extreme conservation mode---------------");
chaithanyarss 331:1943be3fd178 767 break;
chaithanyarss 331:1943be3fd178 768 case 0x11: gPC.printf("\n\n\r---------------------------SCP_BT scattered plot mode--------------------------");
chaithanyarss 331:1943be3fd178 769 break;
chaithanyarss 331:1943be3fd178 770 case 0x13: gPC.printf("\n\n\r---------------------------SCP_AT scattered plot mode--------------------------");
chaithanyarss 331:1943be3fd178 771 break;
chaithanyarss 331:1943be3fd178 772 case 0x19: gPC.printf("\n\n\r--------------SCP_BT scattered plot with extreme conservation mode-------------");
chaithanyarss 331:1943be3fd178 773 break;
chaithanyarss 331:1943be3fd178 774 case 0x1B: gPC.printf("\n\n\r--------------SCP_AT scattered plot with extreme conservation mode-------------");
chaithanyarss 331:1943be3fd178 775 break;
chaithanyarss 331:1943be3fd178 776 case 0x20: gPC.printf("\n\n\r---------------------------SFP_BT calibrated mode--------------------------");
chaithanyarss 331:1943be3fd178 777 break;
chaithanyarss 331:1943be3fd178 778 case 0x22: gPC.printf("\n\n\r---------------------------SFP_AT calibrated mode--------------------------");
chaithanyarss 331:1943be3fd178 779 break;
chaithanyarss 331:1943be3fd178 780 case 0x30: gPC.printf("\n\n\r---------------------------SFP_BT calibrated mode--------------------------");
chaithanyarss 331:1943be3fd178 781 break;
chaithanyarss 331:1943be3fd178 782 case 0x32: gPC.printf("\n\n\r---------------------------SFP_AT calibrated mode--------------------------");
chaithanyarss 331:1943be3fd178 783 break;
chaithanyarss 331:1943be3fd178 784 case 0x21: gPC.printf("\n\n\r---------------------------SFP_BT scattered plot mode--------------------------");
chaithanyarss 331:1943be3fd178 785 break;
chaithanyarss 331:1943be3fd178 786 case 0x23: gPC.printf("\n\n\r---------------------------SFP_AT scattered plot mode--------------------------");
chaithanyarss 331:1943be3fd178 787 break;
chaithanyarss 331:1943be3fd178 788 case 0x31: gPC.printf("\n\n\r---------------------------SFP_BT scattered plot mode--------------------------");
chaithanyarss 331:1943be3fd178 789 break;
chaithanyarss 331:1943be3fd178 790 case 0x33: gPC.printf("\n\n\r---------------------------SFP_AT scattered plot mode--------------------------");
chaithanyarss 331:1943be3fd178 791 break;
chaithanyarss 331:1943be3fd178 792 default: gPC.printf("\n\n\rxxxxxxxxxxxxxxxxxxxx INVALID packet type xxxxxxxxxxxxxxxxxxxxxx");
chaithanyarss 331:1943be3fd178 793 break;
chaithanyarss 331:1943be3fd178 794 }
chaithanyarss 331:1943be3fd178 795 }
chaithanyarss 331:1943be3fd178 796 #if tabulation
chaithanyarss 331:1943be3fd178 797 void clear_buffer(uint8_t index){ //index = tmid-1;
chaithanyarss 331:1943be3fd178 798 for(uint8_t i=0;i<70;i++)
chaithanyarss 331:1943be3fd178 799 pack_buf[index][i] = 0;
chaithanyarss 331:1943be3fd178 800 fsc_incomplete[index] = 0;
chaithanyarss 331:1943be3fd178 801 len_prev[index] = 0;
chaithanyarss 331:1943be3fd178 802 len_correct[index] = 0;
chaithanyarss 331:1943be3fd178 803 pack_split_det &= (~(0x01<<(index))); //making the corresponding tmid bit 0 to indicate buffer is empty
chaithanyarss 331:1943be3fd178 804 }
chaithanyarss 331:1943be3fd178 805 void tabulate_TM(uint8_t *ptr){
chaithanyarss 331:1943be3fd178 806 /* This function prints the TM packets info in the form of a table so that the data can be used to verify decoding
chaithanyarss 331:1943be3fd178 807 at the Ground Station(GS)."ptr" is the pointer to the TM frame extracted from SD card before transmitting to GS
chaithanyarss 331:1943be3fd178 808 */
chaithanyarss 331:1943be3fd178 809 pack_curr_det = 0;
chaithanyarss 331:1943be3fd178 810 uint32_t fsc_TM; //to store the FSC of the current TM
chaithanyarss 331:1943be3fd178 811 uint8_t tmid = (ptr[0]>>3)&0x0f,temp_index;
chaithanyarss 331:1943be3fd178 812 pack_curr_det |= (ptr[0]<<1)& 0x30; //3rd and 4th bits(MSB) = tmid
chaithanyarss 331:1943be3fd178 813 if(tmid==1||tmid==2){ //the TMID corresponds to SCP or SFP_AT(both have FSC at the same location in the frame)
chaithanyarss 331:1943be3fd178 814 fsc_TM &= 0x00000000;
chaithanyarss 331:1943be3fd178 815 fsc_TM |= (((uint32_t)(ptr[1]<<16))&0x00ff0000);
chaithanyarss 331:1943be3fd178 816 fsc_TM |= (((uint32_t)(ptr[2]<<8)) &0x0000ff00);
chaithanyarss 331:1943be3fd178 817 fsc_TM |= (((uint32_t)(ptr[3])) &0x000000ff);
chaithanyarss 331:1943be3fd178 818 gPC.printf("\n\n\rFrame sequence count(tmid=%d): %d---------------------------------------------------------",tmid,fsc_TM);
chaithanyarss 331:1943be3fd178 819 if(tmid==1){
chaithanyarss 331:1943be3fd178 820 gPC.printf("\n\rYear:%d\tMon:%d\tDate:%d",((ptr[5]>>4)&0x03),(ptr[5]&0x0f),((ptr[6]>>3)&0x1f));
chaithanyarss 331:1943be3fd178 821 gPC.printf("\tHour:%d\tMin:%d\n\r",((ptr[6]&0x07)<<2)|((ptr[7]&0xC0)>>6),ptr[7]&0x3f);
chaithanyarss 331:1943be3fd178 822 }
chaithanyarss 331:1943be3fd178 823 if(ptr[4]!=(11-(3*tmid))){ //there is an incomplete packet present at the start of the current frame
chaithanyarss 331:1943be3fd178 824 if(!((pack_split_det>>(tmid-1))&0x01)){
chaithanyarss 331:1943be3fd178 825 gPC.printf("\n\rError: TMID = %d frame contains split packet but buffer empty----------------------\n",tmid);
chaithanyarss 331:1943be3fd178 826 pack_split_det |= 0x08; //4 th bit (from LSB) if equal to 1 indicates error in packet splitting
chaithanyarss 331:1943be3fd178 827 }
chaithanyarss 331:1943be3fd178 828 if((fsc_TM-1)!=(fsc_incomplete[tmid-1])){ //fsc_incomplete[]
chaithanyarss 331:1943be3fd178 829 gPC.printf("\n\rError: FSC for TMID = %d is not continous---------------------------\n",tmid);
chaithanyarss 331:1943be3fd178 830 clear_buffer(tmid-1);
chaithanyarss 331:1943be3fd178 831 pack_split_det |= 0x08; //4 th bit (from LSB) indicates error in packet splitting
chaithanyarss 331:1943be3fd178 832 }
chaithanyarss 331:1943be3fd178 833 if(((pack_split_det>>3)&0x01)==0){ //no error upto now in split packet
chaithanyarss 331:1943be3fd178 834 len_current = ptr[4] - (11-(3*tmid)); //len_current
chaithanyarss 331:1943be3fd178 835 if((len_prev[tmid-1]+len_current)!=len_correct[tmid-1]){ //len_correct[] and len_prev[]
chaithanyarss 331:1943be3fd178 836 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);
chaithanyarss 331:1943be3fd178 837 clear_buffer(tmid-1);
chaithanyarss 331:1943be3fd178 838 pack_split_det &= (~0x08); //clear the packet splitting error bit
chaithanyarss 331:1943be3fd178 839 }
chaithanyarss 331:1943be3fd178 840 else{
chaithanyarss 331:1943be3fd178 841 temp_index = 11-(3*tmid);
chaithanyarss 331:1943be3fd178 842 for(uint8_t i=0;i<len_current;i++)
chaithanyarss 331:1943be3fd178 843 pack_buf[tmid-1][len_prev[tmid-1]+i] = ptr[temp_index+i]; //storing the remaining part of the packet in appropriate buffer
chaithanyarss 331:1943be3fd178 844 if(tmid==1){
chaithanyarss 331:1943be3fd178 845 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
chaithanyarss 331:1943be3fd178 846 }
chaithanyarss 331:1943be3fd178 847 else if(tmid==2){
chaithanyarss 331:1943be3fd178 848 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
chaithanyarss 331:1943be3fd178 849 pack_curr_det |= 0x02; //to indicate sfp is above threshold
chaithanyarss 331:1943be3fd178 850 }
chaithanyarss 331:1943be3fd178 851 //gPC.printf("\n\rpack_curr_det=0x%02X and pack_prev_det=0x%02X",pack_curr_det,pack_prev_det);
chaithanyarss 331:1943be3fd178 852 if(pack_curr_det!=pack_prev_det){
chaithanyarss 331:1943be3fd178 853 print_headings(&pack_curr_det);
chaithanyarss 331:1943be3fd178 854 pack_prev_det = pack_curr_det;
chaithanyarss 331:1943be3fd178 855 pack_curr_det &= (~0x0f); //clearing last four bits to store next packet's info(but tmid remains same)
chaithanyarss 331:1943be3fd178 856 }
chaithanyarss 331:1943be3fd178 857 if(len_correct[tmid-1]!=print_packet(tmid,&(pack_buf[tmid-1][0]))){
chaithanyarss 331:1943be3fd178 858 gPC.printf("\n\rError: print_packet() length not equal to len_correct (tmid=%d)-------------------------\n",tmid);
chaithanyarss 331:1943be3fd178 859 }
chaithanyarss 331:1943be3fd178 860 clear_buffer(tmid-1);
chaithanyarss 331:1943be3fd178 861 }
chaithanyarss 331:1943be3fd178 862 }
chaithanyarss 331:1943be3fd178 863 }
chaithanyarss 331:1943be3fd178 864 temp_index = ptr[4]; //index of the first complete packet in the frame
chaithanyarss 331:1943be3fd178 865 //gPC.printf("\n\rfirst header pointer = %d and temp_index = %d",ptr[4],temp_index);
chaithanyarss 331:1943be3fd178 866 while(temp_index!=0 && temp_index <132){ //temp_index = 0 implies no more complete packets left to display
chaithanyarss 331:1943be3fd178 867 if(tmid==1){
chaithanyarss 331:1943be3fd178 868 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
chaithanyarss 331:1943be3fd178 869 }
chaithanyarss 331:1943be3fd178 870 else if(tmid==2){
chaithanyarss 331:1943be3fd178 871 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
chaithanyarss 331:1943be3fd178 872 pack_curr_det |= 0x02; //to indicate sfp is above threshold
chaithanyarss 331:1943be3fd178 873 //gPC.printf("\n\rScience data mode:%d",pack_curr_det&0x1);
chaithanyarss 331:1943be3fd178 874 }
chaithanyarss 331:1943be3fd178 875 //gPC.printf("\n\rpack_curr_det=0x%02X and pack_prev_det=0x%02X",pack_curr_det,pack_prev_det);
chaithanyarss 331:1943be3fd178 876 if(pack_curr_det!=pack_prev_det){
chaithanyarss 331:1943be3fd178 877 print_headings(&pack_curr_det);
chaithanyarss 331:1943be3fd178 878 pack_prev_det = pack_curr_det;
chaithanyarss 331:1943be3fd178 879 pack_curr_det &= (~0x0f); //clearing last four bits to store next packet's info(but tmid remains same)
chaithanyarss 331:1943be3fd178 880 }
chaithanyarss 331:1943be3fd178 881 temp_index = temp_index + print_packet(tmid,&ptr[temp_index]);
chaithanyarss 331:1943be3fd178 882 //gPC.printf("\n\rtemp_index = %d after one packet",temp_index);
chaithanyarss 331:1943be3fd178 883 //temp_index = 69;
chaithanyarss 331:1943be3fd178 884 if((132-temp_index)<(3*tmid)){
chaithanyarss 331:1943be3fd178 885 temp_index = 0; //no more packets available, minimum number of bytes are not remaining(3 for SCP and 6 for SFP_AT)
chaithanyarss 331:1943be3fd178 886 }
chaithanyarss 331:1943be3fd178 887 else if((132-temp_index)<(41+(15*tmid))){ //space left in the frame is less than the maximum packet size for the corresponding tmid
chaithanyarss 331:1943be3fd178 888 if(tmid==1){
chaithanyarss 331:1943be3fd178 889 pack_split_det |= ((ptr[temp_index+2]<<2)&0xf0);
chaithanyarss 331:1943be3fd178 890 //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
chaithanyarss 331:1943be3fd178 891 if((pack_split_det&0xd0)==0x80) //extreme data & calibrated mode
chaithanyarss 331:1943be3fd178 892 len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>4)&0x1,(pack_split_det>>5)&0x3,ptr[temp_index+2]&0x03);
chaithanyarss 331:1943be3fd178 893 else
chaithanyarss 331:1943be3fd178 894 len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>4)&0x1,(pack_split_det>>5)&0x3,ptr[temp_index+5]&0x03);
chaithanyarss 331:1943be3fd178 895 //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
chaithanyarss 331:1943be3fd178 896 }
chaithanyarss 331:1943be3fd178 897 else if(tmid==2){
chaithanyarss 331:1943be3fd178 898 pack_split_det |= ((ptr[temp_index+5]<<4)&0x70);
chaithanyarss 331:1943be3fd178 899 len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>6)&0x1,0,(pack_split_det>>4)&0x03);
chaithanyarss 331:1943be3fd178 900 //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
chaithanyarss 331:1943be3fd178 901 }
chaithanyarss 331:1943be3fd178 902 pack_split_det &= (~0xf0); //first four bits(MSB) of pack_split_det not used anymore
chaithanyarss 331:1943be3fd178 903 if((132-temp_index)<len_correct[tmid-1]){ //incomplete packet present
chaithanyarss 331:1943be3fd178 904 len_prev[tmid-1] = 132 - temp_index;
chaithanyarss 331:1943be3fd178 905 fsc_incomplete[tmid-1] = fsc_TM;
chaithanyarss 331:1943be3fd178 906 for(uint8_t i=0;i<len_prev[tmid-1];i++)
chaithanyarss 331:1943be3fd178 907 pack_buf[tmid-1][i] = ptr[temp_index+i];
chaithanyarss 331:1943be3fd178 908 pack_split_det |= (1<<(tmid-1));//1st bit(LSB) indicates scp incomplete packet,2nd bit indicates sfp_at incomplete
chaithanyarss 331:1943be3fd178 909 temp_index = 0;
chaithanyarss 331:1943be3fd178 910 }
chaithanyarss 331:1943be3fd178 911 }
chaithanyarss 331:1943be3fd178 912 }
chaithanyarss 331:1943be3fd178 913 }
chaithanyarss 331:1943be3fd178 914 else if(tmid==3){ //SFP_BT
chaithanyarss 331:1943be3fd178 915 fsc_TM &= 0x00000000;
chaithanyarss 331:1943be3fd178 916 fsc_TM |= (((uint32_t)(ptr[1]<<24))&0xff000000);
chaithanyarss 331:1943be3fd178 917 fsc_TM |= (((uint32_t)(ptr[2]<<16))&0x00ff0000);
chaithanyarss 331:1943be3fd178 918 fsc_TM |= (((uint32_t)(ptr[3]<<8)) &0x0000ff00);
chaithanyarss 331:1943be3fd178 919 fsc_TM |= (((uint32_t)(ptr[4])) &0x000000ff);
chaithanyarss 331:1943be3fd178 920 gPC.printf("\n\n\rFrame sequence count(tmid=%d): %d---------------------------------------------------------",tmid,fsc_TM);
chaithanyarss 331:1943be3fd178 921 gPC.printf("\n\rYear:%d\tMon:%d\tDate:%d",((ptr[6]>>1)&0x03),(((ptr[7]>>5)&0x07)|((ptr[6]&0x01)<<3)),(ptr[7]&0x1f));
chaithanyarss 331:1943be3fd178 922 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);
chaithanyarss 331:1943be3fd178 923 if(ptr[5]!=11){ //there is an incomplete packet present at the start of the current frame
chaithanyarss 331:1943be3fd178 924 if(!((pack_split_det>>(tmid-1))&0x01)){
chaithanyarss 331:1943be3fd178 925 gPC.printf("\n\rError: TMID = %d frame contains split packet but buffer empty",tmid);
chaithanyarss 331:1943be3fd178 926 pack_split_det |= 0x08; //4 th bit (from LSB) indicates error in packet splitting
chaithanyarss 331:1943be3fd178 927 }
chaithanyarss 331:1943be3fd178 928 else if((fsc_TM-1)!=(fsc_incomplete[tmid-1])){ //fsc
chaithanyarss 331:1943be3fd178 929 gPC.printf("\n\rError: FSC for TMID = %d is not continous---------------------------\n",tmid);
chaithanyarss 331:1943be3fd178 930 clear_buffer(tmid-1);
chaithanyarss 331:1943be3fd178 931 pack_split_det |= 0x08; //4 th bit (from LSB) indicates error in packet splitting
chaithanyarss 331:1943be3fd178 932 }
chaithanyarss 331:1943be3fd178 933 if(((pack_split_det>>3)&0x01)==0){ //no error upto now in split packet
chaithanyarss 331:1943be3fd178 934 len_current = ptr[5] - 11;
chaithanyarss 331:1943be3fd178 935 if((len_prev[tmid-1]+len_current)!=len_correct[tmid-1]){
chaithanyarss 331:1943be3fd178 936 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);
chaithanyarss 331:1943be3fd178 937 clear_buffer(tmid-1);
chaithanyarss 331:1943be3fd178 938 pack_split_det &= (~0x08); //clear the packet splitting error bit
chaithanyarss 331:1943be3fd178 939 }
chaithanyarss 331:1943be3fd178 940 else{
chaithanyarss 331:1943be3fd178 941 temp_index = 11;
chaithanyarss 331:1943be3fd178 942 for(uint8_t i=0;i<len_current;i++)
chaithanyarss 331:1943be3fd178 943 pack_buf[tmid-1][len_prev[tmid-1]+i] = ptr[temp_index+i]; //storing the remaining part of the packet in appropriate buffer
chaithanyarss 331:1943be3fd178 944 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
chaithanyarss 331:1943be3fd178 945 if(pack_curr_det!=pack_prev_det){
chaithanyarss 331:1943be3fd178 946 print_headings(&pack_curr_det);
chaithanyarss 331:1943be3fd178 947 pack_prev_det = pack_curr_det;
chaithanyarss 331:1943be3fd178 948 pack_curr_det &= (~0x0f);//clearing last four bits to store next packet's info(but tmid remains same)
chaithanyarss 331:1943be3fd178 949 }
chaithanyarss 331:1943be3fd178 950 if(len_correct[tmid-1]!=print_packet(tmid,&(pack_buf[tmid-1][0]))){
chaithanyarss 331:1943be3fd178 951 gPC.printf("\n\rError: print_packet() length not equal to len_correct (tmid=%d)-------------------------",tmid);
chaithanyarss 331:1943be3fd178 952 }
chaithanyarss 331:1943be3fd178 953 clear_buffer(tmid-1);
chaithanyarss 331:1943be3fd178 954 }
chaithanyarss 331:1943be3fd178 955 }
chaithanyarss 331:1943be3fd178 956 }
chaithanyarss 331:1943be3fd178 957 temp_index = ptr[5]; //index of the first complete packet in the frame
chaithanyarss 331:1943be3fd178 958 while(temp_index!=0){ //temp_index = 0 implies no more complete packets left to display
chaithanyarss 331:1943be3fd178 959 pack_curr_det |= (ptr[temp_index+1]>>5)&0x01; //calibrated or scattered mode
chaithanyarss 331:1943be3fd178 960 if(pack_curr_det!=pack_prev_det){
chaithanyarss 331:1943be3fd178 961 print_headings(&pack_curr_det);
chaithanyarss 331:1943be3fd178 962 pack_prev_det = pack_curr_det;
chaithanyarss 331:1943be3fd178 963 pack_curr_det &= (~0x0f); //clearing last four bits to store next packet's info(but tmid remains same)
chaithanyarss 331:1943be3fd178 964 }
chaithanyarss 331:1943be3fd178 965 temp_index = temp_index + print_packet(tmid,&ptr[temp_index]);
chaithanyarss 331:1943be3fd178 966 if((132-temp_index)<2){
chaithanyarss 331:1943be3fd178 967 temp_index = 0; //no more packets available, minimum number of bytes are not remaining(2 for SFP_BT)
chaithanyarss 331:1943be3fd178 968 }
chaithanyarss 331:1943be3fd178 969 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)
chaithanyarss 331:1943be3fd178 970 pack_split_det |= ((ptr[temp_index+1]<<1)&0x70);
chaithanyarss 331:1943be3fd178 971 len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>6)&0x1,0,(pack_split_det>>4)&0x03);
chaithanyarss 331:1943be3fd178 972 //gPC.printf("\n\rSFP_BT srp mode:%d",(pack_split_det>>6)&0x1);
chaithanyarss 331:1943be3fd178 973 //gPC.printf("\n\rSFP_BT: len_correct = %d",len_correct[tmid-1]);
chaithanyarss 331:1943be3fd178 974 //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
chaithanyarss 331:1943be3fd178 975 pack_split_det &= (~0xf0); //first four bits(MSB) of pack_split_det not used anymore
chaithanyarss 331:1943be3fd178 976 if((132-temp_index)<len_correct[tmid-1]){ //incomplete packet present at the end of the frame
chaithanyarss 331:1943be3fd178 977 len_prev[tmid-1] = 132 - temp_index;
chaithanyarss 331:1943be3fd178 978 fsc_incomplete[tmid-1] = fsc_TM;
chaithanyarss 331:1943be3fd178 979 for(uint8_t i=0;i<len_prev[tmid-1];i++)
chaithanyarss 331:1943be3fd178 980 pack_buf[tmid-1][i] = ptr[temp_index+i];
chaithanyarss 331:1943be3fd178 981 pack_split_det |= (1<<(tmid-1));//1st bit(LSB) indicates scp incomplete packet,2nd bit indicates sfp_at incomplete
chaithanyarss 331:1943be3fd178 982 //len_correct[tmid-1] = calc_length(tmid,(pack_split_det>>6)&0x1,0,(pack_split_det>>4)&0x03);
chaithanyarss 331:1943be3fd178 983 temp_index = 0;
chaithanyarss 331:1943be3fd178 984 }
chaithanyarss 331:1943be3fd178 985 }
chaithanyarss 331:1943be3fd178 986 }
chaithanyarss 331:1943be3fd178 987 }
chaithanyarss 331:1943be3fd178 988 }
chaithanyarss 331:1943be3fd178 989 #endif
chaithanyarss 331:1943be3fd178 990 #if test_science
chaithanyarss 331:1943be3fd178 991 void generated_dma(uint8_t *head){
chaithanyarss 331:1943be3fd178 992 uint8_t temp_buf[16] = {0};
chaithanyarss 331:1943be3fd178 993 gPC.printf("\n\rDisplaying generated data");
chaithanyarss 331:1943be3fd178 994 gPC.printf("\n\rhead[0,1] = %d",read_2byte(&head[0]));
chaithanyarss 331:1943be3fd178 995 for(uint8_t i=0,j=3;i<48;i++,j+=2)
chaithanyarss 331:1943be3fd178 996 gPC.printf("\n\rhead[%d] = %d",i,read_2byte(&head[j]));
chaithanyarss 331:1943be3fd178 997 for(uint8_t i=0,j=99;i<4;i++,j+=4)
chaithanyarss 331:1943be3fd178 998 gPC.printf("\n\rhead[%d] = %d",i+48,read_4byte(&head[j]));
chaithanyarss 331:1943be3fd178 999 for(uint16_t j=115;j<6723;j++)
chaithanyarss 331:1943be3fd178 1000 if(head[j]!=head[j-112]){
chaithanyarss 331:1943be3fd178 1001 gPC.printf("\n\rDMA data repeat error at index = %d",j);
chaithanyarss 331:1943be3fd178 1002 return;
chaithanyarss 331:1943be3fd178 1003 }
chaithanyarss 331:1943be3fd178 1004 gPC.printf("\n\rNo errors in generated repeated DMA data");
chaithanyarss 331:1943be3fd178 1005 }
chaithanyarss 331:1943be3fd178 1006 void generate_dma_calibrated(uint8_t *head)
chaithanyarss 331:1943be3fd178 1007 {
chaithanyarss 331:1943be3fd178 1008 head[0] = (data_srp_calibrated[0]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1009 head[1] = (data_srp_calibrated[0]) & 0xff;
chaithanyarss 331:1943be3fd178 1010 head[2] = (data_srp_calibrated[1]) & 0xff;
chaithanyarss 331:1943be3fd178 1011 for(int j=3,count=0;count<18;count++,j+=2){
chaithanyarss 331:1943be3fd178 1012 head[j] = (data_srp_calibrated[2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1013 head[j+1] = (data_srp_calibrated[2]) & 0xff;
chaithanyarss 331:1943be3fd178 1014 }
chaithanyarss 331:1943be3fd178 1015 for(int j=39,count=0;count<6;count++,j+=2){
chaithanyarss 331:1943be3fd178 1016 head[j] = (data_srp_calibrated[3]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1017 head[j+1] = (data_srp_calibrated[3]) & 0xff;
chaithanyarss 331:1943be3fd178 1018 }
chaithanyarss 331:1943be3fd178 1019 for(int j=51,count=0;count<4;count++,j+=2){
chaithanyarss 331:1943be3fd178 1020 head[j] = (data_srp_calibrated[4]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1021 head[j+1] = (data_srp_calibrated[4]) & 0xff;
chaithanyarss 331:1943be3fd178 1022 }
chaithanyarss 331:1943be3fd178 1023 for(int j=59,count=0;count<4;count++,j+=2){
chaithanyarss 331:1943be3fd178 1024 head[j] = (data_srp_calibrated[5]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1025 head[j+1] = (data_srp_calibrated[5]) & 0xff;
chaithanyarss 331:1943be3fd178 1026 }
chaithanyarss 331:1943be3fd178 1027 int j=67;
chaithanyarss 331:1943be3fd178 1028 for(uint8_t count2 = 0;count2<6;count2++)
chaithanyarss 331:1943be3fd178 1029 for(uint8_t count=0;count<2;count++,j+=2){
chaithanyarss 331:1943be3fd178 1030 head[j] = (data_srp_calibrated[6+count2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1031 head[j+1] = (data_srp_calibrated[6+count2]) & 0xff;
chaithanyarss 331:1943be3fd178 1032 //gPC.printf("\n\rj = %d",j);
chaithanyarss 331:1943be3fd178 1033 }
chaithanyarss 331:1943be3fd178 1034 head[91] = (data_srp_calibrated[12]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1035 head[92] = (data_srp_calibrated[12]) & 0xff;
chaithanyarss 331:1943be3fd178 1036 for(j=93,count=0;count<3;count++,j+=2){
chaithanyarss 331:1943be3fd178 1037 head[j] = (data_srp_calibrated[13]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1038 head[j+1] = (data_srp_calibrated[13]) & 0xff;
chaithanyarss 331:1943be3fd178 1039 }
chaithanyarss 331:1943be3fd178 1040 j=99;
chaithanyarss 331:1943be3fd178 1041 for(uint8_t count2 =0;count2<4;count2++)
chaithanyarss 331:1943be3fd178 1042 for(uint8_t count=0;count<1;count++,j+=4){
chaithanyarss 331:1943be3fd178 1043 head[j] = (data_srp_calibrated[14+count2]>>24) & 0xff;
chaithanyarss 331:1943be3fd178 1044 head[j+1] = (data_srp_calibrated[14+count2]>>16) & 0xff;
chaithanyarss 331:1943be3fd178 1045 head[j+2] = (data_srp_calibrated[14+count2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1046 head[j+3] = (data_srp_calibrated[14+count2]) & 0xff;
chaithanyarss 331:1943be3fd178 1047 }
chaithanyarss 331:1943be3fd178 1048 for(j=115;j<6723;j++) //copying the same data for all other 59 packets
chaithanyarss 331:1943be3fd178 1049 head[j] = head[j-112];
chaithanyarss 331:1943be3fd178 1050 /*for(j=115;j<3363;j++) //copying the same data for all next 29 packets
chaithanyarss 331:1943be3fd178 1051 head[j] = head[j-112];
chaithanyarss 331:1943be3fd178 1052 //next 30 packets will have following data
chaithanyarss 331:1943be3fd178 1053 j=3363;
chaithanyarss 331:1943be3fd178 1054 for(int count=0;count<18;count++,j+=2){
chaithanyarss 331:1943be3fd178 1055 head[j] = (data_srp_calibrated2[2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1056 head[j+1] = (data_srp_calibrated2[2]) & 0xff;
chaithanyarss 331:1943be3fd178 1057 }
chaithanyarss 331:1943be3fd178 1058 for(int j=3399,count=0;count<6;count++,j+=2){
chaithanyarss 331:1943be3fd178 1059 head[j] = (data_srp_calibrated2[3]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1060 head[j+1] = (data_srp_calibrated2[3]) & 0xff;
chaithanyarss 331:1943be3fd178 1061 }
chaithanyarss 331:1943be3fd178 1062 for(int j=3411,count=0;count<4;count++,j+=2){
chaithanyarss 331:1943be3fd178 1063 head[j] = (data_srp_calibrated2[4]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1064 head[j+1] = (data_srp_calibrated2[4]) & 0xff;
chaithanyarss 331:1943be3fd178 1065 }
chaithanyarss 331:1943be3fd178 1066 for(int j=3419,count=0;count<4;count++,j+=2){
chaithanyarss 331:1943be3fd178 1067 head[j] = (data_srp_calibrated2[5]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1068 head[j+1] = (data_srp_calibrated2[5]) & 0xff;
chaithanyarss 331:1943be3fd178 1069 }
chaithanyarss 331:1943be3fd178 1070 j=3427;
chaithanyarss 331:1943be3fd178 1071 for(uint8_t count2 = 0;count2<6;count2++)
chaithanyarss 331:1943be3fd178 1072 for(uint8_t count=0;count<2;count++,j+=2){
chaithanyarss 331:1943be3fd178 1073 head[j] = (data_srp_calibrated2[6+count2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1074 head[j+1] = (data_srp_calibrated2[6+count2]) & 0xff;
chaithanyarss 331:1943be3fd178 1075 //gPC.printf("\n\rj = %d",j);
chaithanyarss 331:1943be3fd178 1076 }
chaithanyarss 331:1943be3fd178 1077 head[3451] = (data_srp_calibrated2[12]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1078 head[3452] = (data_srp_calibrated2[12]) & 0xff;
chaithanyarss 331:1943be3fd178 1079 for(j=3453,count=0;count<3;count++,j+=2){
chaithanyarss 331:1943be3fd178 1080 head[j] = (data_srp_calibrated2[13]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1081 head[j+1] = (data_srp_calibrated2[13]) & 0xff;
chaithanyarss 331:1943be3fd178 1082 }
chaithanyarss 331:1943be3fd178 1083 j=3459;
chaithanyarss 331:1943be3fd178 1084 for(uint8_t count2 =0;count2<4;count2++)
chaithanyarss 331:1943be3fd178 1085 for(uint8_t count=0;count<1;count++,j+=4){
chaithanyarss 331:1943be3fd178 1086 head[j] = (data_srp_calibrated2[14+count2]>>24) & 0xff;
chaithanyarss 331:1943be3fd178 1087 head[j+1] = (data_srp_calibrated2[14+count2]>>16) & 0xff;
chaithanyarss 331:1943be3fd178 1088 head[j+2] = (data_srp_calibrated2[14+count2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1089 head[j+3] = (data_srp_calibrated2[14+count2]) & 0xff;
chaithanyarss 331:1943be3fd178 1090 }
chaithanyarss 331:1943be3fd178 1091 for(j=3475;j<6723;j++) //copying the same data for last 29 packets
chaithanyarss 331:1943be3fd178 1092 head[j] = head[j-112];*/
chaithanyarss 331:1943be3fd178 1093 }
chaithanyarss 331:1943be3fd178 1094 void generate_dma_scattered(uint8_t *head)
chaithanyarss 331:1943be3fd178 1095 {
chaithanyarss 331:1943be3fd178 1096 int j=3;
chaithanyarss 331:1943be3fd178 1097 uint8_t count;
chaithanyarss 331:1943be3fd178 1098 head[0] = (data_srp_scattered[0]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1099 head[1] = (data_srp_scattered[0]) & 0xff;
chaithanyarss 331:1943be3fd178 1100 head[2] = (data_srp_scattered[1]) & 0xff;
chaithanyarss 331:1943be3fd178 1101 for (count=0,j=3;count<48;count++,j+=2){
chaithanyarss 331:1943be3fd178 1102 head[j] = (data_srp_scattered[2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1103 head[j+1] = (data_srp_scattered[2]) & 0xff;
chaithanyarss 331:1943be3fd178 1104 }
chaithanyarss 331:1943be3fd178 1105 j=99;
chaithanyarss 331:1943be3fd178 1106 for(uint8_t count2 =0;count2<4;count2++)
chaithanyarss 331:1943be3fd178 1107 for(uint8_t count=0;count<1;count++,j+=4){
chaithanyarss 331:1943be3fd178 1108 head[j] = (data_srp_scattered[3+count2]>>24) & 0xff;
chaithanyarss 331:1943be3fd178 1109 head[j+1] = (data_srp_scattered[3+count2]>>16) & 0xff;
chaithanyarss 331:1943be3fd178 1110 head[j+2] = (data_srp_scattered[3+count2]>>8) & 0xff;
chaithanyarss 331:1943be3fd178 1111 head[j+3] = (data_srp_scattered[3+count2]) & 0xff;
chaithanyarss 331:1943be3fd178 1112 }
chaithanyarss 331:1943be3fd178 1113 for(int j=115;j<6723;j++)
chaithanyarss 331:1943be3fd178 1114 head[j] = head[j-112];
chaithanyarss 331:1943be3fd178 1115 }
chaithanyarss 331:1943be3fd178 1116 uint8_t map_index_bins_2_srp_index(uint8_t i,uint8_t srp_mode)
chaithanyarss 331:1943be3fd178 1117 {
chaithanyarss 331:1943be3fd178 1118 /* This function is used to map sfp_indices to data_srp_calibrated[] or data_srp_scattered[] array indices
chaithanyarss 331:1943be3fd178 1119 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
chaithanyarss 331:1943be3fd178 1120 but proton energy. This function is used to update calib_thres_index[], scat_thresh_index[], calib_thres_index_scp[]
chaithanyarss 331:1943be3fd178 1121 and scat_thres_index_scp[] which stores info about which bins is causing above threshold condition(refer to comments
chaithanyarss 331:1943be3fd178 1122 in dma_packet_info() funtion regarding calib_thres_index[] array)
chaithanyarss 331:1943be3fd178 1123 */
chaithanyarss 331:1943be3fd178 1124 if(srp_mode==0){
chaithanyarss 331:1943be3fd178 1125 if(i<18) return 2;
chaithanyarss 331:1943be3fd178 1126 else if(i<24) return 3;
chaithanyarss 331:1943be3fd178 1127 else if(i<28) return 4;
chaithanyarss 331:1943be3fd178 1128 else if(i<32) return 5;
chaithanyarss 331:1943be3fd178 1129
chaithanyarss 331:1943be3fd178 1130 else if(i<34) return 6;
chaithanyarss 331:1943be3fd178 1131 else if(i<36) return 7;
chaithanyarss 331:1943be3fd178 1132 else if(i<38) return 8;
chaithanyarss 331:1943be3fd178 1133 else if(i<40) return 9;
chaithanyarss 331:1943be3fd178 1134 else if(i<42) return 10;
chaithanyarss 331:1943be3fd178 1135 else if(i<44) return 11;
chaithanyarss 331:1943be3fd178 1136
chaithanyarss 331:1943be3fd178 1137 //else if(i<44) return 6+((i-32)/2);
chaithanyarss 331:1943be3fd178 1138 else if(i<45) return 12;
chaithanyarss 331:1943be3fd178 1139 else if(i<48) return 13;
chaithanyarss 331:1943be3fd178 1140
chaithanyarss 331:1943be3fd178 1141 else if(i<49) return 14;
chaithanyarss 331:1943be3fd178 1142 else if(i<50) return 15;
chaithanyarss 331:1943be3fd178 1143 else if(i<51) return 16;
chaithanyarss 331:1943be3fd178 1144 else if(i<52) return 17;
chaithanyarss 331:1943be3fd178 1145 //else if(i<52) return i-34;
chaithanyarss 331:1943be3fd178 1146 }
chaithanyarss 331:1943be3fd178 1147 else if(srp_mode==1){
chaithanyarss 331:1943be3fd178 1148 if(i<48) return 2;
chaithanyarss 331:1943be3fd178 1149 else if(i<52) return i-45;
chaithanyarss 331:1943be3fd178 1150 }
chaithanyarss 331:1943be3fd178 1151 }
chaithanyarss 331:1943be3fd178 1152 void verify_read_dma(uint8_t srp_mode,uint8_t counter){
chaithanyarss 331:1943be3fd178 1153 /* This function verifies that correct data was generated in dma by comparing sfp_bin[i] with the
chaithanyarss 331:1943be3fd178 1154 data in srp_calibrated[] or srp_scattered[]. This function assumes that all the 60 srp packets in DMA have
chaithanyarss 331:1943be3fd178 1155 identical data. If not change the dma_generating functions and this function appropriately
chaithanyarss 331:1943be3fd178 1156 */
chaithanyarss 331:1943be3fd178 1157 uint8_t i;
chaithanyarss 331:1943be3fd178 1158 if(srp_mode==0){
chaithanyarss 331:1943be3fd178 1159 for(i=0;i<18;i++) //first 18 bins correspond to proton energy which is nothing but data_srp_calibrated[2]
chaithanyarss 331:1943be3fd178 1160 if(sfp_bin[i]!=data_srp_calibrated[2]){
chaithanyarss 331:1943be3fd178 1161 gPC.printf("\n\rsfp_bin[%d]:%d\tdatasrp_calibrated[2]:%d",i,sfp_bin[i],data_srp_calibrated[2]);
chaithanyarss 331:1943be3fd178 1162 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
chaithanyarss 331:1943be3fd178 1163 return;
chaithanyarss 331:1943be3fd178 1164 }
chaithanyarss 331:1943be3fd178 1165 for(;i<24;i++) //next 6 bins correspond to electron energy
chaithanyarss 331:1943be3fd178 1166 if(sfp_bin[i]!=data_srp_calibrated[3]){
chaithanyarss 331:1943be3fd178 1167 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[3],counter);
chaithanyarss 331:1943be3fd178 1168 return;
chaithanyarss 331:1943be3fd178 1169 }
chaithanyarss 331:1943be3fd178 1170 for(;i<28;i++) //refer to excel sheet with test cases
chaithanyarss 331:1943be3fd178 1171 if(sfp_bin[i]!=data_srp_calibrated[4]){
chaithanyarss 331:1943be3fd178 1172 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[4],counter);
chaithanyarss 331:1943be3fd178 1173 return;
chaithanyarss 331:1943be3fd178 1174 }
chaithanyarss 331:1943be3fd178 1175 for(;i<32;i++)
chaithanyarss 331:1943be3fd178 1176 if(sfp_bin[i]!=data_srp_calibrated[5]){
chaithanyarss 331:1943be3fd178 1177 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[5],counter);
chaithanyarss 331:1943be3fd178 1178 return;
chaithanyarss 331:1943be3fd178 1179 }
chaithanyarss 331:1943be3fd178 1180 for(i=0;i<12;i++)
chaithanyarss 331:1943be3fd178 1181 if(sfp_bin[32+i]!=data_srp_calibrated[6+(i/2)]){
chaithanyarss 331:1943be3fd178 1182 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[6+(i/2)],counter);
chaithanyarss 331:1943be3fd178 1183 return;
chaithanyarss 331:1943be3fd178 1184 }
chaithanyarss 331:1943be3fd178 1185 if(sfp_bin[44]!=data_srp_calibrated[12]){
chaithanyarss 331:1943be3fd178 1186 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[12],counter);
chaithanyarss 331:1943be3fd178 1187 return;
chaithanyarss 331:1943be3fd178 1188 }
chaithanyarss 331:1943be3fd178 1189 for(i=45;i<48;i++)
chaithanyarss 331:1943be3fd178 1190 if(sfp_bin[i]!=data_srp_calibrated[13]){
chaithanyarss 331:1943be3fd178 1191 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[13],counter);
chaithanyarss 331:1943be3fd178 1192 return;
chaithanyarss 331:1943be3fd178 1193 }
chaithanyarss 331:1943be3fd178 1194 if(sfp_bin[48]!=data_srp_calibrated[14]){
chaithanyarss 331:1943be3fd178 1195 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[14],counter);
chaithanyarss 331:1943be3fd178 1196 return;
chaithanyarss 331:1943be3fd178 1197 }
chaithanyarss 331:1943be3fd178 1198 if(sfp_bin[49]!=data_srp_calibrated[15]){
chaithanyarss 331:1943be3fd178 1199 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[15],counter);
chaithanyarss 331:1943be3fd178 1200 return;
chaithanyarss 331:1943be3fd178 1201 }
chaithanyarss 331:1943be3fd178 1202 if(sfp_bin[50]!=data_srp_calibrated[16]){
chaithanyarss 331:1943be3fd178 1203 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[16],counter);
chaithanyarss 331:1943be3fd178 1204 return;
chaithanyarss 331:1943be3fd178 1205 }
chaithanyarss 331:1943be3fd178 1206 if(sfp_bin[51]!=data_srp_calibrated[17]){
chaithanyarss 331:1943be3fd178 1207 gPC.printf("\n\r\"%s\" data mismatch in DMA, counter = %d",srp_calibrated[17],counter);
chaithanyarss 331:1943be3fd178 1208 return;
chaithanyarss 331:1943be3fd178 1209 }
chaithanyarss 331:1943be3fd178 1210 }
chaithanyarss 331:1943be3fd178 1211 else if(srp_mode==1){
chaithanyarss 331:1943be3fd178 1212 for(i=0;i<48;i++) //first 48 bins correspond to dEdX & bulk & not Veto..... which is nothing but data_srp_scattered[2]
chaithanyarss 331:1943be3fd178 1213 if(sfp_bin[i]!=data_srp_scattered[2]){
chaithanyarss 331:1943be3fd178 1214 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
chaithanyarss 331:1943be3fd178 1215 return;
chaithanyarss 331:1943be3fd178 1216 }
chaithanyarss 331:1943be3fd178 1217 if(sfp_bin[48]!=data_srp_scattered[3]){
chaithanyarss 331:1943be3fd178 1218 gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[3]);
chaithanyarss 331:1943be3fd178 1219 return;
chaithanyarss 331:1943be3fd178 1220 }
chaithanyarss 331:1943be3fd178 1221 if(sfp_bin[49]!=data_srp_scattered[4]){
chaithanyarss 331:1943be3fd178 1222 gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[4]);
chaithanyarss 331:1943be3fd178 1223 return;
chaithanyarss 331:1943be3fd178 1224 }
chaithanyarss 331:1943be3fd178 1225 if(sfp_bin[50]!=data_srp_scattered[5]){
chaithanyarss 331:1943be3fd178 1226 gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[5]);
chaithanyarss 331:1943be3fd178 1227 return;
chaithanyarss 331:1943be3fd178 1228 }
chaithanyarss 331:1943be3fd178 1229 if(sfp_bin[51]!=data_srp_scattered[6]){
chaithanyarss 331:1943be3fd178 1230 gPC.printf("\n\r\"%s\" data mismatch in DMA",srp_scattered[6]);
chaithanyarss 331:1943be3fd178 1231 return;
chaithanyarss 331:1943be3fd178 1232 }
chaithanyarss 331:1943be3fd178 1233 }
chaithanyarss 331:1943be3fd178 1234 gPC.printf("\n\rNo errors in generated data");
chaithanyarss 331:1943be3fd178 1235 }
chaithanyarss 331:1943be3fd178 1236 void dma_packets_info()
chaithanyarss 331:1943be3fd178 1237 {
chaithanyarss 331:1943be3fd178 1238 gPC.printf("\n\n\r-------------------------------------------------------------------------------------------");
chaithanyarss 331:1943be3fd178 1239 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
chaithanyarss 331:1943be3fd178 1240 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
chaithanyarss 331:1943be3fd178 1241 if(sfp_mode_count[0]!=0){ //number of sfp packets in calibrated mode when dma is read every 6 seconds
chaithanyarss 331:1943be3fd178 1242 gPC.printf("\n\rNumber of SFP in calibrated mode: %d",sfp_mode_count[0]);
chaithanyarss 331:1943be3fd178 1243 if(dma_sfp_at_count!=0) //if there are above threshold packets then display information
chaithanyarss 331:1943be3fd178 1244 gPC.printf("\n\rSFP Above Threshold indices info:");
chaithanyarss 331:1943be3fd178 1245 for(uint8_t i=0;i<16;i++){ //for the 16 types of bins in calibrated mode
chaithanyarss 331:1943be3fd178 1246
chaithanyarss 331:1943be3fd178 1247 /* calib_thres_index is a 2d array with 16 rows(for 16 differnt types of bins possible in calibrated mode which are named
chaithanyarss 331:1943be3fd178 1248 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
chaithanyarss 331:1943be3fd178 1249 example:if proton bins have energy above threshold for all the 60 srp packets in dma, then calib_thres_index[0] will have numbers
chaithanyarss 331:1943be3fd178 1250 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
chaithanyarss 331:1943be3fd178 1251 used to update packet numbers in each row of calib_thres_index[i][j] (0<=j<60)
chaithanyarss 331:1943be3fd178 1252 */
chaithanyarss 331:1943be3fd178 1253
chaithanyarss 331:1943be3fd178 1254 if(calib_thres_index[i][0]!=0){ //display only those bins which have atleast one packet in which they are above threshold
chaithanyarss 331:1943be3fd178 1255 gPC.printf("\n\r%s :{ ",srp_calibrated[i+2]);
chaithanyarss 331:1943be3fd178 1256 /*srp_calibrated has index (i+2) because the first two indices have "NA" and index of "proton bins"=2 whereas,
chaithanyarss 331:1943be3fd178 1257 in calib_thres_index[] the index of "proton_bins" is 0 and similarly for all other 15 bins of srp_calibrated
chaithanyarss 331:1943be3fd178 1258 */
chaithanyarss 331:1943be3fd178 1259 }
chaithanyarss 331:1943be3fd178 1260 //for(uint8_t j=0;j<60;j++){
chaithanyarss 331:1943be3fd178 1261 for(uint8_t j=0;(calib_thres_index[i][j]!=0)&&(j<60);j++){ //display only non zero elements
chaithanyarss 331:1943be3fd178 1262 gPC.printf("%d ",calib_thres_index[i][j]);
chaithanyarss 331:1943be3fd178 1263 }
chaithanyarss 331:1943be3fd178 1264 if(calib_thres_index[i][0]!=0)
chaithanyarss 331:1943be3fd178 1265 gPC.printf("}");
chaithanyarss 331:1943be3fd178 1266 }
chaithanyarss 331:1943be3fd178 1267 }
chaithanyarss 331:1943be3fd178 1268 if(sfp_mode_count[1]!=0){ //number of sfp/srp packets in scattered plot mode when dma is read every 6 seconds
chaithanyarss 331:1943be3fd178 1269 gPC.printf("\n\rNumber of SFP in scattered plot mode: %d",sfp_mode_count[1]);
chaithanyarss 331:1943be3fd178 1270 if(dma_sfp_at_count!=0) //same logic as stated above
chaithanyarss 331:1943be3fd178 1271 gPC.printf("\n\rSFP Above Threshold indices info:");
chaithanyarss 331:1943be3fd178 1272 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
chaithanyarss 331:1943be3fd178 1273 if(scat_thres_index[i][0]!=0){ //display only those bins which contribute to above threshold
chaithanyarss 331:1943be3fd178 1274 gPC.printf("\n\r%s :{ ",srp_scattered[i+2]);
chaithanyarss 331:1943be3fd178 1275 }
chaithanyarss 331:1943be3fd178 1276 //for(uint8_t j=0;scat_thres_index[i][j]!=0;j++){
chaithanyarss 331:1943be3fd178 1277 for(uint8_t j=0;(scat_thres_index[i][j]!=0)&&(j<60);j++){
chaithanyarss 331:1943be3fd178 1278 gPC.printf("%d ",scat_thres_index[i][j]);
chaithanyarss 331:1943be3fd178 1279 }
chaithanyarss 331:1943be3fd178 1280 if(scat_thres_index[i][0]!=0)
chaithanyarss 331:1943be3fd178 1281 gPC.printf("}");
chaithanyarss 331:1943be3fd178 1282 }
chaithanyarss 331:1943be3fd178 1283 }
chaithanyarss 331:1943be3fd178 1284 if(scp_mode_count[0]!=0){ //scp_mode_count[0] stores number of scp in calibrated mode
chaithanyarss 331:1943be3fd178 1285 gPC.printf("\n\rNumber of SCP in calibrated mode: %d",scp_mode_count[0]);
chaithanyarss 331:1943be3fd178 1286 if(dma_scp_at_count!=0)
chaithanyarss 331:1943be3fd178 1287 gPC.printf("\n\rSCP Above Threshold indices info:");
chaithanyarss 331:1943be3fd178 1288 //for(uint8_t temp_i=0;temp_i<16;temp_i++)
chaithanyarss 331:1943be3fd178 1289 //gPC.printf("\n\rcalib_thres_index_scp[%d]:%d",temp_i,calib_thres_index_scp[temp_i]);
chaithanyarss 331:1943be3fd178 1290 for(uint8_t i=0;i<16;i++){ //same logic as srp/sfp above threshold stated above
chaithanyarss 331:1943be3fd178 1291 if(calib_thres_index_scp[i]!=0){
chaithanyarss 331:1943be3fd178 1292 /*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
chaithanyarss 331:1943be3fd178 1293 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
chaithanyarss 331:1943be3fd178 1294 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
chaithanyarss 331:1943be3fd178 1295 */
chaithanyarss 331:1943be3fd178 1296 gPC.printf("\n\r%s is above threshold",srp_calibrated[i+2]);
chaithanyarss 331:1943be3fd178 1297 }
chaithanyarss 331:1943be3fd178 1298 }
chaithanyarss 331:1943be3fd178 1299 }
chaithanyarss 331:1943be3fd178 1300 if(scp_mode_count[1]!=0){ //scp_mode_count[1] stores number of scp in calibrated mode with data conservation
chaithanyarss 331:1943be3fd178 1301 gPC.printf("\n\rNumber of SCP in calibrated mode with data conservation: %d",scp_mode_count[1]);
chaithanyarss 331:1943be3fd178 1302 if(dma_scp_at_count!=0)
chaithanyarss 331:1943be3fd178 1303 gPC.printf("\n\rSCP Above Threshold indices info:");
chaithanyarss 331:1943be3fd178 1304 for(uint8_t i=0;i<16;i++){ //same logic as above
chaithanyarss 331:1943be3fd178 1305 if(calib_thres_index_scp[i]!=0){
chaithanyarss 331:1943be3fd178 1306 gPC.printf("\n\r%s is above threshold",srp_calibrated[i+2]);
chaithanyarss 331:1943be3fd178 1307 }
chaithanyarss 331:1943be3fd178 1308 }
chaithanyarss 331:1943be3fd178 1309 if(proton_scp_sum_at==1){
chaithanyarss 331:1943be3fd178 1310 /* here two other things apart from the bins stated in test cases can cause above threshold,
chaithanyarss 331:1943be3fd178 1311 namely proton_scp_sum and electron_scp_sum which are calculated as sum of proton enery bins, refer to excel sheet
chaithanyarss 331:1943be3fd178 1312 hence we check these two cases saparately at the end
chaithanyarss 331:1943be3fd178 1313 */
chaithanyarss 331:1943be3fd178 1314 gPC.printf("\n\rSum of proton bins is above threshold");
chaithanyarss 331:1943be3fd178 1315 }
chaithanyarss 331:1943be3fd178 1316 if(electron_scp_sum_at==1)
chaithanyarss 331:1943be3fd178 1317 gPC.printf("\n\rSum of electron bins is above threshold");
chaithanyarss 331:1943be3fd178 1318 }
chaithanyarss 331:1943be3fd178 1319 if(scp_mode_count[2]!=0){ //scp_mode_count[2] stores number of scp packets in calibrated with extreme data conservation mode
chaithanyarss 331:1943be3fd178 1320 gPC.printf("\n\rNumber of SCP in calibrated mode with Extreme data conservation: %d",scp_mode_count[2]);
chaithanyarss 331:1943be3fd178 1321 if(dma_scp_at_count!=0)
chaithanyarss 331:1943be3fd178 1322 gPC.printf("\n\rSCP Above Threshold indices info:");
chaithanyarss 331:1943be3fd178 1323 //for(uint8_t temp_i=0;temp_i<16;temp_i++)
chaithanyarss 331:1943be3fd178 1324 //gPC.printf("\n\rcalib_thres_index_scp[%d]:%d",temp_i,calib_thres_index_scp[temp_i]);
chaithanyarss 331:1943be3fd178 1325 if(calib_thres_index_scp[14]!=0) //only bulk fast counts bin is present other than sum of energies bins
chaithanyarss 331:1943be3fd178 1326 gPC.printf("\n\rBulk fast counts is above threshold");
chaithanyarss 331:1943be3fd178 1327 if(proton_scp_sum_at==1)
chaithanyarss 331:1943be3fd178 1328 gPC.printf("\n\rSum of proton bins is above threshold");
chaithanyarss 331:1943be3fd178 1329 if(electron_scp_sum_at==1)
chaithanyarss 331:1943be3fd178 1330 gPC.printf("\n\rSum of electron bins is above threshold");
chaithanyarss 331:1943be3fd178 1331 }
chaithanyarss 331:1943be3fd178 1332 if(scp_mode_count[3]!=0){ //scp_mode_count[3] stores number of scp packets in scattered plot mode
chaithanyarss 331:1943be3fd178 1333 gPC.printf("\n\rNumber of SCP in scattered plot mode: %d",scp_mode_count[3]);
chaithanyarss 331:1943be3fd178 1334 if(dma_scp_at_count!=0)
chaithanyarss 331:1943be3fd178 1335 gPC.printf("\n\rSCP Above Threshold indices info:");
chaithanyarss 331:1943be3fd178 1336 //for(uint8_t temp_i=0;temp_i<5;temp_i++)
chaithanyarss 331:1943be3fd178 1337 //gPC.printf("\n\rscat_thres_index_scp[%d]:%d",temp_i,scat_thres_index_scp[temp_i]);
chaithanyarss 331:1943be3fd178 1338 for(uint8_t i=0;i<5;i++){
chaithanyarss 331:1943be3fd178 1339 if(scat_thres_index_scp[i]!=0){
chaithanyarss 331:1943be3fd178 1340 gPC.printf("\n\r%s is above index",srp_scattered[i+2]);
chaithanyarss 331:1943be3fd178 1341 }
chaithanyarss 331:1943be3fd178 1342 }
chaithanyarss 331:1943be3fd178 1343 }
chaithanyarss 331:1943be3fd178 1344 if(scp_mode_count[4]!=0){ //scp_mode_count[4] stores number of scp packets in scattered plot with extreme data conservation mode
chaithanyarss 331:1943be3fd178 1345 gPC.printf("\n\rNumber of SCP in scattered mode with Extreme data conservation: %d",scp_mode_count[4]);
chaithanyarss 331:1943be3fd178 1346 if(scat_thres_index_scp[3]!=0) //only bulk fast counts bin is present other than sum of energies bins
chaithanyarss 331:1943be3fd178 1347 gPC.printf("\n\rBulk fast counts is above threshold");
chaithanyarss 331:1943be3fd178 1348 if(proton_scp_sum_at==1)
chaithanyarss 331:1943be3fd178 1349 gPC.printf("\n\rSum of proton bins is above threshold");
chaithanyarss 331:1943be3fd178 1350 if(electron_scp_sum_at==1)
chaithanyarss 331:1943be3fd178 1351 gPC.printf("\n\rSum of electron bins is above threshold");
chaithanyarss 331:1943be3fd178 1352 }
chaithanyarss 331:1943be3fd178 1353 }
chaithanyarss 331:1943be3fd178 1354 #endif
ee12b079 93:4d76de54a699 1355 //give the pointer of 6 second data to this function
chaithanyarss 331:1943be3fd178 1356 void srp(uint8_t * head)//void const *args)
prasanthbj05 266:ae588e75cfa4 1357 {
ee12b079 268:ded5306a1fd1 1358 uint8_t sd_stat = 0;
chaithanyarss 331:1943be3fd178 1359 SCI_LED1 =1;
spacelab 309:6ed5535ac465 1360 // SCI_LED1 = !SCI_LED1;
chaithanyarss 331:1943be3fd178 1361 //gPC.printf("\n\rsrp");
prasanthbj05 266:ae588e75cfa4 1362 debug_cntr = 0;
prasanthbj05 266:ae588e75cfa4 1363 sci_time = FCTN_CDMS_RD_RTC();
chaithanyarss 331:1943be3fd178 1364 TIME_LATEST_SPI_SPEED = sci_time;
chaithanyarss 290:3159ff1081a2 1365 #if debug_time
chaithanyarss 331:1943be3fd178 1366 gPC.printf("\n\rAssigning time manually");
chaithanyarss 331:1943be3fd178 1367 sci_time = 0x000000055555555;
chaithanyarss 290:3159ff1081a2 1368 #endif
prasanthbj05 266:ae588e75cfa4 1369 if(time_prev_scp==0){
prasanthbj05 266:ae588e75cfa4 1370 time_prev_scp = sci_time;
prasanthbj05 266:ae588e75cfa4 1371 }
spacelab 309:6ed5535ac465 1372 FCTN_SD_MNGR(); ///changed recently
chaithanyarss 331:1943be3fd178 1373 #if tabulation
chaithanyarss 331:1943be3fd178 1374 if(head[0]==0 & head[1]==0){
chaithanyarss 331:1943be3fd178 1375 position_tm_frame[1] = position_tm_starting[1];
chaithanyarss 331:1943be3fd178 1376 position_tm_frame[2] = position_tm_starting[2];
chaithanyarss 331:1943be3fd178 1377 gPC.printf("\n\n\r--------------------------*************************************-------------------------------");
chaithanyarss 331:1943be3fd178 1378 //gPC.printf("\n\rFrame pointer reset done");
chaithanyarss 331:1943be3fd178 1379 gPC.printf("\n\rStart FSC for TMID=1 :%d",FSC_CURRENT[1]+1);
chaithanyarss 331:1943be3fd178 1380 gPC.printf("\n\rStart FSC for TMID=2 :%d",FSC_CURRENT[2]+1);
chaithanyarss 331:1943be3fd178 1381 gPC.printf("\n\rStart FSC for TMID=3 :%d",FSC_CURRENT[3]+1);
chaithanyarss 331:1943be3fd178 1382 gPC.printf("\n\r--------------------------*************************************-------------------------------");
chaithanyarss 331:1943be3fd178 1383 }
chaithanyarss 331:1943be3fd178 1384 #endif
chaithanyarss 331:1943be3fd178 1385 ptr = head + 3; //ptr points to proton energy bin of srp
chaithanyarss 331:1943be3fd178 1386 srp_mode = head[2]&0x01;
chaithanyarss 331:1943be3fd178 1387 //for(uint8_t temp_counter=0;temp_counter<9;temp_counter++){
ee12b079 268:ded5306a1fd1 1388 for (int i = 0; i < 52 ; i++)
prasanthbj05 266:ae588e75cfa4 1389 {
ee12b079 93:4d76de54a699 1390 scp_bin[i] = 0;
shreeshas95 1:a0055b3280c8 1391 }
chaithanyarss 331:1943be3fd178 1392 #if test_science
chaithanyarss 331:1943be3fd178 1393 gPC.printf("\n\n\rTesting science mode - initializing test indices and to zero");
chaithanyarss 331:1943be3fd178 1394 for(uint8_t i=0;i<5;i++)
chaithanyarss 331:1943be3fd178 1395 for(uint8_t j=0;j<60;j++){
chaithanyarss 331:1943be3fd178 1396 calib_thres_index[i][j] = 0;
chaithanyarss 331:1943be3fd178 1397 scat_thres_index[i][j] = 0;
chaithanyarss 331:1943be3fd178 1398 }
chaithanyarss 331:1943be3fd178 1399 for(uint8_t i=5;i<16;i++)
chaithanyarss 331:1943be3fd178 1400 for(uint8_t j=0;j<60;j++){
chaithanyarss 331:1943be3fd178 1401 calib_thres_index[i][j] = 0;
chaithanyarss 331:1943be3fd178 1402 calib_thres_index_scp[i] = 0;
chaithanyarss 331:1943be3fd178 1403 }
chaithanyarss 331:1943be3fd178 1404 for(uint8_t i=0;i<16;i++){
chaithanyarss 331:1943be3fd178 1405 if(i<5){
chaithanyarss 331:1943be3fd178 1406 scat_thres_subindex[i] = 0;
chaithanyarss 331:1943be3fd178 1407 scat_thres_index_scp[i] = 0;
chaithanyarss 331:1943be3fd178 1408 scp_mode_count[i] = 0;
chaithanyarss 331:1943be3fd178 1409 }
chaithanyarss 331:1943be3fd178 1410 calib_thres_subindex[i] = 0;
chaithanyarss 331:1943be3fd178 1411 thres_scp_index[i] = 0;
chaithanyarss 331:1943be3fd178 1412 calib_thres_index_scp[i] = 0;
chaithanyarss 331:1943be3fd178 1413 }
chaithanyarss 331:1943be3fd178 1414 dma_scp_at_count = 0;
chaithanyarss 331:1943be3fd178 1415 dma_sfp_at_count = 0;
chaithanyarss 331:1943be3fd178 1416 proton_scp_sum_at = 0;
chaithanyarss 331:1943be3fd178 1417 electron_scp_sum_at = 0;
chaithanyarss 331:1943be3fd178 1418 sfp_mode_count[0] = 0;
chaithanyarss 331:1943be3fd178 1419 sfp_mode_count[1] = 0;
chaithanyarss 331:1943be3fd178 1420 /*if((head[2]&0x01)==0){
chaithanyarss 331:1943be3fd178 1421 gPC.printf("\n\rGenerating DMA calibrated data");
chaithanyarss 331:1943be3fd178 1422 generate_dma_calibrated(head); //fill the dma with data given in data_srp_calibrated[] and repeat it 60 times to fill the entire dma
chaithanyarss 331:1943be3fd178 1423 }
chaithanyarss 331:1943be3fd178 1424 else if((head[2]&0x1)==1){
chaithanyarss 331:1943be3fd178 1425 gPC.printf("\n\rGenerating DMA scattered data");
chaithanyarss 331:1943be3fd178 1426 generate_dma_scattered(head); //fill the dma with data given in data_srp_scattered[] and repeat it 60 times to fill the entire dma
chaithanyarss 331:1943be3fd178 1427 }
chaithanyarss 331:1943be3fd178 1428 generated_dma(head);*/
chaithanyarss 331:1943be3fd178 1429 #endif
prasanthbj05 266:ae588e75cfa4 1430 for(uint8_t counter = 0 ; counter < 60 ; counter++)
prasanthbj05 266:ae588e75cfa4 1431 {
ee12b079 268:ded5306a1fd1 1432 #if srpz
chaithanyarss 331:1943be3fd178 1433 gPC.printf("\n\n\rSRP count:%d",counter+1);
ee12b079 268:ded5306a1fd1 1434 #endif
chaithanyarss 331:1943be3fd178 1435 /*---------------------------------populating sfp_bin and scp_bin[] starts here(also tag AT or BT)-----------------------*/
prasanthbj05 266:ae588e75cfa4 1436 at = 0; pzf = 1; ezf = 1;
prasanthbj05 266:ae588e75cfa4 1437 if(srp_mode == 0) //calibrated mode
prasanthbj05 266:ae588e75cfa4 1438 {
ee12b079 268:ded5306a1fd1 1439 #if srpz
chaithanyarss 331:1943be3fd178 1440 gPC.printf("\n\rSRP - Calibrated Mode");
ee12b079 268:ded5306a1fd1 1441 #endif
prasanthbj05 266:ae588e75cfa4 1442 for(int i=0; i<48 ; i++) //first 48 bins or SRP are of 16 bits size
prasanthbj05 266:ae588e75cfa4 1443 {
ee12b079 93:4d76de54a699 1444 sfp_bin[i] = read_2byte(ptr + i*2);
chaithanyarss 331:1943be3fd178 1445 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1446 gPC.printf("\n\r sfp_bin[%d] = %d",i,sfp_bin[i]);
chaithanyarss 331:1943be3fd178 1447 }*/
ee12b079 93:4d76de54a699 1448 scp_bin[i] += sfp_bin[i];
prasanthbj05 266:ae588e75cfa4 1449 if(sfp_bin[i]>sfp_threshold_m0[i])
prasanthbj05 266:ae588e75cfa4 1450 {
ee12b079 268:ded5306a1fd1 1451 //gPC.printf("\n\rSFP above threshold index:%d",i);
chaithanyarss 331:1943be3fd178 1452 #if test_science
chaithanyarss 331:1943be3fd178 1453 //gPC.printf("\n\ri:%d",i);
chaithanyarss 331:1943be3fd178 1454 //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]);
chaithanyarss 331:1943be3fd178 1455 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;
chaithanyarss 331:1943be3fd178 1456 //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]);
chaithanyarss 331:1943be3fd178 1457 #endif
ee12b079 93:4d76de54a699 1458 at = 1;
ee12b079 93:4d76de54a699 1459 }
prasanthbj05 266:ae588e75cfa4 1460 if(i<17)
prasanthbj05 266:ae588e75cfa4 1461 {
ee12b079 93:4d76de54a699 1462 if(sfp_bin[i] > 0)
ee12b079 93:4d76de54a699 1463 pzf = 0;
ee12b079 93:4d76de54a699 1464 }
prasanthbj05 266:ae588e75cfa4 1465 else if (i>17 && i < 23)
prasanthbj05 266:ae588e75cfa4 1466 {
ee12b079 93:4d76de54a699 1467 if(sfp_bin[i]>0)
ee12b079 93:4d76de54a699 1468 ezf = 0;
ee12b079 93:4d76de54a699 1469 }
ee12b079 93:4d76de54a699 1470 }
prasanthbj05 266:ae588e75cfa4 1471 for(int i=0; i<4; i++) //last 4 bins(excluding the spare bin) are 32 bit each
prasanthbj05 266:ae588e75cfa4 1472 {
ee12b079 93:4d76de54a699 1473 sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i );
chaithanyarss 331:1943be3fd178 1474 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1475 gPC.printf("\n\rsfp_bin[%d] = %d",48+i,sfp_bin[i+48]);
chaithanyarss 331:1943be3fd178 1476 }*/
ee12b079 93:4d76de54a699 1477 scp_bin[i+48] += sfp_bin[i+48];
ee12b079 268:ded5306a1fd1 1478 if(sfp_bin[i+48]>sfp_threshold_m0[i+48]){
ee12b079 268:ded5306a1fd1 1479 //gPC.printf("\n\rSP above threshold index: %d",i+48);
chaithanyarss 331:1943be3fd178 1480 #if test_science
chaithanyarss 331:1943be3fd178 1481 //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]);
chaithanyarss 331:1943be3fd178 1482 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;
chaithanyarss 331:1943be3fd178 1483 //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]);
chaithanyarss 331:1943be3fd178 1484 #endif
ee12b079 93:4d76de54a699 1485 at = 1;
ee12b079 268:ded5306a1fd1 1486 }
ee12b079 93:4d76de54a699 1487 }
chaithanyarss 331:1943be3fd178 1488 }
prasanthbj05 266:ae588e75cfa4 1489 else if(srp_mode == 1) //scattered mode
prasanthbj05 266:ae588e75cfa4 1490 {
ee12b079 268:ded5306a1fd1 1491 #if srpz
chaithanyarss 290:3159ff1081a2 1492 gPC.printf("\n\rSRP - Scatter Plot Mode");
ee12b079 268:ded5306a1fd1 1493 #endif
prasanthbj05 266:ae588e75cfa4 1494 for(int i = 0; i <48; i++) //first 48 bins of SRP are of 16 bit size
prasanthbj05 266:ae588e75cfa4 1495 {
prasanthbj05 266:ae588e75cfa4 1496 sfp_bin[i] = read_2byte(ptr+2*i);
ee12b079 93:4d76de54a699 1497 scp_bin[i] += sfp_bin[i];
chaithanyarss 331:1943be3fd178 1498 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1499 gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 1500 }*/
ee12b079 268:ded5306a1fd1 1501 if(sfp_bin[i] > sfp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 1502 //gPC.printf("\n\rSP above threshold index: %d",i);
chaithanyarss 331:1943be3fd178 1503 #if test_science
chaithanyarss 331:1943be3fd178 1504 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;
chaithanyarss 331:1943be3fd178 1505 #endif
ee12b079 93:4d76de54a699 1506 at = 1;
ee12b079 268:ded5306a1fd1 1507 }
ee12b079 93:4d76de54a699 1508 }
prasanthbj05 266:ae588e75cfa4 1509 for(int i = 0; i < 4 ; i++) //next 4 bins are of 32 bit size
prasanthbj05 266:ae588e75cfa4 1510 {
prasanthbj05 266:ae588e75cfa4 1511 sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i );
prasanthbj05 266:ae588e75cfa4 1512 scp_bin[i+48] += sfp_bin[i+48];
chaithanyarss 331:1943be3fd178 1513
chaithanyarss 331:1943be3fd178 1514 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1515 gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 1516 }*/
ee12b079 268:ded5306a1fd1 1517 if(sfp_bin[i+48] > sfp_threshold_m1[i+48]){
ee12b079 268:ded5306a1fd1 1518 //gPC.printf("\n\rSP above threshold index: %d",i+48);
chaithanyarss 331:1943be3fd178 1519 #if test_science
chaithanyarss 331:1943be3fd178 1520 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;
chaithanyarss 331:1943be3fd178 1521 #endif
ee12b079 93:4d76de54a699 1522 at = 1;
ee12b079 268:ded5306a1fd1 1523 }
ee12b079 93:4d76de54a699 1524 }
shreeshas95 1:a0055b3280c8 1525 }
chaithanyarss 331:1943be3fd178 1526 #if test_science
chaithanyarss 331:1943be3fd178 1527 for(uint8_t temp_i = 0;temp_i<16;temp_i++){
chaithanyarss 331:1943be3fd178 1528 if(calib_thres_index[temp_i][calib_thres_subindex[temp_i]]==1){
chaithanyarss 331:1943be3fd178 1529 calib_thres_index[temp_i][calib_thres_subindex[temp_i]] = counter+1;
chaithanyarss 331:1943be3fd178 1530 calib_thres_subindex[temp_i]++;
chaithanyarss 331:1943be3fd178 1531 }
chaithanyarss 331:1943be3fd178 1532 }
chaithanyarss 331:1943be3fd178 1533 for(uint8_t temp_i = 0;temp_i<5;temp_i++){
chaithanyarss 331:1943be3fd178 1534 if(scat_thres_index[temp_i][scat_thres_subindex[temp_i]]==1){
chaithanyarss 331:1943be3fd178 1535 scat_thres_index[temp_i][scat_thres_subindex[temp_i]] = counter+1;
chaithanyarss 331:1943be3fd178 1536 scat_thres_subindex[temp_i]++;
chaithanyarss 331:1943be3fd178 1537 }
chaithanyarss 331:1943be3fd178 1538 }
chaithanyarss 331:1943be3fd178 1539 #endif
prasanthbj05 266:ae588e75cfa4 1540 /*---------------------------populating sfp_bin[] and scp_bin[] from srp ends here(also tagging AT or BT)------------------*/
chaithanyarss 331:1943be3fd178 1541 #if test_science
chaithanyarss 331:1943be3fd178 1542 //gPC.printf("\n\n\rCounter: %d",counter);
chaithanyarss 331:1943be3fd178 1543 //verify_read_dma(srp_mode,counter);
chaithanyarss 331:1943be3fd178 1544 #endif
chaithanyarss 331:1943be3fd178 1545 ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer
prasanthbj05 266:ae588e75cfa4 1546
prasanthbj05 266:ae588e75cfa4 1547 /*------------------------------------------forming a science fine packet starts here----------------------------------------
prasanthbj05 266:ae588e75cfa4 1548 First we fill packet header, then fill packet data and finally assign its length
prasanthbj05 266:ae588e75cfa4 1549 ----------------------------------------------------------------------------------------------------------------------------*/
chaithanyarss 331:1943be3fd178 1550 for(int i = 0; i<71; i++)
ee12b079 93:4d76de54a699 1551 sfp[i] = 0;
prasanthbj05 266:ae588e75cfa4 1552 if(srp_mode == 0) //calibrated mode
prasanthbj05 266:ae588e75cfa4 1553 {
prasanthbj05 266:ae588e75cfa4 1554 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1555 {
ee12b079 268:ded5306a1fd1 1556 #if srpz
chaithanyarss 290:3159ff1081a2 1557 gPC.printf("\n\rSFP Below Threshold");
ee12b079 268:ded5306a1fd1 1558 #endif
ee12b079 93:4d76de54a699 1559 pointer = sfp; debug_cntr = 0;
prasanthbj05 266:ae588e75cfa4 1560 space = adjust(4, attitude,pointer,8); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1561 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1562 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1563 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1564 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1565 for(uint8_t i = 0 ; i < 8 ; i++){
prasanthbj05 266:ae588e75cfa4 1566 space = adjust(1, ((compress(sfp_bin[24+i],7,2))&0x100)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1567 space = adjust(8, ((compress(sfp_bin[24+i],7,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1568 }
prasanthbj05 266:ae588e75cfa4 1569 for(uint8_t i = 0 ; i <12 ; i++){
prasanthbj05 266:ae588e75cfa4 1570 space = adjust(6, (compress(sfp_bin[32+i],4,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1571 }
prasanthbj05 266:ae588e75cfa4 1572 for(uint8_t i = 0; i < 4; i++){
prasanthbj05 266:ae588e75cfa4 1573 space = adjust(8, (compress(sfp_bin[44+i],6,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1574 }
prasanthbj05 266:ae588e75cfa4 1575 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 1576 space = adjust(1, (compress(sfp_bin[48+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1577 space = adjust(8, compress(sfp_bin[48+i],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1578 }
prasanthbj05 266:ae588e75cfa4 1579 space = adjust(8, ((compress(sfp_bin[17],6,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1580 space = adjust(8, ((compress(sfp_bin[23],6,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1581 if(pzf == 0){
prasanthbj05 266:ae588e75cfa4 1582 for(uint8_t i = 0; i<2 ; i++){
prasanthbj05 266:ae588e75cfa4 1583 space = adjust(6, ((compress(sfp_bin[i],5,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1584 }
prasanthbj05 266:ae588e75cfa4 1585 for(uint8_t i = 0; i<15 ; i++){
prasanthbj05 266:ae588e75cfa4 1586 space = adjust(5, ((compress(sfp_bin[i+2],4,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1587 }
ee12b079 93:4d76de54a699 1588 }
ee12b079 93:4d76de54a699 1589 if(ezf == 0){
prasanthbj05 266:ae588e75cfa4 1590 for(uint8_t i = 0; i <5 ;i++){
prasanthbj05 266:ae588e75cfa4 1591 space = adjust(7, ((compress(sfp_bin[18+i],6,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1592 }
ee12b079 93:4d76de54a699 1593 }
prasanthbj05 266:ae588e75cfa4 1594 } //below thershold ends here.
ee12b079 93:4d76de54a699 1595 if(at == 1){
ee12b079 268:ded5306a1fd1 1596 #if srpz
chaithanyarss 290:3159ff1081a2 1597 gPC.printf("\n\rSFP Above Threshold");
ee12b079 268:ded5306a1fd1 1598 #endif
ee12b079 93:4d76de54a699 1599 pointer = sfp + 6; debug_cntr = 6;space = 8;
ee12b079 93:4d76de54a699 1600 sfp[0] = (sci_time>>27)&0xff; sfp[1] = (sci_time>>19)&0xff; sfp[2] = (sci_time>>11)&0xff; sfp[3] = (sci_time>>3)&0xff;
prasanthbj05 266:ae588e75cfa4 1601 sfp[4] = ((sci_time&0x07)<<5) + ((attitude&0x0f)<<1) + (counter>>5);
prasanthbj05 266:ae588e75cfa4 1602 sfp[5] = ((counter&0x1f)<<3) + (srp_mode<<2);
ee12b079 93:4d76de54a699 1603 sfp[5] += (pzf<<1) + ezf ;
prasanthbj05 266:ae588e75cfa4 1604 for(uint8_t i = 0 ; i < 8 ; i++){
prasanthbj05 266:ae588e75cfa4 1605 space = adjust(1, (compress(sfp_bin[24+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1606 space = adjust(8, ((compress(sfp_bin[24+i],7,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 1607 }
prasanthbj05 266:ae588e75cfa4 1608 for(uint8_t i = 0 ; i <12 ; i++){
ee12b079 93:4d76de54a699 1609 space = adjust(6, ((compress(sfp_bin[32+i],3,3))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 1610 }
prasanthbj05 266:ae588e75cfa4 1611 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 1612 space = adjust(2, (compress(sfp_bin[44+i],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1613 space = adjust(8, compress(sfp_bin[44+i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 1614 }
prasanthbj05 266:ae588e75cfa4 1615 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 1616 space = adjust(1, (compress(sfp_bin[48+i],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1617 space = adjust(8, compress(sfp_bin[48+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1618 }
prasanthbj05 266:ae588e75cfa4 1619 space = adjust(2, (compress(sfp_bin[17],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1620 space = adjust(8, compress(sfp_bin[17],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1621 space = adjust(2, (compress(sfp_bin[23],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1622 space = adjust(8, compress(sfp_bin[23],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1623
ee12b079 93:4d76de54a699 1624 if(pzf == 0){
prasanthbj05 266:ae588e75cfa4 1625 //cout<<"proton bins ";
ee12b079 268:ded5306a1fd1 1626 #if srpz
chaithanyarss 290:3159ff1081a2 1627 gPC.printf("\n\rProton bins present in SRP");
ee12b079 268:ded5306a1fd1 1628 #endif
prasanthbj05 266:ae588e75cfa4 1629 for(uint8_t i = 0; i<17 ; i++){
ee12b079 93:4d76de54a699 1630 space = adjust(2, ((compress(sfp_bin[i],8,2))>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1631 space = adjust(8, compress(sfp_bin[i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
chaithanyarss 331:1943be3fd178 1632 //gPC.printf("%02X ",compress(sfp_bin[i],8,2));
ee12b079 93:4d76de54a699 1633 }
ee12b079 93:4d76de54a699 1634 }
chaithanyarss 332:7d2431ce979f 1635 //if(pzf==1)
chaithanyarss 331:1943be3fd178 1636 //gPC.printf("\n\rAll proton bins empty");
chaithanyarss 332:7d2431ce979f 1637 if(ezf == 0){
prasanthbj05 266:ae588e75cfa4 1638 //cout<<"electron bins ";
ee12b079 268:ded5306a1fd1 1639 #if srpz
chaithanyarss 290:3159ff1081a2 1640 gPC.printf("\n\rElectron bins present in SRP");
ee12b079 268:ded5306a1fd1 1641 #endif
ee12b079 93:4d76de54a699 1642 for(int i = 0; i<5 ; i++){
prasanthbj05 266:ae588e75cfa4 1643 space = adjust(2,((compress(sfp_bin[18+i],8,2))>>8),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1644 space = adjust(8, compress(sfp_bin[18+i],8,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
chaithanyarss 331:1943be3fd178 1645 //gPC.printf("%02X ",compress(sfp_bin[i],8,2));
ee12b079 93:4d76de54a699 1646 }
ee12b079 93:4d76de54a699 1647 }
chaithanyarss 332:7d2431ce979f 1648 //if(ezf==1)
chaithanyarss 331:1943be3fd178 1649 //gPC.printf("\n\rAll electron bins empty");
prasanthbj05 266:ae588e75cfa4 1650 } //above threshold ends here.
chaithanyarss 332:7d2431ce979f 1651 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1652 {
chaithanyarss 331:1943be3fd178 1653 id = 1; length = 241;
chaithanyarss 332:7d2431ce979f 1654 if(pzf == 0)
ee12b079 93:4d76de54a699 1655 length += 87;
chaithanyarss 332:7d2431ce979f 1656 if(ezf == 0)
chaithanyarss 331:1943be3fd178 1657 length += 35;
prasanthbj05 266:ae588e75cfa4 1658 }
prasanthbj05 266:ae588e75cfa4 1659 else
prasanthbj05 266:ae588e75cfa4 1660 {
chaithanyarss 331:1943be3fd178 1661 id = 2; length = 288;
ee12b079 93:4d76de54a699 1662 if(pzf == 0)
ee12b079 93:4d76de54a699 1663 length += 170;
ee12b079 93:4d76de54a699 1664 if(ezf == 0)
ee12b079 93:4d76de54a699 1665 length += 50;
chaithanyarss 331:1943be3fd178 1666 #if test_science
chaithanyarss 331:1943be3fd178 1667 dma_sfp_at_count++;
chaithanyarss 331:1943be3fd178 1668 #endif
ee12b079 93:4d76de54a699 1669 }
chaithanyarss 331:1943be3fd178 1670 #if test_science
chaithanyarss 331:1943be3fd178 1671 sfp_mode_count[0]++;
chaithanyarss 331:1943be3fd178 1672 #endif
shreeshas95 1:a0055b3280c8 1673 }
prasanthbj05 266:ae588e75cfa4 1674 else if(srp_mode == 1) //scattered mode
prasanthbj05 266:ae588e75cfa4 1675 {
prasanthbj05 266:ae588e75cfa4 1676 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1677 {
ee12b079 268:ded5306a1fd1 1678 #if srpz
chaithanyarss 290:3159ff1081a2 1679 gPC.printf("\n\rSFP below threshold");
ee12b079 268:ded5306a1fd1 1680 #endif
prasanthbj05 266:ae588e75cfa4 1681 pointer = sfp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 1682 space = adjust(4, attitude,pointer,8); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1683 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1684 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1685 for(uint8_t i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 1686 {
prasanthbj05 266:ae588e75cfa4 1687 space = adjust(7, compress(sfp_bin[i],5,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1688 }
prasanthbj05 266:ae588e75cfa4 1689 for(uint8_t i = 0 ; i < 4 ; i++)
prasanthbj05 266:ae588e75cfa4 1690 {
prasanthbj05 266:ae588e75cfa4 1691 space = adjust(1, (compress(sfp_bin[48+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1692 space = adjust(8, compress(sfp_bin[48+i],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1693 }
prasanthbj05 266:ae588e75cfa4 1694 }
prasanthbj05 266:ae588e75cfa4 1695 if(at == 1)
prasanthbj05 266:ae588e75cfa4 1696 {
ee12b079 268:ded5306a1fd1 1697
ee12b079 268:ded5306a1fd1 1698 #if srpz
chaithanyarss 331:1943be3fd178 1699 gPC.printf("\n\rSFP above threshold");
ee12b079 268:ded5306a1fd1 1700 #endif
prasanthbj05 266:ae588e75cfa4 1701 pointer = sfp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 1702 space = adjust(3, sci_time>>32 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1703 space = adjust(8, sci_time>>24 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1704 space = adjust(8, sci_time>>16 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1705 space = adjust(8, sci_time>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1706 space = adjust(8, sci_time ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1707 space = adjust(4, attitude,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1708 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1709 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1710 for(uint8_t i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 1711 {
prasanthbj05 266:ae588e75cfa4 1712 space = adjust(2, (compress(sfp_bin[i],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1713 space = adjust(8, compress(sfp_bin[i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1714 }
prasanthbj05 266:ae588e75cfa4 1715 for(uint8_t i = 0 ; i < 4 ; i++)
prasanthbj05 266:ae588e75cfa4 1716 {
prasanthbj05 266:ae588e75cfa4 1717 space = adjust(1, (compress(sfp_bin[48+i],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1718 space = adjust(8, compress(sfp_bin[48+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1719 }
prasanthbj05 266:ae588e75cfa4 1720 }
prasanthbj05 266:ae588e75cfa4 1721 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1722 {
chaithanyarss 331:1943be3fd178 1723 id = 1; length = 384;
prasanthbj05 266:ae588e75cfa4 1724 }
prasanthbj05 266:ae588e75cfa4 1725 else
prasanthbj05 266:ae588e75cfa4 1726 {
chaithanyarss 331:1943be3fd178 1727 id = 2; length = 568;
chaithanyarss 331:1943be3fd178 1728 #if test_science
chaithanyarss 331:1943be3fd178 1729 dma_sfp_at_count++;
chaithanyarss 331:1943be3fd178 1730 #endif
ee12b079 93:4d76de54a699 1731 }
chaithanyarss 331:1943be3fd178 1732 #if test_science
chaithanyarss 331:1943be3fd178 1733 sfp_mode_count[1]++;
chaithanyarss 331:1943be3fd178 1734 #endif
shreeshas95 1:a0055b3280c8 1735 }
prasanthbj05 266:ae588e75cfa4 1736 length = (length%8==0)?(length/8):(length/8)+1; //converting length to mulitple of 8
ee12b079 268:ded5306a1fd1 1737 #if srpz
chaithanyarss 290:3159ff1081a2 1738 gPC.printf("\n\rLength of SFP packet in bytes = %d",length);
ee12b079 268:ded5306a1fd1 1739 #endif
chaithanyarss 331:1943be3fd178 1740 //gPC.printf("\n\rLength of SFP packet in bytes = %d",length);
chaithanyarss 331:1943be3fd178 1741 /*----------------------------------------filling the science fine packet array ends here------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 1742
prasanthbj05 266:ae588e75cfa4 1743 /*-----------------------------Inserting the above packet(sfp) into the TM frame(s) starts here----------------------------*/
chaithanyarss 331:1943be3fd178 1744 if(id==1){ //below threshold
prasanthbj05 266:ae588e75cfa4 1745 if(position_tm_frame[id]>130){
ee12b079 268:ded5306a1fd1 1746 #if srpz
chaithanyarss 290:3159ff1081a2 1747 gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame.");
ee12b079 268:ded5306a1fd1 1748 #endif
prasanthbj05 266:ae588e75cfa4 1749 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1750 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 1751 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1752 }
chaithanyarss 331:1943be3fd178 1753 //position_tm_frame[id]=position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1754 }
prasanthbj05 266:ae588e75cfa4 1755 }
chaithanyarss 331:1943be3fd178 1756 else if(id==2){ //above threshold
prasanthbj05 266:ae588e75cfa4 1757 if(position_tm_frame[id]>126){
ee12b079 268:ded5306a1fd1 1758 #if srpz
chaithanyarss 290:3159ff1081a2 1759 gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame.");
ee12b079 268:ded5306a1fd1 1760 #endif
prasanthbj05 266:ae588e75cfa4 1761 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1762 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 1763 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1764 }
chaithanyarss 331:1943be3fd178 1765 //position_tm_frame[id]=position_tm_starting[id]; //
prasanthbj05 266:ae588e75cfa4 1766 }
prasanthbj05 266:ae588e75cfa4 1767 }
prasanthbj05 266:ae588e75cfa4 1768 if(position_tm_frame[id]==position_tm_starting[id]){
prasanthbj05 266:ae588e75cfa4 1769 frames[id][6-id] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1770 }
prasanthbj05 266:ae588e75cfa4 1771 for(uint16_t j=0 ; j<length ;)
prasanthbj05 266:ae588e75cfa4 1772 {
prasanthbj05 266:ae588e75cfa4 1773 if(position_tm_frame[id]==frames[id][6-id]){
prasanthbj05 266:ae588e75cfa4 1774 if(id==1){
ee12b079 268:ded5306a1fd1 1775 #if srpz
chaithanyarss 290:3159ff1081a2 1776 gPC.printf("\n\rAdding Time to TM frame");
ee12b079 268:ded5306a1fd1 1777 #endif
prasanthbj05 266:ae588e75cfa4 1778 frames[id][6] = (uint8_t)((sci_time>>32)&0x07);
prasanthbj05 266:ae588e75cfa4 1779 frames[id][7] = (uint8_t)((sci_time>>24)&0xff);
prasanthbj05 266:ae588e75cfa4 1780 frames[id][8] = (uint8_t)((sci_time>>16)&0xff);
prasanthbj05 266:ae588e75cfa4 1781 frames[id][9] = (uint8_t)((sci_time>>8)&0xff);
prasanthbj05 266:ae588e75cfa4 1782 frames[id][10] = (uint8_t)((sci_time)&0xff);
prasanthbj05 266:ae588e75cfa4 1783 }
prasanthbj05 266:ae588e75cfa4 1784 }
prasanthbj05 266:ae588e75cfa4 1785 if(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1786 frames[id][position_tm_frame[id]] = sfp[j];
prasanthbj05 266:ae588e75cfa4 1787 j++;
prasanthbj05 266:ae588e75cfa4 1788 position_tm_frame[id]++; //incrementing position of write pointer in TM frame
prasanthbj05 266:ae588e75cfa4 1789 }
prasanthbj05 266:ae588e75cfa4 1790 if(position_tm_frame[id] == 132)
prasanthbj05 266:ae588e75cfa4 1791 {
prasanthbj05 266:ae588e75cfa4 1792 /*-----------the current frame is completely filled and we fill frame header to write into SD card---------*/
ee12b079 268:ded5306a1fd1 1793 #if srpz
chaithanyarss 290:3159ff1081a2 1794 gPC.printf("\n\rSFP_TM frame full. Length of current packet = %d",j);
chaithanyarss 290:3159ff1081a2 1795 gPC.printf("\n\rFirst Header pointer: %d",frames[id][6-id]);
chaithanyarss 290:3159ff1081a2 1796 gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][6-id]]);
ee12b079 268:ded5306a1fd1 1797 #endif
ee12b079 93:4d76de54a699 1798 pointer = frames[id];
prasanthbj05 266:ae588e75cfa4 1799 if(id == 1){ //below threshold
ee12b079 93:4d76de54a699 1800 space = adjust(1,0,pointer,8);
ee12b079 93:4d76de54a699 1801 space = adjust(4,3,pointer,space);
ee12b079 271:72529b247333 1802 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
chaithanyarss 290:3159ff1081a2 1803
chaithanyarss 290:3159ff1081a2 1804 //gPC.printf("3 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 1805 #if debug_fsc
chaithanyarss 290:3159ff1081a2 1806 frames[id][1] = (test_fsc[3]>>24)&0xff;
chaithanyarss 290:3159ff1081a2 1807 frames[id][2] = (test_fsc[3]>>16)&0xff;
chaithanyarss 290:3159ff1081a2 1808 frames[id][3] = (test_fsc[3]>>8)&0xff;
chaithanyarss 290:3159ff1081a2 1809 frames[id][4] = test_fsc[3]&0xff;
chaithanyarss 290:3159ff1081a2 1810 test_fsc[3]++;
chaithanyarss 290:3159ff1081a2 1811 #endif
chaithanyarss 290:3159ff1081a2 1812 #if !debug_fsc
ee12b079 93:4d76de54a699 1813 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 93:4d76de54a699 1814 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 1815 frames[id][3] = (FSC_science>>8)&0xff;
prasanthbj05 266:ae588e75cfa4 1816 frames[id][4] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1817 #endif
prasanthbj05 266:ae588e75cfa4 1818 }
prasanthbj05 266:ae588e75cfa4 1819 else if(id == 2) //above threshold
prasanthbj05 266:ae588e75cfa4 1820 {
ee12b079 93:4d76de54a699 1821 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 1822 space = adjust(4,2,pointer,space);
prasanthbj05 266:ae588e75cfa4 1823 FSC_science = FSC_CURRENT[2]; ///to be used as this
chaithanyarss 290:3159ff1081a2 1824 //gPC.printf("2 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 1825 #if debug_fsc
chaithanyarss 290:3159ff1081a2 1826 frames[id][1] = (test_fsc[2]>>16)&0xff;
chaithanyarss 290:3159ff1081a2 1827 frames[id][2] = (test_fsc[2]>>8)&0xff;
chaithanyarss 290:3159ff1081a2 1828 frames[id][3] = test_fsc[2]&0xff;
chaithanyarss 290:3159ff1081a2 1829 test_fsc[2]++;
chaithanyarss 290:3159ff1081a2 1830 #endif
chaithanyarss 290:3159ff1081a2 1831 #if !debug_fsc
ee12b079 93:4d76de54a699 1832 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 1833 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 93:4d76de54a699 1834 frames[id][3] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1835 #endif
ee12b079 93:4d76de54a699 1836 }
ee12b079 93:4d76de54a699 1837 temp_crc = crc16_gen(frames[id],132);
ee12b079 93:4d76de54a699 1838 frames[id][132] = temp_crc>>8;
ee12b079 93:4d76de54a699 1839 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1840
ee12b079 268:ded5306a1fd1 1841 #if srpz
ee12b079 268:ded5306a1fd1 1842 gPC.printf("\n\rPrinting SFP_TM\n\r{");
chaithanyarss 290:3159ff1081a2 1843 //gPC.printf("\n\r{");
ee12b079 268:ded5306a1fd1 1844 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 1845 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 1846 }
ee12b079 268:ded5306a1fd1 1847 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 1848 #endif
chaithanyarss 331:1943be3fd178 1849 #if tabulation
chaithanyarss 331:1943be3fd178 1850 tabulate_TM(&frames[id][0]);
chaithanyarss 331:1943be3fd178 1851 #endif
prasanthbj05 266:ae588e75cfa4 1852 /*------------------current TM frame completely filled-----------------------*/
ee12b079 114:9fb55057b13f 1853 exor(frames[id]);
ee12b079 93:4d76de54a699 1854 convolution(frames[id]);
ee12b079 93:4d76de54a699 1855 interleave(TM_convoluted_data,TM_interleave_data);
ee12b079 93:4d76de54a699 1856 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
prasanthbj05 266:ae588e75cfa4 1857 if(id == 1)
ee12b079 195:6a549c0e9287 1858 {
ee12b079 268:ded5306a1fd1 1859 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,3); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 1860 }
prasanthbj05 266:ae588e75cfa4 1861 else if (id == 2)
prasanthbj05 266:ae588e75cfa4 1862 {
ee12b079 268:ded5306a1fd1 1863 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,2); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 1864 }
ee12b079 268:ded5306a1fd1 1865 if(sd_stat)
ee12b079 268:ded5306a1fd1 1866 {
chaithanyarss 331:1943be3fd178 1867 gPC.printf("\n\n\rsd write fail---------------------------------------");
chaithanyarss 290:3159ff1081a2 1868 }
ee12b079 93:4d76de54a699 1869 position_tm_frame[id] = position_tm_starting[id];
chaithanyarss 331:1943be3fd178 1870 if(j!=0)
chaithanyarss 331:1943be3fd178 1871 frames[id][6-id] = (length - j)+position_tm_starting[id];
chaithanyarss 331:1943be3fd178 1872 else if(j==0)
chaithanyarss 331:1943be3fd178 1873 frames[id][6-id] = position_tm_starting[id];
ee12b079 93:4d76de54a699 1874 }
shreeshas95 1:a0055b3280c8 1875 }
prasanthbj05 266:ae588e75cfa4 1876 /*------------------------------finished inserting the sfp packet into the TM frame(s)-------------------------------------*/
chaithanyarss 331:1943be3fd178 1877 } // for loop bracket which runs 60 times
chaithanyarss 331:1943be3fd178 1878 //ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer
chaithanyarss 331:1943be3fd178 1879
chaithanyarss 331:1943be3fd178 1880 #if test_science
chaithanyarss 331:1943be3fd178 1881 if(pzf==1){
chaithanyarss 331:1943be3fd178 1882 gPC.printf("\n\rAll protons bins empty");
chaithanyarss 331:1943be3fd178 1883 }
chaithanyarss 331:1943be3fd178 1884 if(ezf==1){
chaithanyarss 331:1943be3fd178 1885 gPC.printf("\n\rAll electrons bins are empty");
chaithanyarss 331:1943be3fd178 1886 }
chaithanyarss 331:1943be3fd178 1887 #endif
ee12b079 268:ded5306a1fd1 1888 #if srpz_last
ee12b079 268:ded5306a1fd1 1889 //gPC.printf("\n\rPrinting the last SFP_TM frame");
ee12b079 268:ded5306a1fd1 1890 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 1891 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 1892 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 1893 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 1894 }
ee12b079 268:ded5306a1fd1 1895 if(position_tm_frame[id]==132){
ee12b079 268:ded5306a1fd1 1896 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][6-id]]);
ee12b079 268:ded5306a1fd1 1897 pointer = frames[id];
ee12b079 268:ded5306a1fd1 1898 if(id == 1){ //below threshold
ee12b079 268:ded5306a1fd1 1899 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1900 space = adjust(4,3,pointer,space);
ee12b079 268:ded5306a1fd1 1901 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
chaithanyarss 290:3159ff1081a2 1902 #if debug_fsc
chaithanyarss 331:1943be3fd178 1903 frames[id][1] = (test_fsc[3]>>24)&0xff;
chaithanyarss 331:1943be3fd178 1904 frames[id][2] = (test_fsc[3]>>16)&0xff;
chaithanyarss 331:1943be3fd178 1905 frames[id][3] = (test_fsc[3]>>8)&0xff;
chaithanyarss 331:1943be3fd178 1906 frames[id][4] = test_fsc[3]&0xff;
chaithanyarss 290:3159ff1081a2 1907 test_fsc[3]++;
chaithanyarss 290:3159ff1081a2 1908 #endif
chaithanyarss 290:3159ff1081a2 1909 #if !debug_fsc
ee12b079 268:ded5306a1fd1 1910 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 268:ded5306a1fd1 1911 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1912 frames[id][3] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1913 frames[id][4] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1914 #endif
ee12b079 268:ded5306a1fd1 1915 }
ee12b079 268:ded5306a1fd1 1916 else if(id == 2) //above threshold
ee12b079 268:ded5306a1fd1 1917 {
ee12b079 268:ded5306a1fd1 1918 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1919 space = adjust(4,2,pointer,space);
ee12b079 268:ded5306a1fd1 1920 FSC_science = FSC_CURRENT[2]; ///to be used as this
chaithanyarss 290:3159ff1081a2 1921 #if debug_fsc
chaithanyarss 290:3159ff1081a2 1922 frames[id][1] = (test_fsc[2]>>16)&0xff;
chaithanyarss 290:3159ff1081a2 1923 frames[id][2] = (test_fsc[2]>>8)&0xff;
chaithanyarss 290:3159ff1081a2 1924 frames[id][3] = test_fsc[2]&0xff;
chaithanyarss 290:3159ff1081a2 1925 test_fsc[2]++;
chaithanyarss 290:3159ff1081a2 1926 #endif
chaithanyarss 290:3159ff1081a2 1927 #if !debug_fsc
ee12b079 268:ded5306a1fd1 1928 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1929 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1930 frames[id][3] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1931 #endif
ee12b079 268:ded5306a1fd1 1932 }
ee12b079 268:ded5306a1fd1 1933 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 1934 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 1935 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1936
chaithanyarss 290:3159ff1081a2 1937 //gPC.printf("\n\rPrinting SFP_TM\n\r{");
chaithanyarss 290:3159ff1081a2 1938 gPC.printf("\n\r{");
ee12b079 268:ded5306a1fd1 1939 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 1940 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 1941 }
ee12b079 268:ded5306a1fd1 1942 gPC.printf("}\n\r");
chaithanyarss 290:3159ff1081a2 1943 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 1944 }
ee12b079 268:ded5306a1fd1 1945 #endif
ee12b079 93:4d76de54a699 1946 at = 0; pzf = 1; ezf = 1;
ee12b079 93:4d76de54a699 1947 srp_mode = head[2]&0x1;
prasanthbj05 266:ae588e75cfa4 1948 uint8_t compression_option = (head[2]>>1)&0x3;
prasanthbj05 266:ae588e75cfa4 1949 /*-------------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT starts here-------------------------
prasanthbj05 266:ae588e75cfa4 1950 ------------------(in case compression option = 0 , then tagging beacon packet(not yet formed) as AT or BT is also done)----------*/
prasanthbj05 266:ae588e75cfa4 1951 if(srp_mode ==0)
prasanthbj05 266:ae588e75cfa4 1952 {
prasanthbj05 266:ae588e75cfa4 1953 if(compression_option == 0)
prasanthbj05 266:ae588e75cfa4 1954 {
prasanthbj05 266:ae588e75cfa4 1955 for(int i=0; i<52 ;i++)
prasanthbj05 266:ae588e75cfa4 1956 {
prasanthbj05 266:ae588e75cfa4 1957 if(scp_bin[i] > scp_threshold_m0[i])
prasanthbj05 266:ae588e75cfa4 1958 {
ee12b079 268:ded5306a1fd1 1959 //gPC.printf("\n\rSCP above threshold index: %d",i);
chaithanyarss 331:1943be3fd178 1960 #if test_science
chaithanyarss 331:1943be3fd178 1961 calib_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1962 #endif
ee12b079 93:4d76de54a699 1963 at = 1;
chaithanyarss 331:1943be3fd178 1964 //break;
shreeshas95 1:a0055b3280c8 1965 }
shreeshas95 1:a0055b3280c8 1966 }
chaithanyarss 331:1943be3fd178 1967 #if test_science
chaithanyarss 331:1943be3fd178 1968 scp_mode_count[0]++;
chaithanyarss 331:1943be3fd178 1969 #endif
ee12b079 93:4d76de54a699 1970 }
prasanthbj05 266:ae588e75cfa4 1971 else if(compression_option == 1)
prasanthbj05 266:ae588e75cfa4 1972 {
chaithanyarss 331:1943be3fd178 1973 if(scp_bin[44] > scp_threshold_m0_1[0]){
chaithanyarss 331:1943be3fd178 1974 //gPC.printf("\n\rSCP above threshold index: 44");
chaithanyarss 331:1943be3fd178 1975 #if test_science
chaithanyarss 331:1943be3fd178 1976 //thres_scp_index[map_index_bins_2_srp_index(44,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1977 calib_thres_index_scp[map_index_bins_2_srp_index(44,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1978 #endif
chaithanyarss 331:1943be3fd178 1979 at=1;
chaithanyarss 331:1943be3fd178 1980 }
prasanthbj05 266:ae588e75cfa4 1981 for(int i=0; i<4 ;i++)
prasanthbj05 266:ae588e75cfa4 1982 {
prasanthbj05 266:ae588e75cfa4 1983 if(scp_bin[48+i] > scp_threshold_m0_1[i+1])
prasanthbj05 266:ae588e75cfa4 1984 {
ee12b079 268:ded5306a1fd1 1985 //gPC.printf("\n\rSCP above threshold index: %d",i+48);
chaithanyarss 331:1943be3fd178 1986 #if test_science
chaithanyarss 331:1943be3fd178 1987 //thres_scp_index[map_index_bins_2_srp_index(48+i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1988 calib_thres_index_scp[map_index_bins_2_srp_index(48+i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1989 #endif
ee12b079 93:4d76de54a699 1990 at = 1;
chaithanyarss 331:1943be3fd178 1991 //break;
ee12b079 93:4d76de54a699 1992 }
shreeshas95 1:a0055b3280c8 1993 }
ee12b079 268:ded5306a1fd1 1994 if(scp_bin[17] > scp_threshold_m0_1[5]){
ee12b079 268:ded5306a1fd1 1995 //gPC.printf("\n\rSP above threshold index: 17");
chaithanyarss 331:1943be3fd178 1996 #if test_science
chaithanyarss 331:1943be3fd178 1997 //thres_scp_index[map_index_bins_2_srp_index(17,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1998 calib_thres_index_scp[map_index_bins_2_srp_index(17,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1999 #endif
ee12b079 268:ded5306a1fd1 2000 at=1;
ee12b079 268:ded5306a1fd1 2001 }
ee12b079 268:ded5306a1fd1 2002 if(scp_bin[23] > scp_threshold_m0_1[6]){
ee12b079 268:ded5306a1fd1 2003 //gPC.printf("\n\rSP above threshold index: 23");
chaithanyarss 331:1943be3fd178 2004 #if test_science
chaithanyarss 331:1943be3fd178 2005 //thres_scp_index[map_index_bins_2_srp_index(23,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2006 calib_thres_index_scp[map_index_bins_2_srp_index(23,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2007 #endif
ee12b079 268:ded5306a1fd1 2008 at=1;
ee12b079 268:ded5306a1fd1 2009 }
ee12b079 93:4d76de54a699 2010 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 2011 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 2012 {
ee12b079 93:4d76de54a699 2013 proton_scp_sum += scp_bin[i];
shreeshas95 1:a0055b3280c8 2014 }
prasanthbj05 266:ae588e75cfa4 2015 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 2016 {
ee12b079 93:4d76de54a699 2017 electron_scp_sum += scp_bin[18+i];
ee12b079 93:4d76de54a699 2018 }
chaithanyarss 331:1943be3fd178 2019 if(proton_scp_sum > scp_threshold_m0_1[7]){
chaithanyarss 331:1943be3fd178 2020 //gPC.printf("\n\rProton_scp_sum above threshold");
chaithanyarss 331:1943be3fd178 2021 #if test_science
chaithanyarss 331:1943be3fd178 2022 proton_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2023 #endif
chaithanyarss 331:1943be3fd178 2024 at=1;
chaithanyarss 331:1943be3fd178 2025 }
chaithanyarss 331:1943be3fd178 2026 if(electron_scp_sum > scp_threshold_m0_1[8]){
chaithanyarss 331:1943be3fd178 2027 //gPC.printf("\n\rElectron_scp_sum above threshold");
chaithanyarss 331:1943be3fd178 2028 #if test_science
chaithanyarss 331:1943be3fd178 2029 electron_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2030 #endif
chaithanyarss 331:1943be3fd178 2031 at=1;
chaithanyarss 331:1943be3fd178 2032 }
chaithanyarss 331:1943be3fd178 2033 #if test_science
chaithanyarss 331:1943be3fd178 2034 scp_mode_count[1]++;
chaithanyarss 331:1943be3fd178 2035 #endif
shreeshas95 1:a0055b3280c8 2036 }
prasanthbj05 266:ae588e75cfa4 2037 else if(compression_option == 2)
prasanthbj05 266:ae588e75cfa4 2038 {
chaithanyarss 331:1943be3fd178 2039 if(scp_bin[50] > scp_sfp_threshold_m0_2[0]){
chaithanyarss 331:1943be3fd178 2040 //gPC.printf("\n\rSCP above threshold index:50");
chaithanyarss 331:1943be3fd178 2041 #if test_science
chaithanyarss 331:1943be3fd178 2042 //thres_scp_index[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2043 calib_thres_index_scp[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2044 #endif
chaithanyarss 331:1943be3fd178 2045 at=1;
chaithanyarss 331:1943be3fd178 2046 }
prasanthbj05 266:ae588e75cfa4 2047 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 2048 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 2049 {
prasanthbj05 266:ae588e75cfa4 2050 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 2051 }
prasanthbj05 266:ae588e75cfa4 2052 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 2053 {
prasanthbj05 266:ae588e75cfa4 2054 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 2055 }
ee12b079 268:ded5306a1fd1 2056 if(proton_scp_sum > scp_sfp_threshold_m0_2[1]){//gPC.printf("\n\rProton_SCP_sum above threshold");
chaithanyarss 331:1943be3fd178 2057 #if test_science
chaithanyarss 331:1943be3fd178 2058 proton_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2059 #endif
ee12b079 268:ded5306a1fd1 2060 at=1;}
ee12b079 268:ded5306a1fd1 2061 if(electron_scp_sum > scp_sfp_threshold_m0_2[2]){//gPC.printf("\n\rElectron above threshold");
chaithanyarss 331:1943be3fd178 2062 #if test_science
chaithanyarss 331:1943be3fd178 2063 electron_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2064 #endif
ee12b079 268:ded5306a1fd1 2065 at=1;}
chaithanyarss 331:1943be3fd178 2066 #if test_science
chaithanyarss 331:1943be3fd178 2067 scp_mode_count[2]++;
chaithanyarss 331:1943be3fd178 2068 #endif
prasanthbj05 266:ae588e75cfa4 2069 }
prasanthbj05 266:ae588e75cfa4 2070 }
prasanthbj05 266:ae588e75cfa4 2071 else if(srp_mode ==1)
prasanthbj05 266:ae588e75cfa4 2072 {
ee12b079 268:ded5306a1fd1 2073 if(compression_option==0){
prasanthbj05 266:ae588e75cfa4 2074 for(int i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 2075 {
prasanthbj05 266:ae588e75cfa4 2076 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 2077 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 2078 #if test_science
chaithanyarss 331:1943be3fd178 2079 scat_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2080 #endif
prasanthbj05 266:ae588e75cfa4 2081 at = 1;
chaithanyarss 331:1943be3fd178 2082 //break;
prasanthbj05 266:ae588e75cfa4 2083 }
prasanthbj05 266:ae588e75cfa4 2084 }
prasanthbj05 266:ae588e75cfa4 2085 for(int i=48; i<52; i++)
prasanthbj05 266:ae588e75cfa4 2086 {
prasanthbj05 266:ae588e75cfa4 2087 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 2088 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 2089 #if test_science
chaithanyarss 331:1943be3fd178 2090 scat_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2091 #endif
prasanthbj05 266:ae588e75cfa4 2092 at = 1;
chaithanyarss 331:1943be3fd178 2093 //break;
prasanthbj05 266:ae588e75cfa4 2094 }
shreeshas95 1:a0055b3280c8 2095 }
chaithanyarss 331:1943be3fd178 2096 #if test_science
chaithanyarss 331:1943be3fd178 2097 scp_mode_count[3]++;
chaithanyarss 331:1943be3fd178 2098 #endif
shreeshas95 1:a0055b3280c8 2099 }
ee12b079 268:ded5306a1fd1 2100 else if(compression_option==2){
ee12b079 268:ded5306a1fd1 2101 if(scp_bin[50]>scp_sfp_threshold_m0_2[0]){
ee12b079 268:ded5306a1fd1 2102 //gPC.printf("\nSCP above threshold index:50, Value:%",scp_bin[50]);
chaithanyarss 331:1943be3fd178 2103 #if test_science
chaithanyarss 331:1943be3fd178 2104 //thres_scp_index[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2105 scat_thres_index_scp[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2106 #endif
ee12b079 268:ded5306a1fd1 2107 at=1;
ee12b079 268:ded5306a1fd1 2108 }
chaithanyarss 331:1943be3fd178 2109 #if test_science
chaithanyarss 331:1943be3fd178 2110 scp_mode_count[4]++;
chaithanyarss 331:1943be3fd178 2111 #endif
prasanthbj05 266:ae588e75cfa4 2112 }
prasanthbj05 266:ae588e75cfa4 2113 }
prasanthbj05 266:ae588e75cfa4 2114 /*----------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT ends here--------------------------*/
chaithanyarss 331:1943be3fd178 2115 /*for(uint8_t temp_i=0;temp_i<52;temp_i++){
chaithanyarss 331:1943be3fd178 2116 gPC.printf("\n\rscp_bin[%d] =%d",temp_i+1,scp_bin[temp_i]);
chaithanyarss 331:1943be3fd178 2117 }*/
prasanthbj05 266:ae588e75cfa4 2118 if(srp_mode == 0)
prasanthbj05 266:ae588e75cfa4 2119 {
prasanthbj05 266:ae588e75cfa4 2120 //determining if non zero values of proton and electron bins exist for calibrated mode (srp)
prasanthbj05 266:ae588e75cfa4 2121 for(int i=0; i<17 ;i++)
prasanthbj05 266:ae588e75cfa4 2122 {
prasanthbj05 266:ae588e75cfa4 2123 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 2124 pzf = 0;
prasanthbj05 266:ae588e75cfa4 2125 }
prasanthbj05 266:ae588e75cfa4 2126 for(int i=18; i<23 ;i++)
prasanthbj05 266:ae588e75cfa4 2127 {
prasanthbj05 266:ae588e75cfa4 2128 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 2129 ezf = 0;
prasanthbj05 266:ae588e75cfa4 2130 }
prasanthbj05 266:ae588e75cfa4 2131 }
prasanthbj05 266:ae588e75cfa4 2132 /*-----------------------------------------Tagging beacon packet as AT or BT starts here-------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2133 beacon_at = 0;
prasanthbj05 266:ae588e75cfa4 2134 if(srp_mode==0) //those bins which can be meaningfully compared only in srp_mode==0
prasanthbj05 266:ae588e75cfa4 2135 {
prasanthbj05 266:ae588e75cfa4 2136 if(scp_bin[44]>beacon_threshold[0]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2137 if(scp_bin[17]>beacon_threshold[5]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2138 if(scp_bin[23]>beacon_threshold[6]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2139 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 2140 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 2141 {
prasanthbj05 266:ae588e75cfa4 2142 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 2143 }
prasanthbj05 266:ae588e75cfa4 2144 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 2145 {
prasanthbj05 266:ae588e75cfa4 2146 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 2147 }
prasanthbj05 266:ae588e75cfa4 2148 if(proton_scp_sum > beacon_threshold[7]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 2149 if(electron_scp_sum > beacon_threshold[8]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 2150 }
prasanthbj05 266:ae588e75cfa4 2151 if(scp_bin[48]>beacon_threshold[1]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2152 if(scp_bin[49]>beacon_threshold[2]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2153 if(scp_bin[50]>beacon_threshold[3]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2154 if(scp_bin[51]>beacon_threshold[4]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2155 /*----------------------------------------Tagging beacon packet as AT or BT ends here------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2156
prasanthbj05 266:ae588e75cfa4 2157 /*-----------------------------------------------Forming the beacon packet starts here-----------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2158 //Last 512 bits of beacon_array excluding CRC bits is used for storing the 5 most recent beacon packets
prasanthbj05 266:ae588e75cfa4 2159
prasanthbj05 266:ae588e75cfa4 2160 if(beacon_cntr == 1)
prasanthbj05 266:ae588e75cfa4 2161 {
prasanthbj05 267:783c248a6207 2162 beacon_ptr = &(beacon_array[47]); // starting block address, stores the oldest(among the 5 most recent) beacon packet
prasanthbj05 266:ae588e75cfa4 2163 }
prasanthbj05 266:ae588e75cfa4 2164 else if(beacon_cntr>1 && beacon_cntr<6)
prasanthbj05 266:ae588e75cfa4 2165 {
prasanthbj05 267:783c248a6207 2166 beacon_ptr +=17; // increase the block number(totally 5 blocks for 5 beacon packets)
prasanthbj05 266:ae588e75cfa4 2167 }
prasanthbj05 266:ae588e75cfa4 2168 else if(beacon_cntr == 6)
prasanthbj05 266:ae588e75cfa4 2169 {
prasanthbj05 267:783c248a6207 2170 for(uint16_t i=0;i<17;i++) // when all 5 blocks have been used shift the last 4 blocks up along the array and
prasanthbj05 266:ae588e75cfa4 2171 { // overwrite the new beacon packet in the 5th block
prasanthbj05 267:783c248a6207 2172 beacon_array[47+i] = beacon_array[64+i];
prasanthbj05 267:783c248a6207 2173 beacon_array[64+i] = beacon_array[81+i];
prasanthbj05 267:783c248a6207 2174 beacon_array[81+i] = beacon_array[98+i];
prasanthbj05 267:783c248a6207 2175 beacon_array[98+i] = beacon_array[115+i];
prasanthbj05 266:ae588e75cfa4 2176 }
prasanthbj05 267:783c248a6207 2177 beacon_ptr = &(beacon_array[115]); //address of the 5th block
prasanthbj05 266:ae588e75cfa4 2178 beacon_cntr = 5;
prasanthbj05 266:ae588e75cfa4 2179 }
prasanthbj05 266:ae588e75cfa4 2180 pointer = beacon_ptr; debug_cntr = 0; space = 8;
prasanthbj05 267:783c248a6207 2181 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 267:783c248a6207 2182 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2183 space = adjust(3,(sci_time>>32)&0x07,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2184 space = adjust(8,(sci_time>>24)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2185 space = adjust(8,(sci_time>>16)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2186 space = adjust(8,(sci_time>>8)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2187 space = adjust(8,(sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2188 space = adjust(4, (attitude)&0x0f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2189
prasanthbj05 266:ae588e75cfa4 2190 if(srp_mode==0){
prasanthbj05 266:ae588e75cfa4 2191 if(beacon_at == 0){
prasanthbj05 267:783c248a6207 2192 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2193 space = adjust(6, compress(scp_bin[44],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2194 space = adjust(7, compress(scp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2195 space = adjust(7, compress(scp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2196 space = adjust(7, compress(scp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2197 space = adjust(7, compress(scp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2198 space = adjust(6, compress(scp_bin[17],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2199 space = adjust(6, compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2200 space = adjust(4, compress(proton_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2201 space = adjust(8, compress(proton_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2202 space = adjust(4, compress(electron_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2203 space = adjust(8, compress(electron_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2204 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2205 for(int temp_i = 12; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 2206 {
prasanthbj05 266:ae588e75cfa4 2207 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 2208 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2209 }
prasanthbj05 266:ae588e75cfa4 2210 }
prasanthbj05 266:ae588e75cfa4 2211 else if(beacon_at==1){
prasanthbj05 266:ae588e75cfa4 2212 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2213 space = adjust(1, compress(sfp_bin[44],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2214 space = adjust(8, compress(sfp_bin[44],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2215 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2216 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2217 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2218 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2219 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2220 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2221 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2222 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2223 space = adjust(1, compress(sfp_bin[17],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2224 space = adjust(8, compress(sfp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2225 space = adjust(1, compress(sfp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2226 space = adjust(8, compress(sfp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2227 space = adjust(1, compress(proton_scp_sum ,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2228 space = adjust(8, compress(proton_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2229 space = adjust(1, compress(electron_scp_sum,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2230 space = adjust(8, compress(electron_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2231 //cout<<"for beacon space = "<<(space&0x0f)<<" counter = "<<debug_cntr;
prasanthbj05 266:ae588e75cfa4 2232 }
prasanthbj05 266:ae588e75cfa4 2233 }else if(srp_mode==1){
prasanthbj05 266:ae588e75cfa4 2234 if(beacon_at==0){
prasanthbj05 267:783c248a6207 2235 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2236 space = adjust(6, compress(0,3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2237 space = adjust(7, compress(sfp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2238 space = adjust(7, compress(sfp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2239 space = adjust(7, compress(sfp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2240 space = adjust(7, compress(sfp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2241 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2242 for(uint8_t temp_i = 7; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 2243 {
prasanthbj05 266:ae588e75cfa4 2244 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 2245 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2246 }
prasanthbj05 266:ae588e75cfa4 2247 }
prasanthbj05 266:ae588e75cfa4 2248 else if(beacon_at==1){
prasanthbj05 267:783c248a6207 2249 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2250 space = adjust(1, compress(0,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2251 space = adjust(8, compress(0,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2252 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2253 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2254 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2255 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2256 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2257 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2258 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2259 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2260 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2261 for(uint8_t temp_i = 10; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 2262 {
prasanthbj05 266:ae588e75cfa4 2263 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 2264 pointer = pointer + 1;
ee12b079 93:4d76de54a699 2265 }
shreeshas95 1:a0055b3280c8 2266 }
shreeshas95 1:a0055b3280c8 2267 }
prasanthbj05 266:ae588e75cfa4 2268 beacon_cntr++;
prasanthbj05 266:ae588e75cfa4 2269 /*--------------------------------------------------beacon packet ends here--------------------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2270
chaithanyarss 290:3159ff1081a2 2271 //gPC.printf("\n\n\rSCP");
prasanthbj05 266:ae588e75cfa4 2272 uint8_t packet_pp,time_diff;
prasanthbj05 266:ae588e75cfa4 2273 /*------------------------------------------Forming a science packet(scp) starts here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2274
ee12b079 93:4d76de54a699 2275 pointer = scp; debug_cntr = 0; space = 8;
chaithanyarss 331:1943be3fd178 2276 time_diff = 0;
chaithanyarss 331:1943be3fd178 2277 packet_pp = 1; //value 1 indicates there is no time jump, i.e. next packet in the frame arrived within 10 seconds
chaithanyarss 331:1943be3fd178 2278
chaithanyarss 331:1943be3fd178 2279 /*upto line 892: if the time difference between two successive frames is greater than 10 seconds then packet_pp bit is set to 1
chaithanyarss 331:1943be3fd178 2280 to indicate this time jump*/
chaithanyarss 331:1943be3fd178 2281 if(time_prev_scp!=sci_time)
prasanthbj05 266:ae588e75cfa4 2282 {
chaithanyarss 331:1943be3fd178 2283 if((((uint8_t)(sci_time>>7))&0x3f)<(((uint8_t)(time_prev_scp>>7))&0x3f))
chaithanyarss 331:1943be3fd178 2284 {
chaithanyarss 331:1943be3fd178 2285 time_diff = time_diff+60;
chaithanyarss 331:1943be3fd178 2286 }
chaithanyarss 331:1943be3fd178 2287 time_diff += (((uint8_t)(sci_time>>7))&0x3f);
chaithanyarss 331:1943be3fd178 2288 time_diff -= (((uint8_t)(time_prev_scp>>7))&0x3f);
chaithanyarss 331:1943be3fd178 2289 if(time_diff>10){
chaithanyarss 331:1943be3fd178 2290 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2291 }
chaithanyarss 331:1943be3fd178 2292 else{
chaithanyarss 331:1943be3fd178 2293 uint8_t min[2],hour[2],day[2],month[2],year[2];
chaithanyarss 331:1943be3fd178 2294 min[0] = (((uint8_t)(sci_time>>13))&0x3f);
chaithanyarss 331:1943be3fd178 2295 min[1] = (((uint8_t)(time_prev_scp>>13))&0x3f);
chaithanyarss 331:1943be3fd178 2296 hour[0] = (((uint8_t)(sci_time>>19))&0x1f);
chaithanyarss 331:1943be3fd178 2297 hour[1] = (((uint8_t)(time_prev_scp>>19))&0x1f);
chaithanyarss 331:1943be3fd178 2298 day[0] = (((uint8_t)(sci_time>>24))&0x1f);
chaithanyarss 331:1943be3fd178 2299 day[1] = (((uint8_t)(time_prev_scp>>24))&0x1f);
chaithanyarss 331:1943be3fd178 2300 month[0] = (((uint8_t)(sci_time>>29))&0x0f);
chaithanyarss 331:1943be3fd178 2301 month[1] = (((uint8_t)(time_prev_scp>>29))&0x0f);
chaithanyarss 331:1943be3fd178 2302 year[0] = (((uint8_t)(sci_time>>33))&0x03);
chaithanyarss 331:1943be3fd178 2303 year[1] = (((uint8_t)(time_prev_scp>>33))&0x03);
chaithanyarss 331:1943be3fd178 2304 if(min[0]<min[1]){
chaithanyarss 331:1943be3fd178 2305 if(hour[0]<hour[1]){
chaithanyarss 331:1943be3fd178 2306 if(day[0]<day[1]){
chaithanyarss 331:1943be3fd178 2307 if(month[0]<month[1]){
chaithanyarss 331:1943be3fd178 2308 if((year[0]-year[1])!=1)
chaithanyarss 331:1943be3fd178 2309 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2310 }
chaithanyarss 331:1943be3fd178 2311 else if((month[0]-month[1])!=1)
chaithanyarss 331:1943be3fd178 2312 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2313 }
chaithanyarss 331:1943be3fd178 2314 else if((day[0]-day[1])!=1)
chaithanyarss 331:1943be3fd178 2315 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2316 }
chaithanyarss 331:1943be3fd178 2317 else if((hour[0]-hour[1])!=1)
chaithanyarss 331:1943be3fd178 2318 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2319 }
chaithanyarss 331:1943be3fd178 2320 else if((min[0]-min[1])!=1)
chaithanyarss 331:1943be3fd178 2321 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2322 }
prasanthbj05 266:ae588e75cfa4 2323 }
prasanthbj05 266:ae588e75cfa4 2324 time_prev_scp = sci_time;
prasanthbj05 266:ae588e75cfa4 2325 uint32_t sfp_at_counter;
prasanthbj05 266:ae588e75cfa4 2326 sfp_at_counter = FSC_CURRENT[2];
prasanthbj05 266:ae588e75cfa4 2327 space = adjust(1, packet_pp,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2328 space = adjust(5, (sci_time>>8)&0x1f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2329 space = adjust(8, (sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2330 space = adjust(4, (attitude)&0xf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2331 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 266:ae588e75cfa4 2332 space = adjust(1, at,pointer,space); pointer += space>>4; debug_cntr += space>>4; //last bit of compression option
prasanthbj05 266:ae588e75cfa4 2333 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
chaithanyarss 331:1943be3fd178 2334 if(!((srp_mode==0 && compression_option==2)|(srp_mode==1 && compression_option==2)))
prasanthbj05 266:ae588e75cfa4 2335 {
prasanthbj05 266:ae588e75cfa4 2336 space = adjust(8, sfp_at_counter>>16,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2337 space = adjust(8, sfp_at_counter>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2338 space = adjust(8, sfp_at_counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2339 }
ee12b079 93:4d76de54a699 2340 if(srp_mode == 0 && compression_option == 0){ //normal callibrated mode
ee12b079 268:ded5306a1fd1 2341 #if scpz
chaithanyarss 290:3159ff1081a2 2342 gPC.printf("\n\rSCP - Normal calibrated mode");
ee12b079 268:ded5306a1fd1 2343 #endif
prasanthbj05 266:ae588e75cfa4 2344 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2345 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2346 if(at == 0 ){
ee12b079 268:ded5306a1fd1 2347 #if scpz
chaithanyarss 290:3159ff1081a2 2348 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2349 #endif
ee12b079 93:4d76de54a699 2350 for(int i = 0; i<8 ;i++){
prasanthbj05 266:ae588e75cfa4 2351 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2352 }
ee12b079 93:4d76de54a699 2353 for(int i = 0; i<12 ;i++){
prasanthbj05 266:ae588e75cfa4 2354 space = adjust(5,compress(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2355 }
ee12b079 93:4d76de54a699 2356 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 2357 space = adjust(6,compress(scp_bin[44+i],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2358 }
ee12b079 93:4d76de54a699 2359 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 2360 space = adjust(7,compress(scp_bin[48+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2361 }
prasanthbj05 266:ae588e75cfa4 2362 space = adjust(6,compress(scp_bin[17],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2363 space = adjust(6,compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2364 if(pzf == 0){
ee12b079 93:4d76de54a699 2365 for(int i = 0; i<2 ;i++){
ee12b079 93:4d76de54a699 2366 space = adjust(8,compress(scp_bin[i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2367 }
ee12b079 93:4d76de54a699 2368 for(int i = 0; i<15 ;i++){
prasanthbj05 266:ae588e75cfa4 2369 space = adjust(7,compress(scp_bin[i+2],5,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2370 }
ee12b079 93:4d76de54a699 2371 }
ee12b079 93:4d76de54a699 2372 if(ezf == 0){
ee12b079 93:4d76de54a699 2373 space = adjust(1,compress(scp_bin[18],7,2)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2374 space = adjust(8,compress(scp_bin[18],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2375 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 2376 space = adjust(8,compress(scp_bin[19+i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2377 }
ee12b079 93:4d76de54a699 2378 }
ee12b079 93:4d76de54a699 2379 }// below threshold ends here
ee12b079 93:4d76de54a699 2380 if(at == 1){
ee12b079 268:ded5306a1fd1 2381 #if scpz
chaithanyarss 290:3159ff1081a2 2382 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2383 #endif
ee12b079 93:4d76de54a699 2384 for(int i = 0; i<8 ;i++){
ee12b079 93:4d76de54a699 2385 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2386 }
ee12b079 93:4d76de54a699 2387 for(int i = 0; i<12 ;i++){
chaithanyarss 331:1943be3fd178 2388 space = adjust(5,compress2(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2389 }
ee12b079 93:4d76de54a699 2390 for(int i = 0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 2391 space = adjust(1,compress(scp_bin[44+i],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2392 space = adjust(8,compress(scp_bin[44+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2393 }
ee12b079 93:4d76de54a699 2394 for(int i=0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 2395 space = adjust(4,compress(scp_bin[48+i],9,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2396 space = adjust(8,compress(scp_bin[48+i],9,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2397 }
prasanthbj05 266:ae588e75cfa4 2398 space = adjust(1,compress(scp_bin[17],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2399 space = adjust(8,compress(scp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2400 space = adjust(1,compress(scp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2401 space = adjust(8,compress(scp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2402
ee12b079 93:4d76de54a699 2403 if(pzf == 0){
ee12b079 93:4d76de54a699 2404 for(int i = 0; i<17 ; i++){
prasanthbj05 266:ae588e75cfa4 2405 space = adjust(8, (compress(scp_bin[i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2406 }
ee12b079 93:4d76de54a699 2407 }
ee12b079 93:4d76de54a699 2408 if(ezf == 0){
ee12b079 93:4d76de54a699 2409 for(int i = 0; i<5 ; i++){
ee12b079 93:4d76de54a699 2410 space = adjust(8, (compress(scp_bin[18+i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2411 }
ee12b079 93:4d76de54a699 2412 }
ee12b079 93:4d76de54a699 2413 } //above thresholds ends
ee12b079 93:4d76de54a699 2414 } //srp_mode == 0 ends
ee12b079 93:4d76de54a699 2415 if(srp_mode == 1){
ee12b079 268:ded5306a1fd1 2416 #if scpz
chaithanyarss 290:3159ff1081a2 2417 gPC.printf("\n\rSCP - Scatter plot mode");
ee12b079 268:ded5306a1fd1 2418 #endif
ee12b079 93:4d76de54a699 2419 if(at == 0){
ee12b079 268:ded5306a1fd1 2420 #if scpz
chaithanyarss 290:3159ff1081a2 2421 gPC.printf("\n\rBelow Threshold");
ee12b079 268:ded5306a1fd1 2422 #endif
prasanthbj05 266:ae588e75cfa4 2423 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 2424 space = adjust(6, ((compress(scp_bin[i],3,3))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2425 }
ee12b079 93:4d76de54a699 2426 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 2427 space = adjust(7, (compress(scp_bin[48+i],4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2428 }
ee12b079 93:4d76de54a699 2429 }
ee12b079 93:4d76de54a699 2430 if(at == 1){
ee12b079 268:ded5306a1fd1 2431 #if scpz
chaithanyarss 290:3159ff1081a2 2432 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2433 #endif
prasanthbj05 266:ae588e75cfa4 2434 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 2435 space = adjust(7, (compress((scp_bin[i]/2),4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2436 }
ee12b079 93:4d76de54a699 2437 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 2438 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2439 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2440 }
ee12b079 93:4d76de54a699 2441 }
ee12b079 93:4d76de54a699 2442 }// scp mode 1 end
ee12b079 93:4d76de54a699 2443 if( srp_mode == 0 && compression_option == 1 ){ //scp data conservation mode
ee12b079 268:ded5306a1fd1 2444 #if scpz
chaithanyarss 290:3159ff1081a2 2445 gPC.printf("\n\rSCP - Calibrated data conservation mode");
ee12b079 268:ded5306a1fd1 2446 #endif
ee12b079 93:4d76de54a699 2447 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2448 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2449 if(at == 0){
ee12b079 268:ded5306a1fd1 2450 #if scpz
chaithanyarss 290:3159ff1081a2 2451 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2452 #endif
prasanthbj05 266:ae588e75cfa4 2453 space = adjust(6, (compress(scp_bin[44],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2454 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 2455 space = adjust(7, (compress(scp_bin[48+i],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2456 }
prasanthbj05 266:ae588e75cfa4 2457 space = adjust(6, (compress(scp_bin[17],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2458 space = adjust(6, (compress(scp_bin[23],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2459 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2460 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2461 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2462 }
prasanthbj05 266:ae588e75cfa4 2463 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2464 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2465 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2466 }
ee12b079 93:4d76de54a699 2467 }else if(at == 1){
ee12b079 268:ded5306a1fd1 2468 #if scpz
chaithanyarss 290:3159ff1081a2 2469 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2470 #endif
prasanthbj05 266:ae588e75cfa4 2471 space = adjust(1, (compress(scp_bin[44],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2472 space = adjust(8, (compress(scp_bin[44],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2473 for(int i=0; i<4; i++){
ee12b079 93:4d76de54a699 2474 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2475 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2476 }
prasanthbj05 266:ae588e75cfa4 2477 space = adjust(1, (compress(scp_bin[17],6,3)>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2478 space = adjust(8, (compress(scp_bin[17],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2479 space = adjust(1, (compress(scp_bin[23],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2480 space = adjust(8, (compress(scp_bin[23],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2481 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2482 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2483 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2484 }
ee12b079 93:4d76de54a699 2485 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2486 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2487 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2488 }
ee12b079 93:4d76de54a699 2489 }
prasanthbj05 266:ae588e75cfa4 2490 }
prasanthbj05 266:ae588e75cfa4 2491 if(compression_option == 2 ) //scp extreme data conservation mode
prasanthbj05 266:ae588e75cfa4 2492 {
prasanthbj05 266:ae588e75cfa4 2493 if(srp_mode==0)
prasanthbj05 266:ae588e75cfa4 2494 {
ee12b079 268:ded5306a1fd1 2495 #if scpz
chaithanyarss 290:3159ff1081a2 2496 gPC.printf("\n\rSCP - calibrated extreme data conservation mode");
ee12b079 268:ded5306a1fd1 2497 #endif
prasanthbj05 266:ae588e75cfa4 2498 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2499 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2500 if(at==0){
ee12b079 268:ded5306a1fd1 2501 #if scpz
chaithanyarss 290:3159ff1081a2 2502 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2503 #endif
prasanthbj05 266:ae588e75cfa4 2504 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2505 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2506 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2507 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2508 }
prasanthbj05 266:ae588e75cfa4 2509 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2510 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2511 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2512 }
prasanthbj05 266:ae588e75cfa4 2513 }else if(at==1){
ee12b079 268:ded5306a1fd1 2514 #if scpz
chaithanyarss 290:3159ff1081a2 2515 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2516 #endif
prasanthbj05 266:ae588e75cfa4 2517 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2518 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2519 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2520 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2521 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2522 }
prasanthbj05 266:ae588e75cfa4 2523 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2524 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2525 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2526 }
prasanthbj05 266:ae588e75cfa4 2527 }
prasanthbj05 266:ae588e75cfa4 2528 }
prasanthbj05 266:ae588e75cfa4 2529 else if(srp_mode==1)
prasanthbj05 266:ae588e75cfa4 2530 {
ee12b079 268:ded5306a1fd1 2531 #if scpz
chaithanyarss 290:3159ff1081a2 2532 gPC.printf("\n\rSCP - Scatter plot, extreme data conservation mode");
ee12b079 268:ded5306a1fd1 2533 #endif
prasanthbj05 266:ae588e75cfa4 2534 pzf = 0; ezf = 0; //because proton energy bins are not available in scatter plot mode and hence in the packet we send dummy data(which is nothng but the maximum value which fits into that particular compression scheme)
prasanthbj05 266:ae588e75cfa4 2535 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2536 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2537 if(at==0){
ee12b079 268:ded5306a1fd1 2538 #if scpz
chaithanyarss 290:3159ff1081a2 2539 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2540 #endif
prasanthbj05 266:ae588e75cfa4 2541 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2542 // below 4 lines - filling the proton ane electron energy bins with zeros(junk value) since they're not available in srp
prasanthbj05 266:ae588e75cfa4 2543 space = adjust(4, (compress(0,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2544 space = adjust(8, (compress(0,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2545 space = adjust(4, (compress(0,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2546 space = adjust(8, (compress(0,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2547 }
prasanthbj05 266:ae588e75cfa4 2548 else if(at==1){
ee12b079 268:ded5306a1fd1 2549 #if scpz
chaithanyarss 290:3159ff1081a2 2550 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2551 #endif
prasanthbj05 266:ae588e75cfa4 2552 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2553 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2554 space = adjust(1, (compress(0,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2555 space = adjust(8, (compress(0,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2556 space = adjust(1, (compress(0,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2557 space = adjust(8, (compress(0,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2558 }
prasanthbj05 266:ae588e75cfa4 2559 }
prasanthbj05 266:ae588e75cfa4 2560 }
chaithanyarss 331:1943be3fd178 2561 /*---------------------------------------------forming a science coarse packet ends here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2562
ee12b079 93:4d76de54a699 2563 id = 0;
ee12b079 93:4d76de54a699 2564 if(srp_mode == 0 && compression_option == 0){
ee12b079 93:4d76de54a699 2565 if(at == 0){
chaithanyarss 331:1943be3fd178 2566 length = 228;
ee12b079 93:4d76de54a699 2567 if(pzf == 0)
ee12b079 93:4d76de54a699 2568 length += 121;
ee12b079 93:4d76de54a699 2569 if(ezf == 0)
ee12b079 93:4d76de54a699 2570 length +=41;
ee12b079 93:4d76de54a699 2571 }else if(at == 1){
chaithanyarss 331:1943be3fd178 2572 length = 266;
ee12b079 93:4d76de54a699 2573 if(pzf == 0)
ee12b079 93:4d76de54a699 2574 length += 136;
ee12b079 93:4d76de54a699 2575 if(ezf == 0)
ee12b079 93:4d76de54a699 2576 length += 40;
chaithanyarss 331:1943be3fd178 2577 #if test_science
chaithanyarss 331:1943be3fd178 2578 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2579 #endif
ee12b079 93:4d76de54a699 2580 }
prasanthbj05 266:ae588e75cfa4 2581 }else if(srp_mode == 0 && compression_option == 1){ //data conservation mode
ee12b079 93:4d76de54a699 2582 if(at == 0){
chaithanyarss 331:1943be3fd178 2583 length = 94;
ee12b079 93:4d76de54a699 2584 if(pzf == 0)
ee12b079 93:4d76de54a699 2585 length += 12;
ee12b079 93:4d76de54a699 2586 if(ezf == 0)
ee12b079 93:4d76de54a699 2587 length += 12;
ee12b079 93:4d76de54a699 2588 }else if(at == 1){
chaithanyarss 331:1943be3fd178 2589 length = 123;
prasanthbj05 266:ae588e75cfa4 2590 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 2591 length += 9;
prasanthbj05 266:ae588e75cfa4 2592 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 2593 length += 9;
chaithanyarss 331:1943be3fd178 2594 #if test_science
chaithanyarss 331:1943be3fd178 2595 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2596 #endif
prasanthbj05 266:ae588e75cfa4 2597 }
prasanthbj05 266:ae588e75cfa4 2598 }
prasanthbj05 266:ae588e75cfa4 2599 else if( srp_mode == 1){
prasanthbj05 266:ae588e75cfa4 2600 if(at == 0)
prasanthbj05 266:ae588e75cfa4 2601 length = 368;
chaithanyarss 331:1943be3fd178 2602 else if(at == 1){
prasanthbj05 266:ae588e75cfa4 2603 length = 432;
chaithanyarss 331:1943be3fd178 2604 #if test_science
chaithanyarss 331:1943be3fd178 2605 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2606 #endif
chaithanyarss 331:1943be3fd178 2607 }
prasanthbj05 266:ae588e75cfa4 2608 }
chaithanyarss 331:1943be3fd178 2609 else if(compression_option == 2 && srp_mode==0) //in extreme data conservation mode, length is same for both srp_modes
prasanthbj05 266:ae588e75cfa4 2610 {
prasanthbj05 266:ae588e75cfa4 2611 if(at == 0){
chaithanyarss 331:1943be3fd178 2612 length = 31;
prasanthbj05 266:ae588e75cfa4 2613 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 2614 length += 12;
prasanthbj05 266:ae588e75cfa4 2615 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 2616 length += 12;
prasanthbj05 266:ae588e75cfa4 2617 }else if(at == 1){
chaithanyarss 331:1943be3fd178 2618 length = 36;
ee12b079 93:4d76de54a699 2619 if(pzf == 0)
ee12b079 93:4d76de54a699 2620 length += 9;
ee12b079 93:4d76de54a699 2621 if(ezf == 0)
ee12b079 93:4d76de54a699 2622 length += 9;
chaithanyarss 331:1943be3fd178 2623 #if test_science
chaithanyarss 331:1943be3fd178 2624 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2625 #endif
chaithanyarss 331:1943be3fd178 2626 }
chaithanyarss 331:1943be3fd178 2627 }
chaithanyarss 331:1943be3fd178 2628 else if(compression_option == 2 && srp_mode==1){
chaithanyarss 331:1943be3fd178 2629 if(at==0)
chaithanyarss 331:1943be3fd178 2630 length = 56;
chaithanyarss 331:1943be3fd178 2631 else if(at==1){
chaithanyarss 331:1943be3fd178 2632 length = 56;
chaithanyarss 331:1943be3fd178 2633 #if test_science
chaithanyarss 331:1943be3fd178 2634 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2635 #endif
ee12b079 93:4d76de54a699 2636 }
ee12b079 93:4d76de54a699 2637 }
ee12b079 93:4d76de54a699 2638 length = (length%8==0)?(length/8):(length/8)+1;
ee12b079 268:ded5306a1fd1 2639 #if scpz
chaithanyarss 331:1943be3fd178 2640 gPC.printf("\n\rLength of SCP packet in bytes = %d",length);
ee12b079 268:ded5306a1fd1 2641 #endif
chaithanyarss 331:1943be3fd178 2642 /*if(position_tm_frame[id]>129){
ee12b079 268:ded5306a1fd1 2643 #if scpz
chaithanyarss 290:3159ff1081a2 2644 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 290:3159ff1081a2 2645 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 2646 #endif
prasanthbj05 266:ae588e75cfa4 2647 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 2648 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 2649 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 2650 }
chaithanyarss 331:1943be3fd178 2651 }*/
chaithanyarss 331:1943be3fd178 2652 if(srp_mode==0 && compression_option!=2){
chaithanyarss 331:1943be3fd178 2653 if(position_tm_frame[id]>126){
chaithanyarss 331:1943be3fd178 2654 #if scpz
chaithanyarss 331:1943be3fd178 2655 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 331:1943be3fd178 2656 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
chaithanyarss 331:1943be3fd178 2657 #endif
chaithanyarss 331:1943be3fd178 2658 while(position_tm_frame[id]<132){
chaithanyarss 331:1943be3fd178 2659 frames[id][position_tm_frame[id]] = 0;
chaithanyarss 331:1943be3fd178 2660 position_tm_frame[id]++;
chaithanyarss 331:1943be3fd178 2661 }
chaithanyarss 331:1943be3fd178 2662 }
chaithanyarss 331:1943be3fd178 2663 }
chaithanyarss 331:1943be3fd178 2664 else if(((srp_mode==0)||(srp_mode==1)) && compression_option==2){
chaithanyarss 331:1943be3fd178 2665 if(position_tm_frame[id]>129){
chaithanyarss 331:1943be3fd178 2666 #if scpz
chaithanyarss 331:1943be3fd178 2667 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 331:1943be3fd178 2668 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
chaithanyarss 331:1943be3fd178 2669 #endif
chaithanyarss 331:1943be3fd178 2670 while(position_tm_frame[id]<132){
chaithanyarss 331:1943be3fd178 2671 frames[id][position_tm_frame[id]] = 0;
chaithanyarss 331:1943be3fd178 2672 position_tm_frame[id]++;
chaithanyarss 331:1943be3fd178 2673 }
chaithanyarss 331:1943be3fd178 2674 }
chaithanyarss 331:1943be3fd178 2675 }
chaithanyarss 331:1943be3fd178 2676 else if(srp_mode==1){
chaithanyarss 331:1943be3fd178 2677 if(position_tm_frame[id]>129){
chaithanyarss 331:1943be3fd178 2678 #if scpz
chaithanyarss 331:1943be3fd178 2679 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 331:1943be3fd178 2680 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
chaithanyarss 331:1943be3fd178 2681 #endif
chaithanyarss 331:1943be3fd178 2682 while(position_tm_frame[id]<132){
chaithanyarss 331:1943be3fd178 2683 frames[id][position_tm_frame[id]] = 0;
chaithanyarss 331:1943be3fd178 2684 position_tm_frame[id]++;
chaithanyarss 331:1943be3fd178 2685 }
chaithanyarss 331:1943be3fd178 2686 }
prasanthbj05 266:ae588e75cfa4 2687 }
prasanthbj05 266:ae588e75cfa4 2688 if(position_tm_frame[id]==position_tm_starting[id]){
prasanthbj05 266:ae588e75cfa4 2689 frames[id][4] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 2690 }
prasanthbj05 266:ae588e75cfa4 2691 for(int j= 0; j < length ;)
prasanthbj05 266:ae588e75cfa4 2692 {
prasanthbj05 266:ae588e75cfa4 2693 if(position_tm_frame[id]==frames[id][4]){
ee12b079 268:ded5306a1fd1 2694 #if scpz
chaithanyarss 290:3159ff1081a2 2695 gPC.printf("\n\rInserting Time into SCP_TM");
ee12b079 268:ded5306a1fd1 2696 #endif
prasanthbj05 266:ae588e75cfa4 2697 frames[id][5] = (uint8_t)((sci_time>>29)&0x3f);
prasanthbj05 266:ae588e75cfa4 2698 frames[id][6] = (uint8_t)((sci_time>>21)&0xff);
prasanthbj05 266:ae588e75cfa4 2699 frames[id][7] = (uint8_t)((sci_time>>13)&0x3f);
prasanthbj05 266:ae588e75cfa4 2700 }
prasanthbj05 266:ae588e75cfa4 2701 if(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 2702 frames[id][position_tm_frame[id]] = scp[j];
prasanthbj05 266:ae588e75cfa4 2703 j++;
ee12b079 93:4d76de54a699 2704 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 2705 }
prasanthbj05 266:ae588e75cfa4 2706 if(position_tm_frame[id] == 132) //space full in the frame bro
prasanthbj05 266:ae588e75cfa4 2707 {
ee12b079 268:ded5306a1fd1 2708 #if scpz
chaithanyarss 290:3159ff1081a2 2709 gPC.printf("\n\rSCP_TM frame full. Length of current SCP packet = %d",j);
ee12b079 268:ded5306a1fd1 2710 #endif
prasanthbj05 266:ae588e75cfa4 2711 pointer = frames[id];
prasanthbj05 266:ae588e75cfa4 2712 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 2713 space = adjust(4,1,pointer,space);
prasanthbj05 266:ae588e75cfa4 2714 FSC_science = FSC_CURRENT[1];
chaithanyarss 290:3159ff1081a2 2715 //gPC.printf("1 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 2716
chaithanyarss 290:3159ff1081a2 2717 #if debug_fsc
chaithanyarss 331:1943be3fd178 2718 frames[id][1] = (test_fsc[1]>>16)&0xff;
chaithanyarss 331:1943be3fd178 2719 frames[id][2] = (test_fsc[1]>>8)&0xff;
chaithanyarss 331:1943be3fd178 2720 frames[id][3] = (test_fsc[1])&0xff;
chaithanyarss 290:3159ff1081a2 2721 test_fsc[1]++;
chaithanyarss 290:3159ff1081a2 2722 #endif
chaithanyarss 290:3159ff1081a2 2723 #if !debug_fsc
chaithanyarss 290:3159ff1081a2 2724 frames[id][1] = (FSC_science>>16)&0xff;
chaithanyarss 290:3159ff1081a2 2725 frames[id][2] = (FSC_science>>8)&0xff;
chaithanyarss 290:3159ff1081a2 2726 frames[id][3] = (FSC_science)&0xff;
chaithanyarss 290:3159ff1081a2 2727 #endif
chaithanyarss 290:3159ff1081a2 2728
prasanthbj05 266:ae588e75cfa4 2729 temp_crc = crc16_gen(frames[id],132);
prasanthbj05 266:ae588e75cfa4 2730 frames[id][132] = temp_crc>>8;
prasanthbj05 266:ae588e75cfa4 2731 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 2732 #if scpz
chaithanyarss 331:1943be3fd178 2733 gPC.printf("\n\rFirst head pointer: 0x%02X",frames[id][4]);
chaithanyarss 331:1943be3fd178 2734 gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
chaithanyarss 331:1943be3fd178 2735 gPC.printf("\n\rPrinting SCP_TM\n\r{");
ee12b079 268:ded5306a1fd1 2736 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 2737 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 2738 }
ee12b079 268:ded5306a1fd1 2739 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 2740 #endif
chaithanyarss 331:1943be3fd178 2741 #if tabulation
chaithanyarss 331:1943be3fd178 2742 tabulate_TM(&frames[id][0]);
chaithanyarss 331:1943be3fd178 2743 #endif
prasanthbj05 266:ae588e75cfa4 2744 exor(frames[id]);
prasanthbj05 266:ae588e75cfa4 2745 convolution(frames[id]);
prasanthbj05 266:ae588e75cfa4 2746 interleave(TM_convoluted_data,TM_interleave_data);
prasanthbj05 266:ae588e75cfa4 2747 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
prasanthbj05 266:ae588e75cfa4 2748
ee12b079 268:ded5306a1fd1 2749 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,1); //sd_write returns ack, for now not included
ee12b079 268:ded5306a1fd1 2750 if(sd_stat)
chaithanyarss 290:3159ff1081a2 2751 {
chaithanyarss 290:3159ff1081a2 2752 gPC.puts("sd write fail");
chaithanyarss 290:3159ff1081a2 2753 }
prasanthbj05 266:ae588e75cfa4 2754 position_tm_frame[id] = position_tm_starting[id];
chaithanyarss 331:1943be3fd178 2755 if(j!=0)
chaithanyarss 331:1943be3fd178 2756 frames[id][4] = (length - j)+position_tm_starting[id];
chaithanyarss 331:1943be3fd178 2757 else if(j==0)
chaithanyarss 331:1943be3fd178 2758 frames[id][4] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 2759 }
ee12b079 93:4d76de54a699 2760 }
ee12b079 268:ded5306a1fd1 2761 #if scpz_last
chaithanyarss 290:3159ff1081a2 2762 //gPC.printf("\n\rPrinting the last SCP_TM frame");
ee12b079 268:ded5306a1fd1 2763 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 2764 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 2765 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 2766 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 2767 }
chaithanyarss 290:3159ff1081a2 2768 if(position_tm_frame[id] == 132) //space full in the frame bro
chaithanyarss 290:3159ff1081a2 2769 {
chaithanyarss 290:3159ff1081a2 2770 //gPC.printf("\n\rSCP_TM frame full. Length of current SCP packet = %d",j);
ee12b079 268:ded5306a1fd1 2771 pointer = frames[id];
chaithanyarss 290:3159ff1081a2 2772 space = adjust(1,0,pointer,8);
chaithanyarss 290:3159ff1081a2 2773 space = adjust(4,1,pointer,space);
chaithanyarss 290:3159ff1081a2 2774 FSC_science = FSC_CURRENT[1];
chaithanyarss 290:3159ff1081a2 2775 //gPC.printf("1 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 2776
chaithanyarss 290:3159ff1081a2 2777 #if debug_fsc
chaithanyarss 331:1943be3fd178 2778 frames[id][1] = (test_fsc[1]>>16)&0xff;
chaithanyarss 331:1943be3fd178 2779 frames[id][2] = (test_fsc[1]>>8)&0xff;
chaithanyarss 331:1943be3fd178 2780 frames[id][3] = (test_fsc[1])&0xff;
chaithanyarss 290:3159ff1081a2 2781 test_fsc[1]++;
chaithanyarss 290:3159ff1081a2 2782 #endif
chaithanyarss 290:3159ff1081a2 2783 #if !debug_fsc
chaithanyarss 290:3159ff1081a2 2784 frames[id][1] = (FSC_science>>16)&0xff;
chaithanyarss 290:3159ff1081a2 2785 frames[id][2] = (FSC_science>>8)&0xff;
chaithanyarss 290:3159ff1081a2 2786 frames[id][3] = (FSC_science)&0xff;
chaithanyarss 290:3159ff1081a2 2787 #endif
chaithanyarss 290:3159ff1081a2 2788
ee12b079 268:ded5306a1fd1 2789 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 2790 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 2791 frames[id][133] = temp_crc & 0xff;
chaithanyarss 290:3159ff1081a2 2792 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
chaithanyarss 290:3159ff1081a2 2793 //gPC.printf("\n\rPrinting SCP_TM\n\r{");
chaithanyarss 290:3159ff1081a2 2794 gPC.printf("\n\r{");
ee12b079 268:ded5306a1fd1 2795 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 2796 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 2797 }
ee12b079 268:ded5306a1fd1 2798 gPC.printf("}\n\r");
chaithanyarss 290:3159ff1081a2 2799 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 2800 }
chaithanyarss 290:3159ff1081a2 2801 #endif
chaithanyarss 331:1943be3fd178 2802 //gPC.printf("fsc = %u, %u,%u\n\r", FSC_CURRENT[1],FSC_CURRENT[2],FSC_CURRENT[3]);
chaithanyarss 331:1943be3fd178 2803 #if test_science
chaithanyarss 331:1943be3fd178 2804 dma_packets_info();
chaithanyarss 331:1943be3fd178 2805 #endif
ee12b079 342:77b0d59897f7 2806 gPC.printf("End of SRP function\n\r");
chaithanyarss 331:1943be3fd178 2807 //SCI_LED1 = !SCI_LED1;
chaithanyarss 331:1943be3fd178 2808 SCI_LED1 = 0;
chaithanyarss 331:1943be3fd178 2809 }
chaithanyarss 331:1943be3fd178 2810 /*void test_sci_main(){
chaithanyarss 331:1943be3fd178 2811 gPAYLOAD_BUFFER[2] &= (~0x01); //calibrated mode data generation
chaithanyarss 331:1943be3fd178 2812 //gPAYLOAD_BUFFER[2] |= (0x01); //scattered plot mode data generation
chaithanyarss 331:1943be3fd178 2813 srp(gPAYLOAD_BUFFER);
chaithanyarss 331:1943be3fd178 2814 }*/
chaithanyarss 331:1943be3fd178 2815 /*void test_tabulate(){
chaithanyarss 331:1943be3fd178 2816 uint8_t tmid=2,temp_index,temp=13,space;
chaithanyarss 331:1943be3fd178 2817 pointer = &test_tm[0][0];
chaithanyarss 331:1943be3fd178 2818 space = adjust(1, 0,pointer,8); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2819 space = adjust(4, 2,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2820 space = adjust(3, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2821
chaithanyarss 331:1943be3fd178 2822 space = adjust(8, 0,pointer,space); pointer += space>>4; //fsc
chaithanyarss 331:1943be3fd178 2823 space = adjust(8, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2824 space = adjust(8, 1,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2825
chaithanyarss 331:1943be3fd178 2826 space = adjust(8, 5,pointer,space); pointer += space>>4; //first head pointer
chaithanyarss 331:1943be3fd178 2827
chaithanyarss 331:1943be3fd178 2828 space = adjust(2, 2,pointer,space); pointer += space>>4; //time
chaithanyarss 331:1943be3fd178 2829 space = adjust(4, 12,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2830 space = adjust(5, 8,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2831 space = adjust(5, 10,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2832 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2833 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2834 space = adjust(7, 69,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2835
chaithanyarss 331:1943be3fd178 2836 space = adjust(4, 15,pointer,space); pointer += space>>4; //attitude
chaithanyarss 331:1943be3fd178 2837
chaithanyarss 331:1943be3fd178 2838 space = adjust(6, 60,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2839 space = adjust(1, 1,pointer,space); pointer += space>>4; //science data mode
chaithanyarss 331:1943be3fd178 2840
chaithanyarss 331:1943be3fd178 2841 for(uint8_t i = 0 ; i < 48 ; i++){
chaithanyarss 331:1943be3fd178 2842 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2843 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2844 }
chaithanyarss 331:1943be3fd178 2845 for(uint8_t i = 0 ; i < 4 ; i++){
chaithanyarss 331:1943be3fd178 2846 space = adjust(1, ((compress(1032192,6,3))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2847 space = adjust(8, ((compress(1032192,6,3))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2848 }
chaithanyarss 331:1943be3fd178 2849 space = adjust(6, 0,pointer,space); pointer += space>>4; //spare
spacelab 309:6ed5535ac465 2850
chaithanyarss 331:1943be3fd178 2851 //next packet
chaithanyarss 331:1943be3fd178 2852 space = adjust(2, 2,pointer,space); pointer += space>>4; //time
chaithanyarss 331:1943be3fd178 2853 space = adjust(4, 12,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2854 space = adjust(5, 8,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2855 space = adjust(5, 10,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2856 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2857 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2858 space = adjust(7, 69,pointer,space); pointer += space>>4;
spacelab 309:6ed5535ac465 2859
chaithanyarss 331:1943be3fd178 2860 space = adjust(4, 15,pointer,space); pointer += space>>4; //attitude
chaithanyarss 331:1943be3fd178 2861
chaithanyarss 331:1943be3fd178 2862 space = adjust(6, 61,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2863 space = adjust(1, 0,pointer,space); pointer += space>>4; //science data mode
chaithanyarss 331:1943be3fd178 2864 space = adjust(1, 0,pointer,space); pointer += space>>4; //pzf
chaithanyarss 331:1943be3fd178 2865 space = adjust(1, 0,pointer,space); pointer += space>>4; //ezf
chaithanyarss 331:1943be3fd178 2866
chaithanyarss 331:1943be3fd178 2867 for(uint8_t i = 0 ; i < 8 ; i++){
chaithanyarss 331:1943be3fd178 2868 space = adjust(1, ((compress(8128,7,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2869 space = adjust(8, ((compress(8128,7,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2870 }
chaithanyarss 331:1943be3fd178 2871 for(uint8_t i = 0 ; i < 12 ; i++){
chaithanyarss 331:1943be3fd178 2872 space = adjust(6, ((compress(114688,3,3))) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2873 }
chaithanyarss 331:1943be3fd178 2874 for(uint8_t i = 0 ; i < 4 ; i++){
chaithanyarss 331:1943be3fd178 2875 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2876 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2877 }
chaithanyarss 331:1943be3fd178 2878 for(uint8_t i = 0 ; i < 4 ; i++){
chaithanyarss 331:1943be3fd178 2879 space = adjust(1, ((compress(1032192,6,3))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2880 space = adjust(8, ((compress(1032192,6,3))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2881 }
chaithanyarss 331:1943be3fd178 2882 for(uint8_t i = 0 ; i < 18 ; i++){
chaithanyarss 331:1943be3fd178 2883 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2884 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2885 }
chaithanyarss 331:1943be3fd178 2886 tabulate_TM(&test_tm[0][0]);
chaithanyarss 331:1943be3fd178 2887
chaithanyarss 331:1943be3fd178 2888 space=8; pointer = &test_tm[1][0];
chaithanyarss 331:1943be3fd178 2889 space = adjust(1, 0,pointer,8); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2890 space = adjust(4, 2,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2891 space = adjust(3, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2892
chaithanyarss 331:1943be3fd178 2893 space = adjust(8, 0,pointer,space); pointer += space>>4; //fsc
chaithanyarss 331:1943be3fd178 2894 space = adjust(8, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2895 space = adjust(8, 2,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2896
chaithanyarss 331:1943be3fd178 2897 space = adjust(8, 13,pointer,space); pointer += space>>4; //first head pointer
chaithanyarss 331:1943be3fd178 2898
chaithanyarss 331:1943be3fd178 2899 for(uint8_t i = 0 ; i < 6 ; i++){
chaithanyarss 331:1943be3fd178 2900 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2901 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2902 }
chaithanyarss 331:1943be3fd178 2903 space = adjust(4, 0,pointer,space); pointer += space>>4; //spare
chaithanyarss 331:1943be3fd178 2904 tabulate_TM(&test_tm[1][0]);
chaithanyarss 331:1943be3fd178 2905 }*/