void checkDATAbuffer(int stream, char* p, int l) { int len, blen; int module; int group, item; unsigned int chan; unsigned short * eventbuffer; unsigned short data, header; int i; int count; int Trace = 2; blen = l/2; eventbuffer = (unsigned short *)p; if (blen == 0) {return;} /* empty event */ if(Trace > 1) printf("1: blen=%d\n",blen); /* printf(">"); for (i = 0; i < 32; i++) { printf("0x%04x ", eventbuffer[i]); } printf("\n"); */ while (blen > 0) { /* printf("blen=%d\n",blen); printf(">"); for (i = -8; i < 32; i++) { printf("0x%04x ", eventbuffer[i]); } printf("\n"); */ // printf("1: blen=%d\n",blen); header = *eventbuffer++; blen--; if (header == 0xffff) { len = *eventbuffer++; blen--; // printf("2: header=0x%04x len=%d\n",header,len); if (len == 0) {printf ("end of data\n"); blen=0; break;} header = *eventbuffer++; // printf("2a: header=0x%04x\n",header); blen--; } switch ((header >> 14 ) & 3) { case 2: /* extended group format used by V1751 & V1495*/ count = header & 0x3fff; group = *eventbuffer++; blen--; // if(Trace > 1)printf("3: header=0x%04x count=%d group=%d\n",header,count,group); if (group >= 320) { chan = group - 256 - 64; module = (chan/8)+1; chan = chan & 7; printf ("4: #2 group=%d V1751psd#%d Ch%d count=%d",group,module,chan,count); } else { chan = group - 256; module = 1; printf ("+++++==>> start event \n"); printf ("4: #2 group=%d V1495#%d ",group,module); } item = 0; for (i = 0; i < count; i++) { data = *eventbuffer++; blen--; if (group < 320) {printf (" 0x%4x",data);} if (group >= 320 && i < 12) {printf (" 0x%4x",data);} item++; } printf ("\n"); if ((count/2)*2 != count) {eventbuffer++; blen--;} /* for alignment */ break; case 0: /* simple item format */ /* printf(">"); for (i = -8; i < 8; i++) { printf("0x%04x ", eventbuffer[i]); } printf("\n"); */ data = *eventbuffer++; blen--; group = header & 255; item = (header >> 8) & 63; // printf ("10: group = %d, item = %d, data = 0x%04x\n", group,item,data); break; case 1: /* standard group format */ count = (header >> 8) & 0x3f; group = header & 255; /* group number - contains module + adc */ // if(Trace > 1)printf("5: header=0x%04x count=%d group=%d\n",header,count,group); chan = group - 128; module = (chan/32)+1; chan = chan & 31; printf ("6: #1 group=%d V1290#%d Ch%d ",group,module,chan); item = 0; for (i = 0; i < count; i++) { data = *eventbuffer++; blen--; printf (" 0x%4x",data); item++; } printf ("\n"); if ((count/2)*2 == count) {eventbuffer++; blen--;} /* for alignment */ break; case 3: default: len = 0; /* quit */ printf("bad event data - histogramming aborted (%x)\n", header); break; } } } void printbufferS(char* p, int l) { int len; int i; unsigned short * eventbuffer; len = l/2; /* len in units of short */ eventbuffer = (unsigned short *)p; printf("buffer len=%d bytes\n",l); printf(">"); for (i=0;i<64;i++) {printf("0x%04x ", *eventbuffer++);} printf("\n"); } void printbufferL(char* p, int l) { int len; int i, j; unsigned int * eventbuffer; len = l/4; /* len in units of int */ eventbuffer = (unsigned int *)p; printf("buffer len=%d bytes\n",l); printf(">\n"); for (j=0;j<16;j++) { for (i=0;i<8;i++) {printf("0x%08lx ", *eventbuffer++);} printf("\n"); } }