| 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 |
|
|---|
| 77 | uint32_t PCTime ; // epoch
|
|---|
| 78 | uint32_t PCUsec ; // micro-seconds
|
|---|
| 79 |
|
|---|
| 80 | uint32_t BoardTime[NBOARDS];//
|
|---|
| 81 |
|
|---|
| 82 | int16_t StartPix[NPIX]; // First Channel per Pixel (Pixels sorted according Software ID) ; -1 if not filled
|
|---|
| 83 |
|
|---|
| 84 | int16_t StartTM[NTMARK]; // First Channel for TimeMark (sorted Hardware ID) ; -1 if not filled
|
|---|
| 85 |
|
|---|
| 86 | int16_t Adc_Data[]; // final length defined by malloc ....
|
|---|
| 87 |
|
|---|
| 88 | } __attribute__((__packed__)) EVENT ;
|
|---|
| 89 |
|
|---|
| 90 | //---------------------------------------------------------------
|
|---|
| 91 |
|
|---|
| 92 | struct RUN_HEAD
|
|---|
| 93 | {
|
|---|
| 94 | uint32_t Version ;
|
|---|
| 95 | uint32_t RunType ;
|
|---|
| 96 | uint32_t RunTime ; //unix epoch for first event
|
|---|
| 97 | uint32_t RunUsec ; //microseconds
|
|---|
| 98 | uint16_t NBoard ; //#boards (always 40)
|
|---|
| 99 | uint16_t NPix ; //#pixels (always 1440)
|
|---|
| 100 | uint16_t NTm ; //#TM (always 160)
|
|---|
| 101 | uint16_t Nroi ; //roi for pixels
|
|---|
| 102 | uint16_t NroiTM ; //roi for TM <=0 if TM is empty
|
|---|
| 103 |
|
|---|
| 104 | //headers of all FAD-boards for first event ==> all FAD configs
|
|---|
| 105 | PEVNT_HEADER FADhead[NBOARDS]; // [ NBoards ] sorted Board Headers (according Hardware ID)
|
|---|
| 106 |
|
|---|
| 107 | RUN_HEAD() : Version(1), RunType(-1), NBoard(NBOARDS), NPix(NPIX), NTm(NTMARK)
|
|---|
| 108 | {
|
|---|
| 109 | }
|
|---|
| 110 |
|
|---|
| 111 |
|
|---|
| 112 | //do we also have info about FTM config we want to add here ???
|
|---|
| 113 | } __attribute__((__packed__));
|
|---|
| 114 |
|
|---|
| 115 |
|
|---|
| 116 | //---------------------------------------------------------------
|
|---|
| 117 |
|
|---|
| 118 | // FIXME: This doesn't neet to be here... it is inlcuded in all
|
|---|
| 119 | // data processors
|
|---|
| 120 |
|
|---|
| 121 | #include <netinet/in.h>
|
|---|
| 122 |
|
|---|
| 123 | typedef struct {
|
|---|
| 124 | struct sockaddr_in sockAddr ;
|
|---|
| 125 | int sockDef ; //<0 not defined/ ==0 not to be used/ >0 used
|
|---|
| 126 | } FACT_SOCK ; //internal to eventbuilder
|
|---|
| 127 |
|
|---|
| 128 |
|
|---|
| 129 | //---------------------------------------------------------------
|
|---|
| 130 |
|
|---|
| 131 | typedef struct {
|
|---|
| 132 | //info about (current state of) the buffer
|
|---|
| 133 | uint32_t bufNew ; //# incomplete events in buffer (evtCtrl)
|
|---|
| 134 | uint32_t bufEvt ; //# complete events in buffer (primaryQueue)
|
|---|
| 135 | uint32_t bufWrite ; //# events in write queue (secondaryQueue)
|
|---|
| 136 | uint32_t bufProc ; //# events in processing queue (processingQueue1)
|
|---|
| 137 | uint32_t bufTot ; //# total events currently in buffer (this corresponds to totMem)
|
|---|
| 138 |
|
|---|
| 139 | uint64_t totMem; //# Bytes available in Buffer
|
|---|
| 140 | uint64_t usdMem; //# Bytes currently used
|
|---|
| 141 | uint64_t maxMem; //max # Bytes used during past cycle
|
|---|
| 142 |
|
|---|
| 143 | //rates
|
|---|
| 144 | int32_t deltaT ; //time in milli-seconds for rates
|
|---|
| 145 | int32_t rateNew ; //#New start events recieved
|
|---|
| 146 | int32_t rateWrite ; //#Complete events written (or flushed)
|
|---|
| 147 |
|
|---|
| 148 | //connections
|
|---|
| 149 | int8_t numConn[NBOARDS] ; //#connections per board (at the moment)
|
|---|
| 150 | uint32_t rateBytes[NBOARDS]; //#Bytes read (counter)
|
|---|
| 151 | int32_t relBytes[NBOARDS]; //#Bytes read this cycle **
|
|---|
| 152 |
|
|---|
| 153 | // ** // if counter and rates exist, do only update the rates in
|
|---|
| 154 | // ** // real time;
|
|---|
| 155 | // ** // counters will be updated only once per cycle based on rates
|
|---|
| 156 |
|
|---|
| 157 | } __attribute__((__packed__)) GUI_STAT ; //EventBuilder Status
|
|---|
| 158 |
|
|---|
| 159 | #endif
|
|---|