for frequency correction testing

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Committer:
ee12b079
Date:
Wed Jul 20 09:58:59 2016 +0000
Revision:
268:ded5306a1fd1
Parent:
267:783c248a6207
Child:
271:72529b247333
Testing with SBC

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 268:ded5306a1fd1 430 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
ee12b079 93:4d76de54a699 431 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 93:4d76de54a699 432 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 433 frames[id][3] = (FSC_science>>8)&0xff;
prasanthbj05 266:ae588e75cfa4 434 frames[id][4] = FSC_science&0xff;
prasanthbj05 266:ae588e75cfa4 435 }
prasanthbj05 266:ae588e75cfa4 436 else if(id == 2) //above threshold
prasanthbj05 266:ae588e75cfa4 437 {
ee12b079 93:4d76de54a699 438 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 439 space = adjust(4,2,pointer,space);
prasanthbj05 266:ae588e75cfa4 440 FSC_science = FSC_CURRENT[2]; ///to be used as this
ee12b079 93:4d76de54a699 441 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 93:4d76de54a699 442 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 93:4d76de54a699 443 frames[id][3] = FSC_science&0xff;
ee12b079 93:4d76de54a699 444 }
ee12b079 93:4d76de54a699 445 temp_crc = crc16_gen(frames[id],132);
ee12b079 93:4d76de54a699 446 frames[id][132] = temp_crc>>8;
ee12b079 93:4d76de54a699 447 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 448
ee12b079 268:ded5306a1fd1 449 #if srpz
ee12b079 268:ded5306a1fd1 450 gPC.printf("\n\rPrinting SFP_TM\n\r{");
ee12b079 268:ded5306a1fd1 451 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 452 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 453 }
ee12b079 268:ded5306a1fd1 454 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 455 #endif
prasanthbj05 266:ae588e75cfa4 456 /*------------------current TM frame completely filled-----------------------*/
ee12b079 171:31bdf83591a1 457
ee12b079 114:9fb55057b13f 458 exor(frames[id]);
ee12b079 93:4d76de54a699 459 convolution(frames[id]);
ee12b079 93:4d76de54a699 460 interleave(TM_convoluted_data,TM_interleave_data);
ee12b079 93:4d76de54a699 461 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
prasanthbj05 266:ae588e75cfa4 462 if(id == 1)
ee12b079 195:6a549c0e9287 463 {
ee12b079 268:ded5306a1fd1 464 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,3); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 465 }
prasanthbj05 266:ae588e75cfa4 466 else if (id == 2)
prasanthbj05 266:ae588e75cfa4 467 {
ee12b079 268:ded5306a1fd1 468 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,2); //sd_write will return ack later, for now not included
prasanthbj05 266:ae588e75cfa4 469 }
ee12b079 268:ded5306a1fd1 470 if(sd_stat)
ee12b079 268:ded5306a1fd1 471 {
ee12b079 268:ded5306a1fd1 472 gPC.puts("sd write fail");
ee12b079 268:ded5306a1fd1 473 }
ee12b079 93:4d76de54a699 474 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 475 frames[id][6-id] = (length - j)+position_tm_starting[id];
ee12b079 93:4d76de54a699 476 }
shreeshas95 1:a0055b3280c8 477 }
prasanthbj05 266:ae588e75cfa4 478 /*------------------------------finished inserting the sfp packet into the TM frame(s)-------------------------------------*/
ee12b079 268:ded5306a1fd1 479 } // for loop bracket which runs 60 times
ee12b079 268:ded5306a1fd1 480 #if srpz_last
ee12b079 268:ded5306a1fd1 481 //gPC.printf("\n\rPrinting the last SFP_TM frame");
ee12b079 268:ded5306a1fd1 482 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 483 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 484 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 485 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 486 }
ee12b079 268:ded5306a1fd1 487 if(position_tm_frame[id]==132){
ee12b079 268:ded5306a1fd1 488 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][6-id]]);
ee12b079 268:ded5306a1fd1 489 pointer = frames[id];
ee12b079 268:ded5306a1fd1 490 if(id == 1){ //below threshold
ee12b079 268:ded5306a1fd1 491 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 492 space = adjust(4,3,pointer,space);
ee12b079 268:ded5306a1fd1 493 FSC_science = FSC_CURRENT[3]; ///to be used as this, but FSC_CURRENT[] is 32 bit
ee12b079 268:ded5306a1fd1 494 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 268:ded5306a1fd1 495 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 496 frames[id][3] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 497 frames[id][4] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 498 }
ee12b079 268:ded5306a1fd1 499 else if(id == 2) //above threshold
ee12b079 268:ded5306a1fd1 500 {
ee12b079 268:ded5306a1fd1 501 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 502 space = adjust(4,2,pointer,space);
ee12b079 268:ded5306a1fd1 503 FSC_science = FSC_CURRENT[2]; ///to be used as this
ee12b079 268:ded5306a1fd1 504 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 505 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 506 frames[id][3] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 507 }
ee12b079 268:ded5306a1fd1 508 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 509 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 510 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 511
ee12b079 268:ded5306a1fd1 512 gPC.printf("\n\rPrinting SFP_TM\n\r{");
ee12b079 268:ded5306a1fd1 513 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 514 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 515 }
ee12b079 268:ded5306a1fd1 516 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 517 }
ee12b079 268:ded5306a1fd1 518 #endif
ee12b079 93:4d76de54a699 519 at = 0; pzf = 1; ezf = 1;
ee12b079 93:4d76de54a699 520 srp_mode = head[2]&0x1;
prasanthbj05 266:ae588e75cfa4 521 uint8_t compression_option = (head[2]>>1)&0x3;
prasanthbj05 266:ae588e75cfa4 522 /*-------------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT starts here-------------------------
prasanthbj05 266:ae588e75cfa4 523 ------------------(in case compression option = 0 , then tagging beacon packet(not yet formed) as AT or BT is also done)----------*/
prasanthbj05 266:ae588e75cfa4 524 if(srp_mode ==0)
prasanthbj05 266:ae588e75cfa4 525 {
prasanthbj05 266:ae588e75cfa4 526 if(compression_option == 0)
prasanthbj05 266:ae588e75cfa4 527 {
prasanthbj05 266:ae588e75cfa4 528 for(int i=0; i<52 ;i++)
prasanthbj05 266:ae588e75cfa4 529 {
prasanthbj05 266:ae588e75cfa4 530 if(scp_bin[i] > scp_threshold_m0[i])
prasanthbj05 266:ae588e75cfa4 531 {
ee12b079 268:ded5306a1fd1 532 //gPC.printf("\n\rSCP above threshold index: %d",i);
ee12b079 93:4d76de54a699 533 at = 1;
shreeshas95 1:a0055b3280c8 534 break;
shreeshas95 1:a0055b3280c8 535 }
shreeshas95 1:a0055b3280c8 536 }
ee12b079 93:4d76de54a699 537 }
prasanthbj05 266:ae588e75cfa4 538 else if(compression_option == 1)
prasanthbj05 266:ae588e75cfa4 539 {
ee12b079 268:ded5306a1fd1 540 if(scp_bin[44] > scp_threshold_m0_1[0]){//gPC.printf("\n\rSCP above threshold index: 44");
ee12b079 268:ded5306a1fd1 541 at=1;}
prasanthbj05 266:ae588e75cfa4 542 for(int i=0; i<4 ;i++)
prasanthbj05 266:ae588e75cfa4 543 {
prasanthbj05 266:ae588e75cfa4 544 if(scp_bin[48+i] > scp_threshold_m0_1[i+1])
prasanthbj05 266:ae588e75cfa4 545 {
ee12b079 268:ded5306a1fd1 546 //gPC.printf("\n\rSCP above threshold index: %d",i+48);
ee12b079 93:4d76de54a699 547 at = 1;
ee12b079 93:4d76de54a699 548 break;
ee12b079 93:4d76de54a699 549 }
shreeshas95 1:a0055b3280c8 550 }
ee12b079 268:ded5306a1fd1 551 if(scp_bin[17] > scp_threshold_m0_1[5]){
ee12b079 268:ded5306a1fd1 552 //gPC.printf("\n\rSP above threshold index: 17");
ee12b079 268:ded5306a1fd1 553 at=1;
ee12b079 268:ded5306a1fd1 554 }
ee12b079 268:ded5306a1fd1 555 if(scp_bin[23] > scp_threshold_m0_1[6]){
ee12b079 268:ded5306a1fd1 556 //gPC.printf("\n\rSP above threshold index: 23");
ee12b079 268:ded5306a1fd1 557 at=1;
ee12b079 268:ded5306a1fd1 558 }
prasanthbj05 266:ae588e75cfa4 559
ee12b079 93:4d76de54a699 560 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 561 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 562 {
ee12b079 93:4d76de54a699 563 proton_scp_sum += scp_bin[i];
shreeshas95 1:a0055b3280c8 564 }
prasanthbj05 266:ae588e75cfa4 565 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 566 {
ee12b079 93:4d76de54a699 567 electron_scp_sum += scp_bin[18+i];
ee12b079 93:4d76de54a699 568 }
ee12b079 268:ded5306a1fd1 569 if(proton_scp_sum > scp_threshold_m0_1[7]){ //gPC.printf("\n\rProton_scp_sum above threshold");
ee12b079 268:ded5306a1fd1 570 at=1;}
ee12b079 268:ded5306a1fd1 571 if(electron_scp_sum > scp_threshold_m0_1[8]){//gPC.printf("\n\rElectron_scp_sum above threshold");
ee12b079 268:ded5306a1fd1 572 at=1;}
shreeshas95 1:a0055b3280c8 573 }
prasanthbj05 266:ae588e75cfa4 574 else if(compression_option == 2)
prasanthbj05 266:ae588e75cfa4 575 {
ee12b079 268:ded5306a1fd1 576 if(scp_bin[50] > scp_sfp_threshold_m0_2[0]){//gPC.printf("\n\rSCP above threshold index:50");
ee12b079 268:ded5306a1fd1 577 at=1;}
prasanthbj05 266:ae588e75cfa4 578 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 579 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 580 {
prasanthbj05 266:ae588e75cfa4 581 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 582 }
prasanthbj05 266:ae588e75cfa4 583 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 584 {
prasanthbj05 266:ae588e75cfa4 585 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 586 }
ee12b079 268:ded5306a1fd1 587 if(proton_scp_sum > scp_sfp_threshold_m0_2[1]){//gPC.printf("\n\rProton_SCP_sum above threshold");
ee12b079 268:ded5306a1fd1 588 at=1;}
ee12b079 268:ded5306a1fd1 589 if(electron_scp_sum > scp_sfp_threshold_m0_2[2]){//gPC.printf("\n\rElectron above threshold");
ee12b079 268:ded5306a1fd1 590 at=1;}
prasanthbj05 266:ae588e75cfa4 591 }
prasanthbj05 266:ae588e75cfa4 592 }
prasanthbj05 266:ae588e75cfa4 593 else if(srp_mode ==1)
prasanthbj05 266:ae588e75cfa4 594 {
ee12b079 268:ded5306a1fd1 595 if(compression_option==0){
prasanthbj05 266:ae588e75cfa4 596 for(int i=0; i<48; i++)
prasanthbj05 266:ae588e75cfa4 597 {
prasanthbj05 266:ae588e75cfa4 598 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 599 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
prasanthbj05 266:ae588e75cfa4 600 at = 1;
prasanthbj05 266:ae588e75cfa4 601 break;
prasanthbj05 266:ae588e75cfa4 602 }
prasanthbj05 266:ae588e75cfa4 603 }
prasanthbj05 266:ae588e75cfa4 604 for(int i=48; i<52; i++)
prasanthbj05 266:ae588e75cfa4 605 {
prasanthbj05 266:ae588e75cfa4 606 if(scp_bin[i] > scp_threshold_m1[i]){
ee12b079 268:ded5306a1fd1 607 //gPC.printf("\nSCP above threshold index:%d, Value:%d",i,scp_bin[i]);
prasanthbj05 266:ae588e75cfa4 608 at = 1;
prasanthbj05 266:ae588e75cfa4 609 break;
prasanthbj05 266:ae588e75cfa4 610 }
shreeshas95 1:a0055b3280c8 611 }
shreeshas95 1:a0055b3280c8 612 }
ee12b079 268:ded5306a1fd1 613 else if(compression_option==2){
ee12b079 268:ded5306a1fd1 614 if(scp_bin[50]>scp_sfp_threshold_m0_2[0]){
ee12b079 268:ded5306a1fd1 615 //gPC.printf("\nSCP above threshold index:50, Value:%",scp_bin[50]);
ee12b079 268:ded5306a1fd1 616 at=1;
ee12b079 268:ded5306a1fd1 617 }
prasanthbj05 266:ae588e75cfa4 618 }
prasanthbj05 266:ae588e75cfa4 619 }
prasanthbj05 266:ae588e75cfa4 620 /*----------------------------Tagging the scp packet formed from these 60 sfp's as AT or BT ends here--------------------------*/
prasanthbj05 266:ae588e75cfa4 621
prasanthbj05 266:ae588e75cfa4 622 if(srp_mode == 0)
prasanthbj05 266:ae588e75cfa4 623 {
prasanthbj05 266:ae588e75cfa4 624 //determining if non zero values of proton and electron bins exist for calibrated mode (srp)
prasanthbj05 266:ae588e75cfa4 625 for(int i=0; i<17 ;i++)
prasanthbj05 266:ae588e75cfa4 626 {
prasanthbj05 266:ae588e75cfa4 627 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 628 pzf = 0;
prasanthbj05 266:ae588e75cfa4 629 }
prasanthbj05 266:ae588e75cfa4 630 for(int i=18; i<23 ;i++)
prasanthbj05 266:ae588e75cfa4 631 {
prasanthbj05 266:ae588e75cfa4 632 if(scp_bin[i]>0)
prasanthbj05 266:ae588e75cfa4 633 ezf = 0;
prasanthbj05 266:ae588e75cfa4 634 }
prasanthbj05 266:ae588e75cfa4 635 }
prasanthbj05 266:ae588e75cfa4 636 /*-----------------------------------------Tagging beacon packet as AT or BT starts here-------------------------------------*/
prasanthbj05 266:ae588e75cfa4 637 beacon_at = 0;
prasanthbj05 266:ae588e75cfa4 638 if(srp_mode==0) //those bins which can be meaningfully compared only in srp_mode==0
prasanthbj05 266:ae588e75cfa4 639 {
prasanthbj05 266:ae588e75cfa4 640 if(scp_bin[44]>beacon_threshold[0]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 641 if(scp_bin[17]>beacon_threshold[5]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 642 if(scp_bin[23]>beacon_threshold[6]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 643 proton_scp_sum = 0; electron_scp_sum = 0;
prasanthbj05 266:ae588e75cfa4 644 for(int i=0;i<17;i++)
prasanthbj05 266:ae588e75cfa4 645 {
prasanthbj05 266:ae588e75cfa4 646 proton_scp_sum += scp_bin[i];
prasanthbj05 266:ae588e75cfa4 647 }
prasanthbj05 266:ae588e75cfa4 648 for(int i=0; i<5; i++)
prasanthbj05 266:ae588e75cfa4 649 {
prasanthbj05 266:ae588e75cfa4 650 electron_scp_sum += scp_bin[18+i];
prasanthbj05 266:ae588e75cfa4 651 }
prasanthbj05 266:ae588e75cfa4 652 if(proton_scp_sum > beacon_threshold[7]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 653 if(electron_scp_sum > beacon_threshold[8]) beacon_at =1;
prasanthbj05 266:ae588e75cfa4 654 }
prasanthbj05 266:ae588e75cfa4 655 if(scp_bin[48]>beacon_threshold[1]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 656 if(scp_bin[49]>beacon_threshold[2]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 657 if(scp_bin[50]>beacon_threshold[3]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 658 if(scp_bin[51]>beacon_threshold[4]) beacon_at = 1;
prasanthbj05 266:ae588e75cfa4 659 /*----------------------------------------Tagging beacon packet as AT or BT ends here------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 660
prasanthbj05 266:ae588e75cfa4 661 /*-----------------------------------------------Forming the beacon packet starts here-----------------------------------------*/
prasanthbj05 266:ae588e75cfa4 662 //Last 512 bits of beacon_array excluding CRC bits is used for storing the 5 most recent beacon packets
prasanthbj05 266:ae588e75cfa4 663
prasanthbj05 266:ae588e75cfa4 664 if(beacon_cntr == 1)
prasanthbj05 266:ae588e75cfa4 665 {
prasanthbj05 267:783c248a6207 666 beacon_ptr = &(beacon_array[47]); // starting block address, stores the oldest(among the 5 most recent) beacon packet
prasanthbj05 266:ae588e75cfa4 667 }
prasanthbj05 266:ae588e75cfa4 668 else if(beacon_cntr>1 && beacon_cntr<6)
prasanthbj05 266:ae588e75cfa4 669 {
prasanthbj05 267:783c248a6207 670 beacon_ptr +=17; // increase the block number(totally 5 blocks for 5 beacon packets)
prasanthbj05 266:ae588e75cfa4 671 }
prasanthbj05 266:ae588e75cfa4 672 else if(beacon_cntr == 6)
prasanthbj05 266:ae588e75cfa4 673 {
prasanthbj05 267:783c248a6207 674 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 675 { // overwrite the new beacon packet in the 5th block
prasanthbj05 267:783c248a6207 676 beacon_array[47+i] = beacon_array[64+i];
prasanthbj05 267:783c248a6207 677 beacon_array[64+i] = beacon_array[81+i];
prasanthbj05 267:783c248a6207 678 beacon_array[81+i] = beacon_array[98+i];
prasanthbj05 267:783c248a6207 679 beacon_array[98+i] = beacon_array[115+i];
prasanthbj05 266:ae588e75cfa4 680 }
prasanthbj05 267:783c248a6207 681 beacon_ptr = &(beacon_array[115]); //address of the 5th block
prasanthbj05 266:ae588e75cfa4 682 beacon_cntr = 5;
prasanthbj05 266:ae588e75cfa4 683 }
prasanthbj05 266:ae588e75cfa4 684 pointer = beacon_ptr; debug_cntr = 0; space = 8;
prasanthbj05 267:783c248a6207 685 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 267:783c248a6207 686 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 687 space = adjust(3,(sci_time>>32)&0x07,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 688 space = adjust(8,(sci_time>>24)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 689 space = adjust(8,(sci_time>>16)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 690 space = adjust(8,(sci_time>>8)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 691 space = adjust(8,(sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 692 space = adjust(4, (attitude)&0x0f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 693
prasanthbj05 266:ae588e75cfa4 694 if(srp_mode==0){
prasanthbj05 266:ae588e75cfa4 695 if(beacon_at == 0){
prasanthbj05 267:783c248a6207 696 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 697 space = adjust(6, compress(scp_bin[44],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 698 space = adjust(7, compress(scp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 699 space = adjust(7, compress(scp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 700 space = adjust(7, compress(scp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 701 space = adjust(7, compress(scp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 702 space = adjust(6, compress(scp_bin[17],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 703 space = adjust(6, compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 704 space = adjust(4, compress(proton_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 705 space = adjust(8, compress(proton_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 706 space = adjust(4, compress(electron_scp_sum ,10,2)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 707 space = adjust(8, compress(electron_scp_sum ,10,2),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 708 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 709 for(int temp_i = 12; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 710 {
prasanthbj05 266:ae588e75cfa4 711 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 712 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 713 }
prasanthbj05 266:ae588e75cfa4 714 }
prasanthbj05 266:ae588e75cfa4 715 else if(beacon_at==1){
prasanthbj05 266:ae588e75cfa4 716 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 717 space = adjust(1, compress(sfp_bin[44],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 718 space = adjust(8, compress(sfp_bin[44],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 719 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 720 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 721 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 722 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 723 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 724 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 725 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 726 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 727 space = adjust(1, compress(sfp_bin[17],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 728 space = adjust(8, compress(sfp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 729 space = adjust(1, compress(sfp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 730 space = adjust(8, compress(sfp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 731 space = adjust(1, compress(proton_scp_sum ,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 732 space = adjust(8, compress(proton_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 733 space = adjust(1, compress(electron_scp_sum,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 734 space = adjust(8, compress(electron_scp_sum ,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 735 //cout<<"for beacon space = "<<(space&0x0f)<<" counter = "<<debug_cntr;
prasanthbj05 266:ae588e75cfa4 736 }
prasanthbj05 266:ae588e75cfa4 737 }else if(srp_mode==1){
prasanthbj05 266:ae588e75cfa4 738 if(beacon_at==0){
prasanthbj05 267:783c248a6207 739 space = adjust(1, 0,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 740 space = adjust(6, compress(0,3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 741 space = adjust(7, compress(sfp_bin[48],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 742 space = adjust(7, compress(sfp_bin[49],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 743 space = adjust(7, compress(sfp_bin[50],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 744 space = adjust(7, compress(sfp_bin[51],4,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 745 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 746 for(uint8_t temp_i = 7; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 747 {
prasanthbj05 266:ae588e75cfa4 748 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 749 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 750 }
prasanthbj05 266:ae588e75cfa4 751 }
prasanthbj05 266:ae588e75cfa4 752 else if(beacon_at==1){
prasanthbj05 267:783c248a6207 753 space = adjust(1, 1,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 754 space = adjust(1, compress(0,6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 267:783c248a6207 755 space = adjust(8, compress(0,6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 756 space = adjust(4, compress(sfp_bin[48],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 757 space = adjust(8, compress(sfp_bin[48],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 758 space = adjust(4, compress(sfp_bin[49],9,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 759 space = adjust(8, compress(sfp_bin[49],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 760 space = adjust(4, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 761 space = adjust(8, compress(sfp_bin[50],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 762 space = adjust(4, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 763 space = adjust(8, compress(sfp_bin[51],9,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 764 pointer = pointer + 1;
prasanthbj05 266:ae588e75cfa4 765 for(uint8_t temp_i = 10; temp_i<14; temp_i++)
prasanthbj05 266:ae588e75cfa4 766 {
prasanthbj05 266:ae588e75cfa4 767 *pointer = 0;
prasanthbj05 266:ae588e75cfa4 768 pointer = pointer + 1;
ee12b079 93:4d76de54a699 769 }
shreeshas95 1:a0055b3280c8 770 }
shreeshas95 1:a0055b3280c8 771 }
prasanthbj05 266:ae588e75cfa4 772 beacon_cntr++;
prasanthbj05 266:ae588e75cfa4 773 /*--------------------------------------------------beacon packet ends here--------------------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 774
ee12b079 268:ded5306a1fd1 775 //gPC.printf("\n\rSCP count: %d");
prasanthbj05 266:ae588e75cfa4 776 uint8_t packet_pp,time_diff;
prasanthbj05 266:ae588e75cfa4 777 /*------------------------------------------Forming a science packet(scp) starts here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 778
ee12b079 93:4d76de54a699 779 pointer = scp; debug_cntr = 0; space = 8;
prasanthbj05 266:ae588e75cfa4 780 time_diff = 0;
prasanthbj05 266:ae588e75cfa4 781
prasanthbj05 266:ae588e75cfa4 782 packet_pp = 1;
prasanthbj05 266:ae588e75cfa4 783 if((((uint8_t)(sci_time>>7))&0x3f)<(((uint8_t)(time_prev_scp>>7))&0x3f))
prasanthbj05 266:ae588e75cfa4 784 {
prasanthbj05 266:ae588e75cfa4 785 time_diff = time_diff+60;
prasanthbj05 266:ae588e75cfa4 786 }
prasanthbj05 266:ae588e75cfa4 787 time_diff += (((uint8_t)(sci_time>>7))&0x3f);
prasanthbj05 266:ae588e75cfa4 788 time_diff -= (((uint8_t)(time_prev_scp>>7))&0x3f);
prasanthbj05 266:ae588e75cfa4 789 if(time_diff>10){
prasanthbj05 266:ae588e75cfa4 790 packet_pp = 0;
prasanthbj05 266:ae588e75cfa4 791 }
prasanthbj05 266:ae588e75cfa4 792 time_prev_scp = sci_time;
prasanthbj05 266:ae588e75cfa4 793 uint32_t sfp_at_counter;
prasanthbj05 266:ae588e75cfa4 794 sfp_at_counter = FSC_CURRENT[2];
prasanthbj05 266:ae588e75cfa4 795 space = adjust(1, packet_pp,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 796 space = adjust(5, (sci_time>>8)&0x1f,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 797 space = adjust(8, (sci_time)&0xff,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 798 space = adjust(4, (attitude)&0xf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 799 space = adjust(2, compression_option,pointer,space); pointer += space>>4; debug_cntr += space>>4; //first two bits of compression option
prasanthbj05 266:ae588e75cfa4 800 space = adjust(1, at,pointer,space); pointer += space>>4; debug_cntr += space>>4; //last bit of compression option
prasanthbj05 266:ae588e75cfa4 801 space = adjust(1, srp_mode,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 802 if(!(srp_mode==0 && compression_option==2))
prasanthbj05 266:ae588e75cfa4 803 {
prasanthbj05 266:ae588e75cfa4 804 space = adjust(8, sfp_at_counter>>16,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 805 space = adjust(8, sfp_at_counter>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 806 space = adjust(8, sfp_at_counter,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 807 }
ee12b079 93:4d76de54a699 808 if(srp_mode == 0 && compression_option == 0){ //normal callibrated mode
ee12b079 268:ded5306a1fd1 809 #if scpz
ee12b079 268:ded5306a1fd1 810 //gPC.printf("\n\rSCP - Normal calibrated mode");
ee12b079 268:ded5306a1fd1 811 #endif
prasanthbj05 266:ae588e75cfa4 812 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 813 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 814 if(at == 0 ){
ee12b079 268:ded5306a1fd1 815 #if scpz
ee12b079 268:ded5306a1fd1 816 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 817 #endif
ee12b079 93:4d76de54a699 818 for(int i = 0; i<8 ;i++){
prasanthbj05 266:ae588e75cfa4 819 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 820 }
ee12b079 93:4d76de54a699 821 for(int i = 0; i<12 ;i++){
prasanthbj05 266:ae588e75cfa4 822 space = adjust(5,compress(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 823 }
ee12b079 93:4d76de54a699 824 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 825 space = adjust(6,compress(scp_bin[44+i],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 826 }
ee12b079 93:4d76de54a699 827 for(int i = 0; i<4 ;i++){
ee12b079 93:4d76de54a699 828 space = adjust(7,compress(scp_bin[48+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 829 }
prasanthbj05 266:ae588e75cfa4 830 space = adjust(6,compress(scp_bin[17],3,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 831 space = adjust(6,compress(scp_bin[23],3,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 832 if(pzf == 0){
ee12b079 93:4d76de54a699 833 for(int i = 0; i<2 ;i++){
ee12b079 93:4d76de54a699 834 space = adjust(8,compress(scp_bin[i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 835 }
ee12b079 93:4d76de54a699 836 for(int i = 0; i<15 ;i++){
prasanthbj05 266:ae588e75cfa4 837 space = adjust(7,compress(scp_bin[i+2],5,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 838 }
ee12b079 93:4d76de54a699 839 }
ee12b079 93:4d76de54a699 840 if(ezf == 0){
ee12b079 93:4d76de54a699 841 space = adjust(1,compress(scp_bin[18],7,2)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 842 space = adjust(8,compress(scp_bin[18],7,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 843 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 844 space = adjust(8,compress(scp_bin[19+i],6,2) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 845 }
ee12b079 93:4d76de54a699 846 }
ee12b079 93:4d76de54a699 847 }// below threshold ends here
ee12b079 93:4d76de54a699 848 if(at == 1){
ee12b079 268:ded5306a1fd1 849 #if scpz
ee12b079 268:ded5306a1fd1 850 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 851 #endif
ee12b079 93:4d76de54a699 852 for(int i = 0; i<8 ;i++){
ee12b079 93:4d76de54a699 853 space = adjust(7,compress(scp_bin[24+i],4,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 854 }
ee12b079 93:4d76de54a699 855 for(int i = 0; i<12 ;i++){
ee12b079 93:4d76de54a699 856 space = adjust(5,compress(scp_bin[32+i],2,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 857 }
ee12b079 93:4d76de54a699 858 for(int i = 0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 859 space = adjust(1,compress(scp_bin[44+i],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 860 space = adjust(8,compress(scp_bin[44+i],6,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 861 }
ee12b079 93:4d76de54a699 862 for(int i=0; i<4 ;i++){
prasanthbj05 266:ae588e75cfa4 863 space = adjust(4,compress(scp_bin[48+i],9,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 864 space = adjust(8,compress(scp_bin[48+i],9,3) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 865 }
prasanthbj05 266:ae588e75cfa4 866 space = adjust(1,compress(scp_bin[17],6,3)>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 867 space = adjust(8,compress(scp_bin[17],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 868 space = adjust(1,compress(scp_bin[23],6,3)>>8,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 869 space = adjust(8,compress(scp_bin[23],6,3),pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 870
ee12b079 93:4d76de54a699 871 if(pzf == 0){
ee12b079 93:4d76de54a699 872 for(int i = 0; i<17 ; i++){
prasanthbj05 266:ae588e75cfa4 873 space = adjust(8, (compress(scp_bin[i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 874 }
ee12b079 93:4d76de54a699 875 }
ee12b079 93:4d76de54a699 876 if(ezf == 0){
ee12b079 93:4d76de54a699 877 for(int i = 0; i<5 ; i++){
ee12b079 93:4d76de54a699 878 space = adjust(8, (compress(scp_bin[18+i],5,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 879 }
ee12b079 93:4d76de54a699 880 }
ee12b079 93:4d76de54a699 881 } //above thresholds ends
ee12b079 93:4d76de54a699 882 } //srp_mode == 0 ends
ee12b079 93:4d76de54a699 883 if(srp_mode == 1){
ee12b079 268:ded5306a1fd1 884 #if scpz
ee12b079 268:ded5306a1fd1 885 //gPC.printf("\n\rSCP - Scatter plot mode");
ee12b079 268:ded5306a1fd1 886 #endif
ee12b079 93:4d76de54a699 887 if(at == 0){
ee12b079 268:ded5306a1fd1 888 #if scpz
ee12b079 268:ded5306a1fd1 889 //gPC.printf("\n\rBelow Threshold");
ee12b079 268:ded5306a1fd1 890 #endif
prasanthbj05 266:ae588e75cfa4 891 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 892 space = adjust(6, ((compress(scp_bin[i],3,3))&0xff) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 893 }
ee12b079 93:4d76de54a699 894 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 895 space = adjust(7, (compress(scp_bin[48+i],4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 896 }
ee12b079 93:4d76de54a699 897 }
ee12b079 93:4d76de54a699 898 if(at == 1){
ee12b079 268:ded5306a1fd1 899 #if scpz
ee12b079 268:ded5306a1fd1 900 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 901 #endif
prasanthbj05 266:ae588e75cfa4 902 for(int i=0; i<48; i++){
prasanthbj05 266:ae588e75cfa4 903 space = adjust(7, (compress((scp_bin[i]/2),4,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 904 }
ee12b079 93:4d76de54a699 905 for(int i = 0 ; i < 4 ; i++){
prasanthbj05 266:ae588e75cfa4 906 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 907 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 908 }
ee12b079 93:4d76de54a699 909 }
ee12b079 93:4d76de54a699 910 }// scp mode 1 end
ee12b079 93:4d76de54a699 911 if( srp_mode == 0 && compression_option == 1 ){ //scp data conservation mode
ee12b079 268:ded5306a1fd1 912 #if scpz
ee12b079 268:ded5306a1fd1 913 //gPC.printf("\n\rSCP - Calibrated data conservation mode");
ee12b079 268:ded5306a1fd1 914 #endif
ee12b079 93:4d76de54a699 915 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 916 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 917 if(at == 0){
ee12b079 268:ded5306a1fd1 918 #if scpz
ee12b079 268:ded5306a1fd1 919 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 920 #endif
prasanthbj05 266:ae588e75cfa4 921 space = adjust(6, (compress(scp_bin[44],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 922 for(int i=0; i<4; i++){
prasanthbj05 266:ae588e75cfa4 923 space = adjust(7, (compress(scp_bin[48+i],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 924 }
prasanthbj05 266:ae588e75cfa4 925 space = adjust(6, (compress(scp_bin[17],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 926 space = adjust(6, (compress(scp_bin[23],3,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 927 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 928 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 929 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 930 }
prasanthbj05 266:ae588e75cfa4 931 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 932 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 933 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 934 }
ee12b079 93:4d76de54a699 935 }else if(at == 1){
ee12b079 268:ded5306a1fd1 936 #if scpz
ee12b079 268:ded5306a1fd1 937 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 938 #endif
prasanthbj05 266:ae588e75cfa4 939 space = adjust(1, (compress(scp_bin[44],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 940 space = adjust(8, (compress(scp_bin[44],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 941 for(int i=0; i<4; i++){
ee12b079 93:4d76de54a699 942 space = adjust(4, (compress(scp_bin[48+i],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 943 space = adjust(8, (compress(scp_bin[48+i],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 944 }
prasanthbj05 266:ae588e75cfa4 945 space = adjust(1, (compress(scp_bin[17],6,3)>>8) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 946 space = adjust(8, (compress(scp_bin[17],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 947 space = adjust(1, (compress(scp_bin[23],6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 948 space = adjust(8, (compress(scp_bin[23],6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 949 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 950 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 951 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 952 }
ee12b079 93:4d76de54a699 953 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 954 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 955 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
ee12b079 93:4d76de54a699 956 }
ee12b079 93:4d76de54a699 957 }
prasanthbj05 266:ae588e75cfa4 958 }
prasanthbj05 266:ae588e75cfa4 959 if(compression_option == 2 ) //scp extreme data conservation mode
prasanthbj05 266:ae588e75cfa4 960 {
prasanthbj05 266:ae588e75cfa4 961 if(srp_mode==0)
prasanthbj05 266:ae588e75cfa4 962 {
ee12b079 268:ded5306a1fd1 963 #if scpz
ee12b079 268:ded5306a1fd1 964 //gPC.printf("\n\rSCP - calibrated extreme data conservation mode");
ee12b079 268:ded5306a1fd1 965 #endif
prasanthbj05 266:ae588e75cfa4 966 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 967 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 968 if(at==0){
ee12b079 268:ded5306a1fd1 969 #if scpz
ee12b079 268:ded5306a1fd1 970 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 971 #endif
prasanthbj05 266:ae588e75cfa4 972 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 973 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 974 space = adjust(4, (compress(proton_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 975 space = adjust(8, ( compress(proton_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 976 }
prasanthbj05 266:ae588e75cfa4 977 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 978 space = adjust(4, (compress(electron_scp_sum,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 979 space = adjust(8, (compress(electron_scp_sum,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 980 }
prasanthbj05 266:ae588e75cfa4 981 }else if(at==1){
ee12b079 268:ded5306a1fd1 982 #if scpz
ee12b079 268:ded5306a1fd1 983 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 984 #endif
prasanthbj05 266:ae588e75cfa4 985 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 986 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 987 if(pzf==0){
prasanthbj05 266:ae588e75cfa4 988 space = adjust(1, (compress(proton_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 989 space = adjust(8, (compress(proton_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 990 }
prasanthbj05 266:ae588e75cfa4 991 if(ezf==0){
prasanthbj05 266:ae588e75cfa4 992 space = adjust(1, (compress(electron_scp_sum,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 993 space = adjust(8, (compress(electron_scp_sum,6,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 994 }
prasanthbj05 266:ae588e75cfa4 995 }
prasanthbj05 266:ae588e75cfa4 996 }
prasanthbj05 266:ae588e75cfa4 997 else if(srp_mode==1)
prasanthbj05 266:ae588e75cfa4 998 {
ee12b079 268:ded5306a1fd1 999 #if scpz
ee12b079 268:ded5306a1fd1 1000 //gPC.printf("\n\rSCP - Scatter plot, extreme data conservation mode");
ee12b079 268:ded5306a1fd1 1001 #endif
prasanthbj05 266:ae588e75cfa4 1002 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 1003 space = adjust(1, pzf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1004 space = adjust(1, ezf,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1005 if(at==0){
ee12b079 268:ded5306a1fd1 1006 #if scpz
ee12b079 268:ded5306a1fd1 1007 //gPC.printf("\n\rBelow threshold");
ee12b079 268:ded5306a1fd1 1008 #endif
prasanthbj05 266:ae588e75cfa4 1009 space = adjust(7, (compress(scp_bin[50],4,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1010 // below 4 lines - filling the proton ane electron energy bins with zeros(junk value) since they're not available in srp
prasanthbj05 266:ae588e75cfa4 1011 space = adjust(4, (compress(0,10,2))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1012 space = adjust(8, (compress(0,10,2)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
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 }
prasanthbj05 266:ae588e75cfa4 1016 else if(at==1){
ee12b079 268:ded5306a1fd1 1017 #if scpz
ee12b079 268:ded5306a1fd1 1018 //gPC.printf("\n\rAbove threshold");
ee12b079 268:ded5306a1fd1 1019 #endif
prasanthbj05 266:ae588e75cfa4 1020 space = adjust(4, (compress(scp_bin[50],9,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1021 space = adjust(8, (compress(scp_bin[50],9,3)) ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1022 space = adjust(1, (compress(0,6,3))>>8 ,pointer,space); pointer += space>>4; debug_cntr += space>>4;
prasanthbj05 266:ae588e75cfa4 1023 space = adjust(8, (compress(0,6,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 }
prasanthbj05 266:ae588e75cfa4 1027 }
prasanthbj05 266:ae588e75cfa4 1028 }
prasanthbj05 266:ae588e75cfa4 1029 /*---------------------------------------------forming a science packet ends here----------------------------------------------*/
prasanthbj05 266:ae588e75cfa4 1030
ee12b079 93:4d76de54a699 1031 id = 0;
ee12b079 93:4d76de54a699 1032 if(srp_mode == 0 && compression_option == 0){
ee12b079 93:4d76de54a699 1033 if(at == 0){
prasanthbj05 266:ae588e75cfa4 1034 length = 228+2; //2 spare bits
ee12b079 93:4d76de54a699 1035 if(pzf == 0)
ee12b079 93:4d76de54a699 1036 length += 121;
ee12b079 93:4d76de54a699 1037 if(ezf == 0)
ee12b079 93:4d76de54a699 1038 length +=41;
ee12b079 93:4d76de54a699 1039 }else if(at == 1){
prasanthbj05 266:ae588e75cfa4 1040 length = 266+6; //6 spare bits
ee12b079 93:4d76de54a699 1041 if(pzf == 0)
ee12b079 93:4d76de54a699 1042 length += 136;
ee12b079 93:4d76de54a699 1043 if(ezf == 0)
ee12b079 93:4d76de54a699 1044 length += 40;
ee12b079 93:4d76de54a699 1045 }
prasanthbj05 266:ae588e75cfa4 1046 }else if(srp_mode == 0 && compression_option == 1){ //data conservation mode
ee12b079 93:4d76de54a699 1047 if(at == 0){
prasanthbj05 266:ae588e75cfa4 1048 length = 94+2; //2 spare bits
ee12b079 93:4d76de54a699 1049 if(pzf == 0)
ee12b079 93:4d76de54a699 1050 length += 12;
ee12b079 93:4d76de54a699 1051 if(ezf == 0)
ee12b079 93:4d76de54a699 1052 length += 12;
ee12b079 93:4d76de54a699 1053 }else if(at == 1){
prasanthbj05 266:ae588e75cfa4 1054 length = 123+3; //3 spare bits
prasanthbj05 266:ae588e75cfa4 1055 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 1056 length += 9;
prasanthbj05 266:ae588e75cfa4 1057 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 1058 length += 9;
prasanthbj05 266:ae588e75cfa4 1059 }
prasanthbj05 266:ae588e75cfa4 1060 }
prasanthbj05 266:ae588e75cfa4 1061 else if( srp_mode == 1){
prasanthbj05 266:ae588e75cfa4 1062 if(at == 0)
prasanthbj05 266:ae588e75cfa4 1063 length = 368;
prasanthbj05 266:ae588e75cfa4 1064 else if(at == 1)
prasanthbj05 266:ae588e75cfa4 1065 length = 432;
prasanthbj05 266:ae588e75cfa4 1066 }
prasanthbj05 266:ae588e75cfa4 1067 else if(compression_option == 2) //in extreme data conservation mode, length is same for both srp_modes
prasanthbj05 266:ae588e75cfa4 1068 {
prasanthbj05 266:ae588e75cfa4 1069 if(at == 0){
prasanthbj05 266:ae588e75cfa4 1070 length = 31+1; //1 spare bits
prasanthbj05 266:ae588e75cfa4 1071 if(pzf == 0)
prasanthbj05 266:ae588e75cfa4 1072 length += 12;
prasanthbj05 266:ae588e75cfa4 1073 if(ezf == 0)
prasanthbj05 266:ae588e75cfa4 1074 length += 12;
prasanthbj05 266:ae588e75cfa4 1075 }else if(at == 1){
prasanthbj05 266:ae588e75cfa4 1076 length = 36+2; //2 spare bits
ee12b079 93:4d76de54a699 1077 if(pzf == 0)
ee12b079 93:4d76de54a699 1078 length += 9;
ee12b079 93:4d76de54a699 1079 if(ezf == 0)
ee12b079 93:4d76de54a699 1080 length += 9;
ee12b079 93:4d76de54a699 1081 }
ee12b079 93:4d76de54a699 1082 }
ee12b079 93:4d76de54a699 1083 length = (length%8==0)?(length/8):(length/8)+1;
ee12b079 268:ded5306a1fd1 1084 #if scpz
ee12b079 268:ded5306a1fd1 1085 //gPC.printf("\n\rSCP packet length = %d",length);
ee12b079 268:ded5306a1fd1 1086 #endif
ee12b079 268:ded5306a1fd1 1087 if(position_tm_frame[id]>129){
ee12b079 268:ded5306a1fd1 1088 #if scpz
ee12b079 268:ded5306a1fd1 1089 //gPC.printf("\n\rSkipping the current TM frame. Inserting SCP into the next frame");
ee12b079 268:ded5306a1fd1 1090 //gPC.printf("\n\rposition_tm_frame = %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 1091 #endif
prasanthbj05 266:ae588e75cfa4 1092 while(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1093 frames[id][position_tm_frame[id]] = 0;
prasanthbj05 266:ae588e75cfa4 1094 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1095 }
prasanthbj05 266:ae588e75cfa4 1096 }
prasanthbj05 266:ae588e75cfa4 1097 if(position_tm_frame[id]==position_tm_starting[id]){
prasanthbj05 266:ae588e75cfa4 1098 frames[id][4] = position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1099 }
prasanthbj05 266:ae588e75cfa4 1100 for(int j= 0; j < length ;)
prasanthbj05 266:ae588e75cfa4 1101 {
prasanthbj05 266:ae588e75cfa4 1102 if(position_tm_frame[id]==frames[id][4]){
ee12b079 268:ded5306a1fd1 1103 #if scpz
ee12b079 268:ded5306a1fd1 1104 //gPC.printf("\n\rInserting Time into SCP_TM");
ee12b079 268:ded5306a1fd1 1105 #endif
prasanthbj05 266:ae588e75cfa4 1106 frames[id][5] = (uint8_t)((sci_time>>29)&0x3f);
prasanthbj05 266:ae588e75cfa4 1107 frames[id][6] = (uint8_t)((sci_time>>21)&0xff);
prasanthbj05 266:ae588e75cfa4 1108 frames[id][7] = (uint8_t)((sci_time>>13)&0x3f);
prasanthbj05 266:ae588e75cfa4 1109 }
prasanthbj05 266:ae588e75cfa4 1110 if(position_tm_frame[id]<132){
prasanthbj05 266:ae588e75cfa4 1111 frames[id][position_tm_frame[id]] = scp[j];
prasanthbj05 266:ae588e75cfa4 1112 j++;
ee12b079 93:4d76de54a699 1113 position_tm_frame[id]++;
prasanthbj05 266:ae588e75cfa4 1114 }
prasanthbj05 266:ae588e75cfa4 1115 if(position_tm_frame[id] == 132) //space full in the frame bro
prasanthbj05 266:ae588e75cfa4 1116 {
ee12b079 268:ded5306a1fd1 1117 #if scpz
ee12b079 268:ded5306a1fd1 1118 //gPC.printf("\n\rSCP_TM frame full. Length of current SCP packet = %d",j);
ee12b079 268:ded5306a1fd1 1119 #endif
prasanthbj05 266:ae588e75cfa4 1120 pointer = frames[id];
prasanthbj05 266:ae588e75cfa4 1121 space = adjust(1,0,pointer,8);
prasanthbj05 266:ae588e75cfa4 1122 space = adjust(4,1,pointer,space);
prasanthbj05 266:ae588e75cfa4 1123 FSC_science = FSC_CURRENT[1];
prasanthbj05 266:ae588e75cfa4 1124 frames[id][1] = (FSC_science>>16)&0xff;
prasanthbj05 266:ae588e75cfa4 1125 frames[id][2] = (FSC_science>>8)&0xff;
prasanthbj05 266:ae588e75cfa4 1126 frames[id][3] = (FSC_science)&0xff;
prasanthbj05 266:ae588e75cfa4 1127 temp_crc = crc16_gen(frames[id],132);
prasanthbj05 266:ae588e75cfa4 1128 frames[id][132] = temp_crc>>8;
prasanthbj05 266:ae588e75cfa4 1129 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1130 #if scpz
ee12b079 268:ded5306a1fd1 1131 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
ee12b079 268:ded5306a1fd1 1132 gPC.printf("\n\rPrinting SCP_TM\n\r{");
ee12b079 268:ded5306a1fd1 1133 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 1134 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 1135 }
ee12b079 268:ded5306a1fd1 1136 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 1137 #endif
prasanthbj05 266:ae588e75cfa4 1138 exor(frames[id]);
prasanthbj05 266:ae588e75cfa4 1139 convolution(frames[id]);
prasanthbj05 266:ae588e75cfa4 1140 interleave(TM_convoluted_data,TM_interleave_data);
prasanthbj05 266:ae588e75cfa4 1141 interleave(TM_convoluted_data+ 135,TM_interleave_data + 144);
prasanthbj05 266:ae588e75cfa4 1142
ee12b079 268:ded5306a1fd1 1143 sd_stat = SD_WRITE(TM_interleave_data,FSC_science+1,1); //sd_write returns ack, for now not included
ee12b079 268:ded5306a1fd1 1144 if(sd_stat)
ee12b079 268:ded5306a1fd1 1145 {
ee12b079 268:ded5306a1fd1 1146 gPC.puts("sd write fail");
ee12b079 268:ded5306a1fd1 1147 }
ee12b079 268:ded5306a1fd1 1148
prasanthbj05 266:ae588e75cfa4 1149 position_tm_frame[id] = position_tm_starting[id];
ee12b079 268:ded5306a1fd1 1150 frames[id][4] = (length - j)+position_tm_starting[id];
prasanthbj05 266:ae588e75cfa4 1151 }
ee12b079 93:4d76de54a699 1152 }
ee12b079 268:ded5306a1fd1 1153 #if scpz_last
ee12b079 268:ded5306a1fd1 1154 //gPC.printf("\n\rPrinting the last SFP_TM frame");
ee12b079 268:ded5306a1fd1 1155 //gPC.printf("\n\n\rPosition of tm_pointer: %d",position_tm_frame[id]);
ee12b079 268:ded5306a1fd1 1156 while(position_tm_frame[id]<132){
ee12b079 268:ded5306a1fd1 1157 frames[id][position_tm_frame[id]] = 0;
ee12b079 268:ded5306a1fd1 1158 position_tm_frame[id]++;
ee12b079 268:ded5306a1fd1 1159 }
ee12b079 268:ded5306a1fd1 1160 if(position_tm_frame[id]==132){
ee12b079 268:ded5306a1fd1 1161 //gPC.printf("\n\rFirst head pointer contents: 0x%02X",frames[id][frames[id][4]]);
ee12b079 268:ded5306a1fd1 1162 pointer = frames[id];
ee12b079 268:ded5306a1fd1 1163 if(id == 1){ //below threshold
ee12b079 268:ded5306a1fd1 1164 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1165 space = adjust(4,3,pointer,space);
ee12b079 268:ded5306a1fd1 1166 FSC_science = FSC_CURRENT[1]; ///to be used as this, but FSC_CURRENT[] is 32 bit
ee12b079 268:ded5306a1fd1 1167 frames[id][1] = (FSC_science>>24)&0xff;
ee12b079 268:ded5306a1fd1 1168 frames[id][2] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1169 frames[id][3] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1170 frames[id][4] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 1171 }
ee12b079 268:ded5306a1fd1 1172 else if(id == 2) //above threshold
ee12b079 268:ded5306a1fd1 1173 {
ee12b079 268:ded5306a1fd1 1174 space = adjust(1,0,pointer,8);
ee12b079 268:ded5306a1fd1 1175 space = adjust(4,2,pointer,space);
ee12b079 268:ded5306a1fd1 1176 FSC_science = FSC_CURRENT[2]; ///to be used as this
ee12b079 268:ded5306a1fd1 1177 frames[id][1] = (FSC_science>>16)&0xff;
ee12b079 268:ded5306a1fd1 1178 frames[id][2] = (FSC_science>>8)&0xff;
ee12b079 268:ded5306a1fd1 1179 frames[id][3] = FSC_science&0xff;
ee12b079 268:ded5306a1fd1 1180 }
ee12b079 268:ded5306a1fd1 1181 temp_crc = crc16_gen(frames[id],132);
ee12b079 268:ded5306a1fd1 1182 frames[id][132] = temp_crc>>8;
ee12b079 268:ded5306a1fd1 1183 frames[id][133] = temp_crc & 0xff;
ee12b079 268:ded5306a1fd1 1184
ee12b079 268:ded5306a1fd1 1185
ee12b079 268:ded5306a1fd1 1186 gPC.printf("\n\rPrinting SCP_TM\n\r{");
ee12b079 268:ded5306a1fd1 1187 for(uint8_t z=0;z<134;z++){
ee12b079 268:ded5306a1fd1 1188 gPC.printf("0x%02X,",frames[id][z]);
ee12b079 268:ded5306a1fd1 1189 }
ee12b079 268:ded5306a1fd1 1190 gPC.printf("}\n\r");
ee12b079 268:ded5306a1fd1 1191 }
ee12b079 268:ded5306a1fd1 1192 #endif
prasanthbj05 266:ae588e75cfa4 1193 }