CDMS code for testing sbc

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Committer:
ee12b079
Date:
Thu Jul 21 13:18:02 2016 +0000
Revision:
269:72529b247333
Parent:
268:ded5306a1fd1
Child:
275:a2f1d544ab8b
Testing OBSRS TM and adf and srp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prasanthbj05 266:ae588e75cfa4 1 /*-----------------------------------------to_do_compression.h--------------------------------------------------
prasanthbj05 266:ae588e75cfa4 2
prasanthbj05 266:ae588e75cfa4 3 -> SD_Write error to be checked
prasanthbj05 266:ae588e75cfa4 4 -> fsc_counter is 32 bit but in the code 24 bit. Talk to chaitu
prasanthbj05 266:ae588e75cfa4 5 ---------------------------------------------------------------------------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 6
prasanthbj05 266:ae588e75cfa4 7 //updated compression algorithm
prasanthbj05 266:ae588e75cfa4 8 /*#include <iostream>
prasanthbj05 266:ae588e75cfa4 9 #include "stdio.h"
prasanthbj05 266:ae588e75cfa4 10 #include "crc.h"
prasanthbj05 266:ae588e75cfa4 11 #include "interleave.h"
prasanthbj05 266:ae588e75cfa4 12 #include "Convolution.h"
prasanthbj05 266:ae588e75cfa4 13 #include "bitset"*/
prasanthbj05 266:ae588e75cfa4 14 //using namespace std;
prasanthbj05 266:ae588e75cfa4 15
prasanthbj05 266:ae588e75cfa4 16 //reading functions 2byte, 4byte
ee12b079 268:ded5306a1fd1 17 #define srpz 1
ee12b079 268:ded5306a1fd1 18 #define scpz 1
ee12b079 268:ded5306a1fd1 19 #define scp_last 1
ee12b079 268:ded5306a1fd1 20 #define srp_last 1
prasanthbj05 266:ae588e75cfa4 21
prasanthbj05 266:ae588e75cfa4 22 uint16_t read_2byte(uint8_t* ptr)
prasanthbj05 266:ae588e75cfa4 23 {
prasanthbj05 266:ae588e75cfa4 24 uint16_t output = (uint8_t ) *(ptr+1);
prasanthbj05 266:ae588e75cfa4 25 output += ( (uint8_t )(*ptr) ) << 8;
ee12b079 93:4d76de54a699 26 return output;
ee12b079 93:4d76de54a699 27 }
ee12b079 93:4d76de54a699 28
prasanthbj05 266:ae588e75cfa4 29 uint32_t read_4byte(uint8_t* ptr)
prasanthbj05 266:ae588e75cfa4 30 {
prasanthbj05 266:ae588e75cfa4 31 uint32_t output = (uint32_t) (*(ptr+3));
prasanthbj05 266:ae588e75cfa4 32 output += (uint32_t)(*(ptr+2)<<8);
prasanthbj05 266:ae588e75cfa4 33 output += (uint32_t)(*(ptr+1)<<16);
prasanthbj05 266:ae588e75cfa4 34 output += (uint32_t)(*(ptr)<<24);
prasanthbj05 266:ae588e75cfa4 35 return output;
prasanthbj05 266:ae588e75cfa4 36 }
prasanthbj05 266:ae588e75cfa4 37
prasanthbj05 266:ae588e75cfa4 38 uint8_t adjust(uint8_t size, uint8_t data, uint8_t* ptr , uint8_t space)
prasanthbj05 266:ae588e75cfa4 39 {
ee12b079 93:4d76de54a699 40 space = space&0x0f;
ee12b079 171:31bdf83591a1 41 if(space == 8) *ptr = 0;
ee12b079 93:4d76de54a699 42 data = data&((1<<size)-1);
ee12b079 93:4d76de54a699 43 if(space >= size){
ee12b079 93:4d76de54a699 44 *ptr += data<<(space-size);
ee12b079 93:4d76de54a699 45 if(space - size == 0){
ee12b079 93:4d76de54a699 46 return 0x18;
ee12b079 93:4d76de54a699 47 }else{
ee12b079 93:4d76de54a699 48 return space-size;
shreeshas95 1:a0055b3280c8 49 }
ee12b079 93:4d76de54a699 50 }else{
ee12b079 93:4d76de54a699 51 ptr[0] += data>>(size-space);
ee12b079 93:4d76de54a699 52 ptr[1] = (data<<(8-(size-space)))&0xff ;
ee12b079 93:4d76de54a699 53 return 0x10 + 8-(size - space);
ee12b079 93:4d76de54a699 54 }
ee12b079 93:4d76de54a699 55 }
prasanthbj05 266:ae588e75cfa4 56 int compress (int data, int x, int y) //to be compressed with scheme (msb x)*4^y ;
prasanthbj05 266:ae588e75cfa4 57 {
prasanthbj05 266:ae588e75cfa4 58 for(int i = 0 ; i < (1<<y) ; i++)
prasanthbj05 266:ae588e75cfa4 59 {
prasanthbj05 266:ae588e75cfa4 60 if(data <= ( (1<<x)-1) * (1<<(2*i)) )
prasanthbj05 266:ae588e75cfa4 61 {
ee12b079 93:4d76de54a699 62 return ( ((data>>i*2)<<y) + i);
shreeshas95 1:a0055b3280c8 63 }
ee12b079 93:4d76de54a699 64 }
prasanthbj05 266:ae588e75cfa4 65 if ( data > (( (1<<x)-1) * (1<<(2*((1<<y)-1)))) )
prasanthbj05 266:ae588e75cfa4 66 {
prasanthbj05 266:ae588e75cfa4 67 //cout <<"compression exception"<<endl;
prasanthbj05 266:ae588e75cfa4 68 return (((1<<x)-1) * (1<<(2*((1<<y)-1))));
ee12b079 93:4d76de54a699 69 }
ee12b079 93:4d76de54a699 70 }
ee12b079 93:4d76de54a699 71
prasanthbj05 266:ae588e75cfa4 72 //--------------------------------------------------------beacon
prasanthbj05 266:ae588e75cfa4 73 uint8_t beacon_array[134];
prasanthbj05 266:ae588e75cfa4 74 uint8_t beacon_cntr = 1;
prasanthbj05 266:ae588e75cfa4 75 uint8_t *beacon_ptr;
prasanthbj05 266:ae588e75cfa4 76 //--------------------------------------------------------beacon
ee12b079 93:4d76de54a699 77
prasanthbj05 266:ae588e75cfa4 78 //variable declarations
prasanthbj05 266:ae588e75cfa4 79 uint8_t srp_mode , at , pzf , ezf ,sfp[71] ,scp[56],beacon_at; //tells which mode is calibrated or plot 0 for calibrated and 1 for scatterered, below threshold , proton zero flux, electron zero flux.
prasanthbj05 266:ae588e75cfa4 80 uint32_t sfp_bin[52] , scp_bin[52]; //storing the bin values.
prasanthbj05 266:ae588e75cfa4 81 uint32_t sfp_threshold_m0[52] = {124,124,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,4032,252,252,252,252,252,4032,8128,8128,8128,8128,8128,8128,8128,8128,960,960,960,960,960,960,960,960,960,960,960,960,4032,4032,4032,4032,8128,8128,8128,8128};
prasanthbj05 266:ae588e75cfa4 82 uint32_t scp_threshold_m0[52] = {4032,4032,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,114688,8128,4032,4032,4032,4032,114688,245760,245760,245760,245760,245760,245760,245760,245760,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,49152,114688,114688,114688,114688,245760,245760,245760,245760};
prasanthbj05 266:ae588e75cfa4 83 uint32_t scp_threshold_m0_1[9] = {114688,245760,245760,245760,245760,114688,114688,65472,65472} ; //for callibrated mode with data conservation
prasanthbj05 266:ae588e75cfa4 84 uint32_t scp_sfp_threshold_m0_2[3] = {245760,65472,65472};
prasanthbj05 266:ae588e75cfa4 85 uint32_t sfp_threshold_m1[52] = {1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,1984,8128,8128,8128,8128};
prasanthbj05 266:ae588e75cfa4 86 uint32_t scp_threshold_m1[52] = {114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,114688,245760,245760,245760,245760};
ee12b079 171:31bdf83591a1 87 uint8_t frames[3][134] = {0};
ee12b079 171:31bdf83591a1 88 uint8_t position_tm_frame[3] = {8,11,5} , position_tm_starting[3] = {8,11,5}; //{sc,sf-bt,sf-at}
ee12b079 171:31bdf83591a1 89 uint8_t id; //sf = 0,sc-at = 1,sc-bt = 2;
ee12b079 171:31bdf83591a1 90 uint8_t TM_interleave_data[512] , TM_convoluted_data[270] = {0};
prasanthbj05 266:ae588e75cfa4 91 uint64_t proton_scp_sum,electron_scp_sum,FSC_science;
prasanthbj05 266:ae588e75cfa4 92 uint16_t temp_crc;
prasanthbj05 266:ae588e75cfa4 93 uint32_t debug_cntr, size,space,length;
ee12b079 171:31bdf83591a1 94 uint8_t *ptr ,* pointer;
prasanthbj05 266:ae588e75cfa4 95 uint64_t sci_time = 0, time_prev_scp = 0;
prasanthbj05 266:ae588e75cfa4 96 uint32_t attitude = 0;
prasanthbj05 266:ae588e75cfa4 97 uint32_t beacon_threshold[9] = {114688,245760,245760,245760,245760,114688,114688,65472,65472};
ee12b079 93:4d76de54a699 98
prasanthbj05 266:ae588e75cfa4 99 Convolution ConvObj;
prasanthbj05 266:ae588e75cfa4 100 void convolution (uint8_t * ptr){
prasanthbj05 266:ae588e75cfa4 101 ConvObj.convolutionEncode(ptr, TM_convoluted_data);
prasanthbj05 266:ae588e75cfa4 102 ConvObj.convolutionEncode(ptr + 67, TM_convoluted_data + 135);
prasanthbj05 266:ae588e75cfa4 103 }
ee12b079 93:4d76de54a699 104
ee12b079 93:4d76de54a699 105 //give the pointer of 6 second data to this function
prasanthbj05 266:ae588e75cfa4 106 void srp(uint8_t * head)
prasanthbj05 266:ae588e75cfa4 107 {
ee12b079 268:ded5306a1fd1 108 uint8_t sd_stat = 0;
ee12b079 268:ded5306a1fd1 109 gPC.printf("\n\rEntered srp function");
prasanthbj05 266:ae588e75cfa4 110 debug_cntr = 0;
prasanthbj05 266:ae588e75cfa4 111 sci_time = FCTN_CDMS_RD_RTC();
prasanthbj05 266:ae588e75cfa4 112 if(time_prev_scp==0){
prasanthbj05 266:ae588e75cfa4 113 time_prev_scp = sci_time;
prasanthbj05 266:ae588e75cfa4 114 }
prasanthbj05 266:ae588e75cfa4 115 FCTN_SD_MNGR(); ///changed recently
ee12b079 268:ded5306a1fd1 116 for (int i = 0; i < 52 ; i++)
prasanthbj05 266:ae588e75cfa4 117 {
ee12b079 93:4d76de54a699 118 scp_bin[i] = 0;
shreeshas95 1:a0055b3280c8 119 }
prasanthbj05 266:ae588e75cfa4 120 ptr = head + 3; //ptr points to proton energy bin of srp
ee12b079 93:4d76de54a699 121 srp_mode = head[2]&0x1;
prasanthbj05 266:ae588e75cfa4 122 for(uint8_t counter = 0 ; counter < 60 ; counter++)
prasanthbj05 266:ae588e75cfa4 123 {
ee12b079 268:ded5306a1fd1 124 #if srpz
ee12b079 268:ded5306a1fd1 125 //gPC.printf("\n\n\rSRP count:%d",counter+1);
ee12b079 268:ded5306a1fd1 126 #endif
prasanthbj05 266:ae588e75cfa4 127 /*-------------------- ------------populating sfp_bin and scp_bin[] starts here(also tag AT or BT)-----------------------*/
prasanthbj05 266:ae588e75cfa4 128 at = 0; pzf = 1; ezf = 1;
prasanthbj05 266:ae588e75cfa4 129 if(srp_mode == 0) //calibrated mode
prasanthbj05 266:ae588e75cfa4 130 {
ee12b079 268:ded5306a1fd1 131 #if srpz
ee12b079 268:ded5306a1fd1 132 //gPC.printf("\n\rSRP - Calibrated Mode");
ee12b079 268:ded5306a1fd1 133 #endif
prasanthbj05 266:ae588e75cfa4 134 for(int i=0; i<48 ; i++) //first 48 bins or SRP are of 16 bits size
prasanthbj05 266:ae588e75cfa4 135 {
ee12b079 93:4d76de54a699 136 sfp_bin[i] = read_2byte(ptr + i*2);
ee12b079 93:4d76de54a699 137 scp_bin[i] += sfp_bin[i];
prasanthbj05 266:ae588e75cfa4 138 if(sfp_bin[i]>sfp_threshold_m0[i])
prasanthbj05 266:ae588e75cfa4 139 {
ee12b079 268:ded5306a1fd1 140 //gPC.printf("\n\rSFP above threshold index:%d",i);
ee12b079 93:4d76de54a699 141 at = 1;
ee12b079 93:4d76de54a699 142 }
prasanthbj05 266:ae588e75cfa4 143 if(i<17)
prasanthbj05 266:ae588e75cfa4 144 {
ee12b079 93:4d76de54a699 145 if(sfp_bin[i] > 0)
ee12b079 93:4d76de54a699 146 pzf = 0;
ee12b079 93:4d76de54a699 147 }
prasanthbj05 266:ae588e75cfa4 148 else if (i>17 && i < 23)
prasanthbj05 266:ae588e75cfa4 149 {
ee12b079 93:4d76de54a699 150 if(sfp_bin[i]>0)
ee12b079 93:4d76de54a699 151 ezf = 0;
ee12b079 93:4d76de54a699 152 }
ee12b079 93:4d76de54a699 153 }
prasanthbj05 266:ae588e75cfa4 154 for(int i=0; i<4; i++) //last 4 bins(excluding the spare bin) are 32 bit each
prasanthbj05 266:ae588e75cfa4 155 {
ee12b079 93:4d76de54a699 156 sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i );
ee12b079 93:4d76de54a699 157 scp_bin[i+48] += sfp_bin[i+48];
ee12b079 268:ded5306a1fd1 158 if(sfp_bin[i+48]>sfp_threshold_m0[i+48]){
ee12b079 268:ded5306a1fd1 159 //gPC.printf("\n\rSP above threshold index: %d",i+48);
ee12b079 93:4d76de54a699 160 at = 1;
ee12b079 268:ded5306a1fd1 161 }
ee12b079 93:4d76de54a699 162 }
ee12b079 93:4d76de54a699 163 }
prasanthbj05 266:ae588e75cfa4 164 else if(srp_mode == 1) //scattered mode
prasanthbj05 266:ae588e75cfa4 165 {
ee12b079 268:ded5306a1fd1 166 #if srpz
ee12b079 268:ded5306a1fd1 167 //gPC.printf("\n\rSRP - Scatter Plot Mode");
ee12b079 268:ded5306a1fd1 168 #endif
prasanthbj05 266:ae588e75cfa4 169 for(int i = 0; i <48; i++) //first 48 bins of SRP are of 16 bit size
prasanthbj05 266:ae588e75cfa4 170 {
prasanthbj05 266:ae588e75cfa4 171 sfp_bin[i] = read_2byte(ptr+2*i);
ee12b079 93:4d76de54a699 172 scp_bin[i] += sfp_bin[i];
ee12b079 268:ded5306a1fd1 173 //gPC.printf("\n\rsfp_bin[%d]= %u\t\tscp_bin[%d]= %u",i,sfp_bin[i],i,scp_bin[i]);
ee12b079 268:ded5306a1fd1 174 if(sfp_bin[i] > sfp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 175 //gPC.printf("\n\rSP above threshold index: %d",i);
ee12b079 93:4d76de54a699 176 at = 1;
ee12b079 268:ded5306a1fd1 177 }
ee12b079 93:4d76de54a699 178 }
prasanthbj05 266:ae588e75cfa4 179 for(int i = 0; i < 4 ; i++) //next 4 bins are of 32 bit size
prasanthbj05 266:ae588e75cfa4 180 {
prasanthbj05 266:ae588e75cfa4 181 ///sfp_bin[i+48] = read_4byte( (ptr+64) + 4*i );
prasanthbj05 266:ae588e75cfa4 182 sfp_bin[i+48] = read_4byte( (ptr+96) + 4*i );
prasanthbj05 266:ae588e75cfa4 183 scp_bin[i+48] += sfp_bin[i+48];
ee12b079 268:ded5306a1fd1 184 if(sfp_bin[i+48] > sfp_threshold_m1[i+48]){
ee12b079 268:ded5306a1fd1 185 //gPC.printf("\n\rSP above threshold index: %d",i+48);
ee12b079 93:4d76de54a699 186 at = 1;
ee12b079 268:ded5306a1fd1 187 }
ee12b079 93:4d76de54a699 188 }
shreeshas95 1:a0055b3280c8 189 }
prasanthbj05 266:ae588e75cfa4 190 /*---------------------------populating sfp_bin[] and scp_bin[] from srp ends here(also tagging AT or BT)------------------*/
prasanthbj05 266:ae588e75cfa4 191
ee12b079 268:ded5306a1fd1 192 //ptr = ptr + 112; //moving the pointer to next srp packet in the DMA buffer
prasanthbj05 266:ae588e75cfa4 193
prasanthbj05 266:ae588e75cfa4 194 /*------------------------------------------forming a science fine packet starts here----------------------------------------
prasanthbj05 266:ae588e75cfa4 195 First we fill packet header, then fill packet data and finally assign its length
prasanthbj05 266:ae588e75cfa4 196 ----------------------------------------------------------------------------------------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 197 for(int i = 0; i<71; i++)
ee12b079 93:4d76de54a699 198 sfp[i] = 0;
prasanthbj05 266:ae588e75cfa4 199 if(srp_mode == 0) //calibrated mode
prasanthbj05 266:ae588e75cfa4 200 {
prasanthbj05 266:ae588e75cfa4 201 if(at == 0)
prasanthbj05 266:ae588e75cfa4 202 {
ee12b079 268:ded5306a1fd1 203 #if srpz
ee12b079 268:ded5306a1fd1 204 //gPC.printf("\n\rSFP Below Threshold");
ee12b079 268:ded5306a1fd1 205 #endif
ee12b079 93:4d76de54a699 206 pointer = sfp; debug_cntr = 0;
prasanthbj05 266:ae588e75cfa4 207 space = adjust(4, attitude,pointer,8); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 208 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 209 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 210 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 211 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 212 for(uint8_t i = 0 ; i < 8 ; i++){
prasanthbj05 266:ae588e75cfa4 213 space = adjust(1, ((compress(sfp_bin[24+i],7,2))&0x100)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 214 space = adjust(8, ((compress(sfp_bin[24+i],7,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 215 }
prasanthbj05 266:ae588e75cfa4 216 for(uint8_t i = 0 ; i <12 ; i++){
prasanthbj05 266:ae588e75cfa4 217 space = adjust(6, (compress(sfp_bin[32+i],4,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 218 }
prasanthbj05 266:ae588e75cfa4 219 for(uint8_t i = 0; i < 4; i++){
prasanthbj05 266:ae588e75cfa4 220 space = adjust(8, (compress(sfp_bin[44+i],6,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 221 }
prasanthbj05 266:ae588e75cfa4 222 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 223 space = adjust(1, (compress(sfp_bin[48+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 224 space = adjust(8, compress(sfp_bin[48+i],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 225 }
prasanthbj05 266:ae588e75cfa4 226 space = adjust(8, ((compress(sfp_bin[17],6,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 227 space = adjust(8, ((compress(sfp_bin[23],6,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 228 if(pzf == 0){
prasanthbj05 266:ae588e75cfa4 229 for(uint8_t i = 0; i<2 ; i++){
prasanthbj05 266:ae588e75cfa4 230 space = adjust(6, ((compress(sfp_bin[i],5,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 231 }
prasanthbj05 266:ae588e75cfa4 232 for(uint8_t i = 0; i<15 ; i++){
prasanthbj05 266:ae588e75cfa4 233 space = adjust(5, ((compress(sfp_bin[i+2],4,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 234 }
ee12b079 93:4d76de54a699 235 }
ee12b079 93:4d76de54a699 236 if(ezf == 0){
prasanthbj05 266:ae588e75cfa4 237 for(uint8_t i = 0; i <5 ;i++){
prasanthbj05 266:ae588e75cfa4 238 space = adjust(7, ((compress(sfp_bin[18+i],6,1))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 239 }
ee12b079 93:4d76de54a699 240 }
prasanthbj05 266:ae588e75cfa4 241 } //below thershold ends here.
ee12b079 93:4d76de54a699 242 if(at == 1){
ee12b079 268:ded5306a1fd1 243 #if srpz
ee12b079 268:ded5306a1fd1 244 //gPC.printf("\n\rSFP Above Threshold");
ee12b079 268:ded5306a1fd1 245 #endif
ee12b079 93:4d76de54a699 246 pointer = sfp + 6; debug_cntr = 6;space = 8;
ee12b079 93:4d76de54a699 247 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 248 sfp[4] = ((sci_time&0x07)<<5) + ((attitude&0x0f)<<1) + (counter>>5);
prasanthbj05 266:ae588e75cfa4 249 sfp[5] = ((counter&0x1f)<<3) + (srp_mode<<2);
ee12b079 93:4d76de54a699 250 sfp[5] += (pzf<<1) + ezf ;
prasanthbj05 266:ae588e75cfa4 251 for(uint8_t i = 0 ; i < 8 ; i++){
prasanthbj05 266:ae588e75cfa4 252 space = adjust(1, (compress(sfp_bin[24+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 253 space = adjust(8, ((compress(sfp_bin[24+i],7,2))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 254 }
prasanthbj05 266:ae588e75cfa4 255 for(uint8_t i = 0 ; i <12 ; i++){
ee12b079 93:4d76de54a699 256 space = adjust(6, ((compress(sfp_bin[32+i],3,3))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 257 }
prasanthbj05 266:ae588e75cfa4 258 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 259 space = adjust(2, (compress(sfp_bin[44+i],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 260 space = adjust(8, compress(sfp_bin[44+i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
shreeshas95 1:a0055b3280c8 261 }
prasanthbj05 266:ae588e75cfa4 262 for(uint8_t i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 263 space = adjust(1, (compress(sfp_bin[48+i],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 264 space = adjust(8, compress(sfp_bin[48+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 265 }
prasanthbj05 266:ae588e75cfa4 266 space = adjust(2, (compress(sfp_bin[17],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 267 space = adjust(8, compress(sfp_bin[17],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 268 space = adjust(2, (compress(sfp_bin[23],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 269 space = adjust(8, compress(sfp_bin[23],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 270
ee12b079 93:4d76de54a699 271 if(pzf == 0){
prasanthbj05 266:ae588e75cfa4 272 //cout<<"proton bins ";
ee12b079 268:ded5306a1fd1 273 #if srpz
ee12b079 268:ded5306a1fd1 274 //gPC.printf("\n\rProton bins present in SRP");
ee12b079 268:ded5306a1fd1 275 #endif
prasanthbj05 266:ae588e75cfa4 276 for(uint8_t i = 0; i<17 ; i++){
ee12b079 93:4d76de54a699 277 space = adjust(2, ((compress(sfp_bin[i],8,2))>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 278 space = adjust(8, compress(sfp_bin[i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 279 //printf("%02X ",compress(sfp_bin[i],8,2));
ee12b079 93:4d76de54a699 280 }
ee12b079 93:4d76de54a699 281 }
ee12b079 93:4d76de54a699 282 if(ezf == 0){
prasanthbj05 266:ae588e75cfa4 283 //cout<<"electron bins ";
ee12b079 268:ded5306a1fd1 284 #if srpz
ee12b079 268:ded5306a1fd1 285 //gPC.printf("\n\rElectron bins present in SRP");
ee12b079 268:ded5306a1fd1 286 #endif
ee12b079 93:4d76de54a699 287 for(int i = 0; i<5 ; i++){
prasanthbj05 266:ae588e75cfa4 288 space = adjust(2,((compress(sfp_bin[18+i],8,2))>>8),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 289 space = adjust(8, compress(sfp_bin[18+i],8,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 290 //printf("%02X ",compress(sfp_bin[i],8,2));
ee12b079 93:4d76de54a699 291 }
ee12b079 93:4d76de54a699 292 }
prasanthbj05 266:ae588e75cfa4 293 } //above threshold ends here.
prasanthbj05 266:ae588e75cfa4 294 if(at == 0)
prasanthbj05 266:ae588e75cfa4 295 {
prasanthbj05 266:ae588e75cfa4 296 id = 1; length = 241+5; //5 spare bits
ee12b079 93:4d76de54a699 297 if(pzf == 0)
ee12b079 93:4d76de54a699 298 length += 87;
ee12b079 93:4d76de54a699 299 if(ezf == 0)
ee12b079 93:4d76de54a699 300 length += 35;
prasanthbj05 266:ae588e75cfa4 301 }
prasanthbj05 266:ae588e75cfa4 302 else
prasanthbj05 266:ae588e75cfa4 303 {
prasanthbj05 266:ae588e75cfa4 304 id = 2; length = 288; //0 spare bits
ee12b079 93:4d76de54a699 305 if(pzf == 0)
ee12b079 93:4d76de54a699 306 length += 170;
ee12b079 93:4d76de54a699 307 if(ezf == 0)
ee12b079 93:4d76de54a699 308 length += 50;
ee12b079 93:4d76de54a699 309 }
shreeshas95 1:a0055b3280c8 310 }
prasanthbj05 266:ae588e75cfa4 311 else if(srp_mode == 1) //scattered mode
prasanthbj05 266:ae588e75cfa4 312 {
prasanthbj05 266:ae588e75cfa4 313 if(at == 0)
prasanthbj05 266:ae588e75cfa4 314 {
ee12b079 268:ded5306a1fd1 315 #if srpz
ee12b079 268:ded5306a1fd1 316 //gPC.printf("\n\rSFP below threshold");
ee12b079 268:ded5306a1fd1 317 #endif
prasanthbj05 266:ae588e75cfa4 318 pointer = sfp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 319 space = adjust(4, attitude,pointer,8); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 320 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 321 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 322 for(uint8_t i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 323 {
prasanthbj05 266:ae588e75cfa4 324 space = adjust(7, compress(sfp_bin[i],5,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 325 }
prasanthbj05 266:ae588e75cfa4 326 for(uint8_t i = 0 ; i < 4 ; i++)
prasanthbj05 266:ae588e75cfa4 327 {
prasanthbj05 266:ae588e75cfa4 328 space = adjust(1, (compress(sfp_bin[48+i],7,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 329 space = adjust(8, compress(sfp_bin[48+i],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 330 }
prasanthbj05 266:ae588e75cfa4 331 }
prasanthbj05 266:ae588e75cfa4 332 if(at == 1)
prasanthbj05 266:ae588e75cfa4 333 {
ee12b079 268:ded5306a1fd1 334
ee12b079 268:ded5306a1fd1 335 #if srpz
ee12b079 268:ded5306a1fd1 336 //gPC.printf("\n\rSFP below threshold");
ee12b079 268:ded5306a1fd1 337 #endif
prasanthbj05 266:ae588e75cfa4 338 pointer = sfp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 339 space = adjust(3, sci_time>>32 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 340 space = adjust(8, sci_time>>24 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 341 space = adjust(8, sci_time>>16 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 342 space = adjust(8, sci_time>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 343 space = adjust(8, sci_time ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 344 space = adjust(4, attitude,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 345 space = adjust(6, counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 346 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 347 for(uint8_t i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 348 {
prasanthbj05 266:ae588e75cfa4 349 space = adjust(2, (compress(sfp_bin[i],8,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 350 space = adjust(8, compress(sfp_bin[i],8,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 351 }
prasanthbj05 266:ae588e75cfa4 352 for(uint8_t i = 0 ; i < 4 ; i++)
prasanthbj05 266:ae588e75cfa4 353 {
prasanthbj05 266:ae588e75cfa4 354 space = adjust(1, (compress(sfp_bin[48+i],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 355 space = adjust(8, compress(sfp_bin[48+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 356 }
prasanthbj05 266:ae588e75cfa4 357 }
prasanthbj05 266:ae588e75cfa4 358 if(at == 0)
prasanthbj05 266:ae588e75cfa4 359 {
prasanthbj05 266:ae588e75cfa4 360 id = 1; length = 384; //0 spare bits
prasanthbj05 266:ae588e75cfa4 361 }
prasanthbj05 266:ae588e75cfa4 362 else
prasanthbj05 266:ae588e75cfa4 363 {
prasanthbj05 266:ae588e75cfa4 364 id = 2; length = 568; //0 spare bits
ee12b079 93:4d76de54a699 365 }
shreeshas95 1:a0055b3280c8 366 }
prasanthbj05 266:ae588e75cfa4 367 length = (length%8==0)?(length/8):(length/8)+1; //converting length to mulitple of 8
ee12b079 268:ded5306a1fd1 368 #if srpz
ee12b079 268:ded5306a1fd1 369 //gPC.printf("\n\rLength of SFP packet in bytes = %d",length);
ee12b079 268:ded5306a1fd1 370 #endif
prasanthbj05 266:ae588e75cfa4 371 /*----------------------------------------forming a science packet ends here-----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 372
prasanthbj05 266:ae588e75cfa4 373 /*-----------------------------Inserting the above packet(sfp) into the TM frame(s) starts here----------------------------*/
prasanthbj05 266:ae588e75cfa4 374 if(id==1){
prasanthbj05 266:ae588e75cfa4 375 if(position_tm_frame[id]>130){
ee12b079 268:ded5306a1fd1 376 #if srpz
ee12b079 268:ded5306a1fd1 377 //gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame.");
ee12b079 268:ded5306a1fd1 378 #endif
prasanthbj05 266:ae588e75cfa4 379 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 380 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 381 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 382 }
prasanthbj05 266:ae588e75cfa4 383 }
prasanthbj05 266:ae588e75cfa4 384 }
prasanthbj05 266:ae588e75cfa4 385 else if(id==2){
prasanthbj05 266:ae588e75cfa4 386 if(position_tm_frame[id]>126){
ee12b079 268:ded5306a1fd1 387 #if srpz
ee12b079 268:ded5306a1fd1 388 //gPC.printf("\n\rSkipping the current frame.Inserting sfp packet into the next frame.");
ee12b079 268:ded5306a1fd1 389 #endif
prasanthbj05 266:ae588e75cfa4 390 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 391 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 392 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 393 }
prasanthbj05 266:ae588e75cfa4 394 }
prasanthbj05 266:ae588e75cfa4 395 }
prasanthbj05 266:ae588e75cfa4 396 if(position_tm_frame[id]==position_tm_starting[id]){
prasanthbj05 266:ae588e75cfa4 397 frames[id][6-id] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 398 }
prasanthbj05 266:ae588e75cfa4 399 for(uint16_t j=0 ; j<length ;)
prasanthbj05 266:ae588e75cfa4 400 {
prasanthbj05 266:ae588e75cfa4 401 if(position_tm_frame[id]==frames[id][6-id]){
prasanthbj05 266:ae588e75cfa4 402 if(id==1){
ee12b079 268:ded5306a1fd1 403 #if srpz
ee12b079 268:ded5306a1fd1 404 //gPC.printf("\n\rAdding Time to TM frame");
ee12b079 268:ded5306a1fd1 405 #endif
prasanthbj05 266:ae588e75cfa4 406 frames[id][6] = (uint8_t)((sci_time>>32)&0x07);
prasanthbj05 266:ae588e75cfa4 407 frames[id][7] = (uint8_t)((sci_time>>24)&0xff);
prasanthbj05 266:ae588e75cfa4 408 frames[id][8] = (uint8_t)((sci_time>>16)&0xff);
prasanthbj05 266:ae588e75cfa4 409 frames[id][9] = (uint8_t)((sci_time>>8)&0xff);
prasanthbj05 266:ae588e75cfa4 410 frames[id][10] = (uint8_t)((sci_time)&0xff);
prasanthbj05 266:ae588e75cfa4 411 }
prasanthbj05 266:ae588e75cfa4 412 }
prasanthbj05 266:ae588e75cfa4 413 if(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 414 frames[id][position_tm_frame[id]] = sfp[j];
prasanthbj05 266:ae588e75cfa4 415 j++;
prasanthbj05 266:ae588e75cfa4 416 position_tm_frame[id]++; //incrementing position of write pointer in TM frame
prasanthbj05 266:ae588e75cfa4 417 }
prasanthbj05 266:ae588e75cfa4 418 if(position_tm_frame[id] == 132)
prasanthbj05 266:ae588e75cfa4 419 {
prasanthbj05 266:ae588e75cfa4 420 /*-----------the current frame is completely filled and we fill frame header to write into SD card---------*/
ee12b079 268:ded5306a1fd1 421 #if srpz
ee12b079 268:ded5306a1fd1 422 //gPC.printf("\n\rSFP_TM frame full. Length of current packet = %d",j);
ee12b079 268:ded5306a1fd1 423 //gPC.printf("\n\rFrame Header: %d",frames[id][6-id]);
ee12b079 268:ded5306a1fd1 424 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][6-id]]);
ee12b079 268:ded5306a1fd1 425 #endif
ee12b079 93:4d76de54a699 426 pointer = frames[id];
prasanthbj05 266:ae588e75cfa4 427 if(id == 1){ //below threshold
ee12b079 93:4d76de54a699 428 space = adjust(1,0,pointer,8);
ee12b079 93:4d76de54a699 429 space = adjust(4,3,pointer,space);
ee12b079 269:72529b247333 430 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
ee12b079 269:72529b247333 431 gPC.printf("3 = 0x%X",FSC_science);
ee12b079 93:4d76de54a699 432 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 93:4d76de54a699 433 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 434 frames[id][3] = (FSC_science>>8)&0xff;
prasanthbj05 266:ae588e75cfa4 435 frames[id][4] = FSC_science&0xff;
prasanthbj05 266:ae588e75cfa4 436 }
prasanthbj05 266:ae588e75cfa4 437 else if(id == 2) //above threshold
prasanthbj05 266:ae588e75cfa4 438 {
ee12b079 93:4d76de54a699 439 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 440 space = adjust(4,2,pointer,space);
prasanthbj05 266:ae588e75cfa4 441 FSC_science = FSC_CURRENT[2]; ///to be used as this
ee12b079 269:72529b247333 442 gPC.printf("2 = 0x%X",FSC_science);
ee12b079 93:4d76de54a699 443 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 444 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 93:4d76de54a699 445 frames[id][3] = FSC_science&0xff;
ee12b079 93:4d76de54a699 446 }
ee12b079 93:4d76de54a699 447 temp_crc = crc16_gen(frames[id],132);
ee12b079 93:4d76de54a699 448 frames[id][132] = temp_crc>>8;
ee12b079 93:4d76de54a699 449 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 450
ee12b079 268:ded5306a1fd1 451 #if srpz
ee12b079 268:ded5306a1fd1 452 gPC.printf("\n\rPrinting SFP_TM\n\r{");
ee12b079 268:ded5306a1fd1 453 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 454 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 455 }
ee12b079 268:ded5306a1fd1 456 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 457 #endif
prasanthbj05 266:ae588e75cfa4 458 /*------------------current TM frame completely filled-----------------------*/
ee12b079 171:31bdf83591a1 459
ee12b079 114:9fb55057b13f 460 exor(frames[id]);
ee12b079 93:4d76de54a699 461 convolution(frames[id]);
ee12b079 93:4d76de54a699 462 interleave(TM_convoluted_data,TM_interleave_data);
ee12b079 93:4d76de54a699 463 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
prasanthbj05 266:ae588e75cfa4 464 if(id == 1)
ee12b079 195:6a549c0e9287 465 {
ee12b079 268:ded5306a1fd1 466 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,3); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 467 }
prasanthbj05 266:ae588e75cfa4 468 else if (id == 2)
prasanthbj05 266:ae588e75cfa4 469 {
ee12b079 268:ded5306a1fd1 470 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,2); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 471 }
ee12b079 268:ded5306a1fd1 472 if(sd_stat)
ee12b079 268:ded5306a1fd1 473 {
ee12b079 268:ded5306a1fd1 474 gPC.puts("sd write fail");
ee12b079 268:ded5306a1fd1 475 }
ee12b079 93:4d76de54a699 476 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 477 frames[id][6-id] = (length - j)+position_tm_starting[id];
ee12b079 93:4d76de54a699 478 }
shreeshas95 1:a0055b3280c8 479 }
prasanthbj05 266:ae588e75cfa4 480 /*------------------------------finished inserting the sfp packet into the TM frame(s)-------------------------------------*/
ee12b079 268:ded5306a1fd1 481 } // for loop bracket which runs 60 times
ee12b079 268:ded5306a1fd1 482 #if srpz_last
ee12b079 268:ded5306a1fd1 483 //gPC.printf("\n\rPrinting the last SFP_TM frame");
ee12b079 268:ded5306a1fd1 484 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 485 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 486 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 487 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 488 }
ee12b079 268:ded5306a1fd1 489 if(position_tm_frame[id]==132){
ee12b079 268:ded5306a1fd1 490 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][6-id]]);
ee12b079 268:ded5306a1fd1 491 pointer = frames[id];
ee12b079 268:ded5306a1fd1 492 if(id == 1){ //below threshold
ee12b079 268:ded5306a1fd1 493 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 494 space = adjust(4,3,pointer,space);
ee12b079 268:ded5306a1fd1 495 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
ee12b079 268:ded5306a1fd1 496 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 268:ded5306a1fd1 497 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 498 frames[id][3] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 499 frames[id][4] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 500 }
ee12b079 268:ded5306a1fd1 501 else if(id == 2) //above threshold
ee12b079 268:ded5306a1fd1 502 {
ee12b079 268:ded5306a1fd1 503 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 504 space = adjust(4,2,pointer,space);
ee12b079 268:ded5306a1fd1 505 FSC_science = FSC_CURRENT[2]; ///to be used as this
ee12b079 268:ded5306a1fd1 506 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 507 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 508 frames[id][3] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 509 }
ee12b079 268:ded5306a1fd1 510 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 511 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 512 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 513
ee12b079 268:ded5306a1fd1 514 gPC.printf("\n\rPrinting SFP_TM\n\r{");
ee12b079 268:ded5306a1fd1 515 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 516 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 517 }
ee12b079 268:ded5306a1fd1 518 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 519 }
ee12b079 268:ded5306a1fd1 520 #endif
ee12b079 93:4d76de54a699 521 at = 0; pzf = 1; ezf = 1;
ee12b079 93:4d76de54a699 522 srp_mode = head[2]&0x1;
prasanthbj05 266:ae588e75cfa4 523 uint8_t compression_option = (head[2]>>1)&0x3;
prasanthbj05 266:ae588e75cfa4 524 /*-------------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT starts here-------------------------
prasanthbj05 266:ae588e75cfa4 525 ------------------(in case compression option = 0 , then tagging beacon packet(not yet formed) as AT or BT is also done)----------*/
prasanthbj05 266:ae588e75cfa4 526 if(srp_mode ==0)
prasanthbj05 266:ae588e75cfa4 527 {
prasanthbj05 266:ae588e75cfa4 528 if(compression_option == 0)
prasanthbj05 266:ae588e75cfa4 529 {
prasanthbj05 266:ae588e75cfa4 530 for(int i=0; i<52 ;i++)
prasanthbj05 266:ae588e75cfa4 531 {
prasanthbj05 266:ae588e75cfa4 532 if(scp_bin[i] > scp_threshold_m0[i])
prasanthbj05 266:ae588e75cfa4 533 {
ee12b079 268:ded5306a1fd1 534 //gPC.printf("\n\rSCP above threshold index: %d",i);
ee12b079 93:4d76de54a699 535 at = 1;
shreeshas95 1:a0055b3280c8 536 break;
shreeshas95 1:a0055b3280c8 537 }
shreeshas95 1:a0055b3280c8 538 }
ee12b079 93:4d76de54a699 539 }
prasanthbj05 266:ae588e75cfa4 540 else if(compression_option == 1)
prasanthbj05 266:ae588e75cfa4 541 {
ee12b079 268:ded5306a1fd1 542 if(scp_bin[44] > scp_threshold_m0_1[0]){//gPC.printf("\n\rSCP above threshold index: 44");
ee12b079 268:ded5306a1fd1 543 at=1;}
prasanthbj05 266:ae588e75cfa4 544 for(int i=0; i<4 ;i++)
prasanthbj05 266:ae588e75cfa4 545 {
prasanthbj05 266:ae588e75cfa4 546 if(scp_bin[48+i] > scp_threshold_m0_1[i+1])
prasanthbj05 266:ae588e75cfa4 547 {
ee12b079 268:ded5306a1fd1 548 //gPC.printf("\n\rSCP above threshold index: %d",i+48);
ee12b079 93:4d76de54a699 549 at = 1;
ee12b079 93:4d76de54a699 550 break;
ee12b079 93:4d76de54a699 551 }
shreeshas95 1:a0055b3280c8 552 }
ee12b079 268:ded5306a1fd1 553 if(scp_bin[17] > scp_threshold_m0_1[5]){
ee12b079 268:ded5306a1fd1 554 //gPC.printf("\n\rSP above threshold index: 17");
ee12b079 268:ded5306a1fd1 555 at=1;
ee12b079 268:ded5306a1fd1 556 }
ee12b079 268:ded5306a1fd1 557 if(scp_bin[23] > scp_threshold_m0_1[6]){
ee12b079 268:ded5306a1fd1 558 //gPC.printf("\n\rSP above threshold index: 23");
ee12b079 268:ded5306a1fd1 559 at=1;
ee12b079 268:ded5306a1fd1 560 }
prasanthbj05 266:ae588e75cfa4 561
ee12b079 93:4d76de54a699 562 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 563 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 564 {
ee12b079 93:4d76de54a699 565 proton_scp_sum += scp_bin[i];
shreeshas95 1:a0055b3280c8 566 }
prasanthbj05 266:ae588e75cfa4 567 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 568 {
ee12b079 93:4d76de54a699 569 electron_scp_sum += scp_bin[18+i];
ee12b079 93:4d76de54a699 570 }
ee12b079 268:ded5306a1fd1 571 if(proton_scp_sum > scp_threshold_m0_1[7]){ //gPC.printf("\n\rProton_scp_sum above threshold");
ee12b079 268:ded5306a1fd1 572 at=1;}
ee12b079 268:ded5306a1fd1 573 if(electron_scp_sum > scp_threshold_m0_1[8]){//gPC.printf("\n\rElectron_scp_sum above threshold");
ee12b079 268:ded5306a1fd1 574 at=1;}
shreeshas95 1:a0055b3280c8 575 }
prasanthbj05 266:ae588e75cfa4 576 else if(compression_option == 2)
prasanthbj05 266:ae588e75cfa4 577 {
ee12b079 268:ded5306a1fd1 578 if(scp_bin[50] > scp_sfp_threshold_m0_2[0]){//gPC.printf("\n\rSCP above threshold index:50");
ee12b079 268:ded5306a1fd1 579 at=1;}
prasanthbj05 266:ae588e75cfa4 580 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 581 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 582 {
prasanthbj05 266:ae588e75cfa4 583 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 584 }
prasanthbj05 266:ae588e75cfa4 585 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 586 {
prasanthbj05 266:ae588e75cfa4 587 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 588 }
ee12b079 268:ded5306a1fd1 589 if(proton_scp_sum > scp_sfp_threshold_m0_2[1]){//gPC.printf("\n\rProton_SCP_sum above threshold");
ee12b079 268:ded5306a1fd1 590 at=1;}
ee12b079 268:ded5306a1fd1 591 if(electron_scp_sum > scp_sfp_threshold_m0_2[2]){//gPC.printf("\n\rElectron above threshold");
ee12b079 268:ded5306a1fd1 592 at=1;}
prasanthbj05 266:ae588e75cfa4 593 }
prasanthbj05 266:ae588e75cfa4 594 }
prasanthbj05 266:ae588e75cfa4 595 else if(srp_mode ==1)
prasanthbj05 266:ae588e75cfa4 596 {
ee12b079 268:ded5306a1fd1 597 if(compression_option==0){
prasanthbj05 266:ae588e75cfa4 598 for(int i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 599 {
prasanthbj05 266:ae588e75cfa4 600 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 601 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
prasanthbj05 266:ae588e75cfa4 602 at = 1;
prasanthbj05 266:ae588e75cfa4 603 break;
prasanthbj05 266:ae588e75cfa4 604 }
prasanthbj05 266:ae588e75cfa4 605 }
prasanthbj05 266:ae588e75cfa4 606 for(int i=48; i<52; i++)
prasanthbj05 266:ae588e75cfa4 607 {
prasanthbj05 266:ae588e75cfa4 608 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 609 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
prasanthbj05 266:ae588e75cfa4 610 at = 1;
prasanthbj05 266:ae588e75cfa4 611 break;
prasanthbj05 266:ae588e75cfa4 612 }
shreeshas95 1:a0055b3280c8 613 }
shreeshas95 1:a0055b3280c8 614 }
ee12b079 268:ded5306a1fd1 615 else if(compression_option==2){
ee12b079 268:ded5306a1fd1 616 if(scp_bin[50]>scp_sfp_threshold_m0_2[0]){
ee12b079 268:ded5306a1fd1 617 //gPC.printf("\nSCP above threshold index:50, Value:%",scp_bin[50]);
ee12b079 268:ded5306a1fd1 618 at=1;
ee12b079 268:ded5306a1fd1 619 }
prasanthbj05 266:ae588e75cfa4 620 }
prasanthbj05 266:ae588e75cfa4 621 }
prasanthbj05 266:ae588e75cfa4 622 /*----------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT ends here--------------------------*/
prasanthbj05 266:ae588e75cfa4 623
prasanthbj05 266:ae588e75cfa4 624 if(srp_mode == 0)
prasanthbj05 266:ae588e75cfa4 625 {
prasanthbj05 266:ae588e75cfa4 626 //determining if non zero values of proton and electron bins exist for calibrated mode (srp)
prasanthbj05 266:ae588e75cfa4 627 for(int i=0; i<17 ;i++)
prasanthbj05 266:ae588e75cfa4 628 {
prasanthbj05 266:ae588e75cfa4 629 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 630 pzf = 0;
prasanthbj05 266:ae588e75cfa4 631 }
prasanthbj05 266:ae588e75cfa4 632 for(int i=18; i<23 ;i++)
prasanthbj05 266:ae588e75cfa4 633 {
prasanthbj05 266:ae588e75cfa4 634 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 635 ezf = 0;
prasanthbj05 266:ae588e75cfa4 636 }
prasanthbj05 266:ae588e75cfa4 637 }
prasanthbj05 266:ae588e75cfa4 638 /*-----------------------------------------Tagging beacon packet as AT or BT starts here-------------------------------------*/
prasanthbj05 266:ae588e75cfa4 639 beacon_at = 0;
prasanthbj05 266:ae588e75cfa4 640 if(srp_mode==0) //those bins which can be meaningfully compared only in srp_mode==0
prasanthbj05 266:ae588e75cfa4 641 {
prasanthbj05 266:ae588e75cfa4 642 if(scp_bin[44]>beacon_threshold[0]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 643 if(scp_bin[17]>beacon_threshold[5]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 644 if(scp_bin[23]>beacon_threshold[6]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 645 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 646 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 647 {
prasanthbj05 266:ae588e75cfa4 648 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 649 }
prasanthbj05 266:ae588e75cfa4 650 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 651 {
prasanthbj05 266:ae588e75cfa4 652 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 653 }
prasanthbj05 266:ae588e75cfa4 654 if(proton_scp_sum > beacon_threshold[7]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 655 if(electron_scp_sum > beacon_threshold[8]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 656 }
prasanthbj05 266:ae588e75cfa4 657 if(scp_bin[48]>beacon_threshold[1]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 658 if(scp_bin[49]>beacon_threshold[2]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 659 if(scp_bin[50]>beacon_threshold[3]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 660 if(scp_bin[51]>beacon_threshold[4]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 661 /*----------------------------------------Tagging beacon packet as AT or BT ends here------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 662
prasanthbj05 266:ae588e75cfa4 663 /*-----------------------------------------------Forming the beacon packet starts here-----------------------------------------*/
prasanthbj05 266:ae588e75cfa4 664 //Last 512 bits of beacon_array excluding CRC bits is used for storing the 5 most recent beacon packets
prasanthbj05 266:ae588e75cfa4 665
prasanthbj05 266:ae588e75cfa4 666 if(beacon_cntr == 1)
prasanthbj05 266:ae588e75cfa4 667 {
prasanthbj05 267:783c248a6207 668 beacon_ptr = &(beacon_array[47]); // starting block address, stores the oldest(among the 5 most recent) beacon packet
prasanthbj05 266:ae588e75cfa4 669 }
prasanthbj05 266:ae588e75cfa4 670 else if(beacon_cntr>1 && beacon_cntr<6)
prasanthbj05 266:ae588e75cfa4 671 {
prasanthbj05 267:783c248a6207 672 beacon_ptr +=17; // increase the block number(totally 5 blocks for 5 beacon packets)
prasanthbj05 266:ae588e75cfa4 673 }
prasanthbj05 266:ae588e75cfa4 674 else if(beacon_cntr == 6)
prasanthbj05 266:ae588e75cfa4 675 {
prasanthbj05 267:783c248a6207 676 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 677 { // overwrite the new beacon packet in the 5th block
prasanthbj05 267:783c248a6207 678 beacon_array[47+i] = beacon_array[64+i];
prasanthbj05 267:783c248a6207 679 beacon_array[64+i] = beacon_array[81+i];
prasanthbj05 267:783c248a6207 680 beacon_array[81+i] = beacon_array[98+i];
prasanthbj05 267:783c248a6207 681 beacon_array[98+i] = beacon_array[115+i];
prasanthbj05 266:ae588e75cfa4 682 }
prasanthbj05 267:783c248a6207 683 beacon_ptr = &(beacon_array[115]); //address of the 5th block
prasanthbj05 266:ae588e75cfa4 684 beacon_cntr = 5;
prasanthbj05 266:ae588e75cfa4 685 }
prasanthbj05 266:ae588e75cfa4 686 pointer = beacon_ptr; debug_cntr = 0; space = 8;
prasanthbj05 267:783c248a6207 687 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 267:783c248a6207 688 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 689 space = adjust(3,(sci_time>>32)&0x07,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 690 space = adjust(8,(sci_time>>24)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 691 space = adjust(8,(sci_time>>16)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 692 space = adjust(8,(sci_time>>8)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 693 space = adjust(8,(sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 694 space = adjust(4, (attitude)&0x0f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 695
prasanthbj05 266:ae588e75cfa4 696 if(srp_mode==0){
prasanthbj05 266:ae588e75cfa4 697 if(beacon_at == 0){
prasanthbj05 267:783c248a6207 698 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 699 space = adjust(6, compress(scp_bin[44],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 700 space = adjust(7, compress(scp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 701 space = adjust(7, compress(scp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 702 space = adjust(7, compress(scp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 703 space = adjust(7, compress(scp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 704 space = adjust(6, compress(scp_bin[17],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 705 space = adjust(6, compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 706 space = adjust(4, compress(proton_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 707 space = adjust(8, compress(proton_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 708 space = adjust(4, compress(electron_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 709 space = adjust(8, compress(electron_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 710 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 711 for(int temp_i = 12; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 712 {
prasanthbj05 266:ae588e75cfa4 713 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 714 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 715 }
prasanthbj05 266:ae588e75cfa4 716 }
prasanthbj05 266:ae588e75cfa4 717 else if(beacon_at==1){
prasanthbj05 266:ae588e75cfa4 718 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 719 space = adjust(1, compress(sfp_bin[44],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 720 space = adjust(8, compress(sfp_bin[44],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 721 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 722 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 723 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 724 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 725 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 726 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 727 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 728 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 729 space = adjust(1, compress(sfp_bin[17],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 730 space = adjust(8, compress(sfp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 731 space = adjust(1, compress(sfp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 732 space = adjust(8, compress(sfp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 733 space = adjust(1, compress(proton_scp_sum ,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 734 space = adjust(8, compress(proton_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 735 space = adjust(1, compress(electron_scp_sum,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 736 space = adjust(8, compress(electron_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 737 //cout<<"for beacon space = "<<(space&0x0f)<<" counter = "<<debug_cntr;
prasanthbj05 266:ae588e75cfa4 738 }
prasanthbj05 266:ae588e75cfa4 739 }else if(srp_mode==1){
prasanthbj05 266:ae588e75cfa4 740 if(beacon_at==0){
prasanthbj05 267:783c248a6207 741 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 742 space = adjust(6, compress(0,3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 743 space = adjust(7, compress(sfp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 744 space = adjust(7, compress(sfp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 745 space = adjust(7, compress(sfp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 746 space = adjust(7, compress(sfp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 747 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 748 for(uint8_t temp_i = 7; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 749 {
prasanthbj05 266:ae588e75cfa4 750 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 751 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 752 }
prasanthbj05 266:ae588e75cfa4 753 }
prasanthbj05 266:ae588e75cfa4 754 else if(beacon_at==1){
prasanthbj05 267:783c248a6207 755 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 756 space = adjust(1, compress(0,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 757 space = adjust(8, compress(0,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 758 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 759 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 760 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 761 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 762 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 763 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 764 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 765 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 766 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 767 for(uint8_t temp_i = 10; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 768 {
prasanthbj05 266:ae588e75cfa4 769 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 770 pointer = pointer + 1;
ee12b079 93:4d76de54a699 771 }
shreeshas95 1:a0055b3280c8 772 }
shreeshas95 1:a0055b3280c8 773 }
prasanthbj05 266:ae588e75cfa4 774 beacon_cntr++;
prasanthbj05 266:ae588e75cfa4 775 /*--------------------------------------------------beacon packet ends here--------------------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 776
ee12b079 268:ded5306a1fd1 777 //gPC.printf("\n\rSCP count: %d");
prasanthbj05 266:ae588e75cfa4 778 uint8_t packet_pp,time_diff;
prasanthbj05 266:ae588e75cfa4 779 /*------------------------------------------Forming a science packet(scp) starts here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 780
ee12b079 93:4d76de54a699 781 pointer = scp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 782 time_diff = 0;
prasanthbj05 266:ae588e75cfa4 783
prasanthbj05 266:ae588e75cfa4 784 packet_pp = 1;
prasanthbj05 266:ae588e75cfa4 785 if((((uint8_t)(sci_time>>7))&0x3f)<(((uint8_t)(time_prev_scp>>7))&0x3f))
prasanthbj05 266:ae588e75cfa4 786 {
prasanthbj05 266:ae588e75cfa4 787 time_diff = time_diff+60;
prasanthbj05 266:ae588e75cfa4 788 }
prasanthbj05 266:ae588e75cfa4 789 time_diff += (((uint8_t)(sci_time>>7))&0x3f);
prasanthbj05 266:ae588e75cfa4 790 time_diff -= (((uint8_t)(time_prev_scp>>7))&0x3f);
prasanthbj05 266:ae588e75cfa4 791 if(time_diff>10){
prasanthbj05 266:ae588e75cfa4 792 packet_pp = 0;
prasanthbj05 266:ae588e75cfa4 793 }
prasanthbj05 266:ae588e75cfa4 794 time_prev_scp = sci_time;
prasanthbj05 266:ae588e75cfa4 795 uint32_t sfp_at_counter;
prasanthbj05 266:ae588e75cfa4 796 sfp_at_counter = FSC_CURRENT[2];
prasanthbj05 266:ae588e75cfa4 797 space = adjust(1, packet_pp,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 798 space = adjust(5, (sci_time>>8)&0x1f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 799 space = adjust(8, (sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 800 space = adjust(4, (attitude)&0xf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 801 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 266:ae588e75cfa4 802 space = adjust(1, at,pointer,space); pointer += space>>4; debug_cntr += space>>4; //last bit of compression option
prasanthbj05 266:ae588e75cfa4 803 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 804 if(!(srp_mode==0 && compression_option==2))
prasanthbj05 266:ae588e75cfa4 805 {
prasanthbj05 266:ae588e75cfa4 806 space = adjust(8, sfp_at_counter>>16,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 807 space = adjust(8, sfp_at_counter>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 808 space = adjust(8, sfp_at_counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 809 }
ee12b079 93:4d76de54a699 810 if(srp_mode == 0 && compression_option == 0){ //normal callibrated mode
ee12b079 268:ded5306a1fd1 811 #if scpz
ee12b079 268:ded5306a1fd1 812 //gPC.printf("\n\rSCP - Normal calibrated mode");
ee12b079 268:ded5306a1fd1 813 #endif
prasanthbj05 266:ae588e75cfa4 814 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 815 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 816 if(at == 0 ){
ee12b079 268:ded5306a1fd1 817 #if scpz
ee12b079 268:ded5306a1fd1 818 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 819 #endif
ee12b079 93:4d76de54a699 820 for(int i = 0; i<8 ;i++){
prasanthbj05 266:ae588e75cfa4 821 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 822 }
ee12b079 93:4d76de54a699 823 for(int i = 0; i<12 ;i++){
prasanthbj05 266:ae588e75cfa4 824 space = adjust(5,compress(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 825 }
ee12b079 93:4d76de54a699 826 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 827 space = adjust(6,compress(scp_bin[44+i],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 828 }
ee12b079 93:4d76de54a699 829 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 830 space = adjust(7,compress(scp_bin[48+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 831 }
prasanthbj05 266:ae588e75cfa4 832 space = adjust(6,compress(scp_bin[17],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 833 space = adjust(6,compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 834 if(pzf == 0){
ee12b079 93:4d76de54a699 835 for(int i = 0; i<2 ;i++){
ee12b079 93:4d76de54a699 836 space = adjust(8,compress(scp_bin[i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 837 }
ee12b079 93:4d76de54a699 838 for(int i = 0; i<15 ;i++){
prasanthbj05 266:ae588e75cfa4 839 space = adjust(7,compress(scp_bin[i+2],5,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 840 }
ee12b079 93:4d76de54a699 841 }
ee12b079 93:4d76de54a699 842 if(ezf == 0){
ee12b079 93:4d76de54a699 843 space = adjust(1,compress(scp_bin[18],7,2)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 844 space = adjust(8,compress(scp_bin[18],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 845 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 846 space = adjust(8,compress(scp_bin[19+i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 847 }
ee12b079 93:4d76de54a699 848 }
ee12b079 93:4d76de54a699 849 }// below threshold ends here
ee12b079 93:4d76de54a699 850 if(at == 1){
ee12b079 268:ded5306a1fd1 851 #if scpz
ee12b079 268:ded5306a1fd1 852 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 853 #endif
ee12b079 93:4d76de54a699 854 for(int i = 0; i<8 ;i++){
ee12b079 93:4d76de54a699 855 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 856 }
ee12b079 93:4d76de54a699 857 for(int i = 0; i<12 ;i++){
ee12b079 93:4d76de54a699 858 space = adjust(5,compress(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 859 }
ee12b079 93:4d76de54a699 860 for(int i = 0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 861 space = adjust(1,compress(scp_bin[44+i],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 862 space = adjust(8,compress(scp_bin[44+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 863 }
ee12b079 93:4d76de54a699 864 for(int i=0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 865 space = adjust(4,compress(scp_bin[48+i],9,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 866 space = adjust(8,compress(scp_bin[48+i],9,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 867 }
prasanthbj05 266:ae588e75cfa4 868 space = adjust(1,compress(scp_bin[17],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 869 space = adjust(8,compress(scp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 870 space = adjust(1,compress(scp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 871 space = adjust(8,compress(scp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 872
ee12b079 93:4d76de54a699 873 if(pzf == 0){
ee12b079 93:4d76de54a699 874 for(int i = 0; i<17 ; i++){
prasanthbj05 266:ae588e75cfa4 875 space = adjust(8, (compress(scp_bin[i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 876 }
ee12b079 93:4d76de54a699 877 }
ee12b079 93:4d76de54a699 878 if(ezf == 0){
ee12b079 93:4d76de54a699 879 for(int i = 0; i<5 ; i++){
ee12b079 93:4d76de54a699 880 space = adjust(8, (compress(scp_bin[18+i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 881 }
ee12b079 93:4d76de54a699 882 }
ee12b079 93:4d76de54a699 883 } //above thresholds ends
ee12b079 93:4d76de54a699 884 } //srp_mode == 0 ends
ee12b079 93:4d76de54a699 885 if(srp_mode == 1){
ee12b079 268:ded5306a1fd1 886 #if scpz
ee12b079 268:ded5306a1fd1 887 //gPC.printf("\n\rSCP - Scatter plot mode");
ee12b079 268:ded5306a1fd1 888 #endif
ee12b079 93:4d76de54a699 889 if(at == 0){
ee12b079 268:ded5306a1fd1 890 #if scpz
ee12b079 268:ded5306a1fd1 891 //gPC.printf("\n\rBelow Threshold");
ee12b079 268:ded5306a1fd1 892 #endif
prasanthbj05 266:ae588e75cfa4 893 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 894 space = adjust(6, ((compress(scp_bin[i],3,3))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 895 }
ee12b079 93:4d76de54a699 896 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 897 space = adjust(7, (compress(scp_bin[48+i],4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 898 }
ee12b079 93:4d76de54a699 899 }
ee12b079 93:4d76de54a699 900 if(at == 1){
ee12b079 268:ded5306a1fd1 901 #if scpz
ee12b079 268:ded5306a1fd1 902 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 903 #endif
prasanthbj05 266:ae588e75cfa4 904 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 905 space = adjust(7, (compress((scp_bin[i]/2),4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 906 }
ee12b079 93:4d76de54a699 907 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 908 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 909 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 910 }
ee12b079 93:4d76de54a699 911 }
ee12b079 93:4d76de54a699 912 }// scp mode 1 end
ee12b079 93:4d76de54a699 913 if( srp_mode == 0 && compression_option == 1 ){ //scp data conservation mode
ee12b079 268:ded5306a1fd1 914 #if scpz
ee12b079 268:ded5306a1fd1 915 //gPC.printf("\n\rSCP - Calibrated data conservation mode");
ee12b079 268:ded5306a1fd1 916 #endif
ee12b079 93:4d76de54a699 917 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 918 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 919 if(at == 0){
ee12b079 268:ded5306a1fd1 920 #if scpz
ee12b079 268:ded5306a1fd1 921 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 922 #endif
prasanthbj05 266:ae588e75cfa4 923 space = adjust(6, (compress(scp_bin[44],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 924 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 925 space = adjust(7, (compress(scp_bin[48+i],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 926 }
prasanthbj05 266:ae588e75cfa4 927 space = adjust(6, (compress(scp_bin[17],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 928 space = adjust(6, (compress(scp_bin[23],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 929 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 930 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 931 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 932 }
prasanthbj05 266:ae588e75cfa4 933 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 934 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 935 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 936 }
ee12b079 93:4d76de54a699 937 }else if(at == 1){
ee12b079 268:ded5306a1fd1 938 #if scpz
ee12b079 268:ded5306a1fd1 939 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 940 #endif
prasanthbj05 266:ae588e75cfa4 941 space = adjust(1, (compress(scp_bin[44],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 942 space = adjust(8, (compress(scp_bin[44],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 943 for(int i=0; i<4; i++){
ee12b079 93:4d76de54a699 944 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 945 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 946 }
prasanthbj05 266:ae588e75cfa4 947 space = adjust(1, (compress(scp_bin[17],6,3)>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 948 space = adjust(8, (compress(scp_bin[17],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 949 space = adjust(1, (compress(scp_bin[23],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 950 space = adjust(8, (compress(scp_bin[23],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 951 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 952 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 953 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 954 }
ee12b079 93:4d76de54a699 955 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 956 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 957 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 958 }
ee12b079 93:4d76de54a699 959 }
prasanthbj05 266:ae588e75cfa4 960 }
prasanthbj05 266:ae588e75cfa4 961 if(compression_option == 2 ) //scp extreme data conservation mode
prasanthbj05 266:ae588e75cfa4 962 {
prasanthbj05 266:ae588e75cfa4 963 if(srp_mode==0)
prasanthbj05 266:ae588e75cfa4 964 {
ee12b079 268:ded5306a1fd1 965 #if scpz
ee12b079 268:ded5306a1fd1 966 //gPC.printf("\n\rSCP - calibrated extreme data conservation mode");
ee12b079 268:ded5306a1fd1 967 #endif
prasanthbj05 266:ae588e75cfa4 968 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 969 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 970 if(at==0){
ee12b079 268:ded5306a1fd1 971 #if scpz
ee12b079 268:ded5306a1fd1 972 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 973 #endif
prasanthbj05 266:ae588e75cfa4 974 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 975 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 976 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 977 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 978 }
prasanthbj05 266:ae588e75cfa4 979 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 980 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 981 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 982 }
prasanthbj05 266:ae588e75cfa4 983 }else if(at==1){
ee12b079 268:ded5306a1fd1 984 #if scpz
ee12b079 268:ded5306a1fd1 985 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 986 #endif
prasanthbj05 266:ae588e75cfa4 987 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 988 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 989 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 990 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 991 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 992 }
prasanthbj05 266:ae588e75cfa4 993 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 994 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 995 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 996 }
prasanthbj05 266:ae588e75cfa4 997 }
prasanthbj05 266:ae588e75cfa4 998 }
prasanthbj05 266:ae588e75cfa4 999 else if(srp_mode==1)
prasanthbj05 266:ae588e75cfa4 1000 {
ee12b079 268:ded5306a1fd1 1001 #if scpz
ee12b079 268:ded5306a1fd1 1002 //gPC.printf("\n\rSCP - Scatter plot, extreme data conservation mode");
ee12b079 268:ded5306a1fd1 1003 #endif
prasanthbj05 266:ae588e75cfa4 1004 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 1005 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1006 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1007 if(at==0){
ee12b079 268:ded5306a1fd1 1008 #if scpz
ee12b079 268:ded5306a1fd1 1009 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 1010 #endif
prasanthbj05 266:ae588e75cfa4 1011 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1012 // below 4 lines - filling the proton ane electron energy bins with zeros(junk value) since they're not available in srp
prasanthbj05 266:ae588e75cfa4 1013 space = adjust(4, (compress(0,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1014 space = adjust(8, (compress(0,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1015 space = adjust(4, (compress(0,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1016 space = adjust(8, (compress(0,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1017 }
prasanthbj05 266:ae588e75cfa4 1018 else if(at==1){
ee12b079 268:ded5306a1fd1 1019 #if scpz
ee12b079 268:ded5306a1fd1 1020 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 1021 #endif
prasanthbj05 266:ae588e75cfa4 1022 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1023 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1024 space = adjust(1, (compress(0,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1025 space = adjust(8, (compress(0,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1026 space = adjust(1, (compress(0,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1027 space = adjust(8, (compress(0,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1028 }
prasanthbj05 266:ae588e75cfa4 1029 }
prasanthbj05 266:ae588e75cfa4 1030 }
prasanthbj05 266:ae588e75cfa4 1031 /*---------------------------------------------forming a science packet ends here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 1032
ee12b079 93:4d76de54a699 1033 id = 0;
ee12b079 93:4d76de54a699 1034 if(srp_mode == 0 && compression_option == 0){
ee12b079 93:4d76de54a699 1035 if(at == 0){
prasanthbj05 266:ae588e75cfa4 1036 length = 228+2; //2 spare bits
ee12b079 93:4d76de54a699 1037 if(pzf == 0)
ee12b079 93:4d76de54a699 1038 length += 121;
ee12b079 93:4d76de54a699 1039 if(ezf == 0)
ee12b079 93:4d76de54a699 1040 length +=41;
ee12b079 93:4d76de54a699 1041 }else if(at == 1){
prasanthbj05 266:ae588e75cfa4 1042 length = 266+6; //6 spare bits
ee12b079 93:4d76de54a699 1043 if(pzf == 0)
ee12b079 93:4d76de54a699 1044 length += 136;
ee12b079 93:4d76de54a699 1045 if(ezf == 0)
ee12b079 93:4d76de54a699 1046 length += 40;
ee12b079 93:4d76de54a699 1047 }
prasanthbj05 266:ae588e75cfa4 1048 }else if(srp_mode == 0 && compression_option == 1){ //data conservation mode
ee12b079 93:4d76de54a699 1049 if(at == 0){
prasanthbj05 266:ae588e75cfa4 1050 length = 94+2; //2 spare bits
ee12b079 93:4d76de54a699 1051 if(pzf == 0)
ee12b079 93:4d76de54a699 1052 length += 12;
ee12b079 93:4d76de54a699 1053 if(ezf == 0)
ee12b079 93:4d76de54a699 1054 length += 12;
ee12b079 93:4d76de54a699 1055 }else if(at == 1){
prasanthbj05 266:ae588e75cfa4 1056 length = 123+3; //3 spare bits
prasanthbj05 266:ae588e75cfa4 1057 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 1058 length += 9;
prasanthbj05 266:ae588e75cfa4 1059 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 1060 length += 9;
prasanthbj05 266:ae588e75cfa4 1061 }
prasanthbj05 266:ae588e75cfa4 1062 }
prasanthbj05 266:ae588e75cfa4 1063 else if( srp_mode == 1){
prasanthbj05 266:ae588e75cfa4 1064 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1065 length = 368;
prasanthbj05 266:ae588e75cfa4 1066 else if(at == 1)
prasanthbj05 266:ae588e75cfa4 1067 length = 432;
prasanthbj05 266:ae588e75cfa4 1068 }
prasanthbj05 266:ae588e75cfa4 1069 else if(compression_option == 2) //in extreme data conservation mode, length is same for both srp_modes
prasanthbj05 266:ae588e75cfa4 1070 {
prasanthbj05 266:ae588e75cfa4 1071 if(at == 0){
prasanthbj05 266:ae588e75cfa4 1072 length = 31+1; //1 spare bits
prasanthbj05 266:ae588e75cfa4 1073 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 1074 length += 12;
prasanthbj05 266:ae588e75cfa4 1075 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 1076 length += 12;
prasanthbj05 266:ae588e75cfa4 1077 }else if(at == 1){
prasanthbj05 266:ae588e75cfa4 1078 length = 36+2; //2 spare bits
ee12b079 93:4d76de54a699 1079 if(pzf == 0)
ee12b079 93:4d76de54a699 1080 length += 9;
ee12b079 93:4d76de54a699 1081 if(ezf == 0)
ee12b079 93:4d76de54a699 1082 length += 9;
ee12b079 93:4d76de54a699 1083 }
ee12b079 93:4d76de54a699 1084 }
ee12b079 93:4d76de54a699 1085 length = (length%8==0)?(length/8):(length/8)+1;
ee12b079 268:ded5306a1fd1 1086 #if scpz
ee12b079 268:ded5306a1fd1 1087 //gPC.printf("\n\rSCP packet length = %d",length);
ee12b079 268:ded5306a1fd1 1088 #endif
ee12b079 268:ded5306a1fd1 1089 if(position_tm_frame[id]>129){
ee12b079 268:ded5306a1fd1 1090 #if scpz
ee12b079 268:ded5306a1fd1 1091 //gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
ee12b079 268:ded5306a1fd1 1092 //gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 1093 #endif
prasanthbj05 266:ae588e75cfa4 1094 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1095 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 1096 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1097 }
prasanthbj05 266:ae588e75cfa4 1098 }
prasanthbj05 266:ae588e75cfa4 1099 if(position_tm_frame[id]==position_tm_starting[id]){
prasanthbj05 266:ae588e75cfa4 1100 frames[id][4] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1101 }
prasanthbj05 266:ae588e75cfa4 1102 for(int j= 0; j < length ;)
prasanthbj05 266:ae588e75cfa4 1103 {
prasanthbj05 266:ae588e75cfa4 1104 if(position_tm_frame[id]==frames[id][4]){
ee12b079 268:ded5306a1fd1 1105 #if scpz
ee12b079 268:ded5306a1fd1 1106 //gPC.printf("\n\rInserting Time into SCP_TM");
ee12b079 268:ded5306a1fd1 1107 #endif
prasanthbj05 266:ae588e75cfa4 1108 frames[id][5] = (uint8_t)((sci_time>>29)&0x3f);
prasanthbj05 266:ae588e75cfa4 1109 frames[id][6] = (uint8_t)((sci_time>>21)&0xff);
prasanthbj05 266:ae588e75cfa4 1110 frames[id][7] = (uint8_t)((sci_time>>13)&0x3f);
prasanthbj05 266:ae588e75cfa4 1111 }
prasanthbj05 266:ae588e75cfa4 1112 if(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1113 frames[id][position_tm_frame[id]] = scp[j];
prasanthbj05 266:ae588e75cfa4 1114 j++;
ee12b079 93:4d76de54a699 1115 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1116 }
prasanthbj05 266:ae588e75cfa4 1117 if(position_tm_frame[id] == 132) //space full in the frame bro
prasanthbj05 266:ae588e75cfa4 1118 {
ee12b079 268:ded5306a1fd1 1119 #if scpz
ee12b079 268:ded5306a1fd1 1120 //gPC.printf("\n\rSCP_TM frame full. Length of current SCP packet = %d",j);
ee12b079 268:ded5306a1fd1 1121 #endif
prasanthbj05 266:ae588e75cfa4 1122 pointer = frames[id];
prasanthbj05 266:ae588e75cfa4 1123 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 1124 space = adjust(4,1,pointer,space);
prasanthbj05 266:ae588e75cfa4 1125 FSC_science = FSC_CURRENT[1];
ee12b079 269:72529b247333 1126 gPC.printf("1 = 0x%X",FSC_science);
prasanthbj05 266:ae588e75cfa4 1127 frames[id][1] = (FSC_science>>16)&0xff;
prasanthbj05 266:ae588e75cfa4 1128 frames[id][2] = (FSC_science>>8)&0xff;
prasanthbj05 266:ae588e75cfa4 1129 frames[id][3] = (FSC_science)&0xff;
prasanthbj05 266:ae588e75cfa4 1130 temp_crc = crc16_gen(frames[id],132);
prasanthbj05 266:ae588e75cfa4 1131 frames[id][132] = temp_crc>>8;
prasanthbj05 266:ae588e75cfa4 1132 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1133 #if scpz
ee12b079 268:ded5306a1fd1 1134 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
ee12b079 268:ded5306a1fd1 1135 gPC.printf("\n\rPrinting SCP_TM\n\r{");
ee12b079 268:ded5306a1fd1 1136 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 1137 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 1138 }
ee12b079 268:ded5306a1fd1 1139 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 1140 #endif
prasanthbj05 266:ae588e75cfa4 1141 exor(frames[id]);
prasanthbj05 266:ae588e75cfa4 1142 convolution(frames[id]);
prasanthbj05 266:ae588e75cfa4 1143 interleave(TM_convoluted_data,TM_interleave_data);
prasanthbj05 266:ae588e75cfa4 1144 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
prasanthbj05 266:ae588e75cfa4 1145
ee12b079 268:ded5306a1fd1 1146 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,1); //sd_write returns ack, for now not included
ee12b079 268:ded5306a1fd1 1147 if(sd_stat)
ee12b079 268:ded5306a1fd1 1148 {
ee12b079 268:ded5306a1fd1 1149 gPC.puts("sd write fail");
ee12b079 268:ded5306a1fd1 1150 }
ee12b079 268:ded5306a1fd1 1151
prasanthbj05 266:ae588e75cfa4 1152 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 1153 frames[id][4] = (length - j)+position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1154 }
ee12b079 93:4d76de54a699 1155 }
ee12b079 268:ded5306a1fd1 1156 #if scpz_last
ee12b079 268:ded5306a1fd1 1157 //gPC.printf("\n\rPrinting the last SFP_TM frame");
ee12b079 268:ded5306a1fd1 1158 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 1159 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 1160 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 1161 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 1162 }
ee12b079 268:ded5306a1fd1 1163 if(position_tm_frame[id]==132){
ee12b079 268:ded5306a1fd1 1164 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
ee12b079 268:ded5306a1fd1 1165 pointer = frames[id];
ee12b079 268:ded5306a1fd1 1166 if(id == 1){ //below threshold
ee12b079 268:ded5306a1fd1 1167 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1168 space = adjust(4,3,pointer,space);
ee12b079 268:ded5306a1fd1 1169 FSC_science = FSC_CURRENT[1]; ///to be used as this, but FSC_CURRENT[] is 32 bit
ee12b079 268:ded5306a1fd1 1170 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 268:ded5306a1fd1 1171 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1172 frames[id][3] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1173 frames[id][4] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 1174 }
ee12b079 268:ded5306a1fd1 1175 else if(id == 2) //above threshold
ee12b079 268:ded5306a1fd1 1176 {
ee12b079 268:ded5306a1fd1 1177 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1178 space = adjust(4,2,pointer,space);
ee12b079 268:ded5306a1fd1 1179 FSC_science = FSC_CURRENT[2]; ///to be used as this
ee12b079 268:ded5306a1fd1 1180 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1181 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1182 frames[id][3] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 1183 }
ee12b079 268:ded5306a1fd1 1184 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 1185 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 1186 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1187
ee12b079 268:ded5306a1fd1 1188
ee12b079 268:ded5306a1fd1 1189 gPC.printf("\n\rPrinting SCP_TM\n\r{");
ee12b079 268:ded5306a1fd1 1190 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 1191 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 1192 }
ee12b079 268:ded5306a1fd1 1193 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 1194 }
ee12b079 268:ded5306a1fd1 1195 #endif
prasanthbj05 266:ae588e75cfa4 1196 }