working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
chaithanyarss
Date:
Sat Jan 07 01:35:54 2017 +0000
Revision:
340:d05e7b4b6690
Parent:
332:7d2431ce979f
Reverting changes to 326 version

Who changed what in which revision?

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