v2.0 working

Dependencies:   mbed

Committer:
krishanprajapat
Date:
Thu Jul 30 12:39:50 2015 +0000
Revision:
2:2b08032d9678
Parent:
1:436d836f2b8e
read from sd card and send to adf working;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krishanprajapat 0:8ed3ad791ca2 1 int disk_write(const uint8_t *, uint64_t);
krishanprajapat 0:8ed3ad791ca2 2 uint64_t RTC_TIME; //need to be changed to uint_64
krishanprajapat 0:8ed3ad791ca2 3
krishanprajapat 0:8ed3ad791ca2 4
krishanprajapat 0:8ed3ad791ca2 5 namespace Science_TMframe {
krishanprajapat 0:8ed3ad791ca2 6
krishanprajapat 0:8ed3ad791ca2 7 #define OUTLENGTH 360 //length of the output frame after convolution
krishanprajapat 0:8ed3ad791ca2 8 #define SDcard_block 512 //block size of the sd card
krishanprajapat 0:8ed3ad791ca2 9
krishanprajapat 0:8ed3ad791ca2 10 Convolution ConvObj; //object which stores the frame after convolution
krishanprajapat 0:8ed3ad791ca2 11 bool fresh[3] = {true,true,true}; // True only for the first time
krishanprajapat 0:8ed3ad791ca2 12 unsigned char frames[3][134] = {0}; // "frame" stores the address of the current frame...."first_frame_address" stores the address of the first node made.
krishanprajapat 0:8ed3ad791ca2 13 unsigned int FCN[4] = {0}; //frame count number
krishanprajapat 0:8ed3ad791ca2 14 unsigned int data_starting_point[3] = {8,5,10};
krishanprajapat 0:8ed3ad791ca2 15 unsigned int max_data[3] = {124,127,122}; //number of bytes in each frame excluding TMID,FCN,first_header_point,crc
krishanprajapat 0:8ed3ad791ca2 16 unsigned char TM_convoluted_data[270] = {0}; //270 bytes is the size after convolution of 1072 bits
krishanprajapat 0:8ed3ad791ca2 17 unsigned char complete_frame[SDcard_block] = {0};
krishanprajapat 0:8ed3ad791ca2 18 uint64_t SDC_address = 10;
krishanprajapat 1:436d836f2b8e 19 bool SCH_FCCH_FLAG = true;
krishanprajapat 0:8ed3ad791ca2 20
krishanprajapat 0:8ed3ad791ca2 21
krishanprajapat 1:436d836f2b8e 22 void add_SCH_FCCH(){
krishanprajapat 0:8ed3ad791ca2 23 int i = 0;
krishanprajapat 0:8ed3ad791ca2 24 complete_frame[0] = 0x0a;
krishanprajapat 0:8ed3ad791ca2 25 complete_frame[1] = 0x3f;;
krishanprajapat 0:8ed3ad791ca2 26 complete_frame[2] = 0x46;
krishanprajapat 0:8ed3ad791ca2 27 complete_frame[3] = 0xb4;
krishanprajapat 0:8ed3ad791ca2 28 complete_frame[4] = 0x00;
krishanprajapat 0:8ed3ad791ca2 29
krishanprajapat 0:8ed3ad791ca2 30 for(i = 149 ; i < 159 ; i ++){
krishanprajapat 0:8ed3ad791ca2 31 complete_frame[i] = 0 ;
krishanprajapat 0:8ed3ad791ca2 32 }
krishanprajapat 0:8ed3ad791ca2 33
krishanprajapat 0:8ed3ad791ca2 34 complete_frame[159] = 0x0a;
krishanprajapat 0:8ed3ad791ca2 35 complete_frame[160] = 0x3f;;
krishanprajapat 0:8ed3ad791ca2 36 complete_frame[161] = 0x46;
krishanprajapat 0:8ed3ad791ca2 37 complete_frame[162] = 0xb4;
krishanprajapat 0:8ed3ad791ca2 38 complete_frame[163] = 0x00;
krishanprajapat 0:8ed3ad791ca2 39
krishanprajapat 0:8ed3ad791ca2 40 for(i = 308 ; i < 318 ; i ++){
krishanprajapat 0:8ed3ad791ca2 41 complete_frame[i] = 0 ;
krishanprajapat 0:8ed3ad791ca2 42 }
krishanprajapat 0:8ed3ad791ca2 43
krishanprajapat 0:8ed3ad791ca2 44 }
krishanprajapat 0:8ed3ad791ca2 45
krishanprajapat 0:8ed3ad791ca2 46 void making_frameHeader(unsigned char TMID){
krishanprajapat 0:8ed3ad791ca2 47
krishanprajapat 0:8ed3ad791ca2 48 unsigned char frame_type_identifier = 0; // not conform about the values , yet to be done
krishanprajapat 0:8ed3ad791ca2 49 frames[TMID][0] = (frame_type_identifier<<7) + ( (TMID + 1)<<3 ) + ( (FCN[TMID]>>24) & 0x7 ); //frame number should be less than 2^23 since 23 bits are assigned for that
krishanprajapat 0:8ed3ad791ca2 50 frames[TMID][1] = ((FCN[TMID]>>16) & 0xff );
krishanprajapat 0:8ed3ad791ca2 51 frames[TMID][2] = ( (FCN[TMID]>>8 )& 0xff );
krishanprajapat 0:8ed3ad791ca2 52 frames[TMID][3] = ( FCN[TMID] & 0xff ); // first bit for (frame identifier), next 4 for (TMID) and next 27 for FCN
krishanprajapat 0:8ed3ad791ca2 53
krishanprajapat 0:8ed3ad791ca2 54 if(TMID == 0){
krishanprajapat 0:8ed3ad791ca2 55 frames[TMID][5] =( (RTC_TIME>>29) & 0xff );
krishanprajapat 0:8ed3ad791ca2 56 frames[TMID][6] =( (RTC_TIME>>21) & 0xff );
krishanprajapat 0:8ed3ad791ca2 57 frames[TMID][7] =( (RTC_TIME>>13) & 0xff );
krishanprajapat 0:8ed3ad791ca2 58
krishanprajapat 0:8ed3ad791ca2 59 }else if(TMID == 2){
krishanprajapat 0:8ed3ad791ca2 60 frames[TMID][5] =( (RTC_TIME>>32) & 0xff );
krishanprajapat 0:8ed3ad791ca2 61 frames[TMID][6] =( (RTC_TIME>>24) & 0xff );
krishanprajapat 0:8ed3ad791ca2 62 frames[TMID][7] =( (RTC_TIME>>16) & 0xff );
krishanprajapat 0:8ed3ad791ca2 63 frames[TMID][8] =( (RTC_TIME>>8 ) & 0xff );
krishanprajapat 0:8ed3ad791ca2 64 frames[TMID][9] =( (RTC_TIME ) & 0xff );
krishanprajapat 0:8ed3ad791ca2 65 }
krishanprajapat 0:8ed3ad791ca2 66
krishanprajapat 0:8ed3ad791ca2 67 }
krishanprajapat 0:8ed3ad791ca2 68
krishanprajapat 0:8ed3ad791ca2 69 void convolution (unsigned char * ptr){
krishanprajapat 0:8ed3ad791ca2 70
krishanprajapat 0:8ed3ad791ca2 71 ConvObj.convolutionEncode(ptr , TM_convoluted_data);
krishanprajapat 0:8ed3ad791ca2 72 ConvObj.convolutionEncode(ptr + 67, TM_convoluted_data + 135);
krishanprajapat 0:8ed3ad791ca2 73
krishanprajapat 0:8ed3ad791ca2 74 }
krishanprajapat 0:8ed3ad791ca2 75
krishanprajapat 0:8ed3ad791ca2 76 /*
krishanprajapat 0:8ed3ad791ca2 77 @brief : take the address of array of LCR or HCR and stores it into a frame
krishanprajapat 0:8ed3ad791ca2 78 @parameters: type->L or H , deprnding on wheather it is LCR or HCR respectively
krishanprajapat 0:8ed3ad791ca2 79 @return: nothing
krishanprajapat 0:8ed3ad791ca2 80 */
krishanprajapat 0:8ed3ad791ca2 81
krishanprajapat 0:8ed3ad791ca2 82 // type 2 yet to be done
krishanprajapat 0:8ed3ad791ca2 83 void making_frame(unsigned char TMID ,unsigned char type, unsigned char* pointer){
krishanprajapat 0:8ed3ad791ca2 84
krishanprajapat 0:8ed3ad791ca2 85 TMID--; //TMID goes from 1 to 3 , convinient to ue from 0 to 2
krishanprajapat 0:8ed3ad791ca2 86 static int frame_space_number[3] = {0}; //this variable represents the register number of the frame in which LCR or HCR data to be written not including header
krishanprajapat 0:8ed3ad791ca2 87 int packet_len = 0;
krishanprajapat 0:8ed3ad791ca2 88 int copy_count = 0 ;
krishanprajapat 0:8ed3ad791ca2 89
krishanprajapat 0:8ed3ad791ca2 90 switch(int(TMID)){
krishanprajapat 0:8ed3ad791ca2 91 case 0: //SCP
krishanprajapat 0:8ed3ad791ca2 92 if(type == 'L'){ //below threshold
krishanprajapat 0:8ed3ad791ca2 93 packet_len = 22;
krishanprajapat 0:8ed3ad791ca2 94 }
krishanprajapat 0:8ed3ad791ca2 95 else if(type == 'H'){ //above threshold
krishanprajapat 0:8ed3ad791ca2 96 packet_len = 26;
krishanprajapat 0:8ed3ad791ca2 97 }
krishanprajapat 0:8ed3ad791ca2 98 break;
krishanprajapat 0:8ed3ad791ca2 99
krishanprajapat 0:8ed3ad791ca2 100 case 1: //SFP above threshold
krishanprajapat 0:8ed3ad791ca2 101 packet_len = 35;
krishanprajapat 0:8ed3ad791ca2 102 break;
krishanprajapat 0:8ed3ad791ca2 103
krishanprajapat 0:8ed3ad791ca2 104 case 2: //SFP below threshold
krishanprajapat 0:8ed3ad791ca2 105 packet_len = 23;
krishanprajapat 0:8ed3ad791ca2 106 break;
krishanprajapat 0:8ed3ad791ca2 107 }
krishanprajapat 0:8ed3ad791ca2 108
krishanprajapat 1:436d836f2b8e 109 if(SCH_FCCH_FLAG){
krishanprajapat 1:436d836f2b8e 110 add_SCH_FCCH();
krishanprajapat 1:436d836f2b8e 111 SCH_FCCH_FLAG = false;
krishanprajapat 0:8ed3ad791ca2 112 }
krishanprajapat 0:8ed3ad791ca2 113
krishanprajapat 0:8ed3ad791ca2 114 if(fresh[TMID]){
krishanprajapat 0:8ed3ad791ca2 115 //welcome to first frame
krishanprajapat 0:8ed3ad791ca2 116 making_frameHeader(TMID);
krishanprajapat 0:8ed3ad791ca2 117 frames[TMID][4] = 0;
krishanprajapat 0:8ed3ad791ca2 118 fresh[TMID] = false;
krishanprajapat 0:8ed3ad791ca2 119 }
krishanprajapat 0:8ed3ad791ca2 120
krishanprajapat 0:8ed3ad791ca2 121
krishanprajapat 0:8ed3ad791ca2 122 while(copy_count < packet_len){ // 22 bytes is the size of the LCR
krishanprajapat 0:8ed3ad791ca2 123 frames[TMID][ frame_space_number[TMID] + data_starting_point[TMID] ]= *(pointer + copy_count);
krishanprajapat 0:8ed3ad791ca2 124 frame_space_number[TMID]++;
krishanprajapat 0:8ed3ad791ca2 125 copy_count++;
krishanprajapat 0:8ed3ad791ca2 126 if( frame_space_number[TMID] == max_data[TMID] ){ //frame space number can go from 0 to 126 as data is written from 0+5 to 126+5
krishanprajapat 0:8ed3ad791ca2 127 FCN[TMID]++;
krishanprajapat 0:8ed3ad791ca2 128 // convolution and save frame in the sd card
krishanprajapat 0:8ed3ad791ca2 129
krishanprajapat 0:8ed3ad791ca2 130 // copying crc in 132 and 133
krishanprajapat 0:8ed3ad791ca2 131 int temp_crc;
krishanprajapat 0:8ed3ad791ca2 132 temp_crc = CRC::crc16_gen(frames[TMID],132);
krishanprajapat 0:8ed3ad791ca2 133 frames[TMID][132] = temp_crc>>8;
krishanprajapat 0:8ed3ad791ca2 134 frames[TMID][133] = temp_crc & 0xff;
krishanprajapat 0:8ed3ad791ca2 135
krishanprajapat 0:8ed3ad791ca2 136 //convolution and interleaving
krishanprajapat 0:8ed3ad791ca2 137 convolution(frames[TMID]);
krishanprajapat 0:8ed3ad791ca2 138 interleave(TM_convoluted_data , complete_frame + 5);
krishanprajapat 0:8ed3ad791ca2 139 interleave(TM_convoluted_data+ 135,complete_frame + 164);
krishanprajapat 0:8ed3ad791ca2 140
krishanprajapat 0:8ed3ad791ca2 141 disk_write(complete_frame , SDC_address);
krishanprajapat 0:8ed3ad791ca2 142 SDC_address++;
krishanprajapat 0:8ed3ad791ca2 143
krishanprajapat 0:8ed3ad791ca2 144
krishanprajapat 0:8ed3ad791ca2 145
krishanprajapat 0:8ed3ad791ca2 146 //now save to the sd card TM_convoluted_data
krishanprajapat 0:8ed3ad791ca2 147 // std::bitset<8> b;
krishanprajapat 0:8ed3ad791ca2 148 // printf("\nthis is frame %d\n",TMID); //for printing frame
krishanprajapat 0:8ed3ad791ca2 149 // for(int j =0; j<134;j++){
krishanprajapat 0:8ed3ad791ca2 150 // printf(" %d",frames[TMID][j]);
krishanprajapat 0:8ed3ad791ca2 151 //// b = frames[TMID][j];
krishanprajapat 0:8ed3ad791ca2 152 //// cout<<b;
krishanprajapat 0:8ed3ad791ca2 153 // }
krishanprajapat 0:8ed3ad791ca2 154
krishanprajapat 0:8ed3ad791ca2 155 frame_space_number[TMID] = 0;
krishanprajapat 0:8ed3ad791ca2 156 making_frameHeader(TMID);
krishanprajapat 0:8ed3ad791ca2 157 frames[TMID][4]=packet_len - copy_count;
krishanprajapat 0:8ed3ad791ca2 158 //write time here also
krishanprajapat 0:8ed3ad791ca2 159 continue;
krishanprajapat 0:8ed3ad791ca2 160 }
krishanprajapat 0:8ed3ad791ca2 161 }
krishanprajapat 0:8ed3ad791ca2 162
krishanprajapat 0:8ed3ad791ca2 163 // printf("\nthis is frame %d\n",TMID); //for printing frame
krishanprajapat 0:8ed3ad791ca2 164 // for(int j =0; j<134;j++){
krishanprajapat 0:8ed3ad791ca2 165 // printf(" %d",frames[TMID][j]);
krishanprajapat 0:8ed3ad791ca2 166 // }
krishanprajapat 0:8ed3ad791ca2 167
krishanprajapat 0:8ed3ad791ca2 168 }
krishanprajapat 0:8ed3ad791ca2 169
krishanprajapat 0:8ed3ad791ca2 170
krishanprajapat 0:8ed3ad791ca2 171 }
krishanprajapat 0:8ed3ad791ca2 172
krishanprajapat 0:8ed3ad791ca2 173
krishanprajapat 0:8ed3ad791ca2 174
krishanprajapat 0:8ed3ad791ca2 175
krishanprajapat 0:8ed3ad791ca2 176
krishanprajapat 0:8ed3ad791ca2 177 namespace Science_Data_Compression{
krishanprajapat 0:8ed3ad791ca2 178
krishanprajapat 0:8ed3ad791ca2 179 # define PACKET_SEQUENCE_COUNT 1 //1 byte
krishanprajapat 0:8ed3ad791ca2 180 # define NUM_PROTON_BIN 17 //2 byte each
krishanprajapat 0:8ed3ad791ca2 181 # define NUM_ELECTRON_BIN 14 //2 byte each
krishanprajapat 0:8ed3ad791ca2 182 # define VETO 1 //2 byte
krishanprajapat 0:8ed3ad791ca2 183 # define FASTCHAIN 2 //4 byte each
krishanprajapat 0:8ed3ad791ca2 184 #define RAW_PACKET_LENGTH 73 //73 bytes
krishanprajapat 0:8ed3ad791ca2 185
krishanprajapat 0:8ed3ad791ca2 186 // #define PACKET_SEQ_COUNT 1
krishanprajapat 0:8ed3ad791ca2 187 // #define PROTON_BIN_SIZE 2
krishanprajapat 0:8ed3ad791ca2 188 // #define ELECTRON_BIN_SIZE 2
krishanprajapat 0:8ed3ad791ca2 189 // #define VETO 2
krishanprajapat 0:8ed3ad791ca2 190 // #define FAST_CHAIN 4
krishanprajapat 0:8ed3ad791ca2 191
krishanprajapat 0:8ed3ad791ca2 192
krishanprajapat 0:8ed3ad791ca2 193 /*
krishanprajapat 0:8ed3ad791ca2 194 @brief: read one uint16_t equivalent of first two chars from the stream. short int because 16 bits
krishanprajapat 0:8ed3ad791ca2 195 @param: pointer to the start of the short int
krishanprajapat 0:8ed3ad791ca2 196 @return: uint16_t
krishanprajapat 0:8ed3ad791ca2 197 */
krishanprajapat 0:8ed3ad791ca2 198
krishanprajapat 0:8ed3ad791ca2 199
krishanprajapat 0:8ed3ad791ca2 200 unsigned int read_2byte(unsigned char* ptr){
krishanprajapat 0:8ed3ad791ca2 201 unsigned int output = (unsigned int) *(ptr+1);
krishanprajapat 0:8ed3ad791ca2 202 output += ( (unsigned int)(*ptr) ) << 8;
krishanprajapat 0:8ed3ad791ca2 203 return output;
krishanprajapat 0:8ed3ad791ca2 204 }
krishanprajapat 0:8ed3ad791ca2 205
krishanprajapat 0:8ed3ad791ca2 206 /*
krishanprajapat 0:8ed3ad791ca2 207 @brief: read one int equivalent of first four chars from the stream. int because 32 bits
krishanprajapat 0:8ed3ad791ca2 208 @param: pointer to the start of the short int
krishanprajapat 0:8ed3ad791ca2 209 @return: unsigned int
krishanprajapat 0:8ed3ad791ca2 210 */
krishanprajapat 0:8ed3ad791ca2 211
krishanprajapat 0:8ed3ad791ca2 212 unsigned int read_4byte(unsigned char* ptr){
krishanprajapat 0:8ed3ad791ca2 213 unsigned int output = (unsigned int) *(ptr+3);
krishanprajapat 0:8ed3ad791ca2 214 output += (unsigned int)*(ptr+2)<<8;
krishanprajapat 0:8ed3ad791ca2 215 output += (unsigned int)*(ptr+1)<<16;
krishanprajapat 0:8ed3ad791ca2 216 output += (unsigned int)*(ptr)<<24;
krishanprajapat 0:8ed3ad791ca2 217 return output;
krishanprajapat 0:8ed3ad791ca2 218 }
krishanprajapat 0:8ed3ad791ca2 219
krishanprajapat 0:8ed3ad791ca2 220 unsigned int SFP_thresholds[35]={0 ,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100};//threashold values
krishanprajapat 0:8ed3ad791ca2 221 unsigned int SCP_thresholds[35]={0 ,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,0 ,0 ,0 };
krishanprajapat 0:8ed3ad791ca2 222 unsigned int SFP_bin[35];
krishanprajapat 0:8ed3ad791ca2 223 unsigned int SCP_bin[35]={0};
krishanprajapat 0:8ed3ad791ca2 224 unsigned char SFP_outputBT[23]; //BT = below threshold
krishanprajapat 0:8ed3ad791ca2 225 unsigned char SFP_outputAT[35];
krishanprajapat 0:8ed3ad791ca2 226 unsigned char SCP_outputLCR[22];
krishanprajapat 0:8ed3ad791ca2 227 unsigned char SCP_outputHCR[26];
krishanprajapat 0:8ed3ad791ca2 228
krishanprajapat 0:8ed3ad791ca2 229
krishanprajapat 0:8ed3ad791ca2 230 //**********************************************************************************************************************************************************************
krishanprajapat 0:8ed3ad791ca2 231 //lots of compression functions are listed below
krishanprajapat 0:8ed3ad791ca2 232
krishanprajapat 0:8ed3ad791ca2 233
krishanprajapat 0:8ed3ad791ca2 234 unsigned char SFP_compress4_BT(unsigned int input){ //for veto
krishanprajapat 0:8ed3ad791ca2 235 int de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 236 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 237
krishanprajapat 0:8ed3ad791ca2 238 if(input<= 3){
krishanprajapat 0:8ed3ad791ca2 239 // DE = 0;
krishanprajapat 0:8ed3ad791ca2 240 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 241 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 242 }
krishanprajapat 0:8ed3ad791ca2 243 else if(input <= 12){
krishanprajapat 0:8ed3ad791ca2 244 // DE = 01;
krishanprajapat 0:8ed3ad791ca2 245 output = 0x1;
krishanprajapat 0:8ed3ad791ca2 246 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 247 }
krishanprajapat 0:8ed3ad791ca2 248 else if(input <= 48){
krishanprajapat 0:8ed3ad791ca2 249 // DE = 10
krishanprajapat 0:8ed3ad791ca2 250 output = 0x2;
krishanprajapat 0:8ed3ad791ca2 251 de_4 = 4;
krishanprajapat 0:8ed3ad791ca2 252 }
krishanprajapat 0:8ed3ad791ca2 253 else {
krishanprajapat 0:8ed3ad791ca2 254 // DE = 11
krishanprajapat 0:8ed3ad791ca2 255 output = 0x3;
krishanprajapat 0:8ed3ad791ca2 256 de_4 = 6;
krishanprajapat 0:8ed3ad791ca2 257 }
krishanprajapat 0:8ed3ad791ca2 258
krishanprajapat 0:8ed3ad791ca2 259 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 260 output += (temp ) << 2;
krishanprajapat 0:8ed3ad791ca2 261 return output;
krishanprajapat 0:8ed3ad791ca2 262 }
krishanprajapat 0:8ed3ad791ca2 263
krishanprajapat 0:8ed3ad791ca2 264
krishanprajapat 0:8ed3ad791ca2 265 unsigned char SFP_compress5_BT(unsigned int input){
krishanprajapat 0:8ed3ad791ca2 266 int de_4 = 0; //number by which bin value need to be shifted
krishanprajapat 0:8ed3ad791ca2 267 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 268
krishanprajapat 0:8ed3ad791ca2 269 if(input <= 15){
krishanprajapat 0:8ed3ad791ca2 270 // D = 0 [0]
krishanprajapat 0:8ed3ad791ca2 271 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 272 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 273 }
krishanprajapat 0:8ed3ad791ca2 274 else if(input <= 60){
krishanprajapat 0:8ed3ad791ca2 275 // D = 1
krishanprajapat 0:8ed3ad791ca2 276 output = 0x1;
krishanprajapat 0:8ed3ad791ca2 277 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 278 }
krishanprajapat 0:8ed3ad791ca2 279
krishanprajapat 0:8ed3ad791ca2 280 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 281 output += (temp ) << 1;
krishanprajapat 0:8ed3ad791ca2 282
krishanprajapat 0:8ed3ad791ca2 283 return output;
krishanprajapat 0:8ed3ad791ca2 284 };
krishanprajapat 0:8ed3ad791ca2 285
krishanprajapat 0:8ed3ad791ca2 286
krishanprajapat 0:8ed3ad791ca2 287 unsigned char SFP_compress6_BT(unsigned int input){
krishanprajapat 0:8ed3ad791ca2 288 int de_4 = 0;;
krishanprajapat 0:8ed3ad791ca2 289 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 290
krishanprajapat 0:8ed3ad791ca2 291 if(input <= 31){
krishanprajapat 0:8ed3ad791ca2 292 // E = 0 [0]
krishanprajapat 0:8ed3ad791ca2 293 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 294 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 295 }
krishanprajapat 0:8ed3ad791ca2 296 else if(input <= 124){
krishanprajapat 0:8ed3ad791ca2 297 // E = 1
krishanprajapat 0:8ed3ad791ca2 298 output = 0x1;
krishanprajapat 0:8ed3ad791ca2 299 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 300 }
krishanprajapat 0:8ed3ad791ca2 301
krishanprajapat 0:8ed3ad791ca2 302
krishanprajapat 0:8ed3ad791ca2 303 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 304 output += (temp ) << 1;
krishanprajapat 0:8ed3ad791ca2 305
krishanprajapat 0:8ed3ad791ca2 306 return output;
krishanprajapat 0:8ed3ad791ca2 307 };
krishanprajapat 0:8ed3ad791ca2 308
krishanprajapat 0:8ed3ad791ca2 309 unsigned char SFP_compress7_AT(unsigned int input){
krishanprajapat 0:8ed3ad791ca2 310 int de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 311 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 312
krishanprajapat 0:8ed3ad791ca2 313 if(input <= 31){
krishanprajapat 0:8ed3ad791ca2 314 // DE = 00 [0]
krishanprajapat 0:8ed3ad791ca2 315 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 316 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 317 }
krishanprajapat 0:8ed3ad791ca2 318 else if(input <= 124){
krishanprajapat 0:8ed3ad791ca2 319 // DE = 01 [1]
krishanprajapat 0:8ed3ad791ca2 320 output = 0x1;
krishanprajapat 0:8ed3ad791ca2 321 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 322 }
krishanprajapat 0:8ed3ad791ca2 323
krishanprajapat 0:8ed3ad791ca2 324 else if(input <= 496){
krishanprajapat 0:8ed3ad791ca2 325 // DE = 10 [2]
krishanprajapat 0:8ed3ad791ca2 326 output = 0x2;
krishanprajapat 0:8ed3ad791ca2 327 de_4 = 4;
krishanprajapat 0:8ed3ad791ca2 328 }
krishanprajapat 0:8ed3ad791ca2 329
krishanprajapat 0:8ed3ad791ca2 330 else if(input <= 1984){
krishanprajapat 0:8ed3ad791ca2 331 // DE = 11 [3]
krishanprajapat 0:8ed3ad791ca2 332 output = 0x3;
krishanprajapat 0:8ed3ad791ca2 333 de_4 = 6;
krishanprajapat 0:8ed3ad791ca2 334 }
krishanprajapat 0:8ed3ad791ca2 335
krishanprajapat 0:8ed3ad791ca2 336 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 337 output += (temp ) << 2;
krishanprajapat 0:8ed3ad791ca2 338
krishanprajapat 0:8ed3ad791ca2 339 return output;
krishanprajapat 0:8ed3ad791ca2 340
krishanprajapat 0:8ed3ad791ca2 341 };
krishanprajapat 0:8ed3ad791ca2 342
krishanprajapat 0:8ed3ad791ca2 343
krishanprajapat 0:8ed3ad791ca2 344 unsigned char SFP_compress8_AT(unsigned int input){
krishanprajapat 0:8ed3ad791ca2 345
krishanprajapat 0:8ed3ad791ca2 346 int de_4 = 0;;
krishanprajapat 0:8ed3ad791ca2 347 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 348
krishanprajapat 0:8ed3ad791ca2 349 if(input <= 63){
krishanprajapat 0:8ed3ad791ca2 350 // DE = 00 [0]
krishanprajapat 0:8ed3ad791ca2 351 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 352 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 353 }
krishanprajapat 0:8ed3ad791ca2 354 else if(input <= 252){
krishanprajapat 0:8ed3ad791ca2 355 // DE = 01 [1]
krishanprajapat 0:8ed3ad791ca2 356 output = 0x1;
krishanprajapat 0:8ed3ad791ca2 357 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 358 }
krishanprajapat 0:8ed3ad791ca2 359
krishanprajapat 0:8ed3ad791ca2 360 else if(input <= 1008){
krishanprajapat 0:8ed3ad791ca2 361 // DE = 10 [2]
krishanprajapat 0:8ed3ad791ca2 362 output = 0x2;
krishanprajapat 0:8ed3ad791ca2 363 de_4 = 4;
krishanprajapat 0:8ed3ad791ca2 364 }
krishanprajapat 0:8ed3ad791ca2 365
krishanprajapat 0:8ed3ad791ca2 366 else {
krishanprajapat 0:8ed3ad791ca2 367 // DE = 11 [3]
krishanprajapat 0:8ed3ad791ca2 368 output = 0x3;
krishanprajapat 0:8ed3ad791ca2 369 de_4 = 6;
krishanprajapat 0:8ed3ad791ca2 370 }
krishanprajapat 0:8ed3ad791ca2 371
krishanprajapat 0:8ed3ad791ca2 372 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 373 output += (temp ) << 2;
krishanprajapat 0:8ed3ad791ca2 374
krishanprajapat 0:8ed3ad791ca2 375 return output;
krishanprajapat 0:8ed3ad791ca2 376 };
krishanprajapat 0:8ed3ad791ca2 377
krishanprajapat 0:8ed3ad791ca2 378 unsigned char SFP_compress5_AT(unsigned int input){
krishanprajapat 0:8ed3ad791ca2 379 int de_4 = 0;;
krishanprajapat 0:8ed3ad791ca2 380 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 381
krishanprajapat 0:8ed3ad791ca2 382 if(input <= 3){
krishanprajapat 0:8ed3ad791ca2 383 // DE = 000 [0]
krishanprajapat 0:8ed3ad791ca2 384 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 385 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 386 }
krishanprajapat 0:8ed3ad791ca2 387 else if(input <= 12){
krishanprajapat 0:8ed3ad791ca2 388 // DE = 001 [1]
krishanprajapat 0:8ed3ad791ca2 389 output = 0x1;
krishanprajapat 0:8ed3ad791ca2 390 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 391 }
krishanprajapat 0:8ed3ad791ca2 392
krishanprajapat 0:8ed3ad791ca2 393 else if(input <= 48){
krishanprajapat 0:8ed3ad791ca2 394 // DE = 010 [2]
krishanprajapat 0:8ed3ad791ca2 395 output = 0x2;
krishanprajapat 0:8ed3ad791ca2 396 de_4 = 4;
krishanprajapat 0:8ed3ad791ca2 397 }
krishanprajapat 0:8ed3ad791ca2 398
krishanprajapat 0:8ed3ad791ca2 399 else if(input <= 192) {
krishanprajapat 0:8ed3ad791ca2 400 // DE = 011 [3]
krishanprajapat 0:8ed3ad791ca2 401 output = 0x3;
krishanprajapat 0:8ed3ad791ca2 402 de_4 = 6;
krishanprajapat 0:8ed3ad791ca2 403 }
krishanprajapat 0:8ed3ad791ca2 404
krishanprajapat 0:8ed3ad791ca2 405 else if(input <= 768) {
krishanprajapat 0:8ed3ad791ca2 406 // DE = 100 [4]
krishanprajapat 0:8ed3ad791ca2 407 output = 0x4;
krishanprajapat 0:8ed3ad791ca2 408 de_4 = 8;
krishanprajapat 0:8ed3ad791ca2 409 }
krishanprajapat 0:8ed3ad791ca2 410
krishanprajapat 0:8ed3ad791ca2 411 else if(input <= 3072) {
krishanprajapat 0:8ed3ad791ca2 412 // DE = 101 [5]
krishanprajapat 0:8ed3ad791ca2 413 output = 0x5;
krishanprajapat 0:8ed3ad791ca2 414 de_4 = 10;
krishanprajapat 0:8ed3ad791ca2 415 }
krishanprajapat 0:8ed3ad791ca2 416
krishanprajapat 0:8ed3ad791ca2 417 else if(input <= 12288) {
krishanprajapat 0:8ed3ad791ca2 418 // DE = 110 [6]
krishanprajapat 0:8ed3ad791ca2 419 output = 0x6;
krishanprajapat 0:8ed3ad791ca2 420 de_4 = 12;
krishanprajapat 0:8ed3ad791ca2 421 }
krishanprajapat 0:8ed3ad791ca2 422
krishanprajapat 0:8ed3ad791ca2 423 else {
krishanprajapat 0:8ed3ad791ca2 424 // DE = 111 [7]
krishanprajapat 0:8ed3ad791ca2 425 output = 0x7;
krishanprajapat 0:8ed3ad791ca2 426 de_4 = 14;
krishanprajapat 0:8ed3ad791ca2 427 }
krishanprajapat 0:8ed3ad791ca2 428
krishanprajapat 0:8ed3ad791ca2 429 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 430 output += (temp ) << 3;
krishanprajapat 0:8ed3ad791ca2 431
krishanprajapat 0:8ed3ad791ca2 432 return output;
krishanprajapat 0:8ed3ad791ca2 433 }
krishanprajapat 0:8ed3ad791ca2 434
krishanprajapat 0:8ed3ad791ca2 435 unsigned char SFP_compress7FC_AT(unsigned int input){ // for fast chain above threshold
krishanprajapat 0:8ed3ad791ca2 436 int de_4 = 0;;
krishanprajapat 0:8ed3ad791ca2 437 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 438
krishanprajapat 0:8ed3ad791ca2 439 if(input <= 15){
krishanprajapat 0:8ed3ad791ca2 440 // DE = 000 [0]
krishanprajapat 0:8ed3ad791ca2 441 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 442 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 443 }
krishanprajapat 0:8ed3ad791ca2 444 else if(input <= 60){
krishanprajapat 0:8ed3ad791ca2 445 // DE = 001 [1]
krishanprajapat 0:8ed3ad791ca2 446 output = 0x1;
krishanprajapat 0:8ed3ad791ca2 447 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 448 }
krishanprajapat 0:8ed3ad791ca2 449
krishanprajapat 0:8ed3ad791ca2 450 else if(input <= 240){
krishanprajapat 0:8ed3ad791ca2 451 // DE = 010 [2]
krishanprajapat 0:8ed3ad791ca2 452 output = 0x2;
krishanprajapat 0:8ed3ad791ca2 453 de_4 = 4;
krishanprajapat 0:8ed3ad791ca2 454 }
krishanprajapat 0:8ed3ad791ca2 455
krishanprajapat 0:8ed3ad791ca2 456 else if(input <= 960) {
krishanprajapat 0:8ed3ad791ca2 457 // DE = 011 [3]
krishanprajapat 0:8ed3ad791ca2 458 output = 0x3;
krishanprajapat 0:8ed3ad791ca2 459 de_4 = 6;
krishanprajapat 0:8ed3ad791ca2 460 }
krishanprajapat 0:8ed3ad791ca2 461
krishanprajapat 0:8ed3ad791ca2 462 else if(input <= 3840) {
krishanprajapat 0:8ed3ad791ca2 463 // DE = 100 [4]
krishanprajapat 0:8ed3ad791ca2 464 output = 0x4;
krishanprajapat 0:8ed3ad791ca2 465 de_4 = 8;
krishanprajapat 0:8ed3ad791ca2 466 }
krishanprajapat 0:8ed3ad791ca2 467
krishanprajapat 0:8ed3ad791ca2 468 else if(input <= 15360) {
krishanprajapat 0:8ed3ad791ca2 469 // DE = 101 [5]
krishanprajapat 0:8ed3ad791ca2 470 output = 0x5;
krishanprajapat 0:8ed3ad791ca2 471 de_4 = 10;
krishanprajapat 0:8ed3ad791ca2 472 }
krishanprajapat 0:8ed3ad791ca2 473
krishanprajapat 0:8ed3ad791ca2 474 else if(input <= 61440) {
krishanprajapat 0:8ed3ad791ca2 475 // DE = 110 [6]
krishanprajapat 0:8ed3ad791ca2 476 output = 0x6;
krishanprajapat 0:8ed3ad791ca2 477 de_4 = 12;
krishanprajapat 0:8ed3ad791ca2 478 }
krishanprajapat 0:8ed3ad791ca2 479
krishanprajapat 0:8ed3ad791ca2 480 else {
krishanprajapat 0:8ed3ad791ca2 481 // DE = 111 [7]
krishanprajapat 0:8ed3ad791ca2 482 output = 0x7;
krishanprajapat 0:8ed3ad791ca2 483 de_4 = 14;
krishanprajapat 0:8ed3ad791ca2 484 }
krishanprajapat 0:8ed3ad791ca2 485
krishanprajapat 0:8ed3ad791ca2 486 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 487 output += (temp ) << 3;
krishanprajapat 0:8ed3ad791ca2 488
krishanprajapat 0:8ed3ad791ca2 489 return output;
krishanprajapat 0:8ed3ad791ca2 490 }
krishanprajapat 0:8ed3ad791ca2 491
krishanprajapat 0:8ed3ad791ca2 492
krishanprajapat 0:8ed3ad791ca2 493
krishanprajapat 0:8ed3ad791ca2 494 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
krishanprajapat 0:8ed3ad791ca2 495 unsigned char SCP_compress6(unsigned int input){
krishanprajapat 0:8ed3ad791ca2 496 int ef_4;
krishanprajapat 0:8ed3ad791ca2 497 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 498
krishanprajapat 0:8ed3ad791ca2 499 if(input <= 15){
krishanprajapat 0:8ed3ad791ca2 500 // EF = 00
krishanprajapat 0:8ed3ad791ca2 501 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 502 ef_4 = 0;
krishanprajapat 0:8ed3ad791ca2 503 }
krishanprajapat 0:8ed3ad791ca2 504
krishanprajapat 0:8ed3ad791ca2 505 else if(input <= 60 ){
krishanprajapat 0:8ed3ad791ca2 506 // EF = 01 [1]
krishanprajapat 0:8ed3ad791ca2 507 output = 0x01;
krishanprajapat 0:8ed3ad791ca2 508 ef_4 = 2;
krishanprajapat 0:8ed3ad791ca2 509 }
krishanprajapat 0:8ed3ad791ca2 510 else if(input <= 240){
krishanprajapat 0:8ed3ad791ca2 511 // EF = 10 [2]
krishanprajapat 0:8ed3ad791ca2 512 output = 0x02;
krishanprajapat 0:8ed3ad791ca2 513 ef_4 = 4;
krishanprajapat 0:8ed3ad791ca2 514 }
krishanprajapat 0:8ed3ad791ca2 515 else{
krishanprajapat 0:8ed3ad791ca2 516 // EF = 11 [3]
krishanprajapat 0:8ed3ad791ca2 517 output = 0x03;
krishanprajapat 0:8ed3ad791ca2 518 ef_4 = 6;
krishanprajapat 0:8ed3ad791ca2 519 }
krishanprajapat 0:8ed3ad791ca2 520
krishanprajapat 0:8ed3ad791ca2 521 unsigned short int temp = input >> ef_4;
krishanprajapat 0:8ed3ad791ca2 522 output += (temp & 0xf) << 2;
krishanprajapat 0:8ed3ad791ca2 523
krishanprajapat 0:8ed3ad791ca2 524 return output;
krishanprajapat 0:8ed3ad791ca2 525 }
krishanprajapat 0:8ed3ad791ca2 526
krishanprajapat 0:8ed3ad791ca2 527 unsigned char SCP_compress5(unsigned int input){
krishanprajapat 0:8ed3ad791ca2 528
krishanprajapat 0:8ed3ad791ca2 529 int de_4 = 0;;
krishanprajapat 0:8ed3ad791ca2 530 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 531
krishanprajapat 0:8ed3ad791ca2 532 if(input <= 7){
krishanprajapat 0:8ed3ad791ca2 533 // DE = 00 [0]
krishanprajapat 0:8ed3ad791ca2 534 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 535 de_4 = 0;
krishanprajapat 0:8ed3ad791ca2 536 }
krishanprajapat 0:8ed3ad791ca2 537
krishanprajapat 0:8ed3ad791ca2 538 else if(input <= 28){
krishanprajapat 0:8ed3ad791ca2 539 // DE = 01 [1]
krishanprajapat 0:8ed3ad791ca2 540 output = 0x01;
krishanprajapat 0:8ed3ad791ca2 541 de_4 = 2;
krishanprajapat 0:8ed3ad791ca2 542 }
krishanprajapat 0:8ed3ad791ca2 543 else if(input <= 112){
krishanprajapat 0:8ed3ad791ca2 544 // DE = 10 [2]
krishanprajapat 0:8ed3ad791ca2 545 output = 0x02;
krishanprajapat 0:8ed3ad791ca2 546 de_4 = 4;
krishanprajapat 0:8ed3ad791ca2 547 }
krishanprajapat 0:8ed3ad791ca2 548 else{
krishanprajapat 0:8ed3ad791ca2 549 // DE = 11 [3]
krishanprajapat 0:8ed3ad791ca2 550 output = 0x03;
krishanprajapat 0:8ed3ad791ca2 551 de_4 = 6;
krishanprajapat 0:8ed3ad791ca2 552 }
krishanprajapat 0:8ed3ad791ca2 553
krishanprajapat 0:8ed3ad791ca2 554 unsigned short int temp = input >> de_4;
krishanprajapat 0:8ed3ad791ca2 555 output += (temp & 0x7) << 2;
krishanprajapat 0:8ed3ad791ca2 556
krishanprajapat 0:8ed3ad791ca2 557 return output;
krishanprajapat 0:8ed3ad791ca2 558 }
krishanprajapat 0:8ed3ad791ca2 559
krishanprajapat 0:8ed3ad791ca2 560 unsigned char SCP_compress6h(unsigned int input) {
krishanprajapat 0:8ed3ad791ca2 561
krishanprajapat 0:8ed3ad791ca2 562 int ef_4;
krishanprajapat 0:8ed3ad791ca2 563 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 564
krishanprajapat 0:8ed3ad791ca2 565 if(input <=7){
krishanprajapat 0:8ed3ad791ca2 566 // EF = 000 [0]
krishanprajapat 0:8ed3ad791ca2 567 output = 0x00;
krishanprajapat 0:8ed3ad791ca2 568 ef_4 = 0;
krishanprajapat 0:8ed3ad791ca2 569 }
krishanprajapat 0:8ed3ad791ca2 570
krishanprajapat 0:8ed3ad791ca2 571 else if(input <=28){
krishanprajapat 0:8ed3ad791ca2 572 // EF = 001 [1]
krishanprajapat 0:8ed3ad791ca2 573 output = 0x01;
krishanprajapat 0:8ed3ad791ca2 574 ef_4 = 2;
krishanprajapat 0:8ed3ad791ca2 575 }
krishanprajapat 0:8ed3ad791ca2 576 else if(input <= 112){
krishanprajapat 0:8ed3ad791ca2 577
krishanprajapat 0:8ed3ad791ca2 578 // EF = 010 [2]
krishanprajapat 0:8ed3ad791ca2 579 output = 0x02;
krishanprajapat 0:8ed3ad791ca2 580 ef_4 = 4;
krishanprajapat 0:8ed3ad791ca2 581 }
krishanprajapat 0:8ed3ad791ca2 582 else if(input <= 448){
krishanprajapat 0:8ed3ad791ca2 583 // EF = 011 [3]
krishanprajapat 0:8ed3ad791ca2 584 output = 0x03;
krishanprajapat 0:8ed3ad791ca2 585 ef_4 = 6;
krishanprajapat 0:8ed3ad791ca2 586 }
krishanprajapat 0:8ed3ad791ca2 587 else if(input <= 1792){
krishanprajapat 0:8ed3ad791ca2 588 // EF = 100 [4]
krishanprajapat 0:8ed3ad791ca2 589 output = 0x04;
krishanprajapat 0:8ed3ad791ca2 590 ef_4 = 8;
krishanprajapat 0:8ed3ad791ca2 591
krishanprajapat 0:8ed3ad791ca2 592 }
krishanprajapat 0:8ed3ad791ca2 593 else if(input <= 7168){
krishanprajapat 0:8ed3ad791ca2 594 // EF = 101 [5]
krishanprajapat 0:8ed3ad791ca2 595 output = 0x05;
krishanprajapat 0:8ed3ad791ca2 596 ef_4 = 10;
krishanprajapat 0:8ed3ad791ca2 597
krishanprajapat 0:8ed3ad791ca2 598 }
krishanprajapat 0:8ed3ad791ca2 599 else if(input <= 28672){
krishanprajapat 0:8ed3ad791ca2 600 // EF = 110 [6]
krishanprajapat 0:8ed3ad791ca2 601 output = 0x06;
krishanprajapat 0:8ed3ad791ca2 602 ef_4 = 12;
krishanprajapat 0:8ed3ad791ca2 603 }
krishanprajapat 0:8ed3ad791ca2 604 else{
krishanprajapat 0:8ed3ad791ca2 605 // EF = 111 [7]
krishanprajapat 0:8ed3ad791ca2 606 output = 0x07;
krishanprajapat 0:8ed3ad791ca2 607 ef_4 =14;
krishanprajapat 0:8ed3ad791ca2 608 }
krishanprajapat 0:8ed3ad791ca2 609
krishanprajapat 0:8ed3ad791ca2 610 unsigned short int temp = input >> ef_4;
krishanprajapat 0:8ed3ad791ca2 611 output += (temp & 0x7) << 3;
krishanprajapat 0:8ed3ad791ca2 612
krishanprajapat 0:8ed3ad791ca2 613 return output;
krishanprajapat 0:8ed3ad791ca2 614
krishanprajapat 0:8ed3ad791ca2 615 }
krishanprajapat 0:8ed3ad791ca2 616
krishanprajapat 0:8ed3ad791ca2 617
krishanprajapat 0:8ed3ad791ca2 618 unsigned char SCP_compress7h(unsigned int input) {
krishanprajapat 0:8ed3ad791ca2 619
krishanprajapat 0:8ed3ad791ca2 620 int fg_4;
krishanprajapat 0:8ed3ad791ca2 621 unsigned char output;
krishanprajapat 0:8ed3ad791ca2 622
krishanprajapat 0:8ed3ad791ca2 623 if(input <= 15){
krishanprajapat 0:8ed3ad791ca2 624 // EF = 000 [0]
krishanprajapat 0:8ed3ad791ca2 625 output = 0x0;
krishanprajapat 0:8ed3ad791ca2 626 fg_4 = 0;
krishanprajapat 0:8ed3ad791ca2 627 }
krishanprajapat 0:8ed3ad791ca2 628
krishanprajapat 0:8ed3ad791ca2 629 else if(input <= 60){
krishanprajapat 0:8ed3ad791ca2 630 // EF = 001 [1]
krishanprajapat 0:8ed3ad791ca2 631 output = 0x01;
krishanprajapat 0:8ed3ad791ca2 632 fg_4 = 2;
krishanprajapat 0:8ed3ad791ca2 633 }
krishanprajapat 0:8ed3ad791ca2 634 else if(input <= 240){
krishanprajapat 0:8ed3ad791ca2 635
krishanprajapat 0:8ed3ad791ca2 636 // EF = 010 [2]
krishanprajapat 0:8ed3ad791ca2 637 output = 0x02;
krishanprajapat 0:8ed3ad791ca2 638 fg_4 = 4;
krishanprajapat 0:8ed3ad791ca2 639 }
krishanprajapat 0:8ed3ad791ca2 640 else if(input <= 960){
krishanprajapat 0:8ed3ad791ca2 641 // EF = 011 [3]
krishanprajapat 0:8ed3ad791ca2 642 output = 0x03;
krishanprajapat 0:8ed3ad791ca2 643 fg_4 = 6;
krishanprajapat 0:8ed3ad791ca2 644 }
krishanprajapat 0:8ed3ad791ca2 645 else if(input <= 3840){
krishanprajapat 0:8ed3ad791ca2 646 // EF = 100 [4]
krishanprajapat 0:8ed3ad791ca2 647 output = 0x04;
krishanprajapat 0:8ed3ad791ca2 648 fg_4 = 8;
krishanprajapat 0:8ed3ad791ca2 649
krishanprajapat 0:8ed3ad791ca2 650 }
krishanprajapat 0:8ed3ad791ca2 651 else if(input <= 15360){
krishanprajapat 0:8ed3ad791ca2 652 // EF = 101 [5]
krishanprajapat 0:8ed3ad791ca2 653 output = 0x05;
krishanprajapat 0:8ed3ad791ca2 654 fg_4 = 10;
krishanprajapat 0:8ed3ad791ca2 655
krishanprajapat 0:8ed3ad791ca2 656 }
krishanprajapat 0:8ed3ad791ca2 657 else if(input <= 61440){
krishanprajapat 0:8ed3ad791ca2 658 // EF = 110 [6]
krishanprajapat 0:8ed3ad791ca2 659 output = 0x06;
krishanprajapat 0:8ed3ad791ca2 660 fg_4 = 12;
krishanprajapat 0:8ed3ad791ca2 661 }
krishanprajapat 0:8ed3ad791ca2 662 else{
krishanprajapat 0:8ed3ad791ca2 663 // EF = 111 [7]
krishanprajapat 0:8ed3ad791ca2 664 output = 0x07;
krishanprajapat 0:8ed3ad791ca2 665 fg_4 =14;
krishanprajapat 0:8ed3ad791ca2 666 }
krishanprajapat 0:8ed3ad791ca2 667
krishanprajapat 0:8ed3ad791ca2 668 unsigned short int temp = input >> fg_4;
krishanprajapat 0:8ed3ad791ca2 669 output += (temp & 0xf) << 3;
krishanprajapat 0:8ed3ad791ca2 670
krishanprajapat 0:8ed3ad791ca2 671 return output;
krishanprajapat 0:8ed3ad791ca2 672
krishanprajapat 0:8ed3ad791ca2 673 }
krishanprajapat 0:8ed3ad791ca2 674 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
krishanprajapat 0:8ed3ad791ca2 675 void SCP_compress_data();
krishanprajapat 0:8ed3ad791ca2 676 void SFP_compress_data(unsigned char* input){
krishanprajapat 0:8ed3ad791ca2 677
krishanprajapat 0:8ed3ad791ca2 678 bool LCR = true;
krishanprajapat 0:8ed3ad791ca2 679 int i = 0;
krishanprajapat 0:8ed3ad791ca2 680 static int packet_no = 0; //takes value from 0 to 29
krishanprajapat 0:8ed3ad791ca2 681 //TRAVERSE THE LIST TO DETERMINE LCR OR HCR and stroing the values in proton_bin and electron bin
krishanprajapat 0:8ed3ad791ca2 682 SFP_bin[0] = *input;
krishanprajapat 0:8ed3ad791ca2 683 for(i=1 ; i<= NUM_PROTON_BIN + NUM_ELECTRON_BIN + VETO ; ++i){ //storing the bin values into an array name bin
krishanprajapat 0:8ed3ad791ca2 684 SFP_bin[i]=read_2byte(input+1+((i-1)<<1)); //proton bin and elecron bin are 2 byte, hence read_2byte and
krishanprajapat 0:8ed3ad791ca2 685 SCP_bin[i]+=SFP_bin[i];
krishanprajapat 0:8ed3ad791ca2 686 if(SFP_bin[i] > SFP_thresholds[i]){ //fast cahin is 4 byte hence read_4byte
krishanprajapat 0:8ed3ad791ca2 687 LCR = false; // if a single value is above threshold then lcr becomes false
krishanprajapat 0:8ed3ad791ca2 688 i++;
krishanprajapat 0:8ed3ad791ca2 689 break;
krishanprajapat 0:8ed3ad791ca2 690 }
krishanprajapat 0:8ed3ad791ca2 691 }
krishanprajapat 0:8ed3ad791ca2 692
krishanprajapat 0:8ed3ad791ca2 693 for( ; i<= NUM_PROTON_BIN + NUM_ELECTRON_BIN + VETO ; ++i){
krishanprajapat 0:8ed3ad791ca2 694 SCP_bin[i]+=SFP_bin[i];
krishanprajapat 0:8ed3ad791ca2 695 SFP_bin[i] = read_2byte(input + 1 + ( (i-1)<<1) );
krishanprajapat 0:8ed3ad791ca2 696 }
krishanprajapat 0:8ed3ad791ca2 697
krishanprajapat 0:8ed3ad791ca2 698 SFP_bin[i] = read_4byte(input+1+ ((i-1)<<1)) ;
krishanprajapat 0:8ed3ad791ca2 699 SCP_bin[i]+=SFP_bin[i];
krishanprajapat 0:8ed3ad791ca2 700
krishanprajapat 0:8ed3ad791ca2 701 if(SFP_bin[i]>SFP_thresholds[i])
krishanprajapat 0:8ed3ad791ca2 702 LCR = false; //since veto starts from location (input + 65) and (input + 69)
krishanprajapat 0:8ed3ad791ca2 703
krishanprajapat 0:8ed3ad791ca2 704 SFP_bin[i+1] = read_4byte(input+69);
krishanprajapat 0:8ed3ad791ca2 705 SCP_bin[i]+=SFP_bin[i];
krishanprajapat 0:8ed3ad791ca2 706
krishanprajapat 0:8ed3ad791ca2 707 if(SFP_bin[i]>SFP_thresholds[i])
krishanprajapat 0:8ed3ad791ca2 708 LCR = false;
krishanprajapat 0:8ed3ad791ca2 709
krishanprajapat 0:8ed3ad791ca2 710
krishanprajapat 0:8ed3ad791ca2 711 // printf("\n"); //for printing the sfp bin
krishanprajapat 0:8ed3ad791ca2 712 // for (i=0;i<35;i++){
krishanprajapat 0:8ed3ad791ca2 713 // printf("sfp[%d] = %d",i,SFP_bin[i]);
krishanprajapat 0:8ed3ad791ca2 714 // }
krishanprajapat 0:8ed3ad791ca2 715 // printf("\n");
krishanprajapat 0:8ed3ad791ca2 716
krishanprajapat 0:8ed3ad791ca2 717 if(LCR){
krishanprajapat 0:8ed3ad791ca2 718
krishanprajapat 0:8ed3ad791ca2 719 SFP_outputBT[0] = (packet_no<<3) + ( SFP_compress5_BT(SFP_bin[1])>>2 );
krishanprajapat 0:8ed3ad791ca2 720 SFP_outputBT[1] = ( SFP_compress5_BT(SFP_bin[1])<<6 ) + ( SFP_compress5_BT(SFP_bin[2])<<1 ) + ( SFP_compress5_BT(SFP_bin[3])>>4 );
krishanprajapat 0:8ed3ad791ca2 721 SFP_outputBT[2] = ( SFP_compress5_BT(SFP_bin[3])<<4 ) + ( SFP_compress5_BT(SFP_bin[4])>>1 );
krishanprajapat 0:8ed3ad791ca2 722 SFP_outputBT[3] = ( SFP_compress5_BT(SFP_bin[4])<<7 ) + ( SFP_compress5_BT(SFP_bin[5])<<2 ) + ( SFP_compress5_BT(SFP_bin[6])>>3 );
krishanprajapat 0:8ed3ad791ca2 723 SFP_outputBT[4] = ( SFP_compress5_BT(SFP_bin[6])<<5 ) + ( SFP_compress5_BT(SFP_bin[7]) );
krishanprajapat 0:8ed3ad791ca2 724 SFP_outputBT[5] = ( SFP_compress5_BT(SFP_bin[8])<<3 ) + ( SFP_compress5_BT(SFP_bin[9])>>2 );
krishanprajapat 0:8ed3ad791ca2 725 SFP_outputBT[6] = ( SFP_compress5_BT(SFP_bin[9])<<6 ) + ( SFP_compress5_BT(SFP_bin[10])<<1 ) + ( SFP_compress5_BT(SFP_bin[11])>>4 );
krishanprajapat 0:8ed3ad791ca2 726 SFP_outputBT[7] = ( SFP_compress5_BT(SFP_bin[11])<<4 ) + ( SFP_compress5_BT(SFP_bin[12])>>1 );
krishanprajapat 0:8ed3ad791ca2 727 SFP_outputBT[8] = ( SFP_compress5_BT(SFP_bin[12])<<7 ) + ( SFP_compress5_BT(SFP_bin[13])<<2 ) + ( SFP_compress5_BT(SFP_bin[14])>>3 );
krishanprajapat 0:8ed3ad791ca2 728 SFP_outputBT[9] = ( SFP_compress5_BT(SFP_bin[14])<<5 ) + ( SFP_compress5_BT(SFP_bin[15]) );
krishanprajapat 0:8ed3ad791ca2 729 SFP_outputBT[10] = ( SFP_compress5_BT(SFP_bin[16])<<3 ) + ( SFP_compress5_BT(SFP_bin[17])>>2 );
krishanprajapat 0:8ed3ad791ca2 730 SFP_outputBT[11] = ( SFP_compress5_BT(SFP_bin[17])<<6 ) + ( SFP_compress6_BT(SFP_bin[18]) );
krishanprajapat 0:8ed3ad791ca2 731 SFP_outputBT[12] = ( SFP_compress6_BT(SFP_bin[19])<<2 ) + ( SFP_compress6_BT(SFP_bin[20])>>4 );
krishanprajapat 0:8ed3ad791ca2 732 SFP_outputBT[13] = ( SFP_compress6_BT(SFP_bin[20])<<4 ) + ( SFP_compress5_BT(SFP_bin[21])>>1 );
krishanprajapat 0:8ed3ad791ca2 733 SFP_outputBT[14] = ( SFP_compress5_BT(SFP_bin[21])<<7 ) + ( SFP_compress5_BT(SFP_bin[22])<<2 ) + ( SFP_compress5_BT(SFP_bin[23])>>3 );
krishanprajapat 0:8ed3ad791ca2 734 SFP_outputBT[15] = ( SFP_compress5_BT(SFP_bin[23])<<5 ) + ( SFP_compress5_BT(SFP_bin[24]) );
krishanprajapat 0:8ed3ad791ca2 735 SFP_outputBT[16] = ( SFP_compress5_BT(SFP_bin[25])<<3 ) + ( SFP_compress5_BT(SFP_bin[26])>>2 );
krishanprajapat 0:8ed3ad791ca2 736 SFP_outputBT[17] = ( SFP_compress5_BT(SFP_bin[26])<<6 ) + ( SFP_compress5_BT(SFP_bin[27])<<1 ) + ( SFP_compress5_BT(SFP_bin[28])>>4);
krishanprajapat 0:8ed3ad791ca2 737 SFP_outputBT[18] = ( SFP_compress5_BT(SFP_bin[28])<<4 ) + ( SFP_compress5_BT(SFP_bin[29])>>1) ;
krishanprajapat 0:8ed3ad791ca2 738 SFP_outputBT[19] = ( SFP_compress5_BT(SFP_bin[29])<<7 ) + ( SFP_compress5_BT(SFP_bin[30])<<2 ) + ( SFP_compress5_BT(SFP_bin[31])>>3) ;
krishanprajapat 0:8ed3ad791ca2 739 SFP_outputBT[20] = ( SFP_compress5_BT(SFP_bin[31])<<5 ) + ( SFP_compress4_BT(SFP_bin[32])<<1) + ( SCP_compress5(SFP_bin[33])>>4 ) ; //
krishanprajapat 0:8ed3ad791ca2 740 SFP_outputBT[21] = ( SCP_compress5(SFP_bin[33])<<4 ) + ( SCP_compress5(SFP_bin[34])>>1 ); //here intentionally SCP_compress is used instead of SCP_compress5 is different than SFP_compress5
krishanprajapat 0:8ed3ad791ca2 741 SFP_outputBT[22] = ( SCP_compress5(SFP_bin[34])<<7 ); //7 bits are spare
krishanprajapat 0:8ed3ad791ca2 742
krishanprajapat 0:8ed3ad791ca2 743 Science_TMframe::making_frame(3,'L',SFP_outputBT);
krishanprajapat 0:8ed3ad791ca2 744 if(++packet_no == 30){
krishanprajapat 0:8ed3ad791ca2 745 packet_no=0;
krishanprajapat 0:8ed3ad791ca2 746 SCP_compress_data();
krishanprajapat 0:8ed3ad791ca2 747 for(i=0;i<PACKET_SEQUENCE_COUNT + NUM_PROTON_BIN + NUM_ELECTRON_BIN + VETO + FASTCHAIN;i++){
krishanprajapat 0:8ed3ad791ca2 748 if(packet_no==0){
krishanprajapat 0:8ed3ad791ca2 749 SCP_bin[i]=0;
krishanprajapat 0:8ed3ad791ca2 750 }
krishanprajapat 0:8ed3ad791ca2 751 }
krishanprajapat 0:8ed3ad791ca2 752 }
krishanprajapat 0:8ed3ad791ca2 753
krishanprajapat 0:8ed3ad791ca2 754
krishanprajapat 0:8ed3ad791ca2 755 }
krishanprajapat 0:8ed3ad791ca2 756
krishanprajapat 0:8ed3ad791ca2 757 else {
krishanprajapat 0:8ed3ad791ca2 758
krishanprajapat 0:8ed3ad791ca2 759
krishanprajapat 0:8ed3ad791ca2 760 SFP_outputAT[0] = (RTC_TIME>>27)&(0xff);
krishanprajapat 0:8ed3ad791ca2 761 SFP_outputAT[1] = (RTC_TIME>>19)&(0xff);
krishanprajapat 0:8ed3ad791ca2 762 SFP_outputAT[2] = (RTC_TIME>>11)&(0xff);
krishanprajapat 0:8ed3ad791ca2 763 SFP_outputAT[3] = (RTC_TIME>>3 )&(0xff);
krishanprajapat 0:8ed3ad791ca2 764 SFP_outputAT[4] = (RTC_TIME<<5 )&(0xff) + (packet_no);
krishanprajapat 0:8ed3ad791ca2 765 SFP_outputAT[5] = ( SFP_compress7_AT(SFP_bin[1])<<1 ) + ( SFP_compress7_AT(SFP_bin[2])>>6 );
krishanprajapat 0:8ed3ad791ca2 766 SFP_outputAT[6] = ( SFP_compress7_AT(SFP_bin[2])<<2 ) + ( SFP_compress7_AT(SFP_bin[3])>>5 );
krishanprajapat 0:8ed3ad791ca2 767 SFP_outputAT[7] = ( SFP_compress7_AT(SFP_bin[3])<<3 ) + ( SFP_compress7_AT(SFP_bin[4])>>4 );
krishanprajapat 0:8ed3ad791ca2 768 SFP_outputAT[8] = ( SFP_compress7_AT(SFP_bin[4])<<4 ) + ( SFP_compress7_AT(SFP_bin[5])>>3 );
krishanprajapat 0:8ed3ad791ca2 769 SFP_outputAT[9] = ( SFP_compress7_AT(SFP_bin[5])<<5 ) + ( SFP_compress7_AT(SFP_bin[6])>>2 );
krishanprajapat 0:8ed3ad791ca2 770 SFP_outputAT[10] = ( SFP_compress7_AT(SFP_bin[6])<<6 ) + ( SFP_compress7_AT(SFP_bin[7])>>1 );
krishanprajapat 0:8ed3ad791ca2 771 SFP_outputAT[11] = ( SFP_compress7_AT(SFP_bin[7])<<7 ) + ( SFP_compress7_AT(SFP_bin[8]) );
krishanprajapat 0:8ed3ad791ca2 772 SFP_outputAT[12] = ( SFP_compress7_AT(SFP_bin[9])<<1 ) + ( SFP_compress7_AT(SFP_bin[10])>>6);
krishanprajapat 0:8ed3ad791ca2 773 SFP_outputAT[13] = ( SFP_compress7_AT(SFP_bin[10])<<2 ) + ( SFP_compress7_AT(SFP_bin[11])>>5);
krishanprajapat 0:8ed3ad791ca2 774 SFP_outputAT[14] = ( SFP_compress7_AT(SFP_bin[11])<<3 ) + ( SFP_compress7_AT(SFP_bin[12])>>4);
krishanprajapat 0:8ed3ad791ca2 775 SFP_outputAT[15] = ( SFP_compress7_AT(SFP_bin[12])<<4 ) + ( SFP_compress7_AT(SFP_bin[13])>>3);
krishanprajapat 0:8ed3ad791ca2 776 SFP_outputAT[16] = ( SFP_compress7_AT(SFP_bin[13])<<5 ) + ( SFP_compress7_AT(SFP_bin[14])>>2);
krishanprajapat 0:8ed3ad791ca2 777 SFP_outputAT[17] = ( SFP_compress7_AT(SFP_bin[14])<<6 ) + ( SFP_compress7_AT(SFP_bin[15])>>1);
krishanprajapat 0:8ed3ad791ca2 778 SFP_outputAT[18] = ( SFP_compress7_AT(SFP_bin[15])<<7 ) + ( SFP_compress7_AT(SFP_bin[16]));
krishanprajapat 0:8ed3ad791ca2 779 SFP_outputAT[19] = ( SFP_compress7_AT(SFP_bin[17])<<1 ) + ( SFP_compress8_AT(SFP_bin[18])>>7 );
krishanprajapat 0:8ed3ad791ca2 780 SFP_outputAT[20] = ( SFP_compress8_AT(SFP_bin[18])<<1 ) + ( SFP_compress8_AT(SFP_bin[19])>>7 );
krishanprajapat 0:8ed3ad791ca2 781 SFP_outputAT[21] = ( SFP_compress8_AT(SFP_bin[19])<<1 ) + ( SFP_compress8_AT(SFP_bin[20])>>7 );
krishanprajapat 0:8ed3ad791ca2 782 SFP_outputAT[22] = ( SFP_compress8_AT(SFP_bin[20])<<1 ) + ( SFP_compress7_AT(SFP_bin[21])>>6 );
krishanprajapat 0:8ed3ad791ca2 783 SFP_outputAT[23] = ( SFP_compress7_AT(SFP_bin[21])<<2 ) + ( SFP_compress7_AT(SFP_bin[22])>>5 );
krishanprajapat 0:8ed3ad791ca2 784 SFP_outputAT[24] = ( SFP_compress7_AT(SFP_bin[22])<<3 ) + ( SFP_compress7_AT(SFP_bin[23])>>4 );
krishanprajapat 0:8ed3ad791ca2 785 SFP_outputAT[25] = ( SFP_compress7_AT(SFP_bin[23])<<4 ) + ( SFP_compress7_AT(SFP_bin[24])>>3 );
krishanprajapat 0:8ed3ad791ca2 786 SFP_outputAT[26] = ( SFP_compress7_AT(SFP_bin[24])<<5 ) + ( SFP_compress7_AT(SFP_bin[25])>>2 );
krishanprajapat 0:8ed3ad791ca2 787 SFP_outputAT[27] = ( SFP_compress7_AT(SFP_bin[25])<<6 ) + ( SFP_compress7_AT(SFP_bin[26])>>1 );
krishanprajapat 0:8ed3ad791ca2 788 SFP_outputAT[28] = ( SFP_compress7_AT(SFP_bin[26])<<7 ) + ( SFP_compress7_AT(SFP_bin[27]) );
krishanprajapat 0:8ed3ad791ca2 789 SFP_outputAT[29] = ( SFP_compress7_AT(SFP_bin[28])<<1 ) + ( SFP_compress7_AT(SFP_bin[29])>>6);
krishanprajapat 0:8ed3ad791ca2 790 SFP_outputAT[30] = ( SFP_compress7_AT(SFP_bin[29])<<2 ) + ( SFP_compress7_AT(SFP_bin[30])>>5);
krishanprajapat 0:8ed3ad791ca2 791 SFP_outputAT[31] = ( SFP_compress7_AT(SFP_bin[30])<<3 ) +( SFP_compress7_AT(SFP_bin[31])>>4);
krishanprajapat 0:8ed3ad791ca2 792 SFP_outputAT[32] = ( SFP_compress7_AT(SFP_bin[31])<<4 ) +( SFP_compress5_AT(SFP_bin[32])>>1);
krishanprajapat 0:8ed3ad791ca2 793 SFP_outputAT[33] = ( SFP_compress5_AT(SFP_bin[32])<<7 ) +( SFP_compress7FC_AT(SFP_bin[33]));
krishanprajapat 0:8ed3ad791ca2 794 SFP_outputAT[34] = ( SFP_compress7FC_AT(SFP_bin[34])<<1 ); // 1 bit is spare
krishanprajapat 0:8ed3ad791ca2 795
krishanprajapat 0:8ed3ad791ca2 796 Science_TMframe::making_frame(2,'H',SFP_outputAT);
krishanprajapat 0:8ed3ad791ca2 797 if(++packet_no == 30){
krishanprajapat 0:8ed3ad791ca2 798 packet_no=0;
krishanprajapat 0:8ed3ad791ca2 799 SCP_compress_data();
krishanprajapat 0:8ed3ad791ca2 800 for(i=0;i<PACKET_SEQUENCE_COUNT + NUM_PROTON_BIN + NUM_ELECTRON_BIN + VETO + FASTCHAIN;i++){
krishanprajapat 0:8ed3ad791ca2 801 if(packet_no==0){
krishanprajapat 0:8ed3ad791ca2 802 SCP_bin[i]=0;
krishanprajapat 0:8ed3ad791ca2 803 }
krishanprajapat 0:8ed3ad791ca2 804 }
krishanprajapat 0:8ed3ad791ca2 805 }
krishanprajapat 0:8ed3ad791ca2 806
krishanprajapat 0:8ed3ad791ca2 807 }
krishanprajapat 0:8ed3ad791ca2 808
krishanprajapat 0:8ed3ad791ca2 809 }
krishanprajapat 0:8ed3ad791ca2 810
krishanprajapat 0:8ed3ad791ca2 811
krishanprajapat 0:8ed3ad791ca2 812 /*
krishanprajapat 0:8ed3ad791ca2 813 brief: takes the pointer of the raw data string and return the address of the array which stores the address of 30 packets.
krishanprajapat 0:8ed3ad791ca2 814 input: pointer to the raw data.
krishanprajapat 0:8ed3ad791ca2 815 output : void
krishanprajapat 0:8ed3ad791ca2 816 */
krishanprajapat 0:8ed3ad791ca2 817
krishanprajapat 0:8ed3ad791ca2 818 void complete_compression(unsigned char *SRP,uint64_t x){
krishanprajapat 0:8ed3ad791ca2 819 RTC_TIME = x;
krishanprajapat 0:8ed3ad791ca2 820 int i; //30 times because 3 second data
krishanprajapat 0:8ed3ad791ca2 821
krishanprajapat 0:8ed3ad791ca2 822 for(i=0;i<30;i++){
krishanprajapat 0:8ed3ad791ca2 823 SFP_compress_data(SRP + 73*i);
krishanprajapat 0:8ed3ad791ca2 824 }
krishanprajapat 0:8ed3ad791ca2 825
krishanprajapat 0:8ed3ad791ca2 826 }
krishanprajapat 0:8ed3ad791ca2 827
krishanprajapat 0:8ed3ad791ca2 828
krishanprajapat 0:8ed3ad791ca2 829
krishanprajapat 0:8ed3ad791ca2 830 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
krishanprajapat 0:8ed3ad791ca2 831
krishanprajapat 0:8ed3ad791ca2 832
krishanprajapat 0:8ed3ad791ca2 833
krishanprajapat 0:8ed3ad791ca2 834 /*
krishanprajapat 0:8ed3ad791ca2 835 @brief: compresses the given input stream and return output packet
krishanprajapat 0:8ed3ad791ca2 836 @param: pointer to input stream. Input stream always has the fixed size of RAW_PACKET_LENGTH
krishanprajapat 0:8ed3ad791ca2 837 @return: pointer to output stream. Output stream has the size of 22 or 26 bytes
krishanprajapat 0:8ed3ad791ca2 838 */
krishanprajapat 0:8ed3ad791ca2 839 void SCP_compress_data(){
krishanprajapat 0:8ed3ad791ca2 840
krishanprajapat 0:8ed3ad791ca2 841 bool LCR = true;
krishanprajapat 0:8ed3ad791ca2 842 int i = 0;
krishanprajapat 0:8ed3ad791ca2 843
krishanprajapat 0:8ed3ad791ca2 844 for(i=1;i<=PACKET_SEQUENCE_COUNT + NUM_PROTON_BIN + NUM_ELECTRON_BIN + VETO + FASTCHAIN ;i++){
krishanprajapat 0:8ed3ad791ca2 845 if(SCP_bin[i]>SCP_thresholds[i]){
krishanprajapat 0:8ed3ad791ca2 846 LCR = false;
krishanprajapat 0:8ed3ad791ca2 847 break;
krishanprajapat 0:8ed3ad791ca2 848 }
krishanprajapat 0:8ed3ad791ca2 849 }
krishanprajapat 0:8ed3ad791ca2 850 // printf("\n"); //for printing the scp bin
krishanprajapat 0:8ed3ad791ca2 851 // for (i=0;i<35;i++){
krishanprajapat 0:8ed3ad791ca2 852 // printf(" scp[%d] = %d ",i,SCP_bin[i]);
krishanprajapat 0:8ed3ad791ca2 853 // }
krishanprajapat 0:8ed3ad791ca2 854 // printf("\n");
krishanprajapat 0:8ed3ad791ca2 855 // compressing the data
krishanprajapat 0:8ed3ad791ca2 856 if(LCR){
krishanprajapat 0:8ed3ad791ca2 857 SCP_outputLCR[0] = (RTC_TIME>>5)&(0xff); //first 13 bits for time tagging
krishanprajapat 0:8ed3ad791ca2 858 SCP_outputLCR[1] = (RTC_TIME<<3)&(0xff); //then 4 bits for attitude tag
krishanprajapat 0:8ed3ad791ca2 859 SCP_outputLCR[2] = 0x00; //only attitude tag is left
krishanprajapat 0:8ed3ad791ca2 860 SCP_outputLCR[2] += ( SCP_compress5(SCP_bin[0])<<1 ) + ( SCP_compress5(SCP_bin[1])>>4 );
krishanprajapat 0:8ed3ad791ca2 861 SCP_outputLCR[3] = ( SCP_compress5(SCP_bin[1])<<4 ) + ( SCP_compress5(SCP_bin[2])>>1 );
krishanprajapat 0:8ed3ad791ca2 862 SCP_outputLCR[4] = ( SCP_compress5(SCP_bin[2])<<7 ) + ( SCP_compress5(SCP_bin[3])<<2 ) + ( SCP_compress5(SCP_bin[4])>>3 );
krishanprajapat 0:8ed3ad791ca2 863 SCP_outputLCR[5] = ( SCP_compress5(SCP_bin[4])<<5 ) + ( SCP_compress5(SCP_bin[5]) );
krishanprajapat 0:8ed3ad791ca2 864 SCP_outputLCR[6] = ( SCP_compress5(SCP_bin[6])<<3 ) + ( SCP_compress5(SCP_bin[7])>>2 );
krishanprajapat 0:8ed3ad791ca2 865 SCP_outputLCR[7] = ( SCP_compress5(SCP_bin[7])<<6 ) + ( SCP_compress5(SCP_bin[8])<<1 ) + ( SCP_compress5(SCP_bin[9])>>4 );
krishanprajapat 0:8ed3ad791ca2 866 SCP_outputLCR[8] = ( SCP_compress5(SCP_bin[9])<<4 ) + ( SCP_compress5(SCP_bin[10])>>1 );
krishanprajapat 0:8ed3ad791ca2 867 SCP_outputLCR[9] = ( SCP_compress5(SCP_bin[10])<<7 ) + ( SCP_compress5(SCP_bin[11])<<2) + ( SCP_compress5(SCP_bin[12])>>3 );
krishanprajapat 0:8ed3ad791ca2 868 SCP_outputLCR[10] = ( SCP_compress5(SCP_bin[12])<<5 ) + ( SCP_compress5(SCP_bin[13]) );
krishanprajapat 0:8ed3ad791ca2 869 SCP_outputLCR[11] = ( SCP_compress5(SCP_bin[14])<<3 ) + ( SCP_compress5(SCP_bin[15])>>2 );
krishanprajapat 0:8ed3ad791ca2 870 SCP_outputLCR[12] = ( SCP_compress5(SCP_bin[15])<<6 ) + ( SCP_compress5(SCP_bin[16])<<1) + ( SCP_compress6(SCP_bin[17])>>5 );
krishanprajapat 0:8ed3ad791ca2 871 SCP_outputLCR[13] = ( SCP_compress6(SCP_bin[17])<<3 ) + ( SCP_compress6(SCP_bin[18])>>3 );
krishanprajapat 0:8ed3ad791ca2 872 SCP_outputLCR[14] = ( SCP_compress5(SCP_bin[18])<<5 ) + ( SCP_compress6(SCP_bin[19])>>1 );
krishanprajapat 0:8ed3ad791ca2 873 SCP_outputLCR[15] = ( SCP_compress6(SCP_bin[19])<<7 ) + ( SCP_compress5(SCP_bin[20])<<2 ) + ( SCP_compress5(SCP_bin[21])>>3 );
krishanprajapat 0:8ed3ad791ca2 874 SCP_outputLCR[16] = ( SCP_compress5(SCP_bin[21])<<5 ) + ( SCP_compress5(SCP_bin[22]) );
krishanprajapat 0:8ed3ad791ca2 875 SCP_outputLCR[17] = ( SCP_compress5(SCP_bin[23])<<3 ) + ( SCP_compress5(SCP_bin[24])>>2 );
krishanprajapat 0:8ed3ad791ca2 876 SCP_outputLCR[18] = ( SCP_compress5(SCP_bin[24])<<6 ) + ( SCP_compress5(SCP_bin[25])<<1) + ( SCP_compress5(SCP_bin[26])>>4 );
krishanprajapat 0:8ed3ad791ca2 877 SCP_outputLCR[19] = ( SCP_compress5(SCP_bin[26])<<4 ) + ( SCP_compress5(SCP_bin[27])>>1 );
krishanprajapat 0:8ed3ad791ca2 878 SCP_outputLCR[20] = ( SCP_compress5(SCP_bin[27])<<7 ) + ( SCP_compress5(SCP_bin[28])<<2 ) + ( SCP_compress5(SCP_bin[29])>>3 );
krishanprajapat 0:8ed3ad791ca2 879 SCP_outputLCR[21] = ( SCP_compress5(SCP_bin[29])<<5 ) + ( SCP_compress5(SCP_bin[30]) );
krishanprajapat 0:8ed3ad791ca2 880
krishanprajapat 0:8ed3ad791ca2 881 Science_TMframe::making_frame(1,'L',SCP_outputLCR);
krishanprajapat 0:8ed3ad791ca2 882 }
krishanprajapat 0:8ed3ad791ca2 883 else{
krishanprajapat 0:8ed3ad791ca2 884
krishanprajapat 0:8ed3ad791ca2 885 SCP_outputLCR[0] = (RTC_TIME>>5)&(0xff); //first 13 bits for time tagging
krishanprajapat 0:8ed3ad791ca2 886 SCP_outputLCR[1] = (RTC_TIME<<3)&(0xff);
krishanprajapat 0:8ed3ad791ca2 887 SCP_outputHCR[2] = 0x40;
krishanprajapat 0:8ed3ad791ca2 888 SCP_outputHCR[2] += ( SCP_compress6h(SCP_bin[0])<<6 ) ;
krishanprajapat 0:8ed3ad791ca2 889 SCP_outputHCR[3] = ( SCP_compress6h(SCP_bin[1])<<2 ) + ( SCP_compress6h(SCP_bin[2])>>4) ;
krishanprajapat 0:8ed3ad791ca2 890 SCP_outputHCR[4] = ( SCP_compress6h(SCP_bin[2])<<4 ) + ( SCP_compress6h(SCP_bin[3])>>2) ;
krishanprajapat 0:8ed3ad791ca2 891 SCP_outputHCR[5] = ( SCP_compress6h(SCP_bin[3])<<6 ) + ( SCP_compress6h(SCP_bin[4])) ;
krishanprajapat 0:8ed3ad791ca2 892 SCP_outputHCR[6] = ( SCP_compress6h(SCP_bin[5])<<2 ) + ( SCP_compress6h(SCP_bin[6])>>4) ;
krishanprajapat 0:8ed3ad791ca2 893 SCP_outputHCR[7] = ( SCP_compress6h(SCP_bin[6])<<4 ) + ( SCP_compress6h(SCP_bin[7])>>2) ;
krishanprajapat 0:8ed3ad791ca2 894 SCP_outputHCR[8] = ( SCP_compress6h(SCP_bin[7])<<6 ) + ( SCP_compress6h(SCP_bin[8])) ;
krishanprajapat 0:8ed3ad791ca2 895 SCP_outputHCR[9] = ( SCP_compress6h(SCP_bin[9])<<2 ) + ( SCP_compress6h(SCP_bin[10])>>4) ;
krishanprajapat 0:8ed3ad791ca2 896 SCP_outputHCR[10] = ( SCP_compress6h(SCP_bin[10])<<4 ) + ( SCP_compress6h(SCP_bin[11])>>2);
krishanprajapat 0:8ed3ad791ca2 897 SCP_outputHCR[11] = ( SCP_compress6h(SCP_bin[11])<<6 ) + ( SCP_compress6h(SCP_bin[12])) ;
krishanprajapat 0:8ed3ad791ca2 898 SCP_outputHCR[12] = ( SCP_compress6h(SCP_bin[13])<<2 ) + ( SCP_compress6h(SCP_bin[14])>>4) ;
krishanprajapat 0:8ed3ad791ca2 899 SCP_outputHCR[13] = ( SCP_compress6h(SCP_bin[14])<<4 ) + ( SCP_compress6h(SCP_bin[15])>>2) ;
krishanprajapat 0:8ed3ad791ca2 900 SCP_outputHCR[14] = ( SCP_compress6h(SCP_bin[15])<<6 ) + ( SCP_compress6h(SCP_bin[16])) ;
krishanprajapat 0:8ed3ad791ca2 901 SCP_outputHCR[15] = ( SCP_compress7h(SCP_bin[17])<<1 ) + ( SCP_compress7h(SCP_bin[18])>>6) ;
krishanprajapat 0:8ed3ad791ca2 902 SCP_outputHCR[16] = ( SCP_compress7h(SCP_bin[18])<<2 ) + ( SCP_compress7h(SCP_bin[19])>>5) ;
krishanprajapat 0:8ed3ad791ca2 903 SCP_outputHCR[17] = ( SCP_compress7h(SCP_bin[19])<<3 ) + ( SCP_compress6h(SCP_bin[20])>>3) ;
krishanprajapat 0:8ed3ad791ca2 904 SCP_outputHCR[18] = ( SCP_compress6h(SCP_bin[20])<<5 ) + ( SCP_compress6h(SCP_bin[21])>>1) ;
krishanprajapat 0:8ed3ad791ca2 905 SCP_outputHCR[19] = ( SCP_compress6h(SCP_bin[21])<<7 ) + ( SCP_compress6h(SCP_bin[22])<<1) + ( SCP_compress6h(SCP_bin[23])>>5) ;
krishanprajapat 0:8ed3ad791ca2 906 SCP_outputHCR[20] = ( SCP_compress6h(SCP_bin[23])<<3 ) + ( SCP_compress6h(SCP_bin[24])>>3) ;
krishanprajapat 0:8ed3ad791ca2 907 SCP_outputHCR[21] = ( SCP_compress6h(SCP_bin[24])<<5 ) + ( SCP_compress6h(SCP_bin[25])>>1) ;
krishanprajapat 0:8ed3ad791ca2 908 SCP_outputHCR[22] = ( SCP_compress6h(SCP_bin[25])<<7 ) + ( SCP_compress6h(SCP_bin[26])<<1) + ( SCP_compress6h(SCP_bin[27])>>5) ;
krishanprajapat 0:8ed3ad791ca2 909 SCP_outputHCR[23] = ( SCP_compress6h(SCP_bin[27])<<3 ) + ( SCP_compress6h(SCP_bin[28])>>3) ;
krishanprajapat 0:8ed3ad791ca2 910 SCP_outputHCR[24] = ( SCP_compress6h(SCP_bin[28])<<5 ) + ( SCP_compress6h(SCP_bin[29])>>1) ;
krishanprajapat 0:8ed3ad791ca2 911 SCP_outputHCR[25] = ( SCP_compress6h(SCP_bin[29])<<7 ) + ( SCP_compress6h(SCP_bin[30])<<1) ; //last bit is empty
krishanprajapat 0:8ed3ad791ca2 912
krishanprajapat 0:8ed3ad791ca2 913 /* for (i=0;i<26;i++){
krishanprajapat 0:8ed3ad791ca2 914 printf("\nscp[%d] = %d",i,SCP_outputHCR[i]);
krishanprajapat 0:8ed3ad791ca2 915 }*/
krishanprajapat 0:8ed3ad791ca2 916 Science_TMframe::making_frame(1,'H',SCP_outputHCR);
krishanprajapat 0:8ed3ad791ca2 917 }
krishanprajapat 0:8ed3ad791ca2 918 }
krishanprajapat 0:8ed3ad791ca2 919
krishanprajapat 0:8ed3ad791ca2 920 }