00001 #ifndef PSANA_CSPAD2X2_DDL_H
00002 #define PSANA_CSPAD2X2_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 CsPad2x2 {
00013 enum {
00014 QuadsPerSensor = 1
00015 };
00016 enum {
00017 ASICsPerQuad = 4
00018 };
00019 enum {
00020 RowsPerBank = 26
00021 };
00022 enum {
00023 FullBanksPerASIC = 7
00024 };
00025 enum {
00026 BanksPerASIC = 8
00027 };
00028 enum {
00029 ColumnsPerASIC = 185
00030 };
00031 enum {
00032 MaxRowsPerASIC = 194
00033 };
00034 enum {
00035 PotsPerQuad = 80
00036 };
00037 enum {
00038 TwoByTwosPerQuad = 1
00039 };
00040 enum {
00041 SectorsPerQuad = 2
00042 };
00043
00044
00045 enum RunModes {
00046 NoRunning,
00047 RunButDrop,
00048 RunAndSendToRCE,
00049 RunAndSendTriggeredByTTL,
00050 ExternalTriggerSendToRCE,
00051 ExternalTriggerDrop,
00052 NumberOfRunModes,
00053 };
00054 std::ostream& operator<<(std::ostream& str, CsPad2x2::RunModes enval);
00055
00056
00057 enum DataModes {
00058 normal = 0,
00059 shiftTest = 1,
00060 testData = 2,
00061 reserved = 3,
00062 };
00063 std::ostream& operator<<(std::ostream& str, CsPad2x2::DataModes enval);
00064
00065
00066
00067
00068
00069
00070
00071 class CsPad2x2DigitalPotsCfg {
00072 public:
00073 virtual ~CsPad2x2DigitalPotsCfg();
00074 virtual ndarray<const uint8_t, 1> pots() const = 0;
00075 };
00076
00077
00078
00079
00080
00081
00082
00083 class CsPad2x2ReadOnlyCfg {
00084 public:
00085 CsPad2x2ReadOnlyCfg(uint32_t arg__shiftTest, uint32_t arg__version)
00086 : _shiftTest(arg__shiftTest), _version(arg__version)
00087 {
00088 }
00089 CsPad2x2ReadOnlyCfg() {}
00090 uint32_t shiftTest() const { return _shiftTest; }
00091 uint32_t version() const { return _version; }
00092 static uint32_t _sizeof() { return 8; }
00093 private:
00094 uint32_t _shiftTest;
00095 uint32_t _version;
00096 };
00097
00098
00099
00100
00101
00102
00103
00104 class ProtectionSystemThreshold {
00105 public:
00106 ProtectionSystemThreshold(uint32_t arg__adcThreshold, uint32_t arg__pixelCountThreshold)
00107 : _adcThreshold(arg__adcThreshold), _pixelCountThreshold(arg__pixelCountThreshold)
00108 {
00109 }
00110 ProtectionSystemThreshold() {}
00111 uint32_t adcThreshold() const { return _adcThreshold; }
00112 uint32_t pixelCountThreshold() const { return _pixelCountThreshold; }
00113 static uint32_t _sizeof() { return 8; }
00114 private:
00115 uint32_t _adcThreshold;
00116 uint32_t _pixelCountThreshold;
00117 };
00118
00119
00120
00121
00122
00123
00124
00125 class CsPad2x2GainMapCfg {
00126 public:
00127 virtual ~CsPad2x2GainMapCfg();
00128
00129 virtual ndarray<const uint16_t, 2> gainMap() const = 0;
00130 };
00131
00132
00133
00134
00135
00136
00137
00138 class ConfigV1QuadReg {
00139 public:
00140 virtual ~ConfigV1QuadReg();
00141 virtual uint32_t shiftSelect() const = 0;
00142 virtual uint32_t edgeSelect() const = 0;
00143 virtual uint32_t readClkSet() const = 0;
00144 virtual uint32_t readClkHold() const = 0;
00145 virtual uint32_t dataMode() const = 0;
00146 virtual uint32_t prstSel() const = 0;
00147 virtual uint32_t acqDelay() const = 0;
00148 virtual uint32_t intTime() const = 0;
00149 virtual uint32_t digDelay() const = 0;
00150 virtual uint32_t ampIdle() const = 0;
00151 virtual uint32_t injTotal() const = 0;
00152 virtual uint32_t rowColShiftPer() const = 0;
00153 virtual uint32_t ampReset() const = 0;
00154 virtual uint32_t digCount() const = 0;
00155 virtual uint32_t digPeriod() const = 0;
00156 virtual uint32_t PeltierEnable() const = 0;
00157 virtual uint32_t kpConstant() const = 0;
00158 virtual uint32_t kiConstant() const = 0;
00159 virtual uint32_t kdConstant() const = 0;
00160 virtual uint32_t humidThold() const = 0;
00161 virtual uint32_t setPoint() const = 0;
00162
00163 virtual const CsPad2x2::CsPad2x2ReadOnlyCfg& ro() const = 0;
00164 virtual const CsPad2x2::CsPad2x2DigitalPotsCfg& dp() const = 0;
00165
00166 virtual const CsPad2x2::CsPad2x2GainMapCfg& gm() const = 0;
00167 };
00168
00169
00170
00171
00172
00173
00174
00175 class ConfigV1 {
00176 public:
00177 enum { TypeId = Pds::TypeId::Id_Cspad2x2Config };
00178 enum { Version = 1 };
00179 virtual ~ConfigV1();
00180 virtual uint32_t concentratorVersion() const = 0;
00181 virtual const CsPad2x2::ProtectionSystemThreshold& protectionThreshold() const = 0;
00182 virtual uint32_t protectionEnable() const = 0;
00183 virtual uint32_t inactiveRunMode() const = 0;
00184 virtual uint32_t activeRunMode() const = 0;
00185 virtual uint32_t tdi() const = 0;
00186 virtual uint32_t payloadSize() const = 0;
00187 virtual uint32_t badAsicMask() const = 0;
00188 virtual uint32_t asicMask() const = 0;
00189 virtual uint32_t roiMask() const = 0;
00190 virtual const CsPad2x2::ConfigV1QuadReg& quad() const = 0;
00191 virtual uint32_t numAsicsRead() const = 0;
00192
00193 virtual uint32_t numAsicsStored() const = 0;
00194 };
00195
00196
00197
00198
00199
00200
00201
00202 class ConfigV2QuadReg {
00203 public:
00204 virtual ~ConfigV2QuadReg();
00205 virtual uint32_t shiftSelect() const = 0;
00206 virtual uint32_t edgeSelect() const = 0;
00207 virtual uint32_t readClkSet() const = 0;
00208 virtual uint32_t readClkHold() const = 0;
00209 virtual uint32_t dataMode() const = 0;
00210 virtual uint32_t prstSel() const = 0;
00211 virtual uint32_t acqDelay() const = 0;
00212 virtual uint32_t intTime() const = 0;
00213 virtual uint32_t digDelay() const = 0;
00214 virtual uint32_t ampIdle() const = 0;
00215 virtual uint32_t injTotal() const = 0;
00216 virtual uint32_t rowColShiftPer() const = 0;
00217 virtual uint32_t ampReset() const = 0;
00218 virtual uint32_t digCount() const = 0;
00219 virtual uint32_t digPeriod() const = 0;
00220 virtual uint32_t PeltierEnable() const = 0;
00221 virtual uint32_t kpConstant() const = 0;
00222 virtual uint32_t kiConstant() const = 0;
00223 virtual uint32_t kdConstant() const = 0;
00224 virtual uint32_t humidThold() const = 0;
00225 virtual uint32_t setPoint() const = 0;
00226
00227
00228
00229 virtual uint32_t biasTuning() const = 0;
00230
00231
00232
00233
00234 virtual uint32_t pdpmndnmBalance() const = 0;
00235
00236 virtual const CsPad2x2::CsPad2x2ReadOnlyCfg& ro() const = 0;
00237 virtual const CsPad2x2::CsPad2x2DigitalPotsCfg& dp() const = 0;
00238
00239 virtual const CsPad2x2::CsPad2x2GainMapCfg& gm() const = 0;
00240 };
00241
00242
00243
00244
00245
00246
00247
00248 class ConfigV2 {
00249 public:
00250 enum { TypeId = Pds::TypeId::Id_Cspad2x2Config };
00251 enum { Version = 2 };
00252 virtual ~ConfigV2();
00253 virtual uint32_t concentratorVersion() const = 0;
00254 virtual const CsPad2x2::ProtectionSystemThreshold& protectionThreshold() const = 0;
00255 virtual uint32_t protectionEnable() const = 0;
00256 virtual uint32_t inactiveRunMode() const = 0;
00257 virtual uint32_t activeRunMode() const = 0;
00258 virtual uint32_t runTriggerDelay() const = 0;
00259 virtual uint32_t tdi() const = 0;
00260 virtual uint32_t payloadSize() const = 0;
00261 virtual uint32_t badAsicMask() const = 0;
00262 virtual uint32_t asicMask() const = 0;
00263 virtual uint32_t roiMask() const = 0;
00264 virtual const CsPad2x2::ConfigV2QuadReg& quad() const = 0;
00265 virtual uint32_t numAsicsRead() const = 0;
00266
00267 virtual uint32_t numAsicsStored() const = 0;
00268 };
00269
00270
00271
00272
00273
00274
00275
00276 class ElementV1 {
00277 public:
00278 enum { TypeId = Pds::TypeId::Id_Cspad2x2Element };
00279 enum { Version = 1 };
00280 enum { Nsbtemp = 4 };
00281 virtual ~ElementV1();
00282
00283 virtual uint32_t virtual_channel() const = 0;
00284
00285 virtual uint32_t lane() const = 0;
00286 virtual uint32_t tid() const = 0;
00287 virtual uint32_t acq_count() const = 0;
00288 virtual uint32_t op_code() const = 0;
00289
00290 virtual uint32_t quad() const = 0;
00291 virtual uint32_t seq_count() const = 0;
00292 virtual uint32_t ticks() const = 0;
00293 virtual uint32_t fiducials() const = 0;
00294 virtual ndarray<const uint16_t, 1> sb_temp() const = 0;
00295 virtual uint32_t frame_type() const = 0;
00296 virtual ndarray<const int16_t, 3> data() const = 0;
00297
00298
00299 virtual float common_mode(uint32_t section) const = 0;
00300 };
00301 }
00302 }
00303 #endif // PSANA_CSPAD2X2_DDL_H