1 | #ifndef FACT_FAD_H
|
---|
2 | #define FACT_FAD_H
|
---|
3 |
|
---|
4 | //---------------------------------------------------------------
|
---|
5 | //
|
---|
6 | // FAD internal structures
|
---|
7 | //
|
---|
8 | //---------------------------------------------------------------
|
---|
9 |
|
---|
10 | #define NTemp 4
|
---|
11 | #define NDAC 8
|
---|
12 |
|
---|
13 | typedef struct {
|
---|
14 |
|
---|
15 | uint16_t start_package_flag;
|
---|
16 | uint16_t package_length;
|
---|
17 | uint16_t version_no;
|
---|
18 | uint16_t PLLLCK;
|
---|
19 |
|
---|
20 | uint16_t trigger_crc;
|
---|
21 | uint16_t trigger_type;
|
---|
22 | uint32_t trigger_id;
|
---|
23 |
|
---|
24 | uint32_t fad_evt_counter;
|
---|
25 | uint32_t REFCLK_frequency;
|
---|
26 |
|
---|
27 | uint16_t board_id;
|
---|
28 | uint8_t zeroes;
|
---|
29 | int8_t adc_clock_phase_shift;
|
---|
30 | uint16_t number_of_triggers_to_generate;
|
---|
31 | uint16_t trigger_generator_prescaler;
|
---|
32 |
|
---|
33 | uint64_t DNA;
|
---|
34 |
|
---|
35 | uint32_t time;
|
---|
36 | uint32_t runnumber;
|
---|
37 |
|
---|
38 | int16_t drs_temperature[NTemp];
|
---|
39 |
|
---|
40 | uint16_t dac[NDAC];
|
---|
41 |
|
---|
42 | } __attribute__((__packed__)) PEVNT_HEADER;
|
---|
43 |
|
---|
44 | typedef struct {
|
---|
45 | uint16_t id;
|
---|
46 | uint16_t start_cell;
|
---|
47 | uint16_t roi;
|
---|
48 | uint16_t filling;
|
---|
49 | int16_t adc_data[];
|
---|
50 | } __attribute__((__packed__)) PCHANNEL;
|
---|
51 |
|
---|
52 |
|
---|
53 | typedef struct {
|
---|
54 | uint16_t package_crc;
|
---|
55 | uint16_t end_package_flag;
|
---|
56 | } __attribute__((__packed__)) PEVNT_FOOTER;
|
---|
57 |
|
---|
58 | #define NBOARDS 40 // max. number of boards
|
---|
59 | #define NPIX 1440 // max. number of pixels
|
---|
60 | #define NTMARK 160 // max. number of timeMarker signals
|
---|
61 |
|
---|
62 | //---------------------------------------------------------------
|
---|
63 | //
|
---|
64 | // Data structures
|
---|
65 | //
|
---|
66 | //---------------------------------------------------------------
|
---|
67 |
|
---|
68 | typedef struct _EVENT {
|
---|
69 | uint16_t Roi ; // #slices per pixel (same for all pixels)
|
---|
70 | uint16_t RoiTM ; // #slices per pixel (same for all tmarks) [ 0 or Roi ]
|
---|
71 | uint32_t EventNum ; // EventNumber as from FADs
|
---|
72 | uint32_t TriggerNum ; // EventNumber as from FTM
|
---|
73 | uint16_t TriggerType ; // Trigger Type from FTM
|
---|
74 |
|
---|
75 | uint32_t NumBoards ; // number of active boards included
|
---|
76 | uint8_t Errors[4] ; // indicator for mismatches
|
---|
77 |
|
---|
78 | uint32_t SoftTrig ; // SoftTrigger Info (TBD)
|
---|
79 | uint32_t PCTime ; // epoch
|
---|
80 | uint32_t PCUsec ; // micro-seconds
|
---|
81 |
|
---|
82 | uint32_t BoardTime[NBOARDS];//
|
---|
83 |
|
---|
84 | int16_t StartPix[NPIX]; // First Channel per Pixel (Pixels sorted according Software ID) ; -1 if not filled
|
---|
85 |
|
---|
86 | int16_t StartTM[NTMARK]; // First Channel for TimeMark (sorted Hardware ID) ; -1 if not filled
|
---|
87 |
|
---|
88 | int16_t Adc_Data[]; // final length defined by malloc ....
|
---|
89 |
|
---|
90 | } __attribute__((__packed__)) EVENT ;
|
---|
91 |
|
---|
92 | //---------------------------------------------------------------
|
---|
93 |
|
---|
94 | struct RUN_HEAD
|
---|
95 | {
|
---|
96 | uint32_t Version ;
|
---|
97 | uint32_t RunType ;
|
---|
98 | uint32_t RunTime ; //unix epoch for first event
|
---|
99 | uint32_t RunUsec ; //microseconds
|
---|
100 | uint16_t NBoard ; //#boards (always 40)
|
---|
101 | uint16_t NPix ; //#pixels (always 1440)
|
---|
102 | uint16_t NTm ; //#TM (always 160)
|
---|
103 | uint16_t Nroi ; //roi for pixels
|
---|
104 | uint16_t NroiTM ; //roi for TM <=0 if TM is empty
|
---|
105 |
|
---|
106 | //headers of all FAD-boards for first event ==> all FAD configs
|
---|
107 | PEVNT_HEADER FADhead[NBOARDS]; // [ NBoards ] sorted Board Headers (according Hardware ID)
|
---|
108 |
|
---|
109 | RUN_HEAD() : Version(1), RunType(-1), NBoard(NBOARDS), NPix(NPIX), NTm(NTMARK)
|
---|
110 | {
|
---|
111 | }
|
---|
112 |
|
---|
113 |
|
---|
114 | //do we also have info about FTM config we want to add here ???
|
---|
115 | } __attribute__((__packed__));
|
---|
116 |
|
---|
117 |
|
---|
118 | //---------------------------------------------------------------
|
---|
119 |
|
---|
120 | // FIXME: This doesn't neet to be here... it is inlcuded in all
|
---|
121 | // data processors
|
---|
122 |
|
---|
123 | #include <netinet/in.h>
|
---|
124 |
|
---|
125 | typedef struct {
|
---|
126 | struct sockaddr_in sockAddr ;
|
---|
127 | int sockDef ; //<0 not defined/ ==0 not to be used/ >0 used
|
---|
128 | } FACT_SOCK ; //internal to eventbuilder
|
---|
129 |
|
---|
130 |
|
---|
131 | //---------------------------------------------------------------
|
---|
132 |
|
---|
133 | typedef struct {
|
---|
134 | //info about status of the main threads
|
---|
135 | int32_t readStat ; //read thread
|
---|
136 | int32_t procStat ; //processing thread(s)
|
---|
137 | int32_t writStat ; //write thread
|
---|
138 |
|
---|
139 | //info about (current state of) the buffer
|
---|
140 | int32_t bufNew ; //# incomplete events in buffer
|
---|
141 | int32_t bufEvt ; //# complete events in buffer
|
---|
142 | int32_t bufTot ; //# total events currently in buffer
|
---|
143 | int32_t maxEvt ; //# maximum events in buffer past cycle
|
---|
144 | int32_t xxxEvt ; //# maximum events ever in buffer
|
---|
145 | uint64_t totMem; //# Bytes available in Buffer
|
---|
146 | uint64_t usdMem; //# Bytes currently used
|
---|
147 | uint64_t xxxMem; //max # Bytes ever used **
|
---|
148 | uint64_t maxMem; //max # Bytes used during past cycle
|
---|
149 |
|
---|
150 | //counters
|
---|
151 | int32_t evtSkip ; //# incomplete Events skipped (timeout)
|
---|
152 | int32_t evtWrite ; //# Events written (or flushed if noWrite)
|
---|
153 | int32_t evtErr ; //# Events with errors
|
---|
154 | int32_t badRoiE; //# boards with wrong roi (inconsistent in event)
|
---|
155 | int32_t badRoiR; //# boards with wrong roi (inconsistent in run)
|
---|
156 | int32_t badRoiB; //# boards with wrong roi (inconsistent in board)
|
---|
157 | int32_t badRoi[NBOARDS]; //# boards with wrong roi
|
---|
158 |
|
---|
159 | //rates
|
---|
160 | int32_t deltaT ; //time in milli-seconds for rates
|
---|
161 | int32_t rateNew ; //#New start events recieved
|
---|
162 | int32_t rateWrite ; //#Complete events written (or flushed)
|
---|
163 |
|
---|
164 | //connections
|
---|
165 | int8_t numConn[NBOARDS] ; //#connections per board (at the moment)
|
---|
166 | //int32_t errConn[NBOARDS] ; //#I/O errors per board (counter)
|
---|
167 | int32_t rateBytes[NBOARDS]; //#Bytes read this cycle **
|
---|
168 | int64_t totBytes[NBOARDS]; //#Bytes read (counter)
|
---|
169 |
|
---|
170 |
|
---|
171 | // ** // if counter and rates exist, do only update the rates in
|
---|
172 | // ** // real time;
|
---|
173 | // ** // counters will be updated only once per cycle based on rates
|
---|
174 |
|
---|
175 | } __attribute__((__packed__)) GUI_STAT ; //EventBuilder Status
|
---|
176 |
|
---|
177 | #endif
|
---|