Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Committer:
shreeshas95
Date:
Thu Sep 17 14:15:00 2015 +0000
Revision:
17:2b04e53f3b1d
Parent:
13:7b27a8e9cbb4
DUMMP program to demonstrate the problems : working

Who changed what in which revision?

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