00001 #ifndef PSANA_EPICS_DDL_H
00002 #define PSANA_EPICS_DDL_H 1
00003
00004
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
00018 };
00019 enum {
00020 MAX_STRING_SIZE = 40
00021 };
00022 enum {
00023 MAX_UNITS_SIZE = 8
00024 };
00025 enum {
00026 MAX_ENUM_STRING_SIZE = 26
00027 };
00028 enum {
00029 MAX_ENUM_STATES = 16
00030 };
00031
00032
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
00074
00075
00076
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
00088 uint32_t sec() const { return _secPastEpoch; }
00089
00090 uint32_t nsec() const { return _nsec; }
00091 static uint32_t _sizeof() { return 8; }
00092 private:
00093 uint32_t _secPastEpoch;
00094 uint32_t _nsec;
00095 };
00096
00097
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
00544
00545
00546
00547
00548
00549 class EpicsPvHeader {
00550 public:
00551 virtual ~EpicsPvHeader();
00552
00553 virtual int16_t pvId() const = 0;
00554
00555 virtual int16_t dbrType() const = 0;
00556
00557 virtual int16_t numElements() const = 0;
00558
00559 virtual uint8_t isCtrl() const = 0;
00560
00561 virtual uint8_t isTime() const = 0;
00562
00563 virtual uint16_t status() const = 0;
00564
00565 virtual uint16_t severity() const = 0;
00566 };
00567
00568
00569
00570
00571
00572
00573
00574 class EpicsPvCtrlHeader: public EpicsPvHeader {
00575 public:
00576 virtual ~EpicsPvCtrlHeader();
00577
00578 virtual const char* pvName() const = 0;
00579 };
00580
00581
00582
00583
00584
00585
00586
00587 class EpicsPvTimeHeader: public EpicsPvHeader {
00588 public:
00589 virtual ~EpicsPvTimeHeader();
00590
00591 virtual Epics::epicsTimeStamp stamp() const = 0;
00592 };
00593
00594
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
00607 virtual std::vector<int> data_shape() const = 0;
00608 };
00609
00610
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
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
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
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
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
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
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
00707 virtual std::vector<int> data_shape() const = 0;
00708 };
00709
00710
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
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
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
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
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
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
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
00821
00822
00823
00824
00825
00826 class ConfigV1 {
00827 public:
00828 enum { TypeId = Pds::TypeId::Id_EpicsConfig };
00829 enum { Version = 1 };
00830 virtual ~ConfigV1();
00831 virtual int32_t numPv() const = 0;
00832 virtual ndarray<const Epics::PvConfigV1, 1> getPvConfig() const = 0;
00833 };
00834 }
00835 }
00836 #endif // PSANA_EPICS_DDL_H