AlcapDAQ  1
patch_mevb.cpp
Go to the documentation of this file.
1 --- /home/data/midas-1.9.3/examples/eventbuilder/mevb.c 2002-10-07 19:04:01.000000000 +0200
2 +++ mevb.cpp 2005-06-18 01:55:31.000000000 +0200
3 @@ -3,7 +3,17 @@
4  Created by: Pierre-Andre Amaudruz
5 
6  Contents: Main Event builder task.
7 -$Log: mevb.c,v $
8 +$Log: mevb.cpp,v $
9 +Revision 1.1 2003/07/17 18:52:54 fegray
10 +Converted eventbuilder to C++.
11 +
12 +Revision 1.4 2003/05/27 16:26:20 mucap
13 +Update to CVS version of MIDAS.
14 +
15 +Revision 1.3 2003/05/13 19:27:04 mucap
16 +Fixes to allow a subset of the crates to participate in an event. Also,
17 +this pulls in Pierre's CVS changes to the generic eventbuilder code.
18 +
19  Revision 1.9 2002/10/07 17:04:01 pierre
20  fix tr_stop request
21 
22 @@ -67,7 +77,9 @@
23  INT eb_end_of_run(INT, char *);
24  INT eb_user(INT, EBUILDER_CHANNEL *, EVENT_HEADER *, void *, INT *);
25 
26 -extern INT ybos_event_swap (DWORD * pevt);
27 +extern "C" {
28 + extern INT ybos_event_swap (DWORD * pevt);
29 +};
30 
31  /*--------------------------------------------------------------------*/
32  /* eb_mfragment_add_()
33 @@ -299,7 +311,7 @@
34  if (debug)
35  printf("Hand flushing system buffer... \n");
36  for (i=0;i<nfragment;i++) {
37 - do {
38 + if (ebch[i].set.emask) do {
39  size = max_event_size;
40  status = bm_receive_event(ebch[i].hBuf, ebch[i].pfragment, &size, ASYNC);
41  if (debug1) {
42 @@ -407,19 +419,23 @@
43  }
44 
45  /*--------------------------------------------------------------------*/
46 -INT source_unbooking(nfrag)
47 +INT source_unbooking(INT nfrag)
48  {
49  INT i, status;
50 
51  /* Skip unbooking if already done */
52 +#if 0
53  if (ebch[0].pfragment == NULL)
54  return EB_SUCCESS;
55 +#endif
56 
57  /* unbook all source channels */
58  for (i=nfrag-1; i>=0 ; i--)
59  {
60  bm_empty_buffers();
61 
62 + if (ebch[i].set.emask)
63 + {
64  /* Remove event ID registration */
65  status = bm_delete_request(ebch[i].req_id);
66  if (debug)
67 @@ -435,6 +451,7 @@
68  return status;
69  }
70  }
71 + }
72 
73  /* release local event buffer memory */
74  free_event_buffer(nfrag);
75 @@ -477,6 +494,8 @@
76  BOOL found, event_mismatch;
77  BANK_HEADER *psbh;
78 
79 + status = SUCCESS;
80 +
81  /* Scan all channels at least once */
82  for(i=0 ; i<nfragment ; i++) {
83  /* Check if current channel needs to be received */
84 @@ -562,6 +581,9 @@
85  sprintf (strsub, "Ser[%d]:%d ", j, ebch[j].serial);
86  strcat (str, strsub);
87  }
88 + if(debug) {
89 + printf("%s\n", str);
90 + }
91  }
92  else { /* serial number match */
93 
94 @@ -590,6 +612,7 @@
95  /* Allow bypass of fragment assembly if user wants to do it on its own */
96  if (!ebset.user_build) {
97  for (j=0 ; j<nfragment ; j++) {
98 + if (ebch[j].set.emask) {
99  status = meb_fragment_add(dest_event, ebch[j].pfragment, &act_size);
100  if (status != EB_SUCCESS) {
101  cm_msg(MERROR,"source_scan","compose fragment:%d current size:%d (%d)"
102 @@ -597,6 +620,7 @@
103  return EB_ERROR;
104  }
105  }
106 + }
107  } /* skip user_build */
108 
109  /* Overall event to be sent */
110 @@ -652,7 +676,8 @@
111  memset (&ebch[0], 0, sizeof(ebch));
112 
113  /* set default */
114 - cm_get_environment (host_name, expt_name);
115 + cm_get_environment (host_name, sizeof(host_name),
116 + expt_name, sizeof(expt_name));
117 
118  /* get parameters */
119  for (i=1 ; i<argc ; i++)
120 @@ -770,9 +795,9 @@
121  }
122 
123  /* Register transition for reset counters */
124 - if (cm_register_transition(TR_PRESTART, tr_prestart) != CM_SUCCESS)
125 + if (cm_register_transition(TR_START, tr_prestart, 300) != CM_SUCCESS)
126  goto error;
127 - if (cm_register_transition(TR_STOP, tr_stop) != CM_SUCCESS)
128 + if (cm_register_transition(TR_STOP, tr_stop, 700) != CM_SUCCESS)
129  goto error;
130 
131  if (debug)