File indexing completed on 2025-08-03 08:20:40
0001 #include <packet_gl1.h>
0002 #include <string.h>
0003
0004 Packet_gl1::Packet_gl1(PACKET_ptr data)
0005 : Packet_w4 (data){sgl1=0;}
0006
0007 Packet_gl1::~Packet_gl1()
0008 {
0009 if(sgl1)delete sgl1;
0010 }
0011
0012 int *Packet_gl1::decode ( int *nwout)
0013 {
0014 int *p,*k;
0015 int olength;
0016 int temp[MAX_OUTLENGTH];
0017 int i;
0018 int dlength = getDataLength();
0019
0020 int status = decode_gl1( temp
0021 ,(int *) findPacketDataStart(packet)
0022 ,dlength
0023 ,MAX_OUTLENGTH, &olength);
0024
0025 if (status || olength<=0 ) return NULL;
0026
0027 p = new int[olength];
0028 k = p;
0029 for (i =0; i<olength; i++) *k++ = temp[i];
0030 *nwout = olength;
0031 return p;
0032 }
0033
0034 int Packet_gl1::iValue(const int ich, const char *what)
0035 {
0036
0037
0038 if(!sgl1) demangle();
0039 if(!sgl1){
0040 COUT<<"Failed to fill data structure"<<std::endl;
0041 return 0;
0042 }
0043
0044 if (strcmp(what,"HEADER3")==0)
0045 {
0046 return sgl1->gl3_payload.gl3_header;
0047 }
0048
0049 else if ( strcmp(what,"YEAR")==0)
0050 {
0051 return sgl1->gl3_payload.timestamp.year;
0052 }
0053 else if ( strcmp(what,"MONTH")==0)
0054 {
0055 return sgl1->gl3_payload.timestamp.month;
0056 }
0057 else if ( strcmp(what,"DATE")==0)
0058 {
0059 return sgl1->gl3_payload.timestamp.date;
0060 }
0061 else if ( strcmp(what,"DAY")==0)
0062 {
0063 return sgl1->gl3_payload.timestamp.day;
0064 }
0065 else if ( strcmp(what,"HOUR")==0)
0066 {
0067 return sgl1->gl3_payload.timestamp.hour;
0068 }
0069 else if ( strcmp(what,"MIN")==0)
0070 {
0071 return sgl1->gl3_payload.timestamp.min;
0072 }
0073 else if ( strcmp(what,"SEC")==0)
0074 {
0075 return sgl1->gl3_payload.timestamp.sec;
0076 }
0077
0078 else if (strcmp(what,"ALIGNMENT")==0)
0079 {
0080 return sgl1->gl3_payload.alignment;
0081 }
0082 else if ( strcmp(what,"CROSSCTR")==0)
0083 {
0084 return sgl1->gl3_payload.bunch_crossing_counter;
0085 }
0086 else if ( strcmp(what,"BEAMCTR0")==0)
0087 {
0088 return sgl1->gl3_payload.beam_crossing_counter[0];
0089 }
0090 else if ( strcmp(what,"BEAMCTR1")==0)
0091 {
0092 return sgl1->gl3_payload.beam_crossing_counter[1];
0093 }
0094 else if ( strcmp(what,"GACCEPT")==0)
0095 {
0096 return sgl1->gl3_payload.granule_accept_vector;
0097 }
0098 else if (strcmp(what,"ACPTORINP")==0)
0099 {
0100 return sgl1->gl3_payload.accept_or_input;
0101 }
0102 else if ( strcmp(what,"ACPTCTR")==0)
0103 {
0104 return sgl1->gl3_payload.gl1_accept_counter;
0105 }
0106 else if ( strcmp(what,"GRANCTR")==0)
0107 {
0108 if( (ich<0) || (ich>31) ) {
0109 return 0;
0110 }
0111 else{
0112 return sgl1->gl3_payload.granule_accept[ich];
0113 }
0114 }
0115 else if ( strcmp(what,"GDISABLE")==0)
0116 {
0117 return sgl1->gl3_payload.granule_disables;
0118 }
0119 else if ( strcmp(what,"FACCEPT")==0)
0120 {
0121 return sgl1->gl3_payload.forced_accepts;
0122 }
0123
0124 else if (strcmp(what,"HEADER2")==0)
0125 {
0126 return sgl1->gl2_payload.gl2_header;
0127 }
0128 else if ( strcmp(what,"PACCEPT")==0)
0129 {
0130 return sgl1->gl2_payload.partition_accept;
0131 }
0132 else if (strcmp(what,"MODEBITS")==0)
0133 {
0134 return sgl1->gl2_payload.mode_bits;
0135 }
0136 else if ( strcmp(what,"RBITS0")==0)
0137 {
0138 return sgl1->gl2_payload.reduced_bits[0];
0139 }
0140 else if ( strcmp(what,"RBITS1")==0)
0141 {
0142 return sgl1->gl2_payload.reduced_bits[1];
0143 }
0144 else if ( strcmp(what,"DCMFULL")==0)
0145 {
0146 return sgl1->gl2_payload.dcm_full_fem_busy;
0147 }
0148 else if ( strcmp(what,"FEMUNREL")==0)
0149 {
0150 return sgl1->gl2_payload.fem_unreliable;
0151 }
0152 else if ( strcmp(what,"GBUSY")==0)
0153 {
0154 return sgl1->gl2_payload.granule_busy;
0155 }
0156 else if ( strcmp(what,"PXBAR")==0)
0157 {
0158 return sgl1->gl2_payload.part_busy_xbar_out;
0159 }
0160 else if ( strcmp(what,"PBUSY")==0)
0161 {
0162 return sgl1->gl2_payload.part_busy_bus;
0163 }
0164
0165
0166 else if (strcmp(what,"HEADER1")==0)
0167 {
0168 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0169 return 0;
0170 }
0171 else{
0172 return sgl1->gl1_payload[ich].gl1_header;
0173 }
0174 }
0175 else if ( strcmp(what,"LUTINPUT")==0)
0176 {
0177
0178 if( (ich<0) || (ich>=8*sgl1->gl1_boards) ) {
0179 return 0;
0180 }
0181 else{
0182 return sgl1->gl1_payload[ich/8].lut_input[ich%8];
0183 }
0184 }
0185 else if ( strcmp(what,"RAWTRIG")==0)
0186 {
0187 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0188 return 0;
0189 }
0190 else{
0191 return sgl1->gl1_payload[ich].lut_output;
0192 }
0193 }
0194 else if ( strcmp(what,"TRIGBUSY")==0)
0195 {
0196 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0197 return 0;
0198 }
0199 else{
0200 return sgl1->gl1_payload[ich].trigger_busy;
0201 }
0202 }
0203 else if ( strcmp(what,"LIVETRIG")==0)
0204 {
0205 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0206 return 0;
0207 }
0208 else{
0209 return sgl1->gl1_payload[ich].live_trig_out;
0210 }
0211 }
0212 else if ( strcmp(what,"SCALEDTRIG")==0)
0213 {
0214 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0215 return 0;
0216 }
0217 else{
0218 return sgl1->gl1_payload[ich].scaled_trig_out;
0219 }
0220 }
0221 else if ( strcmp(what,"TRIGPARXBAR")==0)
0222 {
0223 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0224 return 0;
0225 }
0226 else{
0227 return sgl1->gl1_payload[ich].trig_part_xbar_out;
0228 }
0229 }
0230
0231
0232 else return 0;
0233
0234 }
0235 int Packet_gl1::iValue(const int ich, const int what)
0236 {
0237
0238
0239 if(!sgl1) demangle();
0240 if(!sgl1){
0241 std::cout<<"Failed to fill data structure"<<std::endl;
0242 return 0;
0243 }
0244 switch (what) {
0245
0246 case HEADER3:
0247 {
0248 return sgl1->gl3_payload.gl3_header;
0249 }
0250
0251 case YEAR:
0252 {
0253 return sgl1->gl3_payload.timestamp.year;
0254 }
0255 case MONTH:
0256 {
0257 return sgl1->gl3_payload.timestamp.month;
0258 }
0259 case DATE:
0260 {
0261 return sgl1->gl3_payload.timestamp.date;
0262 }
0263 case DAY:
0264 {
0265 return sgl1->gl3_payload.timestamp.day;
0266 }
0267 case HOUR:
0268 {
0269 return sgl1->gl3_payload.timestamp.hour;
0270 }
0271 case MIN:
0272 {
0273 return sgl1->gl3_payload.timestamp.min;
0274 }
0275 case SECGL1:
0276 {
0277 return sgl1->gl3_payload.timestamp.sec;
0278 }
0279
0280 case ALIGNMENT:
0281 {
0282 return sgl1->gl3_payload.alignment;
0283 }
0284 case CROSSCTR:
0285 {
0286 return sgl1->gl3_payload.bunch_crossing_counter;
0287 }
0288 case BEAMCTR0:
0289 {
0290 return sgl1->gl3_payload.beam_crossing_counter[0];
0291 }
0292 case BEAMCTR1:
0293 {
0294 return sgl1->gl3_payload.beam_crossing_counter[1];
0295 }
0296 case GACCEPT:
0297 {
0298 return sgl1->gl3_payload.granule_accept_vector;
0299 }
0300 case ACPTORINP:
0301 {
0302 return sgl1->gl3_payload.accept_or_input;
0303 }
0304 case ACPTCTR:
0305 {
0306 return sgl1->gl3_payload.gl1_accept_counter;
0307 }
0308 case GRANCTR:
0309 {
0310 if( (ich<0) || (ich>31) ) {
0311 return 0;
0312 }
0313 else{
0314 return sgl1->gl3_payload.granule_accept[ich];
0315 }
0316 }
0317 case GDISABLE:
0318 {
0319 return sgl1->gl3_payload.granule_disables;
0320 }
0321 case FACCEPT:
0322 {
0323 return sgl1->gl3_payload.forced_accepts;
0324 }
0325
0326 case HEADER2:
0327 {
0328 return sgl1->gl2_payload.gl2_header;
0329 }
0330 case PACCEPT:
0331 {
0332 return sgl1->gl2_payload.partition_accept;
0333 }
0334 case MODEBITS:
0335 {
0336 return sgl1->gl2_payload.mode_bits;
0337 }
0338 case RBITS0:
0339 {
0340 return sgl1->gl2_payload.reduced_bits[0];
0341 }
0342 case RBITS1:
0343 {
0344 return sgl1->gl2_payload.reduced_bits[1];
0345 }
0346 case DCMFULL:
0347 {
0348 return sgl1->gl2_payload.dcm_full_fem_busy;
0349 }
0350 case FEMUNREL:
0351 {
0352 return sgl1->gl2_payload.fem_unreliable;
0353 }
0354 case GBUSY:
0355 {
0356 return sgl1->gl2_payload.granule_busy;
0357 }
0358 case PXBAR:
0359 {
0360 return sgl1->gl2_payload.part_busy_xbar_out;
0361 }
0362 case PBUSY:
0363 {
0364 return sgl1->gl2_payload.part_busy_bus;
0365 }
0366
0367
0368 case HEADER1:
0369 {
0370 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0371 return 0;
0372 }
0373 else{
0374 return sgl1->gl1_payload[ich].gl1_header;
0375 }
0376 }
0377 case LUTINPUT:
0378 {
0379
0380 if( (ich<0) || (ich>=8*sgl1->gl1_boards) ) {
0381 return 0;
0382 }
0383 else{
0384 return sgl1->gl1_payload[ich/8].lut_input[ich%8];
0385 }
0386 }
0387 case RAWTRIG:
0388 {
0389 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0390 return 0;
0391 }
0392 else{
0393 return sgl1->gl1_payload[ich].lut_output;
0394 }
0395 }
0396 case TRIGBUSY:
0397 {
0398 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0399 return 0;
0400 }
0401 else{
0402 return sgl1->gl1_payload[ich].trigger_busy;
0403 }
0404 }
0405 case LIVETRIG:
0406 {
0407 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0408 return 0;
0409 }
0410 else{
0411 return sgl1->gl1_payload[ich].live_trig_out;
0412 }
0413 }
0414 case SCALEDTRIG:
0415 {
0416 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0417 return 0;
0418 }
0419 else{
0420 return sgl1->gl1_payload[ich].scaled_trig_out;
0421 }
0422 }
0423 case TRIGPARXBAR:
0424 {
0425 if( (ich<0) || (ich>=sgl1->gl1_boards) ) {
0426 return 0;
0427 }
0428 else{
0429 return sgl1->gl1_payload[ich].trig_part_xbar_out;
0430 }
0431 }
0432 default:
0433 {
0434 return 0;
0435 }
0436 }
0437
0438 return 0;
0439
0440 }
0441
0442 void Packet_gl1::dump ( OSTREAM &os)
0443 {
0444 int i,j,l,m,dlength;
0445 dlength = getDataLength();
0446
0447 this->identify(os);
0448 if(!sgl1) demangle();
0449 if(!sgl1){
0450 os<<"Failed to fill sgl1. Exit"<<std::endl;
0451 return;
0452 }
0453
0454
0455 const char* days[]={
0456 "Non",
0457 "Sun",
0458 "Mon",
0459 "Tue",
0460 "Wed",
0461 "Thu",
0462 "Fri",
0463 "Sat"
0464 };
0465 std::ios::fmtflags oldFlags = os.flags();
0466 char oldFill;
0467 oldFill=os.fill('0');
0468 for(m=0;m<54;m++) os<<"=";
0469 os << std::endl;
0470 os << "GL1 data packet:" << std::endl;
0471 os << "Detected " << std::dec << sgl1->gl1_boards << " GL1-1 boards in the data packet." <<std::endl;
0472 os << "--> GL1-3 <--"<<std::endl;
0473 os << "GL1-3 header word = 0x" << std::hex << SETW(4) << sgl1->gl3_payload.gl3_header << std::endl;
0474 os << "Time: " <<std::dec<<SETW(2)<<(sgl1->gl3_payload.timestamp.hour)<<":"<<SETW(2)<<(sgl1->gl3_payload.timestamp.min)<<":"
0475 <<SETW(2)<<(sgl1->gl3_payload.timestamp.sec)<<" "<<SETW(2)<<days[(sgl1->gl3_payload.timestamp.day)]
0476 <<", "<<(sgl1->gl3_payload.timestamp.month)<<"/"<<SETW(2)<<(sgl1->gl3_payload.timestamp.date)<<"/"
0477 <<SETW(4)<<(sgl1->gl3_payload.timestamp.year)<<std::endl;
0478 os <<"Alignment = 0x"<<std::hex<<SETW(4)<<sgl1->gl3_payload.alignment<<std::endl;
0479 os << "Beam Cross. Counter = 0x" << SETW(8)
0480 << sgl1->gl3_payload.beam_crossing_counter[1];
0481 os << SETW(8)
0482 << sgl1->gl3_payload.beam_crossing_counter[0] << std::endl;
0483 os << "Bunch Cross. Counter = 0x" << SETW(4) << sgl1->gl3_payload.bunch_crossing_counter << std::endl;
0484 os << "Granule Accept Vector = 0x" << SETW(8) << sgl1->gl3_payload.granule_accept_vector << std::endl;
0485 os << "Accept OR input = 0x" << SETW(8) << sgl1->gl3_payload.accept_or_input << std::endl;
0486
0487
0488 os << "Accept Counter = " << sgl1->gl3_payload.gl1_accept_counter << std::endl;
0489 os << "Granule Accept Counters:"<< std::endl;
0490
0491 for(i=3;i>=0;i--)
0492 {
0493 for(j=7;j>=0;j--)
0494 {
0495 l=i*8+j;
0496 if(l<10) os <<" ["<< std::dec<<SETW(1)<<l<<"]=0x"<<std::hex<<SETW(4)<<sgl1->gl3_payload.granule_accept[l]<<" ";
0497 else os <<"["<< std::dec<<SETW(2)<<l<<"]=0x"<<std::hex<<SETW(4)<<sgl1->gl3_payload.granule_accept[l]<<" ";
0498 }
0499 os<<std::endl;
0500 }
0501 os.flags(oldFlags);
0502 os.fill('0');
0503 os << "Granule Disables = 0x" << std::hex << SETW(8) << sgl1->gl3_payload.granule_disables << std::endl;
0504 os << "Forced Accepts = 0x" << SETW(8) << sgl1->gl3_payload.forced_accepts << std::endl;
0505 os << "--> GL1-2 <--"<<std::endl;
0506 os << "GL1-2 header word = 0x" << SETW(4) << sgl1->gl2_payload.gl2_header << std::endl;
0507 os << "Partition Accept Vector = 0x" << SETW(8) << sgl1->gl2_payload.partition_accept << std::endl;
0508 os << "Mode bits = 0x"<< SETW(4) << sgl1->gl2_payload.mode_bits << std::endl;
0509 os << "Reduced bits = 0x" << SETW(8)<<sgl1->gl2_payload.reduced_bits[1]
0510 << sgl1->gl2_payload.reduced_bits[0] << std::endl;
0511 os << "DCM Full/FEM Busy Vector = 0x" << SETW(8) << sgl1->gl2_payload.dcm_full_fem_busy << std::endl;
0512 os << "FEM Unreliable Vector = 0x" << SETW(8) << sgl1->gl2_payload.fem_unreliable << std::endl;
0513 os << "Granule busy = 0x" << SETW(8) << sgl1->gl2_payload.granule_busy << std::endl;
0514 os << "Partition busy Xbar Out = 0x" << SETW(8) << sgl1->gl2_payload.part_busy_xbar_out << std::endl;
0515 os << "Partition busy bus = 0x" << SETW(8) << sgl1->gl2_payload.part_busy_bus << std::endl;
0516 for(i=0;i<sgl1->gl1_boards;i++)
0517 {
0518 os << std::dec << SETW(1) << "--> GL1-1[" << i << "] <--" << std::endl;
0519 os << SETW(1) << "GL1-1[" << i << "] header word = 0x" << std::hex << SETW(4) << sgl1->gl1_payload[i].gl1_header << std::endl;
0520 os << "LUT inputs ";
0521 for(j=7;j>=0;j--)
0522 os << "["<< std::dec << SETW(1) << j <<"]<-0x"<< std::hex << SETW(5) <<sgl1->gl1_payload[i].lut_input[j]<<" ";
0523 os <<std::endl;
0524 os << "LUT Out (Raw Triggers) = 0x" << std::hex << SETW(8) << sgl1->gl1_payload[i].lut_output << std::endl;
0525 os << "Trigger busy input = 0x" << SETW(8) << sgl1->gl1_payload[i].trigger_busy << std::endl;
0526 os << "Live Triggers = 0x" << SETW(8) << sgl1->gl1_payload[i].live_trig_out << std::endl;
0527 os << "Scaled Triggers = 0x" << SETW(8) << sgl1->gl1_payload[i].scaled_trig_out << std::endl;
0528 os << "Trig->Part Xbar Out = 0x" << SETW(8) << sgl1->gl1_payload[i].trig_part_xbar_out << std::endl;
0529 os << std::dec << std::endl;
0530 }
0531
0532
0533
0534 j = 0;
0535 int* k=( int *) findPacketDataStart(packet);
0536 if ( k ==0 ) return;
0537
0538 while (1)
0539 {
0540 os << std::endl << std::dec << SETW(5) << j << " | ";
0541 for (l=0;l<4;l++)
0542 {
0543 os << std::hex << SETW(8) << k[j++] << " ";
0544 if (j>=dlength) break;
0545 }
0546 if (j>=dlength) break;
0547 }
0548 os << std::endl;
0549 for(m=0;m<54;m++) os<<"=";
0550 os << std::dec << std::endl;
0551 os.fill(oldFill);
0552 }
0553
0554 void Packet_gl1::demangle()
0555 {
0556
0557
0558
0559
0560
0561
0562 int check_length;
0563 if(sgl1) delete sgl1;
0564 sgl1=new GL1_EVENT_DATA;
0565 if(!sgl1){
0566 COUT<<"can't allocate memory for GL1_EVENT_DATA structure "<<std::endl;
0567 return;
0568 }
0569 int dlength = getDataLength();
0570
0571
0572
0573
0574
0575
0576 sgl1->gl1_boards = 1;
0577 check_length = 2*(dlength-46);
0578 while( check_length>=21 ){
0579 (sgl1->gl1_boards)++;
0580 check_length-=21;
0581 }
0582
0583 if(sgl1->gl1_boards>NUM_GL1_BOARDS)
0584 {
0585 sgl1->gl1_boards = NUM_GL1_BOARDS;
0586 }
0587 unsigned int* buf = (unsigned int *) findPacketDataStart(packet);
0588 if (buf == 0) return;
0589
0590
0591
0592
0593 unsigned int idx;
0594
0595
0596 sgl1->gl3_payload.gl3_header = buf[0]&0xFFFF;
0597 sgl1->gl3_payload.timestamp.year = 2000 + (10*((buf[0]>>20)&0xF) + ((buf[0]>>16)&0xF));
0598 sgl1->gl3_payload.timestamp.month = 10*((buf[1]>>12)&0xF) + ((buf[1]>>8)&0xF);
0599 sgl1->gl3_payload.timestamp.date = 10*((buf[1]>>4)&0xF) + (buf[1]&0xF);
0600 sgl1->gl3_payload.timestamp.day = (buf[1]>>24)&0x7;
0601 sgl1->gl3_payload.timestamp.hour = 10*((buf[1]>>20)&0xF) + ((buf[1]>>16)&0xF);
0602 sgl1->gl3_payload.timestamp.min = 10*((buf[2]>>12)&0xF) + ((buf[2]>>8)&0xF) ;
0603 sgl1->gl3_payload.timestamp.sec = 10*((buf[2]>>4)&0xF) + (buf[2]&0xF);
0604
0605 sgl1->gl3_payload.alignment = (buf[2]&0xFFFF0000)>>16;
0606
0607 sgl1->gl3_payload.beam_crossing_counter[1] =
0608 ((buf[3]&0xFFFF)<<16) + ((buf[3]&0xFFFF0000)>>16);
0609 sgl1->gl3_payload.beam_crossing_counter[0] =
0610 ((buf[4]&0xFFFF)<<16) + ((buf[4]&0xFFFF0000)>>16);
0611
0612 sgl1->gl3_payload.bunch_crossing_counter = (buf[5]&0xFFFF);
0613 sgl1->gl3_payload.granule_accept_vector = (buf[5]&0xFFFF0000) + (buf[6]&0xFFFF);
0614 sgl1->gl3_payload.accept_or_input = (buf[6]&0xFFFF0000)+(buf[7]&0xFFFF);
0615 sgl1->gl3_payload.gl1_accept_counter = (buf[7]&0xFFFF0000)+(buf[8]&0xFFFF);
0616 for(unsigned int j=0;j<32;j+=2){
0617 sgl1->gl3_payload.granule_accept[31-j] = (buf[8+(j/2)]&0xFFFF0000)>>16;
0618 sgl1->gl3_payload.granule_accept[31-(j+1)] = buf[8+(j/2)+1]&0xFFFF;
0619 }
0620 sgl1->gl3_payload.granule_disables = (buf[24]&0xFFFF0000)+(buf[25]&0xFFFF);
0621 sgl1->gl3_payload.forced_accepts = (buf[25]&0xFFFF0000)+(buf[26]&0xFFFF);
0622
0623
0624
0625 sgl1->gl2_payload.gl2_header = (buf[26]&0xFFFF0000)>>16;
0626 sgl1->gl2_payload.partition_accept = ((buf[27]&0xFFFF)<<16) + ((buf[27]&0xFFFF0000)>>16);
0627 sgl1->gl2_payload.mode_bits = (buf[28]&0xFFFF);
0628
0629 sgl1->gl2_payload.reduced_bits[1] =
0630 (buf[28]&0xFFFF0000)+(buf[29]&0xFFFF);
0631 sgl1->gl2_payload.reduced_bits[0] =
0632 (buf[29]&0xFFFF0000)+(buf[30]&0xFFFF);
0633
0634 sgl1->gl2_payload.dcm_full_fem_busy = (buf[30]&0xFFFF0000) + (buf[31]&0xFFFF);
0635 sgl1->gl2_payload.fem_unreliable = (buf[31]&0xFFFF0000) + (buf[32]&0xFFFF);
0636 sgl1->gl2_payload.granule_busy = (buf[32]&0xFFFF0000) + (buf[33]&0xFFFF);
0637 sgl1->gl2_payload.part_busy_xbar_out = (buf[33]&0xFFFF0000) + (buf[34]&0xFFFF);
0638 sgl1->gl2_payload.part_busy_bus = (buf[34]&0xFFFF0000) + (buf[35]&0xFFFF);
0639
0640
0641
0642 idx = 35;
0643 for(int i=0; i<sgl1->gl1_boards;i++){
0644
0645 if( (i%2)==0 ) {
0646
0647 sgl1->gl1_payload[i].gl1_header = (buf[idx]&0xFFFF0000)>>16;
0648 idx++;
0649
0650
0651
0652 sgl1->gl1_payload[i].lut_input[7] = ((buf[idx]&0xFFFF)<<4)+((buf[idx]&0xF0000000)>>28);
0653 sgl1->gl1_payload[i].lut_input[6] = ((buf[idx]&0x0FFF0000)>>8)+((buf[idx+1]&0xFF00)>>8);
0654 sgl1->gl1_payload[i].lut_input[5] = ((buf[idx+1]&0xFF)<<12)+((buf[idx+1]&0xFFF00000)>>20);
0655 sgl1->gl1_payload[i].lut_input[4] = ((buf[idx+1]&0xF0000)<<16)+(buf[idx+2]&0xFFFF);
0656 sgl1->gl1_payload[i].lut_input[3] = ((buf[idx+2]&0xFFFF0000)>>12)+((buf[idx+3]&0xF000)>>12);
0657 sgl1->gl1_payload[i].lut_input[2] = ((buf[idx+3]&0xFFF)<<8)+((buf[idx+3]&0xFF000000)>>24);
0658 sgl1->gl1_payload[i].lut_input[1] = ((buf[idx+3]&0xFF0000)>>4)+((buf[idx+4]&0xFFF0)>>4);
0659 sgl1->gl1_payload[i].lut_input[0] = ((buf[idx+4]&0xF)<<16)+((buf[idx+4]&0xFFFF0000)>>16);
0660 idx+=5;
0661
0662 sgl1->gl1_payload[i].lut_output = ((buf[idx]&0xFFFF0000)>>16) + ((buf[idx]&0xFFFF)<<16);
0663 idx++;
0664 sgl1->gl1_payload[i].trigger_busy = ((buf[idx]&0xFFFF0000)>>16) + ((buf[idx]&0xFFFF)<<16);
0665 idx++;
0666 sgl1->gl1_payload[i].live_trig_out = ((buf[idx]&0xFFFF0000)>>16) + ((buf[idx]&0xFFFF)<<16);
0667 idx++;
0668 sgl1->gl1_payload[i].scaled_trig_out = ((buf[idx]&0xFFFF0000)>>16) + ((buf[idx]&0xFFFF)<<16);
0669 idx++;
0670 sgl1->gl1_payload[i].trig_part_xbar_out = ((buf[idx]&0xFFFF0000)>>16) + ((buf[idx]&0xFFFF)<<16);
0671 idx++;
0672
0673 }
0674 else
0675 {
0676
0677 sgl1->gl1_payload[i].gl1_header = buf[idx]&0xFFFF;
0678
0679
0680
0681 sgl1->gl1_payload[i].lut_input[7] = ((buf[idx]&0xFFFF0000)>>12)+((buf[idx+1]&0xF000)>>12);
0682 sgl1->gl1_payload[i].lut_input[6] = ((buf[idx+1]&0x0FFF)<<8) + ((buf[idx+1]&0xFF000000)>>24);
0683 sgl1->gl1_payload[i].lut_input[5] = ((buf[idx+1]&0xFF0000)>>4) + ((buf[idx+2]&0xFFF0)>>4);
0684 sgl1->gl1_payload[i].lut_input[4] = ((buf[idx+2]&0xF)<<16) + ((buf[idx+2]&0xFFFF0000)>>16);
0685 sgl1->gl1_payload[i].lut_input[3] = ((buf[idx+3]&0xFFFF)<<4) + ((buf[idx+3]&0xF0000000)>>28);
0686 sgl1->gl1_payload[i].lut_input[2] = ((buf[idx+3]&0xFFF0000)>>8) + ((buf[idx+4]&0xFF00)>>8);
0687 sgl1->gl1_payload[i].lut_input[1] = ((buf[idx+4]&0xFF)<<12) + ((buf[idx+4]&0xFFF00000)>>20);
0688 sgl1->gl1_payload[i].lut_input[0] = ((buf[idx+4]&0xF0000)) + ((buf[idx+5]&0xFFFF));
0689 idx+=5;
0690
0691 sgl1->gl1_payload[i].lut_output = ((buf[idx]&0xFFFF0000)) + ((buf[idx+1]&0xFFFF));
0692 idx++;
0693 sgl1->gl1_payload[i].trigger_busy = ((buf[idx]&0xFFFF0000)) + ((buf[idx+1]&0xFFFF));
0694 idx++;
0695 sgl1->gl1_payload[i].live_trig_out = ((buf[idx]&0xFFFF0000)) + ((buf[idx+1]&0xFFFF));
0696 idx++;
0697 sgl1->gl1_payload[i].scaled_trig_out = ((buf[idx]&0xFFFF0000)) + ((buf[idx+1]&0xFFFF));
0698 idx++;
0699 sgl1->gl1_payload[i].trig_part_xbar_out = ((buf[idx]&0xFFFF0000)) + ((buf[idx+1]&0xFFFF));
0700 idx++;
0701
0702 }
0703
0704 }
0705
0706 }
0707
0708
0709
0710
0711
0712
0713