Repository for CDMS code

Dependencies:   SimpleDMA mbed-rtos mbed eeprom

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

Committer:
chaithanyarss
Date:
Sun Jan 22 04:47:11 2017 +0000
Revision:
351:a89a46894ec0
Parent:
347:2517c9f6bb4f
EERPOM and BCN done

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