working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
samp1234
Date:
Sun Apr 03 15:35:53 2022 +0000
Revision:
357:f3d48d62e00e
Parent:
356:197c93dc2012
First commit test

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