00001 #ifndef PSANA_PNCCD_DDL_H
00002 #define PSANA_PNCCD_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 PNCCD {
00013
00014
00015
00016
00017
00018
00019
00020 class ConfigV1 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_pnCCDconfig };
00023 enum { Version = 1 };
00024 virtual ~ConfigV1();
00025
00026 virtual uint32_t numLinks() const = 0;
00027
00028 virtual uint32_t payloadSizePerLink() const = 0;
00029 };
00030
00031
00032
00033
00034
00035
00036
00037 class ConfigV2 {
00038 public:
00039 enum { TypeId = Pds::TypeId::Id_pnCCDconfig };
00040 enum { Version = 2 };
00041 virtual ~ConfigV2();
00042
00043 virtual uint32_t numLinks() const = 0;
00044
00045 virtual uint32_t payloadSizePerLink() const = 0;
00046
00047 virtual uint32_t numChannels() const = 0;
00048
00049 virtual uint32_t numRows() const = 0;
00050
00051 virtual uint32_t numSubmoduleChannels() const = 0;
00052
00053 virtual uint32_t numSubmoduleRows() const = 0;
00054
00055 virtual uint32_t numSubmodules() const = 0;
00056
00057 virtual uint32_t camexMagic() const = 0;
00058
00059 virtual const char* info() const = 0;
00060
00061 virtual const char* timingFName() const = 0;
00062
00063 virtual std::vector<int> info_shape() const = 0;
00064
00065 virtual std::vector<int> timingFName_shape() const = 0;
00066 };
00067
00068
00069
00070
00071
00072
00073 class ConfigV1;
00074 class ConfigV2;
00075
00076 class FrameV1 {
00077 public:
00078 virtual ~FrameV1();
00079
00080 virtual uint32_t specialWord() const = 0;
00081
00082 virtual uint32_t frameNumber() const = 0;
00083
00084 virtual uint32_t timeStampHi() const = 0;
00085
00086 virtual uint32_t timeStampLo() const = 0;
00087
00088 virtual ndarray<const uint16_t, 1> _data() const = 0;
00089 virtual ndarray<const uint16_t, 2> data() const = 0;
00090 };
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 class FullFrameV1 {
00101 public:
00102 enum { TypeId = Pds::TypeId::Id_pnCCDframe };
00103 enum { Version = 1 };
00104 virtual ~FullFrameV1();
00105
00106 virtual uint32_t specialWord() const = 0;
00107
00108 virtual uint32_t frameNumber() const = 0;
00109
00110 virtual uint32_t timeStampHi() const = 0;
00111
00112 virtual uint32_t timeStampLo() const = 0;
00113
00114 virtual ndarray<const uint16_t, 2> data() const = 0;
00115 };
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 class ConfigV1;
00126 class ConfigV2;
00127
00128 class FramesV1 {
00129 public:
00130 enum { TypeId = Pds::TypeId::Id_pnCCDframe };
00131 enum { Version = 1 };
00132 virtual ~FramesV1();
00133
00134 virtual const PNCCD::FrameV1& frame(uint32_t i0) const = 0;
00135 virtual uint32_t numLinks() const = 0;
00136
00137 virtual std::vector<int> frame_shape() const = 0;
00138 };
00139 }
00140 }
00141 #endif // PSANA_PNCCD_DDL_H