working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
samp1234
Date:
Sat Feb 10 09:06:26 2018 +0000
Revision:
356:197c93dc2012
Parent:
355:a5e72222ff26
Child:
357:f3d48d62e00e
Version used in QM

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();
samp1234 355:a5e72222ff26 1380 // TIME_LATEST_SPI_SPEED = sci_time;
samp1234 355:a5e72222ff26 1381 TIME_LATEST_SPI_SPEED = sci_time >> 7;
chaithanyarss 290:3159ff1081a2 1382 #if debug_time
chaithanyarss 331:1943be3fd178 1383 gPC.printf("\n\rAssigning time manually");
chaithanyarss 331:1943be3fd178 1384 sci_time = 0x000000055555555;
chaithanyarss 290:3159ff1081a2 1385 #endif
prasanthbj05 266:ae588e75cfa4 1386 if(time_prev_scp==0){
prasanthbj05 266:ae588e75cfa4 1387 time_prev_scp = sci_time;
samp1234 346:204497974293 1388 }
samp1234 346:204497974293 1389 // gPC.printf("enterdSCI_SD7");
samp1234 346:204497974293 1390 // gPC.printf("timer start %d::",HK_counter.read_ms());
samp1234 346:204497974293 1391
samp1234 346:204497974293 1392 FCTN_SD_MNGR();
samp1234 346:204497974293 1393
samp1234 346:204497974293 1394 // gPC.printf("timer end %d::",HK_counter.read_ms()); ///changed recently
samp1234 346:204497974293 1395 // timer_test.stop();
samp1234 346:204497974293 1396 // gPC.printf("endSCI_SD8");
chaithanyarss 331:1943be3fd178 1397 #if tabulation
chaithanyarss 331:1943be3fd178 1398 if(head[0]==0 & head[1]==0){
chaithanyarss 331:1943be3fd178 1399 position_tm_frame[1] = position_tm_starting[1];
chaithanyarss 331:1943be3fd178 1400 position_tm_frame[2] = position_tm_starting[2];
chaithanyarss 331:1943be3fd178 1401 gPC.printf("\n\n\r--------------------------*************************************-------------------------------");
chaithanyarss 331:1943be3fd178 1402 //gPC.printf("\n\rFrame pointer reset done");
chaithanyarss 331:1943be3fd178 1403 gPC.printf("\n\rStart FSC for TMID=1 :%d",FSC_CURRENT[1]+1);
chaithanyarss 331:1943be3fd178 1404 gPC.printf("\n\rStart FSC for TMID=2 :%d",FSC_CURRENT[2]+1);
chaithanyarss 331:1943be3fd178 1405 gPC.printf("\n\rStart FSC for TMID=3 :%d",FSC_CURRENT[3]+1);
chaithanyarss 331:1943be3fd178 1406 gPC.printf("\n\r--------------------------*************************************-------------------------------");
chaithanyarss 331:1943be3fd178 1407 }
chaithanyarss 331:1943be3fd178 1408 #endif
chaithanyarss 331:1943be3fd178 1409 ptr = head + 3; //ptr points to proton energy bin of srp
chaithanyarss 331:1943be3fd178 1410 srp_mode = head[2]&0x01;
chaithanyarss 331:1943be3fd178 1411 //for(uint8_t temp_counter=0;temp_counter<9;temp_counter++){
ee12b079 268:ded5306a1fd1 1412 for (int i = 0; i < 52 ; i++)
prasanthbj05 266:ae588e75cfa4 1413 {
ee12b079 93:4d76de54a699 1414 scp_bin[i] = 0;
shreeshas95 1:a0055b3280c8 1415 }
chaithanyarss 331:1943be3fd178 1416 #if test_science
chaithanyarss 331:1943be3fd178 1417 gPC.printf("\n\n\rTesting science mode - initializing test indices and to zero");
chaithanyarss 331:1943be3fd178 1418 for(uint8_t i=0;i<5;i++)
chaithanyarss 331:1943be3fd178 1419 for(uint8_t j=0;j<60;j++){
chaithanyarss 331:1943be3fd178 1420 calib_thres_index[i][j] = 0;
chaithanyarss 331:1943be3fd178 1421 scat_thres_index[i][j] = 0;
chaithanyarss 331:1943be3fd178 1422 }
chaithanyarss 331:1943be3fd178 1423 for(uint8_t i=5;i<16;i++)
chaithanyarss 331:1943be3fd178 1424 for(uint8_t j=0;j<60;j++){
chaithanyarss 331:1943be3fd178 1425 calib_thres_index[i][j] = 0;
chaithanyarss 331:1943be3fd178 1426 calib_thres_index_scp[i] = 0;
chaithanyarss 331:1943be3fd178 1427 }
chaithanyarss 331:1943be3fd178 1428 for(uint8_t i=0;i<16;i++){
chaithanyarss 331:1943be3fd178 1429 if(i<5){
chaithanyarss 331:1943be3fd178 1430 scat_thres_subindex[i] = 0;
chaithanyarss 331:1943be3fd178 1431 scat_thres_index_scp[i] = 0;
chaithanyarss 331:1943be3fd178 1432 scp_mode_count[i] = 0;
chaithanyarss 331:1943be3fd178 1433 }
chaithanyarss 331:1943be3fd178 1434 calib_thres_subindex[i] = 0;
chaithanyarss 331:1943be3fd178 1435 thres_scp_index[i] = 0;
chaithanyarss 331:1943be3fd178 1436 calib_thres_index_scp[i] = 0;
chaithanyarss 331:1943be3fd178 1437 }
chaithanyarss 331:1943be3fd178 1438 dma_scp_at_count = 0;
chaithanyarss 331:1943be3fd178 1439 dma_sfp_at_count = 0;
chaithanyarss 331:1943be3fd178 1440 proton_scp_sum_at = 0;
chaithanyarss 331:1943be3fd178 1441 electron_scp_sum_at = 0;
chaithanyarss 331:1943be3fd178 1442 sfp_mode_count[0] = 0;
chaithanyarss 331:1943be3fd178 1443 sfp_mode_count[1] = 0;
chaithanyarss 331:1943be3fd178 1444 /*if((head[2]&0x01)==0){
chaithanyarss 331:1943be3fd178 1445 gPC.printf("\n\rGenerating DMA calibrated data");
chaithanyarss 331:1943be3fd178 1446 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 1447 }
chaithanyarss 331:1943be3fd178 1448 else if((head[2]&0x1)==1){
chaithanyarss 331:1943be3fd178 1449 gPC.printf("\n\rGenerating DMA scattered data");
chaithanyarss 331:1943be3fd178 1450 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 1451 }
chaithanyarss 331:1943be3fd178 1452 generated_dma(head);*/
chaithanyarss 331:1943be3fd178 1453 #endif
prasanthbj05 266:ae588e75cfa4 1454 for(uint8_t counter = 0 ; counter < 60 ; counter++)
prasanthbj05 266:ae588e75cfa4 1455 {
ee12b079 268:ded5306a1fd1 1456 #if srpz
chaithanyarss 331:1943be3fd178 1457 gPC.printf("\n\n\rSRP count:%d",counter+1);
ee12b079 268:ded5306a1fd1 1458 #endif
chaithanyarss 331:1943be3fd178 1459 /*---------------------------------populating sfp_bin and scp_bin[] starts here(also tag AT or BT)-----------------------*/
prasanthbj05 266:ae588e75cfa4 1460 at = 0; pzf = 1; ezf = 1;
prasanthbj05 266:ae588e75cfa4 1461 if(srp_mode == 0) //calibrated mode
prasanthbj05 266:ae588e75cfa4 1462 {
ee12b079 268:ded5306a1fd1 1463 #if srpz
chaithanyarss 331:1943be3fd178 1464 gPC.printf("\n\rSRP - Calibrated Mode");
ee12b079 268:ded5306a1fd1 1465 #endif
prasanthbj05 266:ae588e75cfa4 1466 for(int i=0; i<48 ; i++) //first 48 bins or SRP are of 16 bits size
prasanthbj05 266:ae588e75cfa4 1467 {
ee12b079 93:4d76de54a699 1468 sfp_bin[i] = read_2byte(ptr + i*2);
chaithanyarss 331:1943be3fd178 1469 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1470 gPC.printf("\n\r sfp_bin[%d] = %d",i,sfp_bin[i]);
chaithanyarss 331:1943be3fd178 1471 }*/
ee12b079 93:4d76de54a699 1472 scp_bin[i] += sfp_bin[i];
prasanthbj05 266:ae588e75cfa4 1473 if(sfp_bin[i]>sfp_threshold_m0[i])
prasanthbj05 266:ae588e75cfa4 1474 {
ee12b079 268:ded5306a1fd1 1475 //gPC.printf("\n\rSFP above threshold index:%d",i);
chaithanyarss 331:1943be3fd178 1476 #if test_science
chaithanyarss 331:1943be3fd178 1477 //gPC.printf("\n\ri:%d",i);
chaithanyarss 331:1943be3fd178 1478 //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 1479 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 1480 //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 1481 #endif
ee12b079 93:4d76de54a699 1482 at = 1;
ee12b079 93:4d76de54a699 1483 }
prasanthbj05 266:ae588e75cfa4 1484 if(i<17)
prasanthbj05 266:ae588e75cfa4 1485 {
ee12b079 93:4d76de54a699 1486 if(sfp_bin[i] > 0)
ee12b079 93:4d76de54a699 1487 pzf = 0;
ee12b079 93:4d76de54a699 1488 }
prasanthbj05 266:ae588e75cfa4 1489 else if (i>17 && i < 23)
prasanthbj05 266:ae588e75cfa4 1490 {
ee12b079 93:4d76de54a699 1491 if(sfp_bin[i]>0)
ee12b079 93:4d76de54a699 1492 ezf = 0;
ee12b079 93:4d76de54a699 1493 }
ee12b079 93:4d76de54a699 1494 }
prasanthbj05 266:ae588e75cfa4 1495 for(int i=0; i<4; i++) //last 4 bins(excluding the spare bin) are 32 bit each
prasanthbj05 266:ae588e75cfa4 1496 {
ee12b079 93:4d76de54a699 1497 sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i );
chaithanyarss 331:1943be3fd178 1498 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1499 gPC.printf("\n\rsfp_bin[%d] = %d",48+i,sfp_bin[i+48]);
chaithanyarss 331:1943be3fd178 1500 }*/
ee12b079 93:4d76de54a699 1501 scp_bin[i+48] += sfp_bin[i+48];
ee12b079 268:ded5306a1fd1 1502 if(sfp_bin[i+48]>sfp_threshold_m0[i+48]){
ee12b079 268:ded5306a1fd1 1503 //gPC.printf("\n\rSP above threshold index: %d",i+48);
chaithanyarss 331:1943be3fd178 1504 #if test_science
chaithanyarss 331:1943be3fd178 1505 //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 1506 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 1507 //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 1508 #endif
ee12b079 93:4d76de54a699 1509 at = 1;
ee12b079 268:ded5306a1fd1 1510 }
ee12b079 93:4d76de54a699 1511 }
chaithanyarss 331:1943be3fd178 1512 }
prasanthbj05 266:ae588e75cfa4 1513 else if(srp_mode == 1) //scattered mode
prasanthbj05 266:ae588e75cfa4 1514 {
ee12b079 268:ded5306a1fd1 1515 #if srpz
chaithanyarss 290:3159ff1081a2 1516 gPC.printf("\n\rSRP - Scatter Plot Mode");
ee12b079 268:ded5306a1fd1 1517 #endif
prasanthbj05 266:ae588e75cfa4 1518 for(int i = 0; i <48; i++) //first 48 bins of SRP are of 16 bit size
prasanthbj05 266:ae588e75cfa4 1519 {
prasanthbj05 266:ae588e75cfa4 1520 sfp_bin[i] = read_2byte(ptr+2*i);
ee12b079 93:4d76de54a699 1521 scp_bin[i] += sfp_bin[i];
chaithanyarss 331:1943be3fd178 1522 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1523 gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 1524 }*/
ee12b079 268:ded5306a1fd1 1525 if(sfp_bin[i] > sfp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 1526 //gPC.printf("\n\rSP above threshold index: %d",i);
chaithanyarss 331:1943be3fd178 1527 #if test_science
chaithanyarss 331:1943be3fd178 1528 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 1529 #endif
ee12b079 93:4d76de54a699 1530 at = 1;
ee12b079 268:ded5306a1fd1 1531 }
ee12b079 93:4d76de54a699 1532 }
prasanthbj05 266:ae588e75cfa4 1533 for(int i = 0; i < 4 ; i++) //next 4 bins are of 32 bit size
prasanthbj05 266:ae588e75cfa4 1534 {
prasanthbj05 266:ae588e75cfa4 1535 sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i );
prasanthbj05 266:ae588e75cfa4 1536 scp_bin[i+48] += sfp_bin[i+48];
chaithanyarss 331:1943be3fd178 1537
chaithanyarss 331:1943be3fd178 1538 /*if(counter==0){
chaithanyarss 331:1943be3fd178 1539 gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 1540 }*/
ee12b079 268:ded5306a1fd1 1541 if(sfp_bin[i+48] > sfp_threshold_m1[i+48]){
ee12b079 268:ded5306a1fd1 1542 //gPC.printf("\n\rSP above threshold index: %d",i+48);
chaithanyarss 331:1943be3fd178 1543 #if test_science
chaithanyarss 331:1943be3fd178 1544 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 1545 #endif
ee12b079 93:4d76de54a699 1546 at = 1;
ee12b079 268:ded5306a1fd1 1547 }
ee12b079 93:4d76de54a699 1548 }
shreeshas95 1:a0055b3280c8 1549 }
chaithanyarss 331:1943be3fd178 1550 #if test_science
chaithanyarss 331:1943be3fd178 1551 for(uint8_t temp_i = 0;temp_i<16;temp_i++){
chaithanyarss 331:1943be3fd178 1552 if(calib_thres_index[temp_i][calib_thres_subindex[temp_i]]==1){
chaithanyarss 331:1943be3fd178 1553 calib_thres_index[temp_i][calib_thres_subindex[temp_i]] = counter+1;
chaithanyarss 331:1943be3fd178 1554 calib_thres_subindex[temp_i]++;
chaithanyarss 331:1943be3fd178 1555 }
chaithanyarss 331:1943be3fd178 1556 }
chaithanyarss 331:1943be3fd178 1557 for(uint8_t temp_i = 0;temp_i<5;temp_i++){
chaithanyarss 331:1943be3fd178 1558 if(scat_thres_index[temp_i][scat_thres_subindex[temp_i]]==1){
chaithanyarss 331:1943be3fd178 1559 scat_thres_index[temp_i][scat_thres_subindex[temp_i]] = counter+1;
chaithanyarss 331:1943be3fd178 1560 scat_thres_subindex[temp_i]++;
chaithanyarss 331:1943be3fd178 1561 }
chaithanyarss 331:1943be3fd178 1562 }
chaithanyarss 331:1943be3fd178 1563 #endif
prasanthbj05 266:ae588e75cfa4 1564 /*---------------------------populating sfp_bin[] and scp_bin[] from srp ends here(also tagging AT or BT)------------------*/
chaithanyarss 331:1943be3fd178 1565 #if test_science
chaithanyarss 331:1943be3fd178 1566 //gPC.printf("\n\n\rCounter: %d",counter);
chaithanyarss 331:1943be3fd178 1567 //verify_read_dma(srp_mode,counter);
chaithanyarss 331:1943be3fd178 1568 #endif
chaithanyarss 331:1943be3fd178 1569 ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer
prasanthbj05 266:ae588e75cfa4 1570
prasanthbj05 266:ae588e75cfa4 1571 /*------------------------------------------forming a science fine packet starts here----------------------------------------
prasanthbj05 266:ae588e75cfa4 1572 First we fill packet header, then fill packet data and finally assign its length
prasanthbj05 266:ae588e75cfa4 1573 ----------------------------------------------------------------------------------------------------------------------------*/
chaithanyarss 331:1943be3fd178 1574 for(int i = 0; i<71; i++)
ee12b079 93:4d76de54a699 1575 sfp[i] = 0;
prasanthbj05 266:ae588e75cfa4 1576 if(srp_mode == 0) //calibrated mode
prasanthbj05 266:ae588e75cfa4 1577 {
prasanthbj05 266:ae588e75cfa4 1578 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1579 {
ee12b079 268:ded5306a1fd1 1580 #if srpz
chaithanyarss 290:3159ff1081a2 1581 gPC.printf("\n\rSFP Below Threshold");
ee12b079 268:ded5306a1fd1 1582 #endif
ee12b079 93:4d76de54a699 1583 pointer = sfp; debug_cntr = 0;
prasanthbj05 266:ae588e75cfa4 1584 space = adjust(4, attitude,pointer,8); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1585 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1586 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1587 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1588 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1589 for(uint8_t i = 0 ; i < 8 ; i++){
prasanthbj05 266:ae588e75cfa4 1590 space = adjust(1, ((compress(sfp_bin[24+i],7,2))&0x100)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1591 space = adjust(8, ((compress(sfp_bin[24+i],7,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1592 }
prasanthbj05 266:ae588e75cfa4 1593 for(uint8_t i = 0 ; i <12 ; i++){
prasanthbj05 266:ae588e75cfa4 1594 space = adjust(6, (compress(sfp_bin[32+i],4,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1595 }
prasanthbj05 266:ae588e75cfa4 1596 for(uint8_t i = 0; i < 4; i++){
prasanthbj05 266:ae588e75cfa4 1597 space = adjust(8, (compress(sfp_bin[44+i],6,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1598 }
prasanthbj05 266:ae588e75cfa4 1599 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 1600 space = adjust(1, (compress(sfp_bin[48+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1601 space = adjust(8, compress(sfp_bin[48+i],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1602 }
prasanthbj05 266:ae588e75cfa4 1603 space = adjust(8, ((compress(sfp_bin[17],6,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1604 space = adjust(8, ((compress(sfp_bin[23],6,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1605 if(pzf == 0){
prasanthbj05 266:ae588e75cfa4 1606 for(uint8_t i = 0; i<2 ; i++){
prasanthbj05 266:ae588e75cfa4 1607 space = adjust(6, ((compress(sfp_bin[i],5,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1608 }
prasanthbj05 266:ae588e75cfa4 1609 for(uint8_t i = 0; i<15 ; i++){
prasanthbj05 266:ae588e75cfa4 1610 space = adjust(5, ((compress(sfp_bin[i+2],4,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1611 }
ee12b079 93:4d76de54a699 1612 }
ee12b079 93:4d76de54a699 1613 if(ezf == 0){
prasanthbj05 266:ae588e75cfa4 1614 for(uint8_t i = 0; i <5 ;i++){
prasanthbj05 266:ae588e75cfa4 1615 space = adjust(7, ((compress(sfp_bin[18+i],6,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1616 }
ee12b079 93:4d76de54a699 1617 }
prasanthbj05 266:ae588e75cfa4 1618 } //below thershold ends here.
ee12b079 93:4d76de54a699 1619 if(at == 1){
ee12b079 268:ded5306a1fd1 1620 #if srpz
chaithanyarss 290:3159ff1081a2 1621 gPC.printf("\n\rSFP Above Threshold");
ee12b079 268:ded5306a1fd1 1622 #endif
ee12b079 93:4d76de54a699 1623 pointer = sfp + 6; debug_cntr = 6;space = 8;
ee12b079 93:4d76de54a699 1624 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 1625 sfp[4] = ((sci_time&0x07)<<5) + ((attitude&0x0f)<<1) + (counter>>5);
prasanthbj05 266:ae588e75cfa4 1626 sfp[5] = ((counter&0x1f)<<3) + (srp_mode<<2);
ee12b079 93:4d76de54a699 1627 sfp[5] += (pzf<<1) + ezf ;
prasanthbj05 266:ae588e75cfa4 1628 for(uint8_t i = 0 ; i < 8 ; i++){
prasanthbj05 266:ae588e75cfa4 1629 space = adjust(1, (compress(sfp_bin[24+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1630 space = adjust(8, ((compress(sfp_bin[24+i],7,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 1631 }
prasanthbj05 266:ae588e75cfa4 1632 for(uint8_t i = 0 ; i <12 ; i++){
ee12b079 93:4d76de54a699 1633 space = adjust(6, ((compress(sfp_bin[32+i],3,3))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 1634 }
prasanthbj05 266:ae588e75cfa4 1635 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 1636 space = adjust(2, (compress(sfp_bin[44+i],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1637 space = adjust(8, compress(sfp_bin[44+i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 1638 }
prasanthbj05 266:ae588e75cfa4 1639 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 1640 space = adjust(1, (compress(sfp_bin[48+i],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1641 space = adjust(8, compress(sfp_bin[48+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 1642 }
prasanthbj05 266:ae588e75cfa4 1643 space = adjust(2, (compress(sfp_bin[17],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1644 space = adjust(8, compress(sfp_bin[17],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1645 space = adjust(2, (compress(sfp_bin[23],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1646 space = adjust(8, compress(sfp_bin[23],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1647
ee12b079 93:4d76de54a699 1648 if(pzf == 0){
prasanthbj05 266:ae588e75cfa4 1649 //cout<<"proton bins ";
ee12b079 268:ded5306a1fd1 1650 #if srpz
chaithanyarss 290:3159ff1081a2 1651 gPC.printf("\n\rProton bins present in SRP");
ee12b079 268:ded5306a1fd1 1652 #endif
prasanthbj05 266:ae588e75cfa4 1653 for(uint8_t i = 0; i<17 ; i++){
ee12b079 93:4d76de54a699 1654 space = adjust(2, ((compress(sfp_bin[i],8,2))>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1655 space = adjust(8, compress(sfp_bin[i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
chaithanyarss 331:1943be3fd178 1656 //gPC.printf("%02X ",compress(sfp_bin[i],8,2));
ee12b079 93:4d76de54a699 1657 }
ee12b079 93:4d76de54a699 1658 }
chaithanyarss 332:7d2431ce979f 1659 //if(pzf==1)
chaithanyarss 331:1943be3fd178 1660 //gPC.printf("\n\rAll proton bins empty");
chaithanyarss 332:7d2431ce979f 1661 if(ezf == 0){
prasanthbj05 266:ae588e75cfa4 1662 //cout<<"electron bins ";
ee12b079 268:ded5306a1fd1 1663 #if srpz
chaithanyarss 290:3159ff1081a2 1664 gPC.printf("\n\rElectron bins present in SRP");
ee12b079 268:ded5306a1fd1 1665 #endif
ee12b079 93:4d76de54a699 1666 for(int i = 0; i<5 ; i++){
prasanthbj05 266:ae588e75cfa4 1667 space = adjust(2,((compress(sfp_bin[18+i],8,2))>>8),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1668 space = adjust(8, compress(sfp_bin[18+i],8,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
chaithanyarss 331:1943be3fd178 1669 //gPC.printf("%02X ",compress(sfp_bin[i],8,2));
ee12b079 93:4d76de54a699 1670 }
ee12b079 93:4d76de54a699 1671 }
chaithanyarss 332:7d2431ce979f 1672 //if(ezf==1)
chaithanyarss 331:1943be3fd178 1673 //gPC.printf("\n\rAll electron bins empty");
prasanthbj05 266:ae588e75cfa4 1674 } //above threshold ends here.
chaithanyarss 332:7d2431ce979f 1675 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1676 {
chaithanyarss 331:1943be3fd178 1677 id = 1; length = 241;
chaithanyarss 332:7d2431ce979f 1678 if(pzf == 0)
ee12b079 93:4d76de54a699 1679 length += 87;
chaithanyarss 332:7d2431ce979f 1680 if(ezf == 0)
chaithanyarss 331:1943be3fd178 1681 length += 35;
prasanthbj05 266:ae588e75cfa4 1682 }
prasanthbj05 266:ae588e75cfa4 1683 else
prasanthbj05 266:ae588e75cfa4 1684 {
chaithanyarss 331:1943be3fd178 1685 id = 2; length = 288;
ee12b079 93:4d76de54a699 1686 if(pzf == 0)
ee12b079 93:4d76de54a699 1687 length += 170;
ee12b079 93:4d76de54a699 1688 if(ezf == 0)
ee12b079 93:4d76de54a699 1689 length += 50;
chaithanyarss 331:1943be3fd178 1690 #if test_science
chaithanyarss 331:1943be3fd178 1691 dma_sfp_at_count++;
chaithanyarss 331:1943be3fd178 1692 #endif
ee12b079 93:4d76de54a699 1693 }
chaithanyarss 331:1943be3fd178 1694 #if test_science
chaithanyarss 331:1943be3fd178 1695 sfp_mode_count[0]++;
chaithanyarss 331:1943be3fd178 1696 #endif
shreeshas95 1:a0055b3280c8 1697 }
prasanthbj05 266:ae588e75cfa4 1698 else if(srp_mode == 1) //scattered mode
prasanthbj05 266:ae588e75cfa4 1699 {
prasanthbj05 266:ae588e75cfa4 1700 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1701 {
ee12b079 268:ded5306a1fd1 1702 #if srpz
chaithanyarss 290:3159ff1081a2 1703 gPC.printf("\n\rSFP below threshold");
ee12b079 268:ded5306a1fd1 1704 #endif
prasanthbj05 266:ae588e75cfa4 1705 pointer = sfp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 1706 space = adjust(4, attitude,pointer,8); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1707 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1708 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1709 for(uint8_t i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 1710 {
prasanthbj05 266:ae588e75cfa4 1711 space = adjust(7, compress(sfp_bin[i],5,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1712 }
prasanthbj05 266:ae588e75cfa4 1713 for(uint8_t i = 0 ; i < 4 ; i++)
prasanthbj05 266:ae588e75cfa4 1714 {
prasanthbj05 266:ae588e75cfa4 1715 space = adjust(1, (compress(sfp_bin[48+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1716 space = adjust(8, compress(sfp_bin[48+i],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1717 }
prasanthbj05 266:ae588e75cfa4 1718 }
prasanthbj05 266:ae588e75cfa4 1719 if(at == 1)
prasanthbj05 266:ae588e75cfa4 1720 {
ee12b079 268:ded5306a1fd1 1721
ee12b079 268:ded5306a1fd1 1722 #if srpz
chaithanyarss 331:1943be3fd178 1723 gPC.printf("\n\rSFP above threshold");
ee12b079 268:ded5306a1fd1 1724 #endif
prasanthbj05 266:ae588e75cfa4 1725 pointer = sfp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 1726 space = adjust(3, sci_time>>32 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1727 space = adjust(8, sci_time>>24 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1728 space = adjust(8, sci_time>>16 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1729 space = adjust(8, sci_time>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1730 space = adjust(8, sci_time ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1731 space = adjust(4, attitude,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1732 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1733 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1734 for(uint8_t i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 1735 {
prasanthbj05 266:ae588e75cfa4 1736 space = adjust(2, (compress(sfp_bin[i],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1737 space = adjust(8, compress(sfp_bin[i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1738 }
prasanthbj05 266:ae588e75cfa4 1739 for(uint8_t i = 0 ; i < 4 ; i++)
prasanthbj05 266:ae588e75cfa4 1740 {
prasanthbj05 266:ae588e75cfa4 1741 space = adjust(1, (compress(sfp_bin[48+i],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1742 space = adjust(8, compress(sfp_bin[48+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1743 }
prasanthbj05 266:ae588e75cfa4 1744 }
prasanthbj05 266:ae588e75cfa4 1745 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1746 {
chaithanyarss 331:1943be3fd178 1747 id = 1; length = 384;
prasanthbj05 266:ae588e75cfa4 1748 }
prasanthbj05 266:ae588e75cfa4 1749 else
prasanthbj05 266:ae588e75cfa4 1750 {
chaithanyarss 331:1943be3fd178 1751 id = 2; length = 568;
chaithanyarss 331:1943be3fd178 1752 #if test_science
chaithanyarss 331:1943be3fd178 1753 dma_sfp_at_count++;
chaithanyarss 331:1943be3fd178 1754 #endif
ee12b079 93:4d76de54a699 1755 }
chaithanyarss 331:1943be3fd178 1756 #if test_science
chaithanyarss 331:1943be3fd178 1757 sfp_mode_count[1]++;
chaithanyarss 331:1943be3fd178 1758 #endif
shreeshas95 1:a0055b3280c8 1759 }
prasanthbj05 266:ae588e75cfa4 1760 length = (length%8==0)?(length/8):(length/8)+1; //converting length to mulitple of 8
ee12b079 268:ded5306a1fd1 1761 #if srpz
chaithanyarss 290:3159ff1081a2 1762 gPC.printf("\n\rLength of SFP packet in bytes = %d",length);
ee12b079 268:ded5306a1fd1 1763 #endif
chaithanyarss 331:1943be3fd178 1764 //gPC.printf("\n\rLength of SFP packet in bytes = %d",length);
chaithanyarss 331:1943be3fd178 1765 /*----------------------------------------filling the science fine packet array ends here------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 1766
prasanthbj05 266:ae588e75cfa4 1767 /*-----------------------------Inserting the above packet(sfp) into the TM frame(s) starts here----------------------------*/
chaithanyarss 331:1943be3fd178 1768 if(id==1){ //below threshold
prasanthbj05 266:ae588e75cfa4 1769 if(position_tm_frame[id]>130){
ee12b079 268:ded5306a1fd1 1770 #if srpz
chaithanyarss 290:3159ff1081a2 1771 gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame.");
ee12b079 268:ded5306a1fd1 1772 #endif
prasanthbj05 266:ae588e75cfa4 1773 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1774 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 1775 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1776 }
chaithanyarss 331:1943be3fd178 1777 //position_tm_frame[id]=position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1778 }
prasanthbj05 266:ae588e75cfa4 1779 }
chaithanyarss 331:1943be3fd178 1780 else if(id==2){ //above threshold
prasanthbj05 266:ae588e75cfa4 1781 if(position_tm_frame[id]>126){
ee12b079 268:ded5306a1fd1 1782 #if srpz
chaithanyarss 290:3159ff1081a2 1783 gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame.");
ee12b079 268:ded5306a1fd1 1784 #endif
prasanthbj05 266:ae588e75cfa4 1785 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1786 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 1787 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1788 }
chaithanyarss 331:1943be3fd178 1789 //position_tm_frame[id]=position_tm_starting[id]; //
prasanthbj05 266:ae588e75cfa4 1790 }
prasanthbj05 266:ae588e75cfa4 1791 }
prasanthbj05 266:ae588e75cfa4 1792 if(position_tm_frame[id]==position_tm_starting[id]){
prasanthbj05 266:ae588e75cfa4 1793 frames[id][6-id] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1794 }
prasanthbj05 266:ae588e75cfa4 1795 for(uint16_t j=0 ; j<length ;)
prasanthbj05 266:ae588e75cfa4 1796 {
prasanthbj05 266:ae588e75cfa4 1797 if(position_tm_frame[id]==frames[id][6-id]){
prasanthbj05 266:ae588e75cfa4 1798 if(id==1){
ee12b079 268:ded5306a1fd1 1799 #if srpz
chaithanyarss 290:3159ff1081a2 1800 gPC.printf("\n\rAdding Time to TM frame");
ee12b079 268:ded5306a1fd1 1801 #endif
prasanthbj05 266:ae588e75cfa4 1802 frames[id][6] = (uint8_t)((sci_time>>32)&0x07);
prasanthbj05 266:ae588e75cfa4 1803 frames[id][7] = (uint8_t)((sci_time>>24)&0xff);
prasanthbj05 266:ae588e75cfa4 1804 frames[id][8] = (uint8_t)((sci_time>>16)&0xff);
prasanthbj05 266:ae588e75cfa4 1805 frames[id][9] = (uint8_t)((sci_time>>8)&0xff);
prasanthbj05 266:ae588e75cfa4 1806 frames[id][10] = (uint8_t)((sci_time)&0xff);
prasanthbj05 266:ae588e75cfa4 1807 }
prasanthbj05 266:ae588e75cfa4 1808 }
prasanthbj05 266:ae588e75cfa4 1809 if(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1810 frames[id][position_tm_frame[id]] = sfp[j];
prasanthbj05 266:ae588e75cfa4 1811 j++;
prasanthbj05 266:ae588e75cfa4 1812 position_tm_frame[id]++; //incrementing position of write pointer in TM frame
prasanthbj05 266:ae588e75cfa4 1813 }
prasanthbj05 266:ae588e75cfa4 1814 if(position_tm_frame[id] == 132)
prasanthbj05 266:ae588e75cfa4 1815 {
prasanthbj05 266:ae588e75cfa4 1816 /*-----------the current frame is completely filled and we fill frame header to write into SD card---------*/
ee12b079 268:ded5306a1fd1 1817 #if srpz
chaithanyarss 290:3159ff1081a2 1818 gPC.printf("\n\rSFP_TM frame full. Length of current packet = %d",j);
chaithanyarss 290:3159ff1081a2 1819 gPC.printf("\n\rFirst Header pointer: %d",frames[id][6-id]);
chaithanyarss 290:3159ff1081a2 1820 gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][6-id]]);
ee12b079 268:ded5306a1fd1 1821 #endif
ee12b079 93:4d76de54a699 1822 pointer = frames[id];
prasanthbj05 266:ae588e75cfa4 1823 if(id == 1){ //below threshold
ee12b079 93:4d76de54a699 1824 space = adjust(1,0,pointer,8);
ee12b079 93:4d76de54a699 1825 space = adjust(4,3,pointer,space);
ee12b079 271:72529b247333 1826 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
chaithanyarss 290:3159ff1081a2 1827
chaithanyarss 290:3159ff1081a2 1828 //gPC.printf("3 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 1829 #if debug_fsc
chaithanyarss 290:3159ff1081a2 1830 frames[id][1] = (test_fsc[3]>>24)&0xff;
chaithanyarss 290:3159ff1081a2 1831 frames[id][2] = (test_fsc[3]>>16)&0xff;
chaithanyarss 290:3159ff1081a2 1832 frames[id][3] = (test_fsc[3]>>8)&0xff;
chaithanyarss 290:3159ff1081a2 1833 frames[id][4] = test_fsc[3]&0xff;
chaithanyarss 290:3159ff1081a2 1834 test_fsc[3]++;
chaithanyarss 290:3159ff1081a2 1835 #endif
chaithanyarss 290:3159ff1081a2 1836 #if !debug_fsc
ee12b079 93:4d76de54a699 1837 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 93:4d76de54a699 1838 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 1839 frames[id][3] = (FSC_science>>8)&0xff;
prasanthbj05 266:ae588e75cfa4 1840 frames[id][4] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1841 #endif
prasanthbj05 266:ae588e75cfa4 1842 }
prasanthbj05 266:ae588e75cfa4 1843 else if(id == 2) //above threshold
prasanthbj05 266:ae588e75cfa4 1844 {
ee12b079 93:4d76de54a699 1845 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 1846 space = adjust(4,2,pointer,space);
prasanthbj05 266:ae588e75cfa4 1847 FSC_science = FSC_CURRENT[2]; ///to be used as this
chaithanyarss 290:3159ff1081a2 1848 //gPC.printf("2 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 1849 #if debug_fsc
chaithanyarss 290:3159ff1081a2 1850 frames[id][1] = (test_fsc[2]>>16)&0xff;
chaithanyarss 290:3159ff1081a2 1851 frames[id][2] = (test_fsc[2]>>8)&0xff;
chaithanyarss 290:3159ff1081a2 1852 frames[id][3] = test_fsc[2]&0xff;
chaithanyarss 290:3159ff1081a2 1853 test_fsc[2]++;
chaithanyarss 290:3159ff1081a2 1854 #endif
chaithanyarss 290:3159ff1081a2 1855 #if !debug_fsc
ee12b079 93:4d76de54a699 1856 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 1857 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 93:4d76de54a699 1858 frames[id][3] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1859 #endif
ee12b079 93:4d76de54a699 1860 }
ee12b079 93:4d76de54a699 1861 temp_crc = crc16_gen(frames[id],132);
ee12b079 93:4d76de54a699 1862 frames[id][132] = temp_crc>>8;
ee12b079 93:4d76de54a699 1863 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1864
ee12b079 268:ded5306a1fd1 1865 #if srpz
ee12b079 268:ded5306a1fd1 1866 gPC.printf("\n\rPrinting SFP_TM\n\r{");
chaithanyarss 290:3159ff1081a2 1867 //gPC.printf("\n\r{");
ee12b079 268:ded5306a1fd1 1868 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 1869 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 1870 }
ee12b079 268:ded5306a1fd1 1871 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 1872 #endif
chaithanyarss 331:1943be3fd178 1873 #if tabulation
chaithanyarss 331:1943be3fd178 1874 tabulate_TM(&frames[id][0]);
chaithanyarss 331:1943be3fd178 1875 #endif
prasanthbj05 266:ae588e75cfa4 1876 /*------------------current TM frame completely filled-----------------------*/
ee12b079 114:9fb55057b13f 1877 exor(frames[id]);
ee12b079 93:4d76de54a699 1878 convolution(frames[id]);
ee12b079 93:4d76de54a699 1879 interleave(TM_convoluted_data,TM_interleave_data);
ee12b079 93:4d76de54a699 1880 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
samp1234 346:204497974293 1881 // gPC.printf("enterSCI_SD11");
samp1234 346:204497974293 1882
samp1234 346:204497974293 1883 // gPC.printf("timer start %d::",HK_counter);
prasanthbj05 266:ae588e75cfa4 1884 if(id == 1)
ee12b079 195:6a549c0e9287 1885 {
samp1234 347:2517c9f6bb4f 1886 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,3); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 1887 }
prasanthbj05 266:ae588e75cfa4 1888 else if (id == 2)
prasanthbj05 266:ae588e75cfa4 1889 {
samp1234 347:2517c9f6bb4f 1890 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,2); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 1891 }
ee12b079 268:ded5306a1fd1 1892 if(sd_stat)
ee12b079 268:ded5306a1fd1 1893 {
samp1234 356:197c93dc2012 1894 //gPC.printf("\n\n\rsd write fail---------------------------------------");
chaithanyarss 290:3159ff1081a2 1895 }
samp1234 346:204497974293 1896
samp1234 346:204497974293 1897 // gPC.printf("timer end %d::",timer_test.read_ms()); ///changed recently
samp1234 346:204497974293 1898 // timer_test.stop();
samp1234 346:204497974293 1899
samp1234 346:204497974293 1900
samp1234 346:204497974293 1901 // gPC.printf("endSCI_SD12");
ee12b079 93:4d76de54a699 1902 position_tm_frame[id] = position_tm_starting[id];
chaithanyarss 331:1943be3fd178 1903 if(j!=0)
chaithanyarss 331:1943be3fd178 1904 frames[id][6-id] = (length - j)+position_tm_starting[id];
chaithanyarss 331:1943be3fd178 1905 else if(j==0)
chaithanyarss 331:1943be3fd178 1906 frames[id][6-id] = position_tm_starting[id];
ee12b079 93:4d76de54a699 1907 }
shreeshas95 1:a0055b3280c8 1908 }
prasanthbj05 266:ae588e75cfa4 1909 /*------------------------------finished inserting the sfp packet into the TM frame(s)-------------------------------------*/
chaithanyarss 331:1943be3fd178 1910 } // for loop bracket which runs 60 times
chaithanyarss 331:1943be3fd178 1911 //ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer
chaithanyarss 331:1943be3fd178 1912
chaithanyarss 331:1943be3fd178 1913 #if test_science
chaithanyarss 331:1943be3fd178 1914 if(pzf==1){
chaithanyarss 331:1943be3fd178 1915 gPC.printf("\n\rAll protons bins empty");
chaithanyarss 331:1943be3fd178 1916 }
chaithanyarss 331:1943be3fd178 1917 if(ezf==1){
chaithanyarss 331:1943be3fd178 1918 gPC.printf("\n\rAll electrons bins are empty");
chaithanyarss 331:1943be3fd178 1919 }
chaithanyarss 331:1943be3fd178 1920 #endif
ee12b079 268:ded5306a1fd1 1921 #if srpz_last
ee12b079 268:ded5306a1fd1 1922 //gPC.printf("\n\rPrinting the last SFP_TM frame");
ee12b079 268:ded5306a1fd1 1923 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 1924 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 1925 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 1926 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 1927 }
ee12b079 268:ded5306a1fd1 1928 if(position_tm_frame[id]==132){
ee12b079 268:ded5306a1fd1 1929 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][6-id]]);
ee12b079 268:ded5306a1fd1 1930 pointer = frames[id];
ee12b079 268:ded5306a1fd1 1931 if(id == 1){ //below threshold
ee12b079 268:ded5306a1fd1 1932 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1933 space = adjust(4,3,pointer,space);
ee12b079 268:ded5306a1fd1 1934 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
chaithanyarss 290:3159ff1081a2 1935 #if debug_fsc
chaithanyarss 331:1943be3fd178 1936 frames[id][1] = (test_fsc[3]>>24)&0xff;
chaithanyarss 331:1943be3fd178 1937 frames[id][2] = (test_fsc[3]>>16)&0xff;
chaithanyarss 331:1943be3fd178 1938 frames[id][3] = (test_fsc[3]>>8)&0xff;
chaithanyarss 331:1943be3fd178 1939 frames[id][4] = test_fsc[3]&0xff;
chaithanyarss 290:3159ff1081a2 1940 test_fsc[3]++;
chaithanyarss 290:3159ff1081a2 1941 #endif
chaithanyarss 290:3159ff1081a2 1942 #if !debug_fsc
ee12b079 268:ded5306a1fd1 1943 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 268:ded5306a1fd1 1944 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1945 frames[id][3] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1946 frames[id][4] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1947 #endif
ee12b079 268:ded5306a1fd1 1948 }
ee12b079 268:ded5306a1fd1 1949 else if(id == 2) //above threshold
ee12b079 268:ded5306a1fd1 1950 {
ee12b079 268:ded5306a1fd1 1951 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1952 space = adjust(4,2,pointer,space);
ee12b079 268:ded5306a1fd1 1953 FSC_science = FSC_CURRENT[2]; ///to be used as this
chaithanyarss 290:3159ff1081a2 1954 #if debug_fsc
chaithanyarss 290:3159ff1081a2 1955 frames[id][1] = (test_fsc[2]>>16)&0xff;
chaithanyarss 290:3159ff1081a2 1956 frames[id][2] = (test_fsc[2]>>8)&0xff;
chaithanyarss 290:3159ff1081a2 1957 frames[id][3] = test_fsc[2]&0xff;
chaithanyarss 290:3159ff1081a2 1958 test_fsc[2]++;
chaithanyarss 290:3159ff1081a2 1959 #endif
chaithanyarss 290:3159ff1081a2 1960 #if !debug_fsc
ee12b079 268:ded5306a1fd1 1961 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1962 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1963 frames[id][3] = FSC_science&0xff;
chaithanyarss 290:3159ff1081a2 1964 #endif
ee12b079 268:ded5306a1fd1 1965 }
ee12b079 268:ded5306a1fd1 1966 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 1967 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 1968 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1969
chaithanyarss 290:3159ff1081a2 1970 //gPC.printf("\n\rPrinting SFP_TM\n\r{");
chaithanyarss 290:3159ff1081a2 1971 gPC.printf("\n\r{");
ee12b079 268:ded5306a1fd1 1972 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 1973 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 1974 }
ee12b079 268:ded5306a1fd1 1975 gPC.printf("}\n\r");
chaithanyarss 290:3159ff1081a2 1976 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 1977 }
ee12b079 268:ded5306a1fd1 1978 #endif
ee12b079 93:4d76de54a699 1979 at = 0; pzf = 1; ezf = 1;
ee12b079 93:4d76de54a699 1980 srp_mode = head[2]&0x1;
prasanthbj05 266:ae588e75cfa4 1981 uint8_t compression_option = (head[2]>>1)&0x3;
prasanthbj05 266:ae588e75cfa4 1982 /*-------------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT starts here-------------------------
prasanthbj05 266:ae588e75cfa4 1983 ------------------(in case compression option = 0 , then tagging beacon packet(not yet formed) as AT or BT is also done)----------*/
prasanthbj05 266:ae588e75cfa4 1984 if(srp_mode ==0)
prasanthbj05 266:ae588e75cfa4 1985 {
prasanthbj05 266:ae588e75cfa4 1986 if(compression_option == 0)
prasanthbj05 266:ae588e75cfa4 1987 {
prasanthbj05 266:ae588e75cfa4 1988 for(int i=0; i<52 ;i++)
prasanthbj05 266:ae588e75cfa4 1989 {
prasanthbj05 266:ae588e75cfa4 1990 if(scp_bin[i] > scp_threshold_m0[i])
prasanthbj05 266:ae588e75cfa4 1991 {
ee12b079 268:ded5306a1fd1 1992 //gPC.printf("\n\rSCP above threshold index: %d",i);
chaithanyarss 331:1943be3fd178 1993 #if test_science
chaithanyarss 331:1943be3fd178 1994 calib_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 1995 #endif
ee12b079 93:4d76de54a699 1996 at = 1;
chaithanyarss 331:1943be3fd178 1997 //break;
shreeshas95 1:a0055b3280c8 1998 }
shreeshas95 1:a0055b3280c8 1999 }
chaithanyarss 331:1943be3fd178 2000 #if test_science
chaithanyarss 331:1943be3fd178 2001 scp_mode_count[0]++;
chaithanyarss 331:1943be3fd178 2002 #endif
ee12b079 93:4d76de54a699 2003 }
prasanthbj05 266:ae588e75cfa4 2004 else if(compression_option == 1)
prasanthbj05 266:ae588e75cfa4 2005 {
chaithanyarss 331:1943be3fd178 2006 if(scp_bin[44] > scp_threshold_m0_1[0]){
chaithanyarss 331:1943be3fd178 2007 //gPC.printf("\n\rSCP above threshold index: 44");
chaithanyarss 331:1943be3fd178 2008 #if test_science
chaithanyarss 331:1943be3fd178 2009 //thres_scp_index[map_index_bins_2_srp_index(44,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2010 calib_thres_index_scp[map_index_bins_2_srp_index(44,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2011 #endif
chaithanyarss 331:1943be3fd178 2012 at=1;
chaithanyarss 331:1943be3fd178 2013 }
prasanthbj05 266:ae588e75cfa4 2014 for(int i=0; i<4 ;i++)
prasanthbj05 266:ae588e75cfa4 2015 {
prasanthbj05 266:ae588e75cfa4 2016 if(scp_bin[48+i] > scp_threshold_m0_1[i+1])
prasanthbj05 266:ae588e75cfa4 2017 {
ee12b079 268:ded5306a1fd1 2018 //gPC.printf("\n\rSCP above threshold index: %d",i+48);
chaithanyarss 331:1943be3fd178 2019 #if test_science
chaithanyarss 331:1943be3fd178 2020 //thres_scp_index[map_index_bins_2_srp_index(48+i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2021 calib_thres_index_scp[map_index_bins_2_srp_index(48+i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2022 #endif
ee12b079 93:4d76de54a699 2023 at = 1;
chaithanyarss 331:1943be3fd178 2024 //break;
ee12b079 93:4d76de54a699 2025 }
shreeshas95 1:a0055b3280c8 2026 }
ee12b079 268:ded5306a1fd1 2027 if(scp_bin[17] > scp_threshold_m0_1[5]){
ee12b079 268:ded5306a1fd1 2028 //gPC.printf("\n\rSP above threshold index: 17");
chaithanyarss 331:1943be3fd178 2029 #if test_science
chaithanyarss 331:1943be3fd178 2030 //thres_scp_index[map_index_bins_2_srp_index(17,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2031 calib_thres_index_scp[map_index_bins_2_srp_index(17,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2032 #endif
ee12b079 268:ded5306a1fd1 2033 at=1;
ee12b079 268:ded5306a1fd1 2034 }
ee12b079 268:ded5306a1fd1 2035 if(scp_bin[23] > scp_threshold_m0_1[6]){
ee12b079 268:ded5306a1fd1 2036 //gPC.printf("\n\rSP above threshold index: 23");
chaithanyarss 331:1943be3fd178 2037 #if test_science
chaithanyarss 331:1943be3fd178 2038 //thres_scp_index[map_index_bins_2_srp_index(23,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2039 calib_thres_index_scp[map_index_bins_2_srp_index(23,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2040 #endif
ee12b079 268:ded5306a1fd1 2041 at=1;
ee12b079 268:ded5306a1fd1 2042 }
ee12b079 93:4d76de54a699 2043 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 2044 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 2045 {
ee12b079 93:4d76de54a699 2046 proton_scp_sum += scp_bin[i];
shreeshas95 1:a0055b3280c8 2047 }
prasanthbj05 266:ae588e75cfa4 2048 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 2049 {
ee12b079 93:4d76de54a699 2050 electron_scp_sum += scp_bin[18+i];
ee12b079 93:4d76de54a699 2051 }
chaithanyarss 331:1943be3fd178 2052 if(proton_scp_sum > scp_threshold_m0_1[7]){
chaithanyarss 331:1943be3fd178 2053 //gPC.printf("\n\rProton_scp_sum above threshold");
chaithanyarss 331:1943be3fd178 2054 #if test_science
chaithanyarss 331:1943be3fd178 2055 proton_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2056 #endif
chaithanyarss 331:1943be3fd178 2057 at=1;
chaithanyarss 331:1943be3fd178 2058 }
chaithanyarss 331:1943be3fd178 2059 if(electron_scp_sum > scp_threshold_m0_1[8]){
chaithanyarss 331:1943be3fd178 2060 //gPC.printf("\n\rElectron_scp_sum above threshold");
chaithanyarss 331:1943be3fd178 2061 #if test_science
chaithanyarss 331:1943be3fd178 2062 electron_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2063 #endif
chaithanyarss 331:1943be3fd178 2064 at=1;
chaithanyarss 331:1943be3fd178 2065 }
chaithanyarss 331:1943be3fd178 2066 #if test_science
chaithanyarss 331:1943be3fd178 2067 scp_mode_count[1]++;
chaithanyarss 331:1943be3fd178 2068 #endif
shreeshas95 1:a0055b3280c8 2069 }
prasanthbj05 266:ae588e75cfa4 2070 else if(compression_option == 2)
prasanthbj05 266:ae588e75cfa4 2071 {
chaithanyarss 331:1943be3fd178 2072 if(scp_bin[50] > scp_sfp_threshold_m0_2[0]){
chaithanyarss 331:1943be3fd178 2073 //gPC.printf("\n\rSCP above threshold index:50");
chaithanyarss 331:1943be3fd178 2074 #if test_science
chaithanyarss 331:1943be3fd178 2075 //thres_scp_index[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2076 calib_thres_index_scp[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2077 #endif
chaithanyarss 331:1943be3fd178 2078 at=1;
chaithanyarss 331:1943be3fd178 2079 }
prasanthbj05 266:ae588e75cfa4 2080 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 2081 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 2082 {
prasanthbj05 266:ae588e75cfa4 2083 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 2084 }
prasanthbj05 266:ae588e75cfa4 2085 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 2086 {
prasanthbj05 266:ae588e75cfa4 2087 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 2088 }
ee12b079 268:ded5306a1fd1 2089 if(proton_scp_sum > scp_sfp_threshold_m0_2[1]){//gPC.printf("\n\rProton_SCP_sum above threshold");
chaithanyarss 331:1943be3fd178 2090 #if test_science
chaithanyarss 331:1943be3fd178 2091 proton_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2092 #endif
ee12b079 268:ded5306a1fd1 2093 at=1;}
ee12b079 268:ded5306a1fd1 2094 if(electron_scp_sum > scp_sfp_threshold_m0_2[2]){//gPC.printf("\n\rElectron above threshold");
chaithanyarss 331:1943be3fd178 2095 #if test_science
chaithanyarss 331:1943be3fd178 2096 electron_scp_sum_at = 1;
chaithanyarss 331:1943be3fd178 2097 #endif
ee12b079 268:ded5306a1fd1 2098 at=1;}
chaithanyarss 331:1943be3fd178 2099 #if test_science
chaithanyarss 331:1943be3fd178 2100 scp_mode_count[2]++;
chaithanyarss 331:1943be3fd178 2101 #endif
prasanthbj05 266:ae588e75cfa4 2102 }
prasanthbj05 266:ae588e75cfa4 2103 }
prasanthbj05 266:ae588e75cfa4 2104 else if(srp_mode ==1)
prasanthbj05 266:ae588e75cfa4 2105 {
ee12b079 268:ded5306a1fd1 2106 if(compression_option==0){
prasanthbj05 266:ae588e75cfa4 2107 for(int i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 2108 {
prasanthbj05 266:ae588e75cfa4 2109 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 2110 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 2111 #if test_science
chaithanyarss 331:1943be3fd178 2112 scat_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2113 #endif
prasanthbj05 266:ae588e75cfa4 2114 at = 1;
chaithanyarss 331:1943be3fd178 2115 //break;
prasanthbj05 266:ae588e75cfa4 2116 }
prasanthbj05 266:ae588e75cfa4 2117 }
prasanthbj05 266:ae588e75cfa4 2118 for(int i=48; i<52; i++)
prasanthbj05 266:ae588e75cfa4 2119 {
prasanthbj05 266:ae588e75cfa4 2120 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 2121 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
chaithanyarss 331:1943be3fd178 2122 #if test_science
chaithanyarss 331:1943be3fd178 2123 scat_thres_index_scp[map_index_bins_2_srp_index(i,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2124 #endif
prasanthbj05 266:ae588e75cfa4 2125 at = 1;
chaithanyarss 331:1943be3fd178 2126 //break;
prasanthbj05 266:ae588e75cfa4 2127 }
shreeshas95 1:a0055b3280c8 2128 }
chaithanyarss 331:1943be3fd178 2129 #if test_science
chaithanyarss 331:1943be3fd178 2130 scp_mode_count[3]++;
chaithanyarss 331:1943be3fd178 2131 #endif
shreeshas95 1:a0055b3280c8 2132 }
ee12b079 268:ded5306a1fd1 2133 else if(compression_option==2){
ee12b079 268:ded5306a1fd1 2134 if(scp_bin[50]>scp_sfp_threshold_m0_2[0]){
ee12b079 268:ded5306a1fd1 2135 //gPC.printf("\nSCP above threshold index:50, Value:%",scp_bin[50]);
chaithanyarss 331:1943be3fd178 2136 #if test_science
chaithanyarss 331:1943be3fd178 2137 //thres_scp_index[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2138 scat_thres_index_scp[map_index_bins_2_srp_index(50,srp_mode)-2] = 1;
chaithanyarss 331:1943be3fd178 2139 #endif
ee12b079 268:ded5306a1fd1 2140 at=1;
ee12b079 268:ded5306a1fd1 2141 }
chaithanyarss 331:1943be3fd178 2142 #if test_science
chaithanyarss 331:1943be3fd178 2143 scp_mode_count[4]++;
chaithanyarss 331:1943be3fd178 2144 #endif
prasanthbj05 266:ae588e75cfa4 2145 }
prasanthbj05 266:ae588e75cfa4 2146 }
prasanthbj05 266:ae588e75cfa4 2147 /*----------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT ends here--------------------------*/
chaithanyarss 331:1943be3fd178 2148 /*for(uint8_t temp_i=0;temp_i<52;temp_i++){
chaithanyarss 331:1943be3fd178 2149 gPC.printf("\n\rscp_bin[%d] =%d",temp_i+1,scp_bin[temp_i]);
chaithanyarss 331:1943be3fd178 2150 }*/
prasanthbj05 266:ae588e75cfa4 2151 if(srp_mode == 0)
prasanthbj05 266:ae588e75cfa4 2152 {
prasanthbj05 266:ae588e75cfa4 2153 //determining if non zero values of proton and electron bins exist for calibrated mode (srp)
prasanthbj05 266:ae588e75cfa4 2154 for(int i=0; i<17 ;i++)
prasanthbj05 266:ae588e75cfa4 2155 {
prasanthbj05 266:ae588e75cfa4 2156 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 2157 pzf = 0;
prasanthbj05 266:ae588e75cfa4 2158 }
prasanthbj05 266:ae588e75cfa4 2159 for(int i=18; i<23 ;i++)
prasanthbj05 266:ae588e75cfa4 2160 {
prasanthbj05 266:ae588e75cfa4 2161 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 2162 ezf = 0;
prasanthbj05 266:ae588e75cfa4 2163 }
prasanthbj05 266:ae588e75cfa4 2164 }
prasanthbj05 266:ae588e75cfa4 2165 /*-----------------------------------------Tagging beacon packet as AT or BT starts here-------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2166 beacon_at = 0;
prasanthbj05 266:ae588e75cfa4 2167 if(srp_mode==0) //those bins which can be meaningfully compared only in srp_mode==0
prasanthbj05 266:ae588e75cfa4 2168 {
prasanthbj05 266:ae588e75cfa4 2169 if(scp_bin[44]>beacon_threshold[0]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2170 if(scp_bin[17]>beacon_threshold[5]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2171 if(scp_bin[23]>beacon_threshold[6]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2172 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 2173 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 2174 {
prasanthbj05 266:ae588e75cfa4 2175 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 2176 }
prasanthbj05 266:ae588e75cfa4 2177 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 2178 {
prasanthbj05 266:ae588e75cfa4 2179 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 2180 }
prasanthbj05 266:ae588e75cfa4 2181 if(proton_scp_sum > beacon_threshold[7]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 2182 if(electron_scp_sum > beacon_threshold[8]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 2183 }
prasanthbj05 266:ae588e75cfa4 2184 if(scp_bin[48]>beacon_threshold[1]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2185 if(scp_bin[49]>beacon_threshold[2]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2186 if(scp_bin[50]>beacon_threshold[3]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2187 if(scp_bin[51]>beacon_threshold[4]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 2188 /*----------------------------------------Tagging beacon packet as AT or BT ends here------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2189
prasanthbj05 266:ae588e75cfa4 2190 /*-----------------------------------------------Forming the beacon packet starts here-----------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2191 //Last 512 bits of beacon_array excluding CRC bits is used for storing the 5 most recent beacon packets
prasanthbj05 266:ae588e75cfa4 2192
prasanthbj05 266:ae588e75cfa4 2193 if(beacon_cntr == 1)
prasanthbj05 266:ae588e75cfa4 2194 {
prasanthbj05 267:783c248a6207 2195 beacon_ptr = &(beacon_array[47]); // starting block address, stores the oldest(among the 5 most recent) beacon packet
prasanthbj05 266:ae588e75cfa4 2196 }
prasanthbj05 266:ae588e75cfa4 2197 else if(beacon_cntr>1 && beacon_cntr<6)
prasanthbj05 266:ae588e75cfa4 2198 {
prasanthbj05 267:783c248a6207 2199 beacon_ptr +=17; // increase the block number(totally 5 blocks for 5 beacon packets)
prasanthbj05 266:ae588e75cfa4 2200 }
prasanthbj05 266:ae588e75cfa4 2201 else if(beacon_cntr == 6)
prasanthbj05 266:ae588e75cfa4 2202 {
prasanthbj05 267:783c248a6207 2203 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 2204 { // overwrite the new beacon packet in the 5th block
prasanthbj05 267:783c248a6207 2205 beacon_array[47+i] = beacon_array[64+i];
prasanthbj05 267:783c248a6207 2206 beacon_array[64+i] = beacon_array[81+i];
prasanthbj05 267:783c248a6207 2207 beacon_array[81+i] = beacon_array[98+i];
prasanthbj05 267:783c248a6207 2208 beacon_array[98+i] = beacon_array[115+i];
prasanthbj05 266:ae588e75cfa4 2209 }
prasanthbj05 267:783c248a6207 2210 beacon_ptr = &(beacon_array[115]); //address of the 5th block
prasanthbj05 266:ae588e75cfa4 2211 beacon_cntr = 5;
prasanthbj05 266:ae588e75cfa4 2212 }
prasanthbj05 266:ae588e75cfa4 2213 pointer = beacon_ptr; debug_cntr = 0; space = 8;
prasanthbj05 267:783c248a6207 2214 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 267:783c248a6207 2215 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2216 space = adjust(3,(sci_time>>32)&0x07,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2217 space = adjust(8,(sci_time>>24)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2218 space = adjust(8,(sci_time>>16)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2219 space = adjust(8,(sci_time>>8)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2220 space = adjust(8,(sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2221 space = adjust(4, (attitude)&0x0f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2222
prasanthbj05 266:ae588e75cfa4 2223 if(srp_mode==0){
prasanthbj05 266:ae588e75cfa4 2224 if(beacon_at == 0){
prasanthbj05 267:783c248a6207 2225 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2226 space = adjust(6, compress(scp_bin[44],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2227 space = adjust(7, compress(scp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2228 space = adjust(7, compress(scp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2229 space = adjust(7, compress(scp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2230 space = adjust(7, compress(scp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2231 space = adjust(6, compress(scp_bin[17],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2232 space = adjust(6, compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2233 space = adjust(4, compress(proton_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2234 space = adjust(8, compress(proton_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2235 space = adjust(4, compress(electron_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2236 space = adjust(8, compress(electron_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2237 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2238 for(int temp_i = 12; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 2239 {
prasanthbj05 266:ae588e75cfa4 2240 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 2241 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2242 }
prasanthbj05 266:ae588e75cfa4 2243 }
prasanthbj05 266:ae588e75cfa4 2244 else if(beacon_at==1){
prasanthbj05 266:ae588e75cfa4 2245 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2246 space = adjust(1, compress(sfp_bin[44],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2247 space = adjust(8, compress(sfp_bin[44],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2248 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2249 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2250 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2251 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2252 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2253 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2254 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2255 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2256 space = adjust(1, compress(sfp_bin[17],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2257 space = adjust(8, compress(sfp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2258 space = adjust(1, compress(sfp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2259 space = adjust(8, compress(sfp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2260 space = adjust(1, compress(proton_scp_sum ,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2261 space = adjust(8, compress(proton_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2262 space = adjust(1, compress(electron_scp_sum,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2263 space = adjust(8, compress(electron_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2264 //cout<<"for beacon space = "<<(space&0x0f)<<" counter = "<<debug_cntr;
prasanthbj05 266:ae588e75cfa4 2265 }
prasanthbj05 266:ae588e75cfa4 2266 }else if(srp_mode==1){
prasanthbj05 266:ae588e75cfa4 2267 if(beacon_at==0){
prasanthbj05 267:783c248a6207 2268 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2269 space = adjust(6, compress(0,3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2270 space = adjust(7, compress(sfp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2271 space = adjust(7, compress(sfp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2272 space = adjust(7, compress(sfp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2273 space = adjust(7, compress(sfp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2274 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2275 for(uint8_t temp_i = 7; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 2276 {
prasanthbj05 266:ae588e75cfa4 2277 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 2278 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2279 }
prasanthbj05 266:ae588e75cfa4 2280 }
prasanthbj05 266:ae588e75cfa4 2281 else if(beacon_at==1){
prasanthbj05 267:783c248a6207 2282 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2283 space = adjust(1, compress(0,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 2284 space = adjust(8, compress(0,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2285 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2286 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2287 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2288 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2289 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2290 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2291 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2292 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2293 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 2294 for(uint8_t temp_i = 10; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 2295 {
prasanthbj05 266:ae588e75cfa4 2296 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 2297 pointer = pointer + 1;
ee12b079 93:4d76de54a699 2298 }
shreeshas95 1:a0055b3280c8 2299 }
shreeshas95 1:a0055b3280c8 2300 }
prasanthbj05 266:ae588e75cfa4 2301 beacon_cntr++;
prasanthbj05 266:ae588e75cfa4 2302 /*--------------------------------------------------beacon packet ends here--------------------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2303
chaithanyarss 290:3159ff1081a2 2304 //gPC.printf("\n\n\rSCP");
prasanthbj05 266:ae588e75cfa4 2305 uint8_t packet_pp,time_diff;
prasanthbj05 266:ae588e75cfa4 2306 /*------------------------------------------Forming a science packet(scp) starts here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2307
ee12b079 93:4d76de54a699 2308 pointer = scp; debug_cntr = 0; space = 8;
chaithanyarss 331:1943be3fd178 2309 time_diff = 0;
chaithanyarss 331:1943be3fd178 2310 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 2311
chaithanyarss 331:1943be3fd178 2312 /*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 2313 to indicate this time jump*/
chaithanyarss 331:1943be3fd178 2314 if(time_prev_scp!=sci_time)
prasanthbj05 266:ae588e75cfa4 2315 {
chaithanyarss 331:1943be3fd178 2316 if((((uint8_t)(sci_time>>7))&0x3f)<(((uint8_t)(time_prev_scp>>7))&0x3f))
chaithanyarss 331:1943be3fd178 2317 {
chaithanyarss 331:1943be3fd178 2318 time_diff = time_diff+60;
chaithanyarss 331:1943be3fd178 2319 }
chaithanyarss 331:1943be3fd178 2320 time_diff += (((uint8_t)(sci_time>>7))&0x3f);
chaithanyarss 331:1943be3fd178 2321 time_diff -= (((uint8_t)(time_prev_scp>>7))&0x3f);
chaithanyarss 331:1943be3fd178 2322 if(time_diff>10){
chaithanyarss 331:1943be3fd178 2323 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2324 }
chaithanyarss 331:1943be3fd178 2325 else{
chaithanyarss 331:1943be3fd178 2326 uint8_t min[2],hour[2],day[2],month[2],year[2];
chaithanyarss 331:1943be3fd178 2327 min[0] = (((uint8_t)(sci_time>>13))&0x3f);
chaithanyarss 331:1943be3fd178 2328 min[1] = (((uint8_t)(time_prev_scp>>13))&0x3f);
chaithanyarss 331:1943be3fd178 2329 hour[0] = (((uint8_t)(sci_time>>19))&0x1f);
chaithanyarss 331:1943be3fd178 2330 hour[1] = (((uint8_t)(time_prev_scp>>19))&0x1f);
chaithanyarss 331:1943be3fd178 2331 day[0] = (((uint8_t)(sci_time>>24))&0x1f);
chaithanyarss 331:1943be3fd178 2332 day[1] = (((uint8_t)(time_prev_scp>>24))&0x1f);
chaithanyarss 331:1943be3fd178 2333 month[0] = (((uint8_t)(sci_time>>29))&0x0f);
chaithanyarss 331:1943be3fd178 2334 month[1] = (((uint8_t)(time_prev_scp>>29))&0x0f);
chaithanyarss 331:1943be3fd178 2335 year[0] = (((uint8_t)(sci_time>>33))&0x03);
chaithanyarss 331:1943be3fd178 2336 year[1] = (((uint8_t)(time_prev_scp>>33))&0x03);
chaithanyarss 331:1943be3fd178 2337 if(min[0]<min[1]){
chaithanyarss 331:1943be3fd178 2338 if(hour[0]<hour[1]){
chaithanyarss 331:1943be3fd178 2339 if(day[0]<day[1]){
chaithanyarss 331:1943be3fd178 2340 if(month[0]<month[1]){
chaithanyarss 331:1943be3fd178 2341 if((year[0]-year[1])!=1)
chaithanyarss 331:1943be3fd178 2342 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2343 }
chaithanyarss 331:1943be3fd178 2344 else if((month[0]-month[1])!=1)
chaithanyarss 331:1943be3fd178 2345 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2346 }
chaithanyarss 331:1943be3fd178 2347 else if((day[0]-day[1])!=1)
chaithanyarss 331:1943be3fd178 2348 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2349 }
chaithanyarss 331:1943be3fd178 2350 else if((hour[0]-hour[1])!=1)
chaithanyarss 331:1943be3fd178 2351 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2352 }
chaithanyarss 331:1943be3fd178 2353 else if((min[0]-min[1])!=1)
chaithanyarss 331:1943be3fd178 2354 packet_pp = 0;
chaithanyarss 331:1943be3fd178 2355 }
prasanthbj05 266:ae588e75cfa4 2356 }
prasanthbj05 266:ae588e75cfa4 2357 time_prev_scp = sci_time;
prasanthbj05 266:ae588e75cfa4 2358 uint32_t sfp_at_counter;
prasanthbj05 266:ae588e75cfa4 2359 sfp_at_counter = FSC_CURRENT[2];
prasanthbj05 266:ae588e75cfa4 2360 space = adjust(1, packet_pp,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2361 space = adjust(5, (sci_time>>8)&0x1f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2362 space = adjust(8, (sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2363 space = adjust(4, (attitude)&0xf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2364 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 266:ae588e75cfa4 2365 space = adjust(1, at,pointer,space); pointer += space>>4; debug_cntr += space>>4; //last bit of compression option
prasanthbj05 266:ae588e75cfa4 2366 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
chaithanyarss 331:1943be3fd178 2367 if(!((srp_mode==0 && compression_option==2)|(srp_mode==1 && compression_option==2)))
prasanthbj05 266:ae588e75cfa4 2368 {
prasanthbj05 266:ae588e75cfa4 2369 space = adjust(8, sfp_at_counter>>16,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2370 space = adjust(8, sfp_at_counter>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2371 space = adjust(8, sfp_at_counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2372 }
ee12b079 93:4d76de54a699 2373 if(srp_mode == 0 && compression_option == 0){ //normal callibrated mode
ee12b079 268:ded5306a1fd1 2374 #if scpz
chaithanyarss 290:3159ff1081a2 2375 gPC.printf("\n\rSCP - Normal calibrated mode");
ee12b079 268:ded5306a1fd1 2376 #endif
prasanthbj05 266:ae588e75cfa4 2377 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2378 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2379 if(at == 0 ){
ee12b079 268:ded5306a1fd1 2380 #if scpz
chaithanyarss 290:3159ff1081a2 2381 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2382 #endif
ee12b079 93:4d76de54a699 2383 for(int i = 0; i<8 ;i++){
prasanthbj05 266:ae588e75cfa4 2384 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2385 }
ee12b079 93:4d76de54a699 2386 for(int i = 0; i<12 ;i++){
prasanthbj05 266:ae588e75cfa4 2387 space = adjust(5,compress(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2388 }
ee12b079 93:4d76de54a699 2389 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 2390 space = adjust(6,compress(scp_bin[44+i],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2391 }
ee12b079 93:4d76de54a699 2392 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 2393 space = adjust(7,compress(scp_bin[48+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2394 }
prasanthbj05 266:ae588e75cfa4 2395 space = adjust(6,compress(scp_bin[17],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2396 space = adjust(6,compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2397 if(pzf == 0){
ee12b079 93:4d76de54a699 2398 for(int i = 0; i<2 ;i++){
ee12b079 93:4d76de54a699 2399 space = adjust(8,compress(scp_bin[i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2400 }
ee12b079 93:4d76de54a699 2401 for(int i = 0; i<15 ;i++){
prasanthbj05 266:ae588e75cfa4 2402 space = adjust(7,compress(scp_bin[i+2],5,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2403 }
ee12b079 93:4d76de54a699 2404 }
ee12b079 93:4d76de54a699 2405 if(ezf == 0){
ee12b079 93:4d76de54a699 2406 space = adjust(1,compress(scp_bin[18],7,2)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2407 space = adjust(8,compress(scp_bin[18],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2408 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 2409 space = adjust(8,compress(scp_bin[19+i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2410 }
ee12b079 93:4d76de54a699 2411 }
ee12b079 93:4d76de54a699 2412 }// below threshold ends here
ee12b079 93:4d76de54a699 2413 if(at == 1){
ee12b079 268:ded5306a1fd1 2414 #if scpz
chaithanyarss 290:3159ff1081a2 2415 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2416 #endif
ee12b079 93:4d76de54a699 2417 for(int i = 0; i<8 ;i++){
ee12b079 93:4d76de54a699 2418 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2419 }
ee12b079 93:4d76de54a699 2420 for(int i = 0; i<12 ;i++){
chaithanyarss 331:1943be3fd178 2421 space = adjust(5,compress2(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2422 }
ee12b079 93:4d76de54a699 2423 for(int i = 0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 2424 space = adjust(1,compress(scp_bin[44+i],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2425 space = adjust(8,compress(scp_bin[44+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2426 }
ee12b079 93:4d76de54a699 2427 for(int i=0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 2428 space = adjust(4,compress(scp_bin[48+i],9,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2429 space = adjust(8,compress(scp_bin[48+i],9,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2430 }
prasanthbj05 266:ae588e75cfa4 2431 space = adjust(1,compress(scp_bin[17],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2432 space = adjust(8,compress(scp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2433 space = adjust(1,compress(scp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2434 space = adjust(8,compress(scp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2435
ee12b079 93:4d76de54a699 2436 if(pzf == 0){
ee12b079 93:4d76de54a699 2437 for(int i = 0; i<17 ; i++){
prasanthbj05 266:ae588e75cfa4 2438 space = adjust(8, (compress(scp_bin[i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2439 }
ee12b079 93:4d76de54a699 2440 }
ee12b079 93:4d76de54a699 2441 if(ezf == 0){
ee12b079 93:4d76de54a699 2442 for(int i = 0; i<5 ; i++){
ee12b079 93:4d76de54a699 2443 space = adjust(8, (compress(scp_bin[18+i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2444 }
ee12b079 93:4d76de54a699 2445 }
ee12b079 93:4d76de54a699 2446 } //above thresholds ends
ee12b079 93:4d76de54a699 2447 } //srp_mode == 0 ends
ee12b079 93:4d76de54a699 2448 if(srp_mode == 1){
ee12b079 268:ded5306a1fd1 2449 #if scpz
chaithanyarss 290:3159ff1081a2 2450 gPC.printf("\n\rSCP - Scatter plot mode");
ee12b079 268:ded5306a1fd1 2451 #endif
ee12b079 93:4d76de54a699 2452 if(at == 0){
ee12b079 268:ded5306a1fd1 2453 #if scpz
chaithanyarss 290:3159ff1081a2 2454 gPC.printf("\n\rBelow Threshold");
ee12b079 268:ded5306a1fd1 2455 #endif
prasanthbj05 266:ae588e75cfa4 2456 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 2457 space = adjust(6, ((compress(scp_bin[i],3,3))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2458 }
ee12b079 93:4d76de54a699 2459 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 2460 space = adjust(7, (compress(scp_bin[48+i],4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2461 }
ee12b079 93:4d76de54a699 2462 }
ee12b079 93:4d76de54a699 2463 if(at == 1){
ee12b079 268:ded5306a1fd1 2464 #if scpz
chaithanyarss 290:3159ff1081a2 2465 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2466 #endif
prasanthbj05 266:ae588e75cfa4 2467 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 2468 space = adjust(7, (compress((scp_bin[i]/2),4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2469 }
ee12b079 93:4d76de54a699 2470 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 2471 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2472 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2473 }
ee12b079 93:4d76de54a699 2474 }
ee12b079 93:4d76de54a699 2475 }// scp mode 1 end
ee12b079 93:4d76de54a699 2476 if( srp_mode == 0 && compression_option == 1 ){ //scp data conservation mode
ee12b079 268:ded5306a1fd1 2477 #if scpz
chaithanyarss 290:3159ff1081a2 2478 gPC.printf("\n\rSCP - Calibrated data conservation mode");
ee12b079 268:ded5306a1fd1 2479 #endif
ee12b079 93:4d76de54a699 2480 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2481 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2482 if(at == 0){
ee12b079 268:ded5306a1fd1 2483 #if scpz
chaithanyarss 290:3159ff1081a2 2484 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2485 #endif
prasanthbj05 266:ae588e75cfa4 2486 space = adjust(6, (compress(scp_bin[44],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2487 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 2488 space = adjust(7, (compress(scp_bin[48+i],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2489 }
prasanthbj05 266:ae588e75cfa4 2490 space = adjust(6, (compress(scp_bin[17],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2491 space = adjust(6, (compress(scp_bin[23],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2492 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2493 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2494 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2495 }
prasanthbj05 266:ae588e75cfa4 2496 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2497 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2498 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2499 }
ee12b079 93:4d76de54a699 2500 }else if(at == 1){
ee12b079 268:ded5306a1fd1 2501 #if scpz
chaithanyarss 290:3159ff1081a2 2502 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2503 #endif
prasanthbj05 266:ae588e75cfa4 2504 space = adjust(1, (compress(scp_bin[44],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2505 space = adjust(8, (compress(scp_bin[44],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2506 for(int i=0; i<4; i++){
ee12b079 93:4d76de54a699 2507 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2508 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2509 }
prasanthbj05 266:ae588e75cfa4 2510 space = adjust(1, (compress(scp_bin[17],6,3)>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2511 space = adjust(8, (compress(scp_bin[17],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2512 space = adjust(1, (compress(scp_bin[23],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2513 space = adjust(8, (compress(scp_bin[23],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2514 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2515 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2516 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2517 }
ee12b079 93:4d76de54a699 2518 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2519 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2520 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 2521 }
ee12b079 93:4d76de54a699 2522 }
prasanthbj05 266:ae588e75cfa4 2523 }
prasanthbj05 266:ae588e75cfa4 2524 if(compression_option == 2 ) //scp extreme data conservation mode
prasanthbj05 266:ae588e75cfa4 2525 {
prasanthbj05 266:ae588e75cfa4 2526 if(srp_mode==0)
prasanthbj05 266:ae588e75cfa4 2527 {
ee12b079 268:ded5306a1fd1 2528 #if scpz
chaithanyarss 290:3159ff1081a2 2529 gPC.printf("\n\rSCP - calibrated extreme data conservation mode");
ee12b079 268:ded5306a1fd1 2530 #endif
prasanthbj05 266:ae588e75cfa4 2531 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2532 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2533 if(at==0){
ee12b079 268:ded5306a1fd1 2534 #if scpz
chaithanyarss 290:3159ff1081a2 2535 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2536 #endif
prasanthbj05 266:ae588e75cfa4 2537 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2538 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2539 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2540 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2541 }
prasanthbj05 266:ae588e75cfa4 2542 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2543 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2544 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2545 }
prasanthbj05 266:ae588e75cfa4 2546 }else if(at==1){
ee12b079 268:ded5306a1fd1 2547 #if scpz
chaithanyarss 290:3159ff1081a2 2548 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2549 #endif
prasanthbj05 266:ae588e75cfa4 2550 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2551 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2552 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 2553 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2554 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2555 }
prasanthbj05 266:ae588e75cfa4 2556 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 2557 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2558 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2559 }
prasanthbj05 266:ae588e75cfa4 2560 }
prasanthbj05 266:ae588e75cfa4 2561 }
prasanthbj05 266:ae588e75cfa4 2562 else if(srp_mode==1)
prasanthbj05 266:ae588e75cfa4 2563 {
ee12b079 268:ded5306a1fd1 2564 #if scpz
chaithanyarss 290:3159ff1081a2 2565 gPC.printf("\n\rSCP - Scatter plot, extreme data conservation mode");
ee12b079 268:ded5306a1fd1 2566 #endif
prasanthbj05 266:ae588e75cfa4 2567 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 2568 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2569 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2570 if(at==0){
ee12b079 268:ded5306a1fd1 2571 #if scpz
chaithanyarss 290:3159ff1081a2 2572 gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 2573 #endif
prasanthbj05 266:ae588e75cfa4 2574 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2575 // below 4 lines - filling the proton ane electron energy bins with zeros(junk value) since they're not available in srp
prasanthbj05 266:ae588e75cfa4 2576 space = adjust(4, (compress(0,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2577 space = adjust(8, (compress(0,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2578 space = adjust(4, (compress(0,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2579 space = adjust(8, (compress(0,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2580 }
prasanthbj05 266:ae588e75cfa4 2581 else if(at==1){
ee12b079 268:ded5306a1fd1 2582 #if scpz
chaithanyarss 290:3159ff1081a2 2583 gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 2584 #endif
prasanthbj05 266:ae588e75cfa4 2585 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2586 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2587 space = adjust(1, (compress(0,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2588 space = adjust(8, (compress(0,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2589 space = adjust(1, (compress(0,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2590 space = adjust(8, (compress(0,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 2591 }
prasanthbj05 266:ae588e75cfa4 2592 }
prasanthbj05 266:ae588e75cfa4 2593 }
chaithanyarss 331:1943be3fd178 2594 /*---------------------------------------------forming a science coarse packet ends here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 2595
ee12b079 93:4d76de54a699 2596 id = 0;
ee12b079 93:4d76de54a699 2597 if(srp_mode == 0 && compression_option == 0){
ee12b079 93:4d76de54a699 2598 if(at == 0){
chaithanyarss 331:1943be3fd178 2599 length = 228;
ee12b079 93:4d76de54a699 2600 if(pzf == 0)
ee12b079 93:4d76de54a699 2601 length += 121;
ee12b079 93:4d76de54a699 2602 if(ezf == 0)
ee12b079 93:4d76de54a699 2603 length +=41;
ee12b079 93:4d76de54a699 2604 }else if(at == 1){
chaithanyarss 331:1943be3fd178 2605 length = 266;
ee12b079 93:4d76de54a699 2606 if(pzf == 0)
ee12b079 93:4d76de54a699 2607 length += 136;
ee12b079 93:4d76de54a699 2608 if(ezf == 0)
ee12b079 93:4d76de54a699 2609 length += 40;
chaithanyarss 331:1943be3fd178 2610 #if test_science
chaithanyarss 331:1943be3fd178 2611 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2612 #endif
ee12b079 93:4d76de54a699 2613 }
prasanthbj05 266:ae588e75cfa4 2614 }else if(srp_mode == 0 && compression_option == 1){ //data conservation mode
ee12b079 93:4d76de54a699 2615 if(at == 0){
chaithanyarss 331:1943be3fd178 2616 length = 94;
ee12b079 93:4d76de54a699 2617 if(pzf == 0)
ee12b079 93:4d76de54a699 2618 length += 12;
ee12b079 93:4d76de54a699 2619 if(ezf == 0)
ee12b079 93:4d76de54a699 2620 length += 12;
ee12b079 93:4d76de54a699 2621 }else if(at == 1){
chaithanyarss 331:1943be3fd178 2622 length = 123;
prasanthbj05 266:ae588e75cfa4 2623 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 2624 length += 9;
prasanthbj05 266:ae588e75cfa4 2625 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 2626 length += 9;
chaithanyarss 331:1943be3fd178 2627 #if test_science
chaithanyarss 331:1943be3fd178 2628 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2629 #endif
prasanthbj05 266:ae588e75cfa4 2630 }
prasanthbj05 266:ae588e75cfa4 2631 }
prasanthbj05 266:ae588e75cfa4 2632 else if( srp_mode == 1){
prasanthbj05 266:ae588e75cfa4 2633 if(at == 0)
prasanthbj05 266:ae588e75cfa4 2634 length = 368;
chaithanyarss 331:1943be3fd178 2635 else if(at == 1){
prasanthbj05 266:ae588e75cfa4 2636 length = 432;
chaithanyarss 331:1943be3fd178 2637 #if test_science
chaithanyarss 331:1943be3fd178 2638 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2639 #endif
chaithanyarss 331:1943be3fd178 2640 }
prasanthbj05 266:ae588e75cfa4 2641 }
chaithanyarss 331:1943be3fd178 2642 else if(compression_option == 2 && srp_mode==0) //in extreme data conservation mode, length is same for both srp_modes
prasanthbj05 266:ae588e75cfa4 2643 {
prasanthbj05 266:ae588e75cfa4 2644 if(at == 0){
chaithanyarss 331:1943be3fd178 2645 length = 31;
prasanthbj05 266:ae588e75cfa4 2646 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 2647 length += 12;
prasanthbj05 266:ae588e75cfa4 2648 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 2649 length += 12;
prasanthbj05 266:ae588e75cfa4 2650 }else if(at == 1){
chaithanyarss 331:1943be3fd178 2651 length = 36;
ee12b079 93:4d76de54a699 2652 if(pzf == 0)
ee12b079 93:4d76de54a699 2653 length += 9;
ee12b079 93:4d76de54a699 2654 if(ezf == 0)
ee12b079 93:4d76de54a699 2655 length += 9;
chaithanyarss 331:1943be3fd178 2656 #if test_science
chaithanyarss 331:1943be3fd178 2657 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2658 #endif
chaithanyarss 331:1943be3fd178 2659 }
chaithanyarss 331:1943be3fd178 2660 }
chaithanyarss 331:1943be3fd178 2661 else if(compression_option == 2 && srp_mode==1){
chaithanyarss 331:1943be3fd178 2662 if(at==0)
chaithanyarss 331:1943be3fd178 2663 length = 56;
chaithanyarss 331:1943be3fd178 2664 else if(at==1){
chaithanyarss 331:1943be3fd178 2665 length = 56;
chaithanyarss 331:1943be3fd178 2666 #if test_science
chaithanyarss 331:1943be3fd178 2667 dma_scp_at_count++;
chaithanyarss 331:1943be3fd178 2668 #endif
ee12b079 93:4d76de54a699 2669 }
ee12b079 93:4d76de54a699 2670 }
ee12b079 93:4d76de54a699 2671 length = (length%8==0)?(length/8):(length/8)+1;
ee12b079 268:ded5306a1fd1 2672 #if scpz
chaithanyarss 331:1943be3fd178 2673 gPC.printf("\n\rLength of SCP packet in bytes = %d",length);
ee12b079 268:ded5306a1fd1 2674 #endif
chaithanyarss 331:1943be3fd178 2675 /*if(position_tm_frame[id]>129){
ee12b079 268:ded5306a1fd1 2676 #if scpz
chaithanyarss 290:3159ff1081a2 2677 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 290:3159ff1081a2 2678 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 2679 #endif
prasanthbj05 266:ae588e75cfa4 2680 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 2681 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 2682 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 2683 }
chaithanyarss 331:1943be3fd178 2684 }*/
chaithanyarss 331:1943be3fd178 2685 if(srp_mode==0 && compression_option!=2){
chaithanyarss 331:1943be3fd178 2686 if(position_tm_frame[id]>126){
chaithanyarss 331:1943be3fd178 2687 #if scpz
chaithanyarss 331:1943be3fd178 2688 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 331:1943be3fd178 2689 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
chaithanyarss 331:1943be3fd178 2690 #endif
chaithanyarss 331:1943be3fd178 2691 while(position_tm_frame[id]<132){
chaithanyarss 331:1943be3fd178 2692 frames[id][position_tm_frame[id]] = 0;
chaithanyarss 331:1943be3fd178 2693 position_tm_frame[id]++;
chaithanyarss 331:1943be3fd178 2694 }
chaithanyarss 331:1943be3fd178 2695 }
chaithanyarss 331:1943be3fd178 2696 }
chaithanyarss 331:1943be3fd178 2697 else if(((srp_mode==0)||(srp_mode==1)) && compression_option==2){
chaithanyarss 331:1943be3fd178 2698 if(position_tm_frame[id]>129){
chaithanyarss 331:1943be3fd178 2699 #if scpz
chaithanyarss 331:1943be3fd178 2700 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 331:1943be3fd178 2701 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
chaithanyarss 331:1943be3fd178 2702 #endif
chaithanyarss 331:1943be3fd178 2703 while(position_tm_frame[id]<132){
chaithanyarss 331:1943be3fd178 2704 frames[id][position_tm_frame[id]] = 0;
chaithanyarss 331:1943be3fd178 2705 position_tm_frame[id]++;
chaithanyarss 331:1943be3fd178 2706 }
chaithanyarss 331:1943be3fd178 2707 }
chaithanyarss 331:1943be3fd178 2708 }
chaithanyarss 331:1943be3fd178 2709 else if(srp_mode==1){
chaithanyarss 331:1943be3fd178 2710 if(position_tm_frame[id]>129){
chaithanyarss 331:1943be3fd178 2711 #if scpz
chaithanyarss 331:1943be3fd178 2712 gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
chaithanyarss 331:1943be3fd178 2713 gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
chaithanyarss 331:1943be3fd178 2714 #endif
chaithanyarss 331:1943be3fd178 2715 while(position_tm_frame[id]<132){
chaithanyarss 331:1943be3fd178 2716 frames[id][position_tm_frame[id]] = 0;
chaithanyarss 331:1943be3fd178 2717 position_tm_frame[id]++;
chaithanyarss 331:1943be3fd178 2718 }
chaithanyarss 331:1943be3fd178 2719 }
prasanthbj05 266:ae588e75cfa4 2720 }
prasanthbj05 266:ae588e75cfa4 2721 if(position_tm_frame[id]==position_tm_starting[id]){
prasanthbj05 266:ae588e75cfa4 2722 frames[id][4] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 2723 }
prasanthbj05 266:ae588e75cfa4 2724 for(int j= 0; j < length ;)
prasanthbj05 266:ae588e75cfa4 2725 {
prasanthbj05 266:ae588e75cfa4 2726 if(position_tm_frame[id]==frames[id][4]){
ee12b079 268:ded5306a1fd1 2727 #if scpz
chaithanyarss 290:3159ff1081a2 2728 gPC.printf("\n\rInserting Time into SCP_TM");
ee12b079 268:ded5306a1fd1 2729 #endif
prasanthbj05 266:ae588e75cfa4 2730 frames[id][5] = (uint8_t)((sci_time>>29)&0x3f);
prasanthbj05 266:ae588e75cfa4 2731 frames[id][6] = (uint8_t)((sci_time>>21)&0xff);
prasanthbj05 266:ae588e75cfa4 2732 frames[id][7] = (uint8_t)((sci_time>>13)&0x3f);
prasanthbj05 266:ae588e75cfa4 2733 }
prasanthbj05 266:ae588e75cfa4 2734 if(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 2735 frames[id][position_tm_frame[id]] = scp[j];
prasanthbj05 266:ae588e75cfa4 2736 j++;
ee12b079 93:4d76de54a699 2737 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 2738 }
prasanthbj05 266:ae588e75cfa4 2739 if(position_tm_frame[id] == 132) //space full in the frame bro
prasanthbj05 266:ae588e75cfa4 2740 {
ee12b079 268:ded5306a1fd1 2741 #if scpz
chaithanyarss 290:3159ff1081a2 2742 gPC.printf("\n\rSCP_TM frame full. Length of current SCP packet = %d",j);
ee12b079 268:ded5306a1fd1 2743 #endif
prasanthbj05 266:ae588e75cfa4 2744 pointer = frames[id];
prasanthbj05 266:ae588e75cfa4 2745 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 2746 space = adjust(4,1,pointer,space);
prasanthbj05 266:ae588e75cfa4 2747 FSC_science = FSC_CURRENT[1];
chaithanyarss 290:3159ff1081a2 2748 //gPC.printf("1 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 2749
chaithanyarss 290:3159ff1081a2 2750 #if debug_fsc
chaithanyarss 331:1943be3fd178 2751 frames[id][1] = (test_fsc[1]>>16)&0xff;
chaithanyarss 331:1943be3fd178 2752 frames[id][2] = (test_fsc[1]>>8)&0xff;
chaithanyarss 331:1943be3fd178 2753 frames[id][3] = (test_fsc[1])&0xff;
chaithanyarss 290:3159ff1081a2 2754 test_fsc[1]++;
chaithanyarss 290:3159ff1081a2 2755 #endif
chaithanyarss 290:3159ff1081a2 2756 #if !debug_fsc
chaithanyarss 290:3159ff1081a2 2757 frames[id][1] = (FSC_science>>16)&0xff;
chaithanyarss 290:3159ff1081a2 2758 frames[id][2] = (FSC_science>>8)&0xff;
chaithanyarss 290:3159ff1081a2 2759 frames[id][3] = (FSC_science)&0xff;
chaithanyarss 290:3159ff1081a2 2760 #endif
chaithanyarss 290:3159ff1081a2 2761
prasanthbj05 266:ae588e75cfa4 2762 temp_crc = crc16_gen(frames[id],132);
prasanthbj05 266:ae588e75cfa4 2763 frames[id][132] = temp_crc>>8;
prasanthbj05 266:ae588e75cfa4 2764 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 2765 #if scpz
chaithanyarss 331:1943be3fd178 2766 gPC.printf("\n\rFirst head pointer: 0x%02X",frames[id][4]);
chaithanyarss 331:1943be3fd178 2767 gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
chaithanyarss 331:1943be3fd178 2768 gPC.printf("\n\rPrinting SCP_TM\n\r{");
ee12b079 268:ded5306a1fd1 2769 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 2770 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 2771 }
ee12b079 268:ded5306a1fd1 2772 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 2773 #endif
chaithanyarss 331:1943be3fd178 2774 #if tabulation
chaithanyarss 331:1943be3fd178 2775 tabulate_TM(&frames[id][0]);
chaithanyarss 331:1943be3fd178 2776 #endif
prasanthbj05 266:ae588e75cfa4 2777 exor(frames[id]);
prasanthbj05 266:ae588e75cfa4 2778 convolution(frames[id]);
prasanthbj05 266:ae588e75cfa4 2779 interleave(TM_convoluted_data,TM_interleave_data);
prasanthbj05 266:ae588e75cfa4 2780 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
samp1234 346:204497974293 2781 gPC.printf("endSCI_SD13");
samp1234 347:2517c9f6bb4f 2782 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,1); //sd_write returns ack, for now not included
samp1234 346:204497974293 2783 gPC.printf("endSCI_SD14");
ee12b079 268:ded5306a1fd1 2784 if(sd_stat)
chaithanyarss 290:3159ff1081a2 2785 {
chaithanyarss 290:3159ff1081a2 2786 gPC.puts("sd write fail");
chaithanyarss 290:3159ff1081a2 2787 }
prasanthbj05 266:ae588e75cfa4 2788 position_tm_frame[id] = position_tm_starting[id];
chaithanyarss 331:1943be3fd178 2789 if(j!=0)
chaithanyarss 331:1943be3fd178 2790 frames[id][4] = (length - j)+position_tm_starting[id];
chaithanyarss 331:1943be3fd178 2791 else if(j==0)
chaithanyarss 331:1943be3fd178 2792 frames[id][4] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 2793 }
ee12b079 93:4d76de54a699 2794 }
ee12b079 268:ded5306a1fd1 2795 #if scpz_last
chaithanyarss 290:3159ff1081a2 2796 //gPC.printf("\n\rPrinting the last SCP_TM frame");
ee12b079 268:ded5306a1fd1 2797 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 2798 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 2799 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 2800 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 2801 }
chaithanyarss 290:3159ff1081a2 2802 if(position_tm_frame[id] == 132) //space full in the frame bro
chaithanyarss 290:3159ff1081a2 2803 {
chaithanyarss 290:3159ff1081a2 2804 //gPC.printf("\n\rSCP_TM frame full. Length of current SCP packet = %d",j);
ee12b079 268:ded5306a1fd1 2805 pointer = frames[id];
chaithanyarss 290:3159ff1081a2 2806 space = adjust(1,0,pointer,8);
chaithanyarss 290:3159ff1081a2 2807 space = adjust(4,1,pointer,space);
chaithanyarss 290:3159ff1081a2 2808 FSC_science = FSC_CURRENT[1];
chaithanyarss 290:3159ff1081a2 2809 //gPC.printf("1 = 0x%X",FSC_science);
chaithanyarss 290:3159ff1081a2 2810
chaithanyarss 290:3159ff1081a2 2811 #if debug_fsc
chaithanyarss 331:1943be3fd178 2812 frames[id][1] = (test_fsc[1]>>16)&0xff;
chaithanyarss 331:1943be3fd178 2813 frames[id][2] = (test_fsc[1]>>8)&0xff;
chaithanyarss 331:1943be3fd178 2814 frames[id][3] = (test_fsc[1])&0xff;
chaithanyarss 290:3159ff1081a2 2815 test_fsc[1]++;
chaithanyarss 290:3159ff1081a2 2816 #endif
chaithanyarss 290:3159ff1081a2 2817 #if !debug_fsc
chaithanyarss 290:3159ff1081a2 2818 frames[id][1] = (FSC_science>>16)&0xff;
chaithanyarss 290:3159ff1081a2 2819 frames[id][2] = (FSC_science>>8)&0xff;
chaithanyarss 290:3159ff1081a2 2820 frames[id][3] = (FSC_science)&0xff;
chaithanyarss 290:3159ff1081a2 2821 #endif
chaithanyarss 290:3159ff1081a2 2822
ee12b079 268:ded5306a1fd1 2823 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 2824 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 2825 frames[id][133] = temp_crc & 0xff;
chaithanyarss 290:3159ff1081a2 2826 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
chaithanyarss 290:3159ff1081a2 2827 //gPC.printf("\n\rPrinting SCP_TM\n\r{");
chaithanyarss 290:3159ff1081a2 2828 gPC.printf("\n\r{");
ee12b079 268:ded5306a1fd1 2829 for(uint8_t z=0;z<134;z++){
chaithanyarss 290:3159ff1081a2 2830 gPC.printf("%02X",frames[id][z]);
ee12b079 268:ded5306a1fd1 2831 }
ee12b079 268:ded5306a1fd1 2832 gPC.printf("}\n\r");
chaithanyarss 290:3159ff1081a2 2833 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 2834 }
chaithanyarss 290:3159ff1081a2 2835 #endif
samp1234 353:e1803e801e20 2836 gPC.printf("fsc = %u, %u,%u\n\r", FSC_CURRENT[1],FSC_CURRENT[2],FSC_CURRENT[3]);
chaithanyarss 331:1943be3fd178 2837 #if test_science
chaithanyarss 331:1943be3fd178 2838 dma_packets_info();
chaithanyarss 331:1943be3fd178 2839 #endif
ee12b079 342:77b0d59897f7 2840 gPC.printf("End of SRP function\n\r");
chaithanyarss 331:1943be3fd178 2841 //SCI_LED1 = !SCI_LED1;
samp1234 346:204497974293 2842 // SCI_LED1 = 0;
chaithanyarss 331:1943be3fd178 2843 }
chaithanyarss 331:1943be3fd178 2844 /*void test_sci_main(){
chaithanyarss 331:1943be3fd178 2845 gPAYLOAD_BUFFER[2] &= (~0x01); //calibrated mode data generation
chaithanyarss 331:1943be3fd178 2846 //gPAYLOAD_BUFFER[2] |= (0x01); //scattered plot mode data generation
chaithanyarss 331:1943be3fd178 2847 srp(gPAYLOAD_BUFFER);
chaithanyarss 331:1943be3fd178 2848 }*/
chaithanyarss 331:1943be3fd178 2849 /*void test_tabulate(){
chaithanyarss 331:1943be3fd178 2850 uint8_t tmid=2,temp_index,temp=13,space;
chaithanyarss 331:1943be3fd178 2851 pointer = &test_tm[0][0];
chaithanyarss 331:1943be3fd178 2852 space = adjust(1, 0,pointer,8); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2853 space = adjust(4, 2,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2854 space = adjust(3, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2855
chaithanyarss 331:1943be3fd178 2856 space = adjust(8, 0,pointer,space); pointer += space>>4; //fsc
chaithanyarss 331:1943be3fd178 2857 space = adjust(8, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2858 space = adjust(8, 1,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2859
chaithanyarss 331:1943be3fd178 2860 space = adjust(8, 5,pointer,space); pointer += space>>4; //first head pointer
chaithanyarss 331:1943be3fd178 2861
chaithanyarss 331:1943be3fd178 2862 space = adjust(2, 2,pointer,space); pointer += space>>4; //time
chaithanyarss 331:1943be3fd178 2863 space = adjust(4, 12,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2864 space = adjust(5, 8,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2865 space = adjust(5, 10,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2866 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2867 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2868 space = adjust(7, 69,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2869
chaithanyarss 331:1943be3fd178 2870 space = adjust(4, 15,pointer,space); pointer += space>>4; //attitude
chaithanyarss 331:1943be3fd178 2871
chaithanyarss 331:1943be3fd178 2872 space = adjust(6, 60,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2873 space = adjust(1, 1,pointer,space); pointer += space>>4; //science data mode
chaithanyarss 331:1943be3fd178 2874
chaithanyarss 331:1943be3fd178 2875 for(uint8_t i = 0 ; i < 48 ; i++){
chaithanyarss 331:1943be3fd178 2876 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2877 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2878 }
chaithanyarss 331:1943be3fd178 2879 for(uint8_t i = 0 ; i < 4 ; i++){
chaithanyarss 331:1943be3fd178 2880 space = adjust(1, ((compress(1032192,6,3))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2881 space = adjust(8, ((compress(1032192,6,3))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2882 }
chaithanyarss 331:1943be3fd178 2883 space = adjust(6, 0,pointer,space); pointer += space>>4; //spare
spacelab 309:6ed5535ac465 2884
chaithanyarss 331:1943be3fd178 2885 //next packet
chaithanyarss 331:1943be3fd178 2886 space = adjust(2, 2,pointer,space); pointer += space>>4; //time
chaithanyarss 331:1943be3fd178 2887 space = adjust(4, 12,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2888 space = adjust(5, 8,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2889 space = adjust(5, 10,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2890 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2891 space = adjust(6, 25,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2892 space = adjust(7, 69,pointer,space); pointer += space>>4;
spacelab 309:6ed5535ac465 2893
chaithanyarss 331:1943be3fd178 2894 space = adjust(4, 15,pointer,space); pointer += space>>4; //attitude
chaithanyarss 331:1943be3fd178 2895
chaithanyarss 331:1943be3fd178 2896 space = adjust(6, 61,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2897 space = adjust(1, 0,pointer,space); pointer += space>>4; //science data mode
chaithanyarss 331:1943be3fd178 2898 space = adjust(1, 0,pointer,space); pointer += space>>4; //pzf
chaithanyarss 331:1943be3fd178 2899 space = adjust(1, 0,pointer,space); pointer += space>>4; //ezf
chaithanyarss 331:1943be3fd178 2900
chaithanyarss 331:1943be3fd178 2901 for(uint8_t i = 0 ; i < 8 ; i++){
chaithanyarss 331:1943be3fd178 2902 space = adjust(1, ((compress(8128,7,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2903 space = adjust(8, ((compress(8128,7,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2904 }
chaithanyarss 331:1943be3fd178 2905 for(uint8_t i = 0 ; i < 12 ; i++){
chaithanyarss 331:1943be3fd178 2906 space = adjust(6, ((compress(114688,3,3))) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2907 }
chaithanyarss 331:1943be3fd178 2908 for(uint8_t i = 0 ; i < 4 ; i++){
chaithanyarss 331:1943be3fd178 2909 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2910 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2911 }
chaithanyarss 331:1943be3fd178 2912 for(uint8_t i = 0 ; i < 4 ; i++){
chaithanyarss 331:1943be3fd178 2913 space = adjust(1, ((compress(1032192,6,3))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2914 space = adjust(8, ((compress(1032192,6,3))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2915 }
chaithanyarss 331:1943be3fd178 2916 for(uint8_t i = 0 ; i < 18 ; i++){
chaithanyarss 331:1943be3fd178 2917 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2918 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2919 }
chaithanyarss 331:1943be3fd178 2920 tabulate_TM(&test_tm[0][0]);
chaithanyarss 331:1943be3fd178 2921
chaithanyarss 331:1943be3fd178 2922 space=8; pointer = &test_tm[1][0];
chaithanyarss 331:1943be3fd178 2923 space = adjust(1, 0,pointer,8); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2924 space = adjust(4, 2,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2925 space = adjust(3, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2926
chaithanyarss 331:1943be3fd178 2927 space = adjust(8, 0,pointer,space); pointer += space>>4; //fsc
chaithanyarss 331:1943be3fd178 2928 space = adjust(8, 0,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2929 space = adjust(8, 2,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2930
chaithanyarss 331:1943be3fd178 2931 space = adjust(8, 13,pointer,space); pointer += space>>4; //first head pointer
chaithanyarss 331:1943be3fd178 2932
chaithanyarss 331:1943be3fd178 2933 for(uint8_t i = 0 ; i < 6 ; i++){
chaithanyarss 331:1943be3fd178 2934 space = adjust(2, ((compress(16320,8,2))>>8) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2935 space = adjust(8, ((compress(16320,8,2))&0xff) ,pointer,space); pointer += space>>4;
chaithanyarss 331:1943be3fd178 2936 }
chaithanyarss 331:1943be3fd178 2937 space = adjust(4, 0,pointer,space); pointer += space>>4; //spare
chaithanyarss 331:1943be3fd178 2938 tabulate_TM(&test_tm[1][0]);
chaithanyarss 331:1943be3fd178 2939 }*/