AlcapDAQ  1
Macros | Functions
X742DecodeRoutines.h File Reference
#include <CAENDigitizer.h>

Go to the source code of this file.

Macros

#define EVENT_HEADER_SIZE   0x10
 
#define X742_MAX_GROUPS   0x04
 
#define MAX_X742_CHANNEL_SIZE   0x09
 
#define X742_FIXED_SIZE   0x400
 

Functions

int32_t GetNumEvents (char *buffer, uint32_t buffsize, uint32_t *numEvents)
 
int32_t GetEventPtr (char *buffer, uint32_t buffsize, int32_t numEvent, char **EventPtr)
 
int32_t X742_DecodeEvent (char *evtPtr, void **Evt)
 

Macro Definition Documentation

#define EVENT_HEADER_SIZE   0x10

Definition at line 3 of file X742DecodeRoutines.h.

Referenced by GetEventPtr(), GetNumEvents(), and X742_DecodeEvent().

#define MAX_X742_CHANNEL_SIZE   0x09

Definition at line 5 of file X742DecodeRoutines.h.

#define X742_FIXED_SIZE   0x400

Definition at line 6 of file X742DecodeRoutines.h.

Referenced by X742_DecodeEvent().

#define X742_MAX_GROUPS   0x04

Definition at line 4 of file X742DecodeRoutines.h.

Referenced by X742_DecodeEvent().

Function Documentation

int32_t GetEventPtr ( char *  buffer,
uint32_t  buffsize,
int32_t  numEvent,
char **  EventPtr 
)

Definition at line 117 of file X742DecodeRoutines.c.

References EVENT_HEADER_SIZE, and i.

117  {
118  uint32_t i = 0;
119  int32_t counter = -1;
120  int ret;
121  int evtSize;
122 
123  if ((buffer == NULL) || (buffsize < EVENT_HEADER_SIZE)) return -1;
124  do {
125  counter++;
126  evtSize = *(long *)(buffer+i) & 0x0FFFFFFF;
127  if (counter == numEvent) {
128  if ((i + (uint32_t) evtSize) < buffsize) {
129  *EventPtr =(buffer+i);
130  return 0;
131  }
132  else return -1;
133  }
134  i += (uint32_t) (evtSize *4);
135  } while ((i + EVENT_HEADER_SIZE) < buffsize);
136  return -1;
137 }
int32_t GetNumEvents ( char *  buffer,
uint32_t  buffsize,
uint32_t *  numEvents 
)

Definition at line 99 of file X742DecodeRoutines.c.

References EVENT_HEADER_SIZE, and i.

99  {
100  uint32_t i = 0,evtSize;
101  int ret;
102  int32_t counter = -1;
103  if ((buffsize == 0) || (buffer == NULL)){
104  *numEvents = 0;
105  return 0;
106  }
107  if (buffsize < EVENT_HEADER_SIZE) return -1;
108  do {
109  counter++;
110  evtSize = *(long *)(buffer+i) & 0x0FFFFFFF;
111  i += (uint32_t) (evtSize * 4);
112  } while ((i + EVENT_HEADER_SIZE) < buffsize);
113  *numEvents = counter + 1;
114  return 0;
115 }
int32_t X742_DecodeEvent ( char *  evtPtr,
void **  Evt 
)

Definition at line 139 of file X742DecodeRoutines.c.

References CAEN_DGTZ_X742_GROUP_t::DataChannel, CAEN_DGTZ_X742_EVENT_t::DataGroup, EVENT_HEADER_SIZE, CAEN_DGTZ_X742_EVENT_t::GrPresent, h, MAX_X742_CHANNEL_SIZE, size, V1742UnpackEventGroup(), X742_FIXED_SIZE, and X742_MAX_GROUPS.

139  {
140  CAEN_DGTZ_X742_EVENT_t *Event;
141  uint32_t *buffer;
142  char chanMask;
143  uint32_t j,g,size;
144  uint32_t *pbuffer;
145  uint32_t eventSize;
146  int evtSize,h;
147 
148  evtSize = *(long *)evtPtr & 0x0FFFFFFF;
149  chanMask = *(long *)(evtPtr+4) & 0x0000000F;
150  evtPtr += EVENT_HEADER_SIZE;
151  buffer = (uint32_t *) evtPtr;
152  pbuffer = (uint32_t *) evtPtr;
153  eventSize = (evtSize * 4) - EVENT_HEADER_SIZE;
154  if (eventSize == 0) return -1;
155  Event = (CAEN_DGTZ_X742_EVENT_t *) malloc(sizeof(CAEN_DGTZ_X742_EVENT_t));
156  if (Event == NULL) return -1;
157  memset( Event, 0, sizeof(CAEN_DGTZ_X742_EVENT_t));
158  for (g=0; g<X742_MAX_GROUPS; g++) {
159  if ((chanMask >> g) & 0x1) {
160  for (j=0; j<MAX_X742_CHANNEL_SIZE; j++) {
161  Event->DataGroup[g].DataChannel[j]= malloc(X742_FIXED_SIZE * sizeof (float));
162  if (Event->DataGroup[g].DataChannel[j] == NULL) {
163  for (h=j-1;h>-1;h++) free(Event->DataGroup[g].DataChannel[h]);
164  return -1;
165  }
166  }
167  size=V1742UnpackEventGroup(g,pbuffer,&(Event->DataGroup[g]));
168  pbuffer+=size;
169  Event->GrPresent[g] = 1;
170  }
171  else {
172  Event->GrPresent[g] = 0;
173  for (j=0; j<MAX_X742_CHANNEL_SIZE; j++) {
174  Event->DataGroup[g].DataChannel[j] = NULL;
175  }
176  }
177  }
178  *Evt = Event;
179  return 0;
180 }