00001 #ifndef PSANA_FCCD_DDL_H
00002 #define PSANA_FCCD_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 FCCD {
00013
00014
00015
00016
00017
00018
00019
00020 class FccdConfigV1 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_FccdConfig };
00023 enum { Version = 1 };
00024 enum { Row_Pixels = 500 };
00025 enum { Column_Pixels = 576 };
00026 enum { Trimmed_Row_Pixels = 480 };
00027 enum { Trimmed_Column_Pixels = 480 };
00028 enum Depth {
00029 Sixteen_bit = 16,
00030 };
00031 enum Output_Source {
00032 Output_FIFO = 0,
00033 Output_Pattern4 = 4,
00034 };
00035 virtual ~FccdConfigV1();
00036 virtual uint16_t outputMode() const = 0;
00037 virtual uint32_t width() const = 0;
00038 virtual uint32_t height() const = 0;
00039 virtual uint32_t trimmedWidth() const = 0;
00040 virtual uint32_t trimmedHeight() const = 0;
00041 };
00042 std::ostream& operator<<(std::ostream& str, FCCD::FccdConfigV1::Depth enval);
00043 std::ostream& operator<<(std::ostream& str, FCCD::FccdConfigV1::Output_Source enval);
00044
00045
00046
00047
00048
00049
00050
00051 class FccdConfigV2 {
00052 public:
00053 enum { TypeId = Pds::TypeId::Id_FccdConfig };
00054 enum { Version = 2 };
00055 enum { Row_Pixels = 500 };
00056 enum { Column_Pixels = 576 * 2 };
00057 enum { Trimmed_Row_Pixels = 480 };
00058 enum { Trimmed_Column_Pixels = 480 };
00059 enum { NVoltages = 17 };
00060 enum { NWaveforms = 15 };
00061 enum Depth {
00062 Eight_bit = 8,
00063 Sixteen_bit = 16,
00064 };
00065 enum Output_Source {
00066 Output_FIFO = 0,
00067 Test_Pattern1 = 1,
00068 Test_Pattern2 = 2,
00069 Test_Pattern3 = 3,
00070 Test_Pattern4 = 4,
00071 };
00072 virtual ~FccdConfigV2();
00073 virtual uint16_t outputMode() const = 0;
00074 virtual uint8_t ccdEnable() const = 0;
00075 virtual uint8_t focusMode() const = 0;
00076 virtual uint32_t exposureTime() const = 0;
00077 virtual ndarray<const float, 1> dacVoltages() const = 0;
00078 virtual ndarray<const uint16_t, 1> waveforms() const = 0;
00079 virtual uint32_t width() const = 0;
00080 virtual uint32_t height() const = 0;
00081 virtual uint32_t trimmedWidth() const = 0;
00082 virtual uint32_t trimmedHeight() const = 0;
00083 };
00084 std::ostream& operator<<(std::ostream& str, FCCD::FccdConfigV2::Depth enval);
00085 std::ostream& operator<<(std::ostream& str, FCCD::FccdConfigV2::Output_Source enval);
00086 }
00087 }
00088 #endif // PSANA_FCCD_DDL_H