psddl_psana/include/evr.ddl.h

Go to the documentation of this file.
00001 #ifndef PSANA_EVR_DDL_H
00002 #define PSANA_EVR_DDL_H 1
00003 
00004 // *** Do not edit this file, it is auto-generated ***
00005 
00006 #include <vector>
00007 #include <iosfwd>
00008 #include <cstring>
00009 #include "ndarray/ndarray.h"
00010 #include "pdsdata/xtc/TypeId.hh"
00011 #include "pdsdata/xtc/DetInfo.hh"
00012 namespace Psana {
00013 namespace EvrData {
00014 
00015 /** @class PulseConfig
00016 
00017   
00018 */
00019 
00020 
00021 class PulseConfig {
00022 public:
00023   enum { Trigger_Shift = 0 };
00024   enum { Set_Shift = 8 };
00025   enum { Clear_Shift = 16 };
00026   enum { Polarity_Shift = 0 };
00027   enum { Map_Set_Ena_Shift = 1 };
00028   enum { Map_Reset_Ena_Shift = 2 };
00029   enum { Map_Trigger_Ena_Shift = 3 };
00030   PulseConfig(uint32_t pulse, int16_t trigger, int16_t set, int16_t clear, uint8_t polarity, uint8_t map_set_enable, uint8_t map_reset_enable, uint8_t map_trigger_enable, uint32_t prescale, uint32_t delay, uint32_t width)
00031     : _pulse(pulse), _input_control(((trigger+1) & 0xff)|(((set+1) & 0xff)<<8)|(((clear+1) & 0xff)<<16)), _output_control(((polarity) & 0x1)|(((map_set_enable) & 0x1)<<1)|(((map_reset_enable) & 0x1)<<2)|(((map_trigger_enable) & 0x1)<<3)), _prescale(prescale), _delay(delay), _width(width)
00032   {
00033   }
00034   PulseConfig() {}
00035   /** internal pulse generation channel */
00036   uint32_t pulse() const { return _pulse; }
00037   /** Pulse input control */
00038   uint32_t _input_control_value() const { return _input_control; }
00039 private:
00040   int16_t bf_trigger() const { return int16_t(this->_input_control & 0xff); }
00041   int16_t bf_set() const { return int16_t((this->_input_control>>8) & 0xff); }
00042   int16_t bf_clear() const { return int16_t((this->_input_control>>16) & 0xff); }
00043 public:
00044   /** Pulse output control */
00045   uint32_t _output_control_value() const { return _output_control; }
00046   uint8_t polarity() const { return uint8_t(this->_output_control & 0x1); }
00047   uint8_t map_set_enable() const { return uint8_t((this->_output_control>>1) & 0x1); }
00048   uint8_t map_reset_enable() const { return uint8_t((this->_output_control>>2) & 0x1); }
00049   uint8_t map_trigger_enable() const { return uint8_t((this->_output_control>>3) & 0x1); }
00050   /** pulse event prescale */
00051   uint32_t prescale() const { return _prescale; }
00052   /** delay in 119MHz clks */
00053   uint32_t delay() const { return _delay; }
00054   /** width in 119MHz clks */
00055   uint32_t width() const { return _width; }
00056   int16_t trigger() const;
00057   int16_t set() const;
00058   int16_t clear() const;
00059   static uint32_t _sizeof() { return 24; }
00060 private:
00061   uint32_t      _pulse; /**< internal pulse generation channel */
00062   uint32_t      _input_control; /**< Pulse input control */
00063   uint32_t      _output_control;        /**< Pulse output control */
00064   uint32_t      _prescale;      /**< pulse event prescale */
00065   uint32_t      _delay; /**< delay in 119MHz clks */
00066   uint32_t      _width; /**< width in 119MHz clks */
00067 };
00068 
00069 /** @class PulseConfigV3
00070 
00071   
00072 */
00073 
00074 
00075 class PulseConfigV3 {
00076 public:
00077   PulseConfigV3(uint16_t arg__u16PulseId, uint16_t arg__u16Polarity, uint32_t arg__u32Prescale, uint32_t arg__u32Delay, uint32_t arg__u32Width)
00078     : _u16PulseId(arg__u16PulseId), _u16Polarity(arg__u16Polarity), _u32Prescale(arg__u32Prescale), _u32Delay(arg__u32Delay), _u32Width(arg__u32Width)
00079   {
00080   }
00081   PulseConfigV3() {}
00082   uint16_t pulseId() const { return _u16PulseId; }
00083   /** 0 -> positive polarity , 1 -> negative polarity */
00084   uint16_t polarity() const { return _u16Polarity; }
00085   /** Clock divider */
00086   uint32_t prescale() const { return _u32Prescale; }
00087   /** Delay in 119MHz clks */
00088   uint32_t delay() const { return _u32Delay; }
00089   /** Width in 119MHz clks */
00090   uint32_t width() const { return _u32Width; }
00091   static uint32_t _sizeof() { return 16; }
00092 private:
00093   uint16_t      _u16PulseId;
00094   uint16_t      _u16Polarity;   /**< 0 -> positive polarity , 1 -> negative polarity */
00095   uint32_t      _u32Prescale;   /**< Clock divider */
00096   uint32_t      _u32Delay;      /**< Delay in 119MHz clks */
00097   uint32_t      _u32Width;      /**< Width in 119MHz clks */
00098 };
00099 
00100 /** @class EventCodeV3
00101 
00102   
00103 */
00104 
00105 
00106 class EventCodeV3 {
00107 public:
00108   EventCodeV3(uint16_t arg__u16Code, uint8_t arg__bf_isReadout, uint8_t arg__bf_isTerminator, uint32_t arg__u32MaskTrigger, uint32_t arg__u32MaskSet, uint32_t arg__u32MaskClear)
00109     : _u16Code(arg__u16Code), _u16MaskEventAttr(((arg__bf_isReadout) & 0x1)|(((arg__bf_isTerminator) & 0x1)<<1)), _u32MaskTrigger(arg__u32MaskTrigger), _u32MaskSet(arg__u32MaskSet), _u32MaskClear(arg__u32MaskClear)
00110   {
00111   }
00112   EventCodeV3() {}
00113   uint16_t code() const { return _u16Code; }
00114   uint8_t isReadout() const { return uint8_t(this->_u16MaskEventAttr & 0x1); }
00115   uint8_t isTerminator() const { return uint8_t((this->_u16MaskEventAttr>>1) & 0x1); }
00116   uint32_t maskTrigger() const { return _u32MaskTrigger; }
00117   uint32_t maskSet() const { return _u32MaskSet; }
00118   uint32_t maskClear() const { return _u32MaskClear; }
00119   static uint32_t _sizeof() { return 16; }
00120 private:
00121   uint16_t      _u16Code;
00122   uint16_t      _u16MaskEventAttr;
00123   uint32_t      _u32MaskTrigger;
00124   uint32_t      _u32MaskSet;
00125   uint32_t      _u32MaskClear;
00126 };
00127 
00128 /** @class EventCodeV4
00129 
00130   
00131 */
00132 
00133 
00134 class EventCodeV4 {
00135 public:
00136   EventCodeV4(uint16_t arg__u16Code, uint8_t arg__bf_isReadout, uint8_t arg__bf_isTerminator, uint32_t arg__u32ReportDelay, uint32_t arg__u32ReportWidth, uint32_t arg__u32MaskTrigger, uint32_t arg__u32MaskSet, uint32_t arg__u32MaskClear)
00137     : _u16Code(arg__u16Code), _u16MaskEventAttr(((arg__bf_isReadout) & 0x1)|(((arg__bf_isTerminator) & 0x1)<<1)), _u32ReportDelay(arg__u32ReportDelay), _u32ReportWidth(arg__u32ReportWidth), _u32MaskTrigger(arg__u32MaskTrigger), _u32MaskSet(arg__u32MaskSet), _u32MaskClear(arg__u32MaskClear)
00138   {
00139   }
00140   EventCodeV4() {}
00141   uint16_t code() const { return _u16Code; }
00142   uint8_t isReadout() const { return uint8_t(this->_u16MaskEventAttr & 0x1); }
00143   uint8_t isTerminator() const { return uint8_t((this->_u16MaskEventAttr>>1) & 0x1); }
00144   uint32_t reportDelay() const { return _u32ReportDelay; }
00145   uint32_t reportWidth() const { return _u32ReportWidth; }
00146   uint32_t maskTrigger() const { return _u32MaskTrigger; }
00147   uint32_t maskSet() const { return _u32MaskSet; }
00148   uint32_t maskClear() const { return _u32MaskClear; }
00149   static uint32_t _sizeof() { return 24; }
00150 private:
00151   uint16_t      _u16Code;
00152   uint16_t      _u16MaskEventAttr;
00153   uint32_t      _u32ReportDelay;
00154   uint32_t      _u32ReportWidth;
00155   uint32_t      _u32MaskTrigger;
00156   uint32_t      _u32MaskSet;
00157   uint32_t      _u32MaskClear;
00158 };
00159 
00160 /** @class EventCodeV5
00161 
00162   
00163 */
00164 
00165 
00166 class EventCodeV5 {
00167 public:
00168   enum { DescSize = 16 };
00169   EventCodeV5(uint16_t arg__u16Code, uint8_t arg__bf_isReadout, uint8_t arg__bf_isCommand, uint8_t arg__bf_isLatch, uint32_t arg__u32ReportDelay, uint32_t arg__u32ReportWidth, uint32_t arg__u32MaskTrigger, uint32_t arg__u32MaskSet, uint32_t arg__u32MaskClear, const char* arg__desc)
00170     : _u16Code(arg__u16Code), _u16MaskEventAttr(((arg__bf_isReadout) & 0x1)|(((arg__bf_isCommand) & 0x1)<<1)|(((arg__bf_isLatch) & 0x1)<<2)), _u32ReportDelay(arg__u32ReportDelay), _u32ReportWidth(arg__u32ReportWidth), _u32MaskTrigger(arg__u32MaskTrigger), _u32MaskSet(arg__u32MaskSet), _u32MaskClear(arg__u32MaskClear)
00171   {
00172     if (arg__desc) std::copy(arg__desc, arg__desc+(16), &_desc[0]);
00173   }
00174   EventCodeV5() {}
00175   uint16_t code() const { return _u16Code; }
00176   uint8_t isReadout() const { return uint8_t(this->_u16MaskEventAttr & 0x1); }
00177   uint8_t isCommand() const { return uint8_t((this->_u16MaskEventAttr>>1) & 0x1); }
00178   uint8_t isLatch() const { return uint8_t((this->_u16MaskEventAttr>>2) & 0x1); }
00179   uint32_t reportDelay() const { return _u32ReportDelay; }
00180   uint32_t reportWidth() const { return _u32ReportWidth; }
00181   uint32_t maskTrigger() const { return _u32MaskTrigger; }
00182   uint32_t maskSet() const { return _u32MaskSet; }
00183   uint32_t maskClear() const { return _u32MaskClear; }
00184   const char* desc() const { return _desc; }
00185   uint32_t releaseCode() const { return this->_u32ReportWidth; }
00186   static uint32_t _sizeof() { return ((((24+(1*(DescSize)))+4)-1)/4)*4; }
00187   /** Method which returns the shape (dimensions) of the data returned by desc() method. */
00188   std::vector<int> desc_shape() const;
00189 private:
00190   uint16_t      _u16Code;
00191   uint16_t      _u16MaskEventAttr;
00192   uint32_t      _u32ReportDelay;
00193   uint32_t      _u32ReportWidth;
00194   uint32_t      _u32MaskTrigger;
00195   uint32_t      _u32MaskSet;
00196   uint32_t      _u32MaskClear;
00197   char  _desc[DescSize];
00198 };
00199 
00200 /** @class EventCodeV6
00201 
00202   
00203 */
00204 
00205 
00206 class EventCodeV6 {
00207 public:
00208   enum { DescSize = 16 };
00209   enum { MaxReadoutGroup = 7 };
00210   EventCodeV6(uint16_t arg__u16Code, uint8_t arg__bf_isReadout, uint8_t arg__bf_isCommand, uint8_t arg__bf_isLatch, uint32_t arg__u32ReportDelay, uint32_t arg__u32ReportWidth, uint32_t arg__u32MaskTrigger, uint32_t arg__u32MaskSet, uint32_t arg__u32MaskClear, const char* arg__desc, uint16_t arg__u16ReadGroup)
00211     : _u16Code(arg__u16Code), _u16MaskEventAttr(((arg__bf_isReadout) & 0x1)|(((arg__bf_isCommand) & 0x1)<<1)|(((arg__bf_isLatch) & 0x1)<<2)), _u32ReportDelay(arg__u32ReportDelay), _u32ReportWidth(arg__u32ReportWidth), _u32MaskTrigger(arg__u32MaskTrigger), _u32MaskSet(arg__u32MaskSet), _u32MaskClear(arg__u32MaskClear), _u16ReadGroup(arg__u16ReadGroup)
00212   {
00213     if (arg__desc) std::copy(arg__desc, arg__desc+(16), &_desc[0]);
00214   }
00215   EventCodeV6() {}
00216   uint16_t code() const { return _u16Code; }
00217   uint8_t isReadout() const { return uint8_t(this->_u16MaskEventAttr & 0x1); }
00218   uint8_t isCommand() const { return uint8_t((this->_u16MaskEventAttr>>1) & 0x1); }
00219   uint8_t isLatch() const { return uint8_t((this->_u16MaskEventAttr>>2) & 0x1); }
00220   uint32_t reportDelay() const { return _u32ReportDelay; }
00221   uint32_t reportWidth() const { return _u32ReportWidth; }
00222   uint32_t maskTrigger() const { return _u32MaskTrigger; }
00223   uint32_t maskSet() const { return _u32MaskSet; }
00224   uint32_t maskClear() const { return _u32MaskClear; }
00225   const char* desc() const { return _desc; }
00226   uint16_t readoutGroup() const { return _u16ReadGroup; }
00227   uint32_t releaseCode() const { return this->_u32ReportWidth; }
00228   static uint32_t _sizeof() { return (((((24+(1*(DescSize)))+2)+4)-1)/4)*4; }
00229   /** Method which returns the shape (dimensions) of the data returned by desc() method. */
00230   std::vector<int> desc_shape() const;
00231 private:
00232   uint16_t      _u16Code;
00233   uint16_t      _u16MaskEventAttr;
00234   uint32_t      _u32ReportDelay;
00235   uint32_t      _u32ReportWidth;
00236   uint32_t      _u32MaskTrigger;
00237   uint32_t      _u32MaskSet;
00238   uint32_t      _u32MaskClear;
00239   char  _desc[DescSize];
00240   uint16_t      _u16ReadGroup;
00241 };
00242 
00243 /** @class SrcEventCode
00244 
00245   Describes configuration of self-contained event generator.
00246 */
00247 
00248 
00249 class SrcEventCode {
00250 public:
00251   enum { DescSize = 16 };
00252   enum { MaxReadoutGroup = 7 };
00253   SrcEventCode(uint16_t arg__u16Code, uint32_t arg__u32Period, uint32_t arg__u32MaskTriggerP, uint32_t arg__u32MaskTriggerR, const char* arg__desc, uint16_t arg__u16ReadGroup)
00254     : _u16Code(arg__u16Code), _u32Period(arg__u32Period), _u32MaskTriggerP(arg__u32MaskTriggerP), _u32MaskTriggerR(arg__u32MaskTriggerR), _u16ReadGroup(arg__u16ReadGroup)
00255   {
00256     if (arg__desc) std::copy(arg__desc, arg__desc+(16), &_desc[0]);
00257   }
00258   SrcEventCode() {}
00259   /** Assigned eventcode. */
00260   uint16_t code() const { return _u16Code; }
00261   /** Repetition period in 119 MHz counts or 0 for external source. */
00262   uint32_t period() const { return _u32Period; }
00263   /** Bit mask of persistent pulse triggers. */
00264   uint32_t maskTriggerP() const { return _u32MaskTriggerP; }
00265   /** Bit mask of running pulse triggers. */
00266   uint32_t maskTriggerR() const { return _u32MaskTriggerR; }
00267   /** Optional description. */
00268   const char* desc() const { return _desc; }
00269   /** Assigned readout group. */
00270   uint16_t readoutGroup() const { return _u16ReadGroup; }
00271   static uint32_t _sizeof() { return (((((16+(1*(DescSize)))+2)+4)-1)/4)*4; }
00272   /** Method which returns the shape (dimensions) of the data returned by desc() method. */
00273   std::vector<int> desc_shape() const;
00274 private:
00275   uint16_t      _u16Code;       /**< Assigned eventcode. */
00276   uint16_t      _u16rsvd;
00277   uint32_t      _u32Period;     /**< Repetition period in 119 MHz counts or 0 for external source. */
00278   uint32_t      _u32MaskTriggerP;       /**< Bit mask of persistent pulse triggers. */
00279   uint32_t      _u32MaskTriggerR;       /**< Bit mask of running pulse triggers. */
00280   char  _desc[DescSize];        /**< Optional description. */
00281   uint16_t      _u16ReadGroup;  /**< Assigned readout group. */
00282 };
00283 
00284 /** @class OutputMap
00285 
00286   
00287 */
00288 
00289 
00290 class OutputMap {
00291 public:
00292   enum Source {
00293     Pulse,
00294     DBus,
00295     Prescaler,
00296     Force_High,
00297     Force_Low,
00298   };
00299   enum Conn {
00300     FrontPanel,
00301     UnivIO,
00302   };
00303   OutputMap(EvrData::OutputMap::Source arg__bf_source, uint8_t arg__bf_source_id, EvrData::OutputMap::Conn arg__bf_conn, uint8_t arg__bf_conn_id)
00304     : _v(((arg__bf_source) & 0xff)|(((arg__bf_source_id) & 0xff)<<8)|(((arg__bf_conn) & 0xff)<<16)|(((arg__bf_conn_id) & 0xff)<<24))
00305   {
00306   }
00307   OutputMap() {}
00308   uint32_t value() const { return _v; }
00309   EvrData::OutputMap::Source source() const { return Source(this->_v & 0xff); }
00310   uint8_t source_id() const { return uint8_t((this->_v>>8) & 0xff); }
00311   EvrData::OutputMap::Conn conn() const { return Conn((this->_v>>16) & 0xff); }
00312   uint8_t conn_id() const { return uint8_t((this->_v>>24) & 0xff); }
00313   /** Returns encoded source value. */
00314   uint32_t map() const;
00315   static uint32_t _sizeof() { return 4; }
00316 private:
00317   uint32_t      _v;
00318 };
00319 std::ostream& operator<<(std::ostream& str, EvrData::OutputMap::Source enval);
00320 std::ostream& operator<<(std::ostream& str, EvrData::OutputMap::Conn enval);
00321 
00322 /** @class OutputMapV2
00323 
00324   
00325 */
00326 
00327 
00328 class OutputMapV2 {
00329 public:
00330   enum Source {
00331     Pulse,
00332     DBus,
00333     Prescaler,
00334     Force_High,
00335     Force_Low,
00336   };
00337   enum Conn {
00338     FrontPanel,
00339     UnivIO,
00340   };
00341   OutputMapV2(EvrData::OutputMapV2::Source arg__bf_source, uint8_t arg__bf_source_id, EvrData::OutputMapV2::Conn arg__bf_conn, uint8_t arg__bf_conn_id, uint8_t arg__bf_module)
00342     : _v(((arg__bf_source) & 0xf)|(((arg__bf_source_id) & 0xff)<<4)|(((arg__bf_conn) & 0xf)<<12)|(((arg__bf_conn_id) & 0xff)<<16)|(((arg__bf_module) & 0xff)<<24))
00343   {
00344   }
00345   OutputMapV2() {}
00346   uint32_t value() const { return _v; }
00347   EvrData::OutputMapV2::Source source() const { return Source(this->_v & 0xf); }
00348   uint8_t source_id() const { return uint8_t((this->_v>>4) & 0xff); }
00349   EvrData::OutputMapV2::Conn conn() const { return Conn((this->_v>>12) & 0xf); }
00350   uint8_t conn_id() const { return uint8_t((this->_v>>16) & 0xff); }
00351   uint8_t module() const { return uint8_t((this->_v>>24) & 0xff); }
00352   /** Returns encoded source value. */
00353   uint32_t map() const;
00354   static uint32_t _sizeof() { return 4; }
00355 private:
00356   uint32_t      _v;
00357 };
00358 std::ostream& operator<<(std::ostream& str, EvrData::OutputMapV2::Source enval);
00359 std::ostream& operator<<(std::ostream& str, EvrData::OutputMapV2::Conn enval);
00360 
00361 /** @class ConfigV1
00362 
00363   
00364 */
00365 
00366 
00367 class ConfigV1 {
00368 public:
00369   enum { TypeId = Pds::TypeId::Id_EvrConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00370   enum { Version = 1 /**< XTC type version number */ };
00371   virtual ~ConfigV1();
00372   virtual uint32_t npulses() const = 0;
00373   virtual uint32_t noutputs() const = 0;
00374   virtual ndarray<const EvrData::PulseConfig, 1> pulses() const = 0;
00375   virtual ndarray<const EvrData::OutputMap, 1> output_maps() const = 0;
00376 };
00377 
00378 /** @class ConfigV2
00379 
00380   
00381 */
00382 
00383 
00384 class ConfigV2 {
00385 public:
00386   enum { TypeId = Pds::TypeId::Id_EvrConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00387   enum { Version = 2 /**< XTC type version number */ };
00388   enum { beamOn = 100 };
00389   enum { baseRate = 40 };
00390   enum { singleShot = 150 };
00391   enum RateCode {
00392     r120Hz,
00393     r60Hz,
00394     r30Hz,
00395     r10Hz,
00396     r5Hz,
00397     r1Hz,
00398     r0_5Hz,
00399     Single,
00400     NumberOfRates,
00401   };
00402   enum BeamCode {
00403     Off,
00404     On,
00405   };
00406   virtual ~ConfigV2();
00407   virtual uint32_t opcode() const = 0;
00408   virtual uint32_t npulses() const = 0;
00409   virtual uint32_t noutputs() const = 0;
00410   virtual ndarray<const EvrData::PulseConfig, 1> pulses() const = 0;
00411   virtual ndarray<const EvrData::OutputMap, 1> output_maps() const = 0;
00412   virtual EvrData::ConfigV2::BeamCode beam() const = 0;
00413   virtual EvrData::ConfigV2::RateCode rate() const = 0;
00414 };
00415 std::ostream& operator<<(std::ostream& str, EvrData::ConfigV2::RateCode enval);
00416 std::ostream& operator<<(std::ostream& str, EvrData::ConfigV2::BeamCode enval);
00417 
00418 /** @class ConfigV3
00419 
00420   
00421 */
00422 
00423 
00424 class ConfigV3 {
00425 public:
00426   enum { TypeId = Pds::TypeId::Id_EvrConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00427   enum { Version = 3 /**< XTC type version number */ };
00428   virtual ~ConfigV3();
00429   virtual uint32_t neventcodes() const = 0;
00430   virtual uint32_t npulses() const = 0;
00431   virtual uint32_t noutputs() const = 0;
00432   virtual ndarray<const EvrData::EventCodeV3, 1> eventcodes() const = 0;
00433   virtual ndarray<const EvrData::PulseConfigV3, 1> pulses() const = 0;
00434   virtual ndarray<const EvrData::OutputMap, 1> output_maps() const = 0;
00435 };
00436 
00437 /** @class ConfigV4
00438 
00439   
00440 */
00441 
00442 
00443 class ConfigV4 {
00444 public:
00445   enum { TypeId = Pds::TypeId::Id_EvrConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00446   enum { Version = 4 /**< XTC type version number */ };
00447   virtual ~ConfigV4();
00448   virtual uint32_t neventcodes() const = 0;
00449   virtual uint32_t npulses() const = 0;
00450   virtual uint32_t noutputs() const = 0;
00451   virtual ndarray<const EvrData::EventCodeV4, 1> eventcodes() const = 0;
00452   virtual ndarray<const EvrData::PulseConfigV3, 1> pulses() const = 0;
00453   virtual ndarray<const EvrData::OutputMap, 1> output_maps() const = 0;
00454 };
00455 
00456 /** @class SequencerEntry
00457 
00458   
00459 */
00460 
00461 
00462 class SequencerEntry {
00463 public:
00464   SequencerEntry(uint32_t eventcode, uint32_t delay)
00465     : _value(((delay) & 0xffffff)|(((eventcode) & 0xff)<<24))
00466   {
00467   }
00468   SequencerEntry() {}
00469   uint32_t delay() const { return uint32_t(this->_value & 0xffffff); }
00470   uint32_t eventcode() const { return uint32_t((this->_value>>24) & 0xff); }
00471   static uint32_t _sizeof() { return 4; }
00472 private:
00473   uint32_t      _value;
00474 };
00475 
00476 /** @class SequencerConfigV1
00477 
00478   
00479 */
00480 
00481 
00482 class SequencerConfigV1 {
00483 public:
00484   enum Source {
00485     r120Hz,
00486     r60Hz,
00487     r30Hz,
00488     r10Hz,
00489     r5Hz,
00490     r1Hz,
00491     r0_5Hz,
00492     Disable,
00493   };
00494   virtual ~SequencerConfigV1();
00495   virtual EvrData::SequencerConfigV1::Source sync_source() const = 0;
00496   virtual EvrData::SequencerConfigV1::Source beam_source() const = 0;
00497   virtual uint32_t length() const = 0;
00498   virtual uint32_t cycles() const = 0;
00499   virtual ndarray<const EvrData::SequencerEntry, 1> entries() const = 0;
00500 };
00501 std::ostream& operator<<(std::ostream& str, EvrData::SequencerConfigV1::Source enval);
00502 
00503 /** @class ConfigV5
00504 
00505   
00506 */
00507 
00508 
00509 class ConfigV5 {
00510 public:
00511   enum { TypeId = Pds::TypeId::Id_EvrConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00512   enum { Version = 5 /**< XTC type version number */ };
00513   enum { MaxPulses = 32 };
00514   enum { EvrOutputs = 10 };
00515   virtual ~ConfigV5();
00516   virtual uint32_t neventcodes() const = 0;
00517   virtual uint32_t npulses() const = 0;
00518   virtual uint32_t noutputs() const = 0;
00519   virtual ndarray<const EvrData::EventCodeV5, 1> eventcodes() const = 0;
00520   virtual ndarray<const EvrData::PulseConfigV3, 1> pulses() const = 0;
00521   virtual ndarray<const EvrData::OutputMap, 1> output_maps() const = 0;
00522   virtual const EvrData::SequencerConfigV1& seq_config() const = 0;
00523 };
00524 
00525 /** @class ConfigV6
00526 
00527   
00528 */
00529 
00530 
00531 class ConfigV6 {
00532 public:
00533   enum { TypeId = Pds::TypeId::Id_EvrConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00534   enum { Version = 6 /**< XTC type version number */ };
00535   enum { MaxPulses = 256 /**< Maximum pulses in the system */ };
00536   enum { MaxOutputs = 256 /**< Maximum outputs in the system */ };
00537   virtual ~ConfigV6();
00538   virtual uint32_t neventcodes() const = 0;
00539   virtual uint32_t npulses() const = 0;
00540   virtual uint32_t noutputs() const = 0;
00541   virtual ndarray<const EvrData::EventCodeV5, 1> eventcodes() const = 0;
00542   virtual ndarray<const EvrData::PulseConfigV3, 1> pulses() const = 0;
00543   virtual ndarray<const EvrData::OutputMapV2, 1> output_maps() const = 0;
00544   virtual const EvrData::SequencerConfigV1& seq_config() const = 0;
00545 };
00546 
00547 /** @class ConfigV7
00548 
00549   
00550 */
00551 
00552 
00553 class ConfigV7 {
00554 public:
00555   enum { TypeId = Pds::TypeId::Id_EvrConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00556   enum { Version = 7 /**< XTC type version number */ };
00557   enum { MaxPulses = 256 /**< Maximum pulses in the system */ };
00558   enum { MaxOutputs = 256 /**< Maximum outputs in the system */ };
00559   virtual ~ConfigV7();
00560   virtual uint32_t neventcodes() const = 0;
00561   virtual uint32_t npulses() const = 0;
00562   virtual uint32_t noutputs() const = 0;
00563   virtual ndarray<const EvrData::EventCodeV6, 1> eventcodes() const = 0;
00564   virtual ndarray<const EvrData::PulseConfigV3, 1> pulses() const = 0;
00565   virtual ndarray<const EvrData::OutputMapV2, 1> output_maps() const = 0;
00566   virtual const EvrData::SequencerConfigV1& seq_config() const = 0;
00567 };
00568 
00569 /** @class SrcConfigV1
00570 
00571   Describes configuration of self-contained event generator.
00572 */
00573 
00574 
00575 class SrcConfigV1 {
00576 public:
00577   enum { TypeId = Pds::TypeId::Id_EvsConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00578   enum { Version = 1 /**< XTC type version number */ };
00579   enum { MaxPulses = 12 /**< Maximum pulses in the system */ };
00580   enum { MaxOutputs = 12 /**< Maximum outputs in the system */ };
00581   virtual ~SrcConfigV1();
00582   virtual uint32_t neventcodes() const = 0;
00583   virtual uint32_t npulses() const = 0;
00584   virtual uint32_t noutputs() const = 0;
00585   virtual ndarray<const EvrData::SrcEventCode, 1> eventcodes() const = 0;
00586   virtual ndarray<const EvrData::PulseConfigV3, 1> pulses() const = 0;
00587   virtual ndarray<const EvrData::OutputMapV2, 1> output_maps() const = 0;
00588 };
00589 
00590 /** @class FIFOEvent
00591 
00592   
00593 */
00594 
00595 
00596 class FIFOEvent {
00597 public:
00598   FIFOEvent(uint32_t arg__timestampHigh, uint32_t arg__timestampLow, uint32_t arg__eventCode)
00599     : _timestampHigh(arg__timestampHigh), _timestampLow(arg__timestampLow), _eventCode(arg__eventCode)
00600   {
00601   }
00602   FIFOEvent() {}
00603   /** 119 MHz timestamp (fiducial) */
00604   uint32_t timestampHigh() const { return _timestampHigh; }
00605   /** 360 Hz timestamp */
00606   uint32_t timestampLow() const { return _timestampLow; }
00607   /** event code (range 0-255) */
00608   uint32_t eventCode() const { return _eventCode; }
00609   static uint32_t _sizeof() { return 12; }
00610 private:
00611   uint32_t      _timestampHigh; /**< 119 MHz timestamp (fiducial) */
00612   uint32_t      _timestampLow;  /**< 360 Hz timestamp */
00613   uint32_t      _eventCode;     /**< event code (range 0-255) */
00614 };
00615 
00616 /** @class DataV3
00617 
00618   
00619 */
00620 
00621 
00622 class DataV3 {
00623 public:
00624   enum { TypeId = Pds::TypeId::Id_EvrData /**< XTC type ID value (from Pds::TypeId class) */ };
00625   enum { Version = 3 /**< XTC type version number */ };
00626   virtual ~DataV3();
00627   /** length of FIFOEvent list */
00628   virtual uint32_t numFifoEvents() const = 0;
00629   /** FIFOEvent list */
00630   virtual ndarray<const EvrData::FIFOEvent, 1> fifoEvents() const = 0;
00631 };
00632 
00633 /** @class DataV4
00634 
00635   
00636 */
00637 
00638 
00639 class DataV4 {
00640 public:
00641   enum { TypeId = Pds::TypeId::Id_EvrData /**< XTC type ID value (from Pds::TypeId class) */ };
00642   enum { Version = 4 /**< XTC type version number */ };
00643   virtual ~DataV4();
00644   /** length of FIFOEvent list */
00645   virtual uint32_t numFifoEvents() const = 0;
00646   /** FIFOEvent list */
00647   virtual ndarray<const EvrData::FIFOEvent, 1> fifoEvents() const = 0;
00648   /** Returns 1 if the opcode is present in the EVR FIFO, otherwise 0. */
00649   virtual uint8_t present(uint8_t opcode) const = 0;
00650 };
00651 
00652 /** @class IOChannel
00653 
00654   
00655 */
00656 
00657 
00658 class IOChannel {
00659 public:
00660   enum { NameLength = 12 };
00661   enum { MaxInfos = 8 };
00662   IOChannel(const char* arg__name, uint32_t arg__ninfo, const Pds::DetInfo* arg__info)
00663     : _ninfo(arg__ninfo)
00664   {
00665     if (arg__name) std::copy(arg__name, arg__name+(12), &_name[0]);
00666     if (arg__info) std::copy(arg__info, arg__info+(8), &_info[0]);
00667   }
00668   IOChannel() {}
00669   const char* name() const { return _name; }
00670   uint32_t ninfo() const { return _ninfo; }
00671   /**     Note: this method returns ndarray instance which does not control lifetime
00672     of the data, do not use returned ndarray after this instance disappears. */
00673   ndarray<const Pds::DetInfo, 1> infos() const { return make_ndarray(&_info[0], MaxInfos); }
00674   static uint32_t _sizeof() { return ((((((0+(1*(NameLength)))+4)+(8*(MaxInfos)))+4)-1)/4)*4; }
00675   /** Method which returns the shape (dimensions) of the data returned by name() method. */
00676   std::vector<int> name_shape() const;
00677 private:
00678   char  _name[NameLength];
00679   uint32_t      _ninfo;
00680   Pds::DetInfo  _info[MaxInfos];
00681 };
00682 
00683 /** @class IOConfigV1
00684 
00685   
00686 */
00687 
00688 
00689 class IOConfigV1 {
00690 public:
00691   enum { TypeId = Pds::TypeId::Id_EvrIOConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00692   enum { Version = 1 /**< XTC type version number */ };
00693   virtual ~IOConfigV1();
00694   virtual uint16_t nchannels() const = 0;
00695   virtual ndarray<const EvrData::IOChannel, 1> channels() const = 0;
00696   virtual EvrData::OutputMap::Conn conn() const = 0;
00697 };
00698 
00699 /** @class IOChannelV2
00700 
00701   
00702 */
00703 
00704 
00705 class IOChannelV2 {
00706 public:
00707   enum { NameLength = 64 };
00708   enum { MaxInfos = 16 };
00709   IOChannelV2(const EvrData::OutputMapV2& arg__output, const char* arg__name, uint32_t arg__ninfo, const Pds::DetInfo* arg__info)
00710     : _output(arg__output), _ninfo(arg__ninfo)
00711   {
00712     if (arg__name) std::copy(arg__name, arg__name+(64), &_name[0]);
00713     if (arg__info) std::copy(arg__info, arg__info+(16), &_info[0]);
00714   }
00715   IOChannelV2() {}
00716   /** Output connector */
00717   const EvrData::OutputMapV2& output() const { return _output; }
00718   /** Name of channel */
00719   const char* name() const { return _name; }
00720   /** Number of Detectors connected */
00721   uint32_t ninfo() const { return _ninfo; }
00722   /** List of Detectors connected
00723 
00724     Note: this method returns ndarray instance which does not control lifetime
00725     of the data, do not use returned ndarray after this instance disappears. */
00726   ndarray<const Pds::DetInfo, 1> infos() const { return make_ndarray(&_info[0], MaxInfos); }
00727   static uint32_t _sizeof() { return (((((((0+(EvrData::OutputMapV2::_sizeof()))+(1*(NameLength)))+4)+(8*(MaxInfos)))+4)-1)/4)*4; }
00728   /** Method which returns the shape (dimensions) of the data returned by name() method. */
00729   std::vector<int> name_shape() const;
00730 private:
00731   EvrData::OutputMapV2  _output;        /**< Output connector */
00732   char  _name[NameLength];      /**< Name of channel */
00733   uint32_t      _ninfo; /**< Number of Detectors connected */
00734   Pds::DetInfo  _info[MaxInfos];        /**< List of Detectors connected */
00735 };
00736 
00737 /** @class IOConfigV2
00738 
00739   
00740 */
00741 
00742 
00743 class IOConfigV2 {
00744 public:
00745   enum { TypeId = Pds::TypeId::Id_EvrIOConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00746   enum { Version = 2 /**< XTC type version number */ };
00747   virtual ~IOConfigV2();
00748   /** Number of Configured output channels */
00749   virtual uint32_t nchannels() const = 0;
00750   /** List of Configured output channels */
00751   virtual ndarray<const EvrData::IOChannelV2, 1> channels() const = 0;
00752 };
00753 } // namespace EvrData
00754 } // namespace Psana
00755 #endif // PSANA_EVR_DDL_H

Generated on 19 Dec 2016 for PSANAclasses by  doxygen 1.4.7