00001 #ifndef PSANA_IPIMB_DDL_H
00002 #define PSANA_IPIMB_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 Ipimb {
00013
00014
00015
00016
00017
00018
00019
00020 class ConfigV1 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_IpimbConfig };
00023 enum { Version = 1 };
00024 enum CapacitorValue {
00025 c_1pF,
00026 c_100pF,
00027 c_10nF,
00028 };
00029 virtual ~ConfigV1();
00030 virtual uint64_t triggerCounter() const = 0;
00031 virtual uint64_t serialID() const = 0;
00032 virtual uint16_t chargeAmpRange() const = 0;
00033 virtual uint16_t calibrationRange() const = 0;
00034 virtual uint32_t resetLength() const = 0;
00035 virtual uint32_t resetDelay() const = 0;
00036 virtual float chargeAmpRefVoltage() const = 0;
00037 virtual float calibrationVoltage() const = 0;
00038 virtual float diodeBias() const = 0;
00039 virtual uint16_t status() const = 0;
00040 virtual uint16_t errors() const = 0;
00041 virtual uint16_t calStrobeLength() const = 0;
00042 virtual uint32_t trigDelay() const = 0;
00043
00044 virtual Ipimb::ConfigV1::CapacitorValue capacitorValue(uint32_t ch) const = 0;
00045
00046 virtual ndarray<const uint8_t, 1> capacitorValues() const = 0;
00047 };
00048 std::ostream& operator<<(std::ostream& str, Ipimb::ConfigV1::CapacitorValue enval);
00049
00050
00051
00052
00053
00054
00055
00056 class ConfigV2 {
00057 public:
00058 enum { TypeId = Pds::TypeId::Id_IpimbConfig };
00059 enum { Version = 2 };
00060 enum CapacitorValue {
00061 c_1pF,
00062 c_4p7pF,
00063 c_24pF,
00064 c_120pF,
00065 c_620pF,
00066 c_3p3nF,
00067 c_10nF,
00068 expert,
00069 };
00070 virtual ~ConfigV2();
00071 virtual uint64_t triggerCounter() const = 0;
00072 virtual uint64_t serialID() const = 0;
00073 virtual uint16_t chargeAmpRange() const = 0;
00074 virtual uint16_t calibrationRange() const = 0;
00075 virtual uint32_t resetLength() const = 0;
00076 virtual uint32_t resetDelay() const = 0;
00077 virtual float chargeAmpRefVoltage() const = 0;
00078 virtual float calibrationVoltage() const = 0;
00079 virtual float diodeBias() const = 0;
00080 virtual uint16_t status() const = 0;
00081 virtual uint16_t errors() const = 0;
00082 virtual uint16_t calStrobeLength() const = 0;
00083 virtual uint32_t trigDelay() const = 0;
00084 virtual uint32_t trigPsDelay() const = 0;
00085 virtual uint32_t adcDelay() const = 0;
00086
00087 virtual Ipimb::ConfigV2::CapacitorValue capacitorValue(uint32_t ch) const = 0;
00088
00089 virtual ndarray<const uint8_t, 1> capacitorValues() const = 0;
00090 };
00091 std::ostream& operator<<(std::ostream& str, Ipimb::ConfigV2::CapacitorValue enval);
00092
00093
00094
00095
00096
00097
00098
00099 class DataV1 {
00100 public:
00101 enum { TypeId = Pds::TypeId::Id_IpimbData };
00102 enum { Version = 1 };
00103 virtual ~DataV1();
00104 virtual uint64_t triggerCounter() const = 0;
00105 virtual uint16_t config0() const = 0;
00106 virtual uint16_t config1() const = 0;
00107 virtual uint16_t config2() const = 0;
00108
00109 virtual uint16_t channel0() const = 0;
00110
00111 virtual uint16_t channel1() const = 0;
00112
00113 virtual uint16_t channel2() const = 0;
00114
00115 virtual uint16_t channel3() const = 0;
00116 virtual uint16_t checksum() const = 0;
00117
00118 virtual float channel0Volts() const = 0;
00119
00120 virtual float channel1Volts() const = 0;
00121
00122 virtual float channel2Volts() const = 0;
00123
00124 virtual float channel3Volts() const = 0;
00125 };
00126
00127
00128
00129
00130
00131
00132
00133 class DataV2 {
00134 public:
00135 enum { TypeId = Pds::TypeId::Id_IpimbData };
00136 enum { Version = 2 };
00137 enum { ipimbAdcRange = 5 };
00138 enum { ipimbAdcSteps = 65536 };
00139 virtual ~DataV2();
00140 virtual uint16_t config0() const = 0;
00141 virtual uint16_t config1() const = 0;
00142 virtual uint16_t config2() const = 0;
00143
00144 virtual uint16_t channel0() const = 0;
00145
00146 virtual uint16_t channel1() const = 0;
00147
00148 virtual uint16_t channel2() const = 0;
00149
00150 virtual uint16_t channel3() const = 0;
00151
00152 virtual uint16_t channel0ps() const = 0;
00153
00154 virtual uint16_t channel1ps() const = 0;
00155
00156 virtual uint16_t channel2ps() const = 0;
00157
00158 virtual uint16_t channel3ps() const = 0;
00159 virtual uint16_t checksum() const = 0;
00160
00161 virtual float channel0Volts() const = 0;
00162
00163 virtual float channel1Volts() const = 0;
00164
00165 virtual float channel2Volts() const = 0;
00166
00167 virtual float channel3Volts() const = 0;
00168
00169 virtual float channel0psVolts() const = 0;
00170
00171 virtual float channel1psVolts() const = 0;
00172
00173 virtual float channel2psVolts() const = 0;
00174
00175 virtual float channel3psVolts() const = 0;
00176
00177 virtual uint64_t triggerCounter() const = 0;
00178 };
00179 }
00180 }
00181 #endif // PSANA_IPIMB_DDL_H