psddl_psana/include/epics.ddl.h

Go to the documentation of this file.
00001 #ifndef PSANA_EPICS_DDL_H
00002 #define PSANA_EPICS_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 namespace Psana {
00012 namespace Epics {
00013   enum {
00014     iXtcVersion = 1 /**<  */
00015   };
00016   enum {
00017     iMaxPvNameLength = 64 /**< Maximum size of PV name string. */
00018   };
00019   enum {
00020     MAX_STRING_SIZE = 40 /**< Maximum length of strings in EPICS. */
00021   };
00022   enum {
00023     MAX_UNITS_SIZE = 8 /**< Maximum lenght of units strings. */
00024   };
00025   enum {
00026     MAX_ENUM_STRING_SIZE = 26 /**< Maximum length of strings specifying ENUMs. */
00027   };
00028   enum {
00029     MAX_ENUM_STATES = 16 /**< Maximum number of different ENUM constants. */
00030   };
00031 
00032   /** Enum specifying type of DBR structures. */
00033   enum DbrTypes {
00034     DBR_STRING = 0,
00035     DBR_SHORT = 1,
00036     DBR_FLOAT = 2,
00037     DBR_ENUM = 3,
00038     DBR_CHAR = 4,
00039     DBR_LONG = 5,
00040     DBR_DOUBLE = 6,
00041     DBR_STS_STRING = 7,
00042     DBR_STS_SHORT = 8,
00043     DBR_STS_FLOAT = 9,
00044     DBR_STS_ENUM = 10,
00045     DBR_STS_CHAR = 11,
00046     DBR_STS_LONG = 12,
00047     DBR_STS_DOUBLE = 13,
00048     DBR_TIME_STRING = 14,
00049     DBR_TIME_INT = 15,
00050     DBR_TIME_SHORT = 15,
00051     DBR_TIME_FLOAT = 16,
00052     DBR_TIME_ENUM = 17,
00053     DBR_TIME_CHAR = 18,
00054     DBR_TIME_LONG = 19,
00055     DBR_TIME_DOUBLE = 20,
00056     DBR_GR_STRING = 21,
00057     DBR_GR_SHORT = 22,
00058     DBR_GR_FLOAT = 23,
00059     DBR_GR_ENUM = 24,
00060     DBR_GR_CHAR = 25,
00061     DBR_GR_LONG = 26,
00062     DBR_GR_DOUBLE = 27,
00063     DBR_CTRL_STRING = 28,
00064     DBR_CTRL_SHORT = 29,
00065     DBR_CTRL_FLOAT = 30,
00066     DBR_CTRL_ENUM = 31,
00067     DBR_CTRL_CHAR = 32,
00068     DBR_CTRL_LONG = 33,
00069     DBR_CTRL_DOUBLE = 34,
00070   };
00071 std::ostream& operator<<(std::ostream& str, Epics::DbrTypes enval);
00072 
00073 /** @class epicsTimeStamp
00074 
00075   EPICS timestamp type, includes seconds and nanoseconds.
00076            EPICS epoch corresponds to 1990-01-01 00:00:00Z.
00077 */
00078 
00079 
00080 class epicsTimeStamp {
00081 public:
00082   epicsTimeStamp(uint32_t arg__secPastEpoch, uint32_t arg__nsec)
00083     : _secPastEpoch(arg__secPastEpoch), _nsec(arg__nsec)
00084   {
00085   }
00086   epicsTimeStamp() {}
00087   /** Seconds since Jan 1, 1990 00:00 UTC */
00088   uint32_t sec() const { return _secPastEpoch; }
00089   /** Nanoseconds within second. */
00090   uint32_t nsec() const { return _nsec; }
00091   static uint32_t _sizeof() { return 8; }
00092 private:
00093   uint32_t      _secPastEpoch;  /**< Seconds since Jan 1, 1990 00:00 UTC */
00094   uint32_t      _nsec;  /**< Nanoseconds within second. */
00095 };
00096 
00097 /** @class dbr_time_string
00098 
00099   
00100 */
00101 
00102 
00103 class dbr_time_string {
00104 public:
00105   enum { DBR_TYPE_ID = DBR_TIME_STRING };
00106   dbr_time_string(int16_t status, int16_t severity, const Epics::epicsTimeStamp& stamp)
00107     : _status(status), _severity(severity), _stamp(stamp)
00108   {
00109   }
00110   dbr_time_string() {}
00111   int16_t status() const { return _status; }
00112   int16_t severity() const { return _severity; }
00113   const Epics::epicsTimeStamp& stamp() const { return _stamp; }
00114   static uint32_t _sizeof() { return ((((4+(Epics::epicsTimeStamp::_sizeof()))+4)-1)/4)*4; }
00115 private:
00116   int16_t       _status;
00117   int16_t       _severity;
00118   Epics::epicsTimeStamp _stamp;
00119 };
00120 
00121 /** @class dbr_time_short
00122 
00123   
00124 */
00125 
00126 
00127 class dbr_time_short {
00128 public:
00129   enum { DBR_TYPE_ID = DBR_TIME_SHORT };
00130   dbr_time_short(int16_t status, int16_t severity, const Epics::epicsTimeStamp& stamp)
00131     : _status(status), _severity(severity), _stamp(stamp), RISC_pad(0)
00132   {
00133   }
00134   dbr_time_short() {}
00135   int16_t status() const { return _status; }
00136   int16_t severity() const { return _severity; }
00137   const Epics::epicsTimeStamp& stamp() const { return _stamp; }
00138   static uint32_t _sizeof() { return (((((4+(Epics::epicsTimeStamp::_sizeof()))+2)+2)-1)/2)*2; }
00139 private:
00140   int16_t       _status;
00141   int16_t       _severity;
00142   Epics::epicsTimeStamp _stamp;
00143   int16_t       RISC_pad;
00144 };
00145 
00146 /** @class dbr_time_float
00147 
00148   
00149 */
00150 
00151 
00152 class dbr_time_float {
00153 public:
00154   enum { DBR_TYPE_ID = DBR_TIME_FLOAT };
00155   dbr_time_float(int16_t status, int16_t severity, const Epics::epicsTimeStamp& stamp)
00156     : _status(status), _severity(severity), _stamp(stamp)
00157   {
00158   }
00159   dbr_time_float() {}
00160   int16_t status() const { return _status; }
00161   int16_t severity() const { return _severity; }
00162   const Epics::epicsTimeStamp& stamp() const { return _stamp; }
00163   static uint32_t _sizeof() { return ((((4+(Epics::epicsTimeStamp::_sizeof()))+4)-1)/4)*4; }
00164 private:
00165   int16_t       _status;
00166   int16_t       _severity;
00167   Epics::epicsTimeStamp _stamp;
00168 };
00169 
00170 /** @class dbr_time_enum
00171 
00172   
00173 */
00174 
00175 
00176 class dbr_time_enum {
00177 public:
00178   enum { DBR_TYPE_ID = DBR_TIME_ENUM };
00179   dbr_time_enum(int16_t status, int16_t severity, const Epics::epicsTimeStamp& stamp)
00180     : _status(status), _severity(severity), _stamp(stamp), RISC_pad(0)
00181   {
00182   }
00183   dbr_time_enum() {}
00184   int16_t status() const { return _status; }
00185   int16_t severity() const { return _severity; }
00186   const Epics::epicsTimeStamp& stamp() const { return _stamp; }
00187   static uint32_t _sizeof() { return (((((4+(Epics::epicsTimeStamp::_sizeof()))+2)+2)-1)/2)*2; }
00188 private:
00189   int16_t       _status;
00190   int16_t       _severity;
00191   Epics::epicsTimeStamp _stamp;
00192   int16_t       RISC_pad;
00193 };
00194 
00195 /** @class dbr_time_char
00196 
00197   
00198 */
00199 
00200 
00201 class dbr_time_char {
00202 public:
00203   enum { DBR_TYPE_ID = DBR_TIME_CHAR };
00204   dbr_time_char(int16_t status, int16_t severity, const Epics::epicsTimeStamp& stamp)
00205     : _status(status), _severity(severity), _stamp(stamp), RISC_pad1(0)
00206   {
00207   }
00208   dbr_time_char() {}
00209   int16_t status() const { return _status; }
00210   int16_t severity() const { return _severity; }
00211   const Epics::epicsTimeStamp& stamp() const { return _stamp; }
00212   static uint32_t _sizeof() { return ((((((4+(Epics::epicsTimeStamp::_sizeof()))+2)+1)+1)-1)/1)*1; }
00213 private:
00214   int16_t       _status;
00215   int16_t       _severity;
00216   Epics::epicsTimeStamp _stamp;
00217   int16_t       RISC_pad0;
00218   uint8_t       RISC_pad1;
00219 };
00220 
00221 /** @class dbr_time_long
00222 
00223   
00224 */
00225 
00226 
00227 class dbr_time_long {
00228 public:
00229   enum { DBR_TYPE_ID = DBR_TIME_LONG };
00230   dbr_time_long(int16_t status, int16_t severity, const Epics::epicsTimeStamp& stamp)
00231     : _status(status), _severity(severity), _stamp(stamp)
00232   {
00233   }
00234   dbr_time_long() {}
00235   int16_t status() const { return _status; }
00236   int16_t severity() const { return _severity; }
00237   const Epics::epicsTimeStamp& stamp() const { return _stamp; }
00238   static uint32_t _sizeof() { return ((((4+(Epics::epicsTimeStamp::_sizeof()))+4)-1)/4)*4; }
00239 private:
00240   int16_t       _status;
00241   int16_t       _severity;
00242   Epics::epicsTimeStamp _stamp;
00243 };
00244 
00245 /** @class dbr_time_double
00246 
00247   
00248 */
00249 
00250 
00251 class dbr_time_double {
00252 public:
00253   enum { DBR_TYPE_ID = DBR_TIME_DOUBLE };
00254   dbr_time_double(int16_t status, int16_t severity, const Epics::epicsTimeStamp& stamp)
00255     : _status(status), _severity(severity), _stamp(stamp), RISC_pad(0)
00256   {
00257   }
00258   dbr_time_double() {}
00259   int16_t status() const { return _status; }
00260   int16_t severity() const { return _severity; }
00261   const Epics::epicsTimeStamp& stamp() const { return _stamp; }
00262   static uint32_t _sizeof() { return (((((4+(Epics::epicsTimeStamp::_sizeof()))+4)+4)-1)/4)*4; }
00263 private:
00264   int16_t       _status;
00265   int16_t       _severity;
00266   Epics::epicsTimeStamp _stamp;
00267   int32_t       RISC_pad;
00268 };
00269 
00270 /** @class dbr_sts_string
00271 
00272   
00273 */
00274 
00275 
00276 class dbr_sts_string {
00277 public:
00278   enum { DBR_TYPE_ID = DBR_CTRL_STRING };
00279   dbr_sts_string(int16_t status, int16_t severity)
00280     : _status(status), _severity(severity)
00281   {
00282   }
00283   dbr_sts_string() {}
00284   int16_t status() const { return _status; }
00285   int16_t severity() const { return _severity; }
00286   static uint32_t _sizeof() { return 4; }
00287 private:
00288   int16_t       _status;
00289   int16_t       _severity;
00290 };
00291 
00292 /** @class dbr_ctrl_short
00293 
00294   
00295 */
00296 
00297 
00298 class dbr_ctrl_short {
00299 public:
00300   enum { DBR_TYPE_ID = DBR_CTRL_SHORT };
00301   dbr_ctrl_short(int16_t status, int16_t severity, const char* units, int16_t upper_disp_limit, int16_t lower_disp_limit, int16_t upper_alarm_limit, int16_t upper_warning_limit, int16_t lower_warning_limit, int16_t lower_alarm_limit, int16_t upper_ctrl_limit, int16_t lower_ctrl_limit)
00302     : _status(status), _severity(severity), _upper_disp_limit(upper_disp_limit), _lower_disp_limit(lower_disp_limit), _upper_alarm_limit(upper_alarm_limit), _upper_warning_limit(upper_warning_limit), _lower_warning_limit(lower_warning_limit), _lower_alarm_limit(lower_alarm_limit), _upper_ctrl_limit(upper_ctrl_limit), _lower_ctrl_limit(lower_ctrl_limit)
00303   {
00304     if (units) std::copy(units, units+(8), &_units[0]);
00305   }
00306   dbr_ctrl_short() {}
00307   int16_t status() const { return _status; }
00308   int16_t severity() const { return _severity; }
00309   const char* units() const { return _units; }
00310   int16_t upper_disp_limit() const { return _upper_disp_limit; }
00311   int16_t lower_disp_limit() const { return _lower_disp_limit; }
00312   int16_t upper_alarm_limit() const { return _upper_alarm_limit; }
00313   int16_t upper_warning_limit() const { return _upper_warning_limit; }
00314   int16_t lower_warning_limit() const { return _lower_warning_limit; }
00315   int16_t lower_alarm_limit() const { return _lower_alarm_limit; }
00316   int16_t upper_ctrl_limit() const { return _upper_ctrl_limit; }
00317   int16_t lower_ctrl_limit() const { return _lower_ctrl_limit; }
00318   static uint32_t _sizeof() { return ((((((((((((4+(1*(MAX_UNITS_SIZE)))+2)+2)+2)+2)+2)+2)+2)+2)+2)-1)/2)*2; }
00319   /** Method which returns the shape (dimensions) of the data returned by units() method. */
00320   std::vector<int> units_shape() const;
00321 private:
00322   int16_t       _status;
00323   int16_t       _severity;
00324   char  _units[MAX_UNITS_SIZE];
00325   int16_t       _upper_disp_limit;
00326   int16_t       _lower_disp_limit;
00327   int16_t       _upper_alarm_limit;
00328   int16_t       _upper_warning_limit;
00329   int16_t       _lower_warning_limit;
00330   int16_t       _lower_alarm_limit;
00331   int16_t       _upper_ctrl_limit;
00332   int16_t       _lower_ctrl_limit;
00333 };
00334 
00335 /** @class dbr_ctrl_float
00336 
00337   
00338 */
00339 
00340 
00341 class dbr_ctrl_float {
00342 public:
00343   enum { DBR_TYPE_ID = DBR_CTRL_FLOAT };
00344   dbr_ctrl_float(int16_t status, int16_t severity, int16_t precision, const char* units, float upper_disp_limit, float lower_disp_limit, float upper_alarm_limit, float upper_warning_limit, float lower_warning_limit, float lower_alarm_limit, float upper_ctrl_limit, float lower_ctrl_limit)
00345     : _status(status), _severity(severity), _precision(precision), RISC_pad(0), _upper_disp_limit(upper_disp_limit), _lower_disp_limit(lower_disp_limit), _upper_alarm_limit(upper_alarm_limit), _upper_warning_limit(upper_warning_limit), _lower_warning_limit(lower_warning_limit), _lower_alarm_limit(lower_alarm_limit), _upper_ctrl_limit(upper_ctrl_limit), _lower_ctrl_limit(lower_ctrl_limit)
00346   {
00347     if (units) std::copy(units, units+(8), &_units[0]);
00348   }
00349   dbr_ctrl_float() {}
00350   int16_t status() const { return _status; }
00351   int16_t severity() const { return _severity; }
00352   int16_t precision() const { return _precision; }
00353   const char* units() const { return _units; }
00354   float upper_disp_limit() const { return _upper_disp_limit; }
00355   float lower_disp_limit() const { return _lower_disp_limit; }
00356   float upper_alarm_limit() const { return _upper_alarm_limit; }
00357   float upper_warning_limit() const { return _upper_warning_limit; }
00358   float lower_warning_limit() const { return _lower_warning_limit; }
00359   float lower_alarm_limit() const { return _lower_alarm_limit; }
00360   float upper_ctrl_limit() const { return _upper_ctrl_limit; }
00361   float lower_ctrl_limit() const { return _lower_ctrl_limit; }
00362   static uint32_t _sizeof() { return ((((((((((((8+(1*(MAX_UNITS_SIZE)))+4)+4)+4)+4)+4)+4)+4)+4)+4)-1)/4)*4; }
00363   /** Method which returns the shape (dimensions) of the data returned by units() method. */
00364   std::vector<int> units_shape() const;
00365 private:
00366   int16_t       _status;
00367   int16_t       _severity;
00368   int16_t       _precision;
00369   int16_t       RISC_pad;
00370   char  _units[MAX_UNITS_SIZE];
00371   float _upper_disp_limit;
00372   float _lower_disp_limit;
00373   float _upper_alarm_limit;
00374   float _upper_warning_limit;
00375   float _lower_warning_limit;
00376   float _lower_alarm_limit;
00377   float _upper_ctrl_limit;
00378   float _lower_ctrl_limit;
00379 };
00380 
00381 /** @class dbr_ctrl_enum
00382 
00383   
00384 */
00385 
00386 
00387 class dbr_ctrl_enum {
00388 public:
00389   enum { DBR_TYPE_ID = DBR_CTRL_ENUM };
00390   dbr_ctrl_enum(int16_t status, int16_t severity, int16_t no_str, const char* strings)
00391     : _status(status), _severity(severity), _no_str(no_str)
00392   {
00393     if (strings) std::copy(strings, strings+(416), &_strs[0][0]);
00394   }
00395   dbr_ctrl_enum() {}
00396   int16_t status() const { return _status; }
00397   int16_t severity() const { return _severity; }
00398   int16_t no_str() const { return _no_str; }
00399   const char* strings(uint32_t i0) const { return _strs[i0]; }
00400   static uint32_t _sizeof() { return ((((6+(1*(MAX_ENUM_STATES)*(MAX_ENUM_STRING_SIZE)))+2)-1)/2)*2; }
00401   /** Method which returns the shape (dimensions) of the data returned by strings() method. */
00402   std::vector<int> strings_shape() const;
00403 private:
00404   int16_t       _status;
00405   int16_t       _severity;
00406   int16_t       _no_str;
00407   char  _strs[MAX_ENUM_STATES][MAX_ENUM_STRING_SIZE];
00408 };
00409 
00410 /** @class dbr_ctrl_char
00411 
00412   
00413 */
00414 
00415 
00416 class dbr_ctrl_char {
00417 public:
00418   enum { DBR_TYPE_ID = DBR_CTRL_CHAR };
00419   dbr_ctrl_char(int16_t status, int16_t severity, const char* units, uint8_t upper_disp_limit, uint8_t lower_disp_limit, uint8_t upper_alarm_limit, uint8_t upper_warning_limit, uint8_t lower_warning_limit, uint8_t lower_alarm_limit, uint8_t upper_ctrl_limit, uint8_t lower_ctrl_limit)
00420     : _status(status), _severity(severity), _upper_disp_limit(upper_disp_limit), _lower_disp_limit(lower_disp_limit), _upper_alarm_limit(upper_alarm_limit), _upper_warning_limit(upper_warning_limit), _lower_warning_limit(lower_warning_limit), _lower_alarm_limit(lower_alarm_limit), _upper_ctrl_limit(upper_ctrl_limit), _lower_ctrl_limit(lower_ctrl_limit), RISC_pad(0)
00421   {
00422     if (units) std::copy(units, units+(8), &_units[0]);
00423   }
00424   dbr_ctrl_char() {}
00425   int16_t status() const { return _status; }
00426   int16_t severity() const { return _severity; }
00427   const char* units() const { return _units; }
00428   uint8_t upper_disp_limit() const { return _upper_disp_limit; }
00429   uint8_t lower_disp_limit() const { return _lower_disp_limit; }
00430   uint8_t upper_alarm_limit() const { return _upper_alarm_limit; }
00431   uint8_t upper_warning_limit() const { return _upper_warning_limit; }
00432   uint8_t lower_warning_limit() const { return _lower_warning_limit; }
00433   uint8_t lower_alarm_limit() const { return _lower_alarm_limit; }
00434   uint8_t upper_ctrl_limit() const { return _upper_ctrl_limit; }
00435   uint8_t lower_ctrl_limit() const { return _lower_ctrl_limit; }
00436   static uint32_t _sizeof() { return (((((((((((((4+(1*(MAX_UNITS_SIZE)))+1)+1)+1)+1)+1)+1)+1)+1)+1)+1)-1)/1)*1; }
00437   /** Method which returns the shape (dimensions) of the data returned by units() method. */
00438   std::vector<int> units_shape() const;
00439 private:
00440   int16_t       _status;
00441   int16_t       _severity;
00442   char  _units[MAX_UNITS_SIZE];
00443   uint8_t       _upper_disp_limit;
00444   uint8_t       _lower_disp_limit;
00445   uint8_t       _upper_alarm_limit;
00446   uint8_t       _upper_warning_limit;
00447   uint8_t       _lower_warning_limit;
00448   uint8_t       _lower_alarm_limit;
00449   uint8_t       _upper_ctrl_limit;
00450   uint8_t       _lower_ctrl_limit;
00451   uint8_t       RISC_pad;
00452 };
00453 
00454 /** @class dbr_ctrl_long
00455 
00456   
00457 */
00458 
00459 
00460 class dbr_ctrl_long {
00461 public:
00462   enum { DBR_TYPE_ID = DBR_CTRL_LONG };
00463   dbr_ctrl_long(int16_t status, int16_t severity, const char* units, int32_t upper_disp_limit, int32_t lower_disp_limit, int32_t upper_alarm_limit, int32_t upper_warning_limit, int32_t lower_warning_limit, int32_t lower_alarm_limit, int32_t upper_ctrl_limit, int32_t lower_ctrl_limit)
00464     : _status(status), _severity(severity), _upper_disp_limit(upper_disp_limit), _lower_disp_limit(lower_disp_limit), _upper_alarm_limit(upper_alarm_limit), _upper_warning_limit(upper_warning_limit), _lower_warning_limit(lower_warning_limit), _lower_alarm_limit(lower_alarm_limit), _upper_ctrl_limit(upper_ctrl_limit), _lower_ctrl_limit(lower_ctrl_limit)
00465   {
00466     if (units) std::copy(units, units+(8), &_units[0]);
00467   }
00468   dbr_ctrl_long() {}
00469   int16_t status() const { return _status; }
00470   int16_t severity() const { return _severity; }
00471   const char* units() const { return _units; }
00472   int32_t upper_disp_limit() const { return _upper_disp_limit; }
00473   int32_t lower_disp_limit() const { return _lower_disp_limit; }
00474   int32_t upper_alarm_limit() const { return _upper_alarm_limit; }
00475   int32_t upper_warning_limit() const { return _upper_warning_limit; }
00476   int32_t lower_warning_limit() const { return _lower_warning_limit; }
00477   int32_t lower_alarm_limit() const { return _lower_alarm_limit; }
00478   int32_t upper_ctrl_limit() const { return _upper_ctrl_limit; }
00479   int32_t lower_ctrl_limit() const { return _lower_ctrl_limit; }
00480   static uint32_t _sizeof() { return ((((((((((((4+(1*(MAX_UNITS_SIZE)))+4)+4)+4)+4)+4)+4)+4)+4)+4)-1)/4)*4; }
00481   /** Method which returns the shape (dimensions) of the data returned by units() method. */
00482   std::vector<int> units_shape() const;
00483 private:
00484   int16_t       _status;
00485   int16_t       _severity;
00486   char  _units[MAX_UNITS_SIZE];
00487   int32_t       _upper_disp_limit;
00488   int32_t       _lower_disp_limit;
00489   int32_t       _upper_alarm_limit;
00490   int32_t       _upper_warning_limit;
00491   int32_t       _lower_warning_limit;
00492   int32_t       _lower_alarm_limit;
00493   int32_t       _upper_ctrl_limit;
00494   int32_t       _lower_ctrl_limit;
00495 };
00496 
00497 /** @class dbr_ctrl_double
00498 
00499   
00500 */
00501 
00502 
00503 class dbr_ctrl_double {
00504 public:
00505   enum { DBR_TYPE_ID = DBR_CTRL_DOUBLE };
00506   dbr_ctrl_double(int16_t status, int16_t severity, int16_t precision, const char* units, double upper_disp_limit, double lower_disp_limit, double upper_alarm_limit, double upper_warning_limit, double lower_warning_limit, double lower_alarm_limit, double upper_ctrl_limit, double lower_ctrl_limit)
00507     : _status(status), _severity(severity), _precision(precision), RISC_pad0(0), _upper_disp_limit(upper_disp_limit), _lower_disp_limit(lower_disp_limit), _upper_alarm_limit(upper_alarm_limit), _upper_warning_limit(upper_warning_limit), _lower_warning_limit(lower_warning_limit), _lower_alarm_limit(lower_alarm_limit), _upper_ctrl_limit(upper_ctrl_limit), _lower_ctrl_limit(lower_ctrl_limit)
00508   {
00509     if (units) std::copy(units, units+(8), &_units[0]);
00510   }
00511   dbr_ctrl_double() {}
00512   int16_t status() const { return _status; }
00513   int16_t severity() const { return _severity; }
00514   int16_t precision() const { return _precision; }
00515   const char* units() const { return _units; }
00516   double upper_disp_limit() const { return _upper_disp_limit; }
00517   double lower_disp_limit() const { return _lower_disp_limit; }
00518   double upper_alarm_limit() const { return _upper_alarm_limit; }
00519   double upper_warning_limit() const { return _upper_warning_limit; }
00520   double lower_warning_limit() const { return _lower_warning_limit; }
00521   double lower_alarm_limit() const { return _lower_alarm_limit; }
00522   double upper_ctrl_limit() const { return _upper_ctrl_limit; }
00523   double lower_ctrl_limit() const { return _lower_ctrl_limit; }
00524   static uint32_t _sizeof() { return ((((((((((((8+(1*(MAX_UNITS_SIZE)))+8)+8)+8)+8)+8)+8)+8)+8)+8)-1)/8)*8; }
00525   /** Method which returns the shape (dimensions) of the data returned by units() method. */
00526   std::vector<int> units_shape() const;
00527 private:
00528   int16_t       _status;
00529   int16_t       _severity;
00530   int16_t       _precision;
00531   int16_t       RISC_pad0;
00532   char  _units[MAX_UNITS_SIZE];
00533   double        _upper_disp_limit;
00534   double        _lower_disp_limit;
00535   double        _upper_alarm_limit;
00536   double        _upper_warning_limit;
00537   double        _lower_warning_limit;
00538   double        _lower_alarm_limit;
00539   double        _upper_ctrl_limit;
00540   double        _lower_ctrl_limit;
00541 };
00542 
00543 /** @class EpicsPvHeader
00544 
00545   Base class for EPICS data types stored in XTC files.
00546 */
00547 
00548 
00549 class EpicsPvHeader {
00550 public:
00551   virtual ~EpicsPvHeader();
00552   /** PV ID number assigned by DAQ. */
00553   virtual int16_t pvId() const = 0;
00554   /** DBR structure type. */
00555   virtual int16_t dbrType() const = 0;
00556   /** Number of elements in EPICS DBR structure */
00557   virtual int16_t numElements() const = 0;
00558   /** Returns 1 if PV is one of CTRL types, 0 otherwise. */
00559   virtual uint8_t isCtrl() const = 0;
00560   /** Returns 1 if PV is one of TIME types, 0 otherwise. */
00561   virtual uint8_t isTime() const = 0;
00562   /** Returns status value for the PV. */
00563   virtual uint16_t status() const = 0;
00564   /** Returns severity value for the PV. */
00565   virtual uint16_t severity() const = 0;
00566 };
00567 
00568 /** @class EpicsPvCtrlHeader
00569 
00570   Base class for all CTRL-type PV values.
00571 */
00572 
00573 
00574 class EpicsPvCtrlHeader: public EpicsPvHeader {
00575 public:
00576   virtual ~EpicsPvCtrlHeader();
00577   /** PV name. */
00578   virtual const char* pvName() const = 0;
00579 };
00580 
00581 /** @class EpicsPvTimeHeader
00582 
00583   Base class for all TIME-type PV values.
00584 */
00585 
00586 
00587 class EpicsPvTimeHeader: public EpicsPvHeader {
00588 public:
00589   virtual ~EpicsPvTimeHeader();
00590   /** EPICS timestamp value. */
00591   virtual Epics::epicsTimeStamp stamp() const = 0;
00592 };
00593 
00594 /** @class EpicsPvCtrlString
00595 
00596   
00597 */
00598 
00599 
00600 class EpicsPvCtrlString: public EpicsPvCtrlHeader {
00601 public:
00602   virtual ~EpicsPvCtrlString();
00603   virtual const Epics::dbr_sts_string& dbr() const = 0;
00604   virtual const char* data(uint32_t i0) const = 0;
00605   virtual const char* value(uint32_t i) const = 0;
00606   /** Method which returns the shape (dimensions) of the data returned by data() method. */
00607   virtual std::vector<int> data_shape() const = 0;
00608 };
00609 
00610 /** @class EpicsPvCtrlShort
00611 
00612   
00613 */
00614 
00615 
00616 class EpicsPvCtrlShort: public EpicsPvCtrlHeader {
00617 public:
00618   virtual ~EpicsPvCtrlShort();
00619   virtual const Epics::dbr_ctrl_short& dbr() const = 0;
00620   virtual ndarray<const int16_t, 1> data() const = 0;
00621   virtual int16_t value(uint32_t i) const = 0;
00622 };
00623 
00624 /** @class EpicsPvCtrlFloat
00625 
00626   
00627 */
00628 
00629 
00630 class EpicsPvCtrlFloat: public EpicsPvCtrlHeader {
00631 public:
00632   virtual ~EpicsPvCtrlFloat();
00633   virtual const Epics::dbr_ctrl_float& dbr() const = 0;
00634   virtual ndarray<const float, 1> data() const = 0;
00635   virtual float value(uint32_t i) const = 0;
00636 };
00637 
00638 /** @class EpicsPvCtrlEnum
00639 
00640   
00641 */
00642 
00643 
00644 class EpicsPvCtrlEnum: public EpicsPvCtrlHeader {
00645 public:
00646   virtual ~EpicsPvCtrlEnum();
00647   virtual const Epics::dbr_ctrl_enum& dbr() const = 0;
00648   virtual ndarray<const uint16_t, 1> data() const = 0;
00649   virtual uint16_t value(uint32_t i) const = 0;
00650 };
00651 
00652 /** @class EpicsPvCtrlChar
00653 
00654   
00655 */
00656 
00657 
00658 class EpicsPvCtrlChar: public EpicsPvCtrlHeader {
00659 public:
00660   virtual ~EpicsPvCtrlChar();
00661   virtual const Epics::dbr_ctrl_char& dbr() const = 0;
00662   virtual ndarray<const uint8_t, 1> data() const = 0;
00663   virtual uint8_t value(uint32_t i) const = 0;
00664 };
00665 
00666 /** @class EpicsPvCtrlLong
00667 
00668   
00669 */
00670 
00671 
00672 class EpicsPvCtrlLong: public EpicsPvCtrlHeader {
00673 public:
00674   virtual ~EpicsPvCtrlLong();
00675   virtual const Epics::dbr_ctrl_long& dbr() const = 0;
00676   virtual ndarray<const int32_t, 1> data() const = 0;
00677   virtual int32_t value(uint32_t i) const = 0;
00678 };
00679 
00680 /** @class EpicsPvCtrlDouble
00681 
00682   
00683 */
00684 
00685 
00686 class EpicsPvCtrlDouble: public EpicsPvCtrlHeader {
00687 public:
00688   virtual ~EpicsPvCtrlDouble();
00689   virtual const Epics::dbr_ctrl_double& dbr() const = 0;
00690   virtual ndarray<const double, 1> data() const = 0;
00691   virtual double value(uint32_t i) const = 0;
00692 };
00693 
00694 /** @class EpicsPvTimeString
00695 
00696   
00697 */
00698 
00699 
00700 class EpicsPvTimeString: public EpicsPvTimeHeader {
00701 public:
00702   virtual ~EpicsPvTimeString();
00703   virtual const Epics::dbr_time_string& dbr() const = 0;
00704   virtual const char* data(uint32_t i0) const = 0;
00705   virtual const char* value(uint32_t i) const = 0;
00706   /** Method which returns the shape (dimensions) of the data returned by data() method. */
00707   virtual std::vector<int> data_shape() const = 0;
00708 };
00709 
00710 /** @class EpicsPvTimeShort
00711 
00712   
00713 */
00714 
00715 
00716 class EpicsPvTimeShort: public EpicsPvTimeHeader {
00717 public:
00718   virtual ~EpicsPvTimeShort();
00719   virtual const Epics::dbr_time_short& dbr() const = 0;
00720   virtual ndarray<const int16_t, 1> data() const = 0;
00721   virtual int16_t value(uint32_t i) const = 0;
00722 };
00723 
00724 /** @class EpicsPvTimeFloat
00725 
00726   
00727 */
00728 
00729 
00730 class EpicsPvTimeFloat: public EpicsPvTimeHeader {
00731 public:
00732   virtual ~EpicsPvTimeFloat();
00733   virtual const Epics::dbr_time_float& dbr() const = 0;
00734   virtual ndarray<const float, 1> data() const = 0;
00735   virtual float value(uint32_t i) const = 0;
00736 };
00737 
00738 /** @class EpicsPvTimeEnum
00739 
00740   
00741 */
00742 
00743 
00744 class EpicsPvTimeEnum: public EpicsPvTimeHeader {
00745 public:
00746   virtual ~EpicsPvTimeEnum();
00747   virtual const Epics::dbr_time_enum& dbr() const = 0;
00748   virtual ndarray<const uint16_t, 1> data() const = 0;
00749   virtual uint16_t value(uint32_t i) const = 0;
00750 };
00751 
00752 /** @class EpicsPvTimeChar
00753 
00754   
00755 */
00756 
00757 
00758 class EpicsPvTimeChar: public EpicsPvTimeHeader {
00759 public:
00760   virtual ~EpicsPvTimeChar();
00761   virtual const Epics::dbr_time_char& dbr() const = 0;
00762   virtual ndarray<const uint8_t, 1> data() const = 0;
00763   virtual uint8_t value(uint32_t i) const = 0;
00764 };
00765 
00766 /** @class EpicsPvTimeLong
00767 
00768   
00769 */
00770 
00771 
00772 class EpicsPvTimeLong: public EpicsPvTimeHeader {
00773 public:
00774   virtual ~EpicsPvTimeLong();
00775   virtual const Epics::dbr_time_long& dbr() const = 0;
00776   virtual ndarray<const int32_t, 1> data() const = 0;
00777   virtual int32_t value(uint32_t i) const = 0;
00778 };
00779 
00780 /** @class EpicsPvTimeDouble
00781 
00782   
00783 */
00784 
00785 
00786 class EpicsPvTimeDouble: public EpicsPvTimeHeader {
00787 public:
00788   virtual ~EpicsPvTimeDouble();
00789   virtual const Epics::dbr_time_double& dbr() const = 0;
00790   virtual ndarray<const double, 1> data() const = 0;
00791   virtual double value(uint32_t i) const = 0;
00792 };
00793 
00794 /** @class PvConfigV1
00795 
00796   
00797 */
00798 
00799 
00800 class PvConfigV1 {
00801 public:
00802   enum { iMaxPvDescLength = 64 };
00803   PvConfigV1(int16_t arg_iPvId, const char* arg_sPvDesc, float arg_fInterval)
00804     : iPvId(arg_iPvId), fInterval(arg_fInterval)
00805   {
00806     if (arg_sPvDesc) std::copy(arg_sPvDesc, arg_sPvDesc+(64), &sPvDesc[0]);
00807   }
00808   PvConfigV1() {}
00809   int16_t pvId() const { return iPvId; }
00810   const char* description() const { return sPvDesc; }
00811   float interval() const { return fInterval; }
00812   static uint32_t _sizeof() { return ((((((2+(1*(iMaxPvDescLength)))+2)+4)+4)-1)/4)*4; }
00813 private:
00814   int16_t       iPvId;
00815   char  sPvDesc[iMaxPvDescLength];
00816   int16_t       _pad0;
00817   float fInterval;
00818 };
00819 
00820 /** @class ConfigV1
00821 
00822   
00823 */
00824 
00825 
00826 class ConfigV1 {
00827 public:
00828   enum { TypeId = Pds::TypeId::Id_EpicsConfig /**< XTC type ID value (from Pds::TypeId class) */ };
00829   enum { Version = 1 /**< XTC type version number */ };
00830   virtual ~ConfigV1();
00831   virtual int32_t numPv() const = 0;
00832   virtual ndarray<const Epics::PvConfigV1, 1> getPvConfig() const = 0;
00833 };
00834 } // namespace Epics
00835 } // namespace Psana
00836 #endif // PSANA_EPICS_DDL_H

Generated on 19 Dec 2016 for PSANAclasses by  doxygen 1.4.7