00001 #ifndef PSANA_GSC16AI_DDL_H
00002 #define PSANA_GSC16AI_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 Gsc16ai {
00013
00014
00015
00016
00017
00018
00019
00020 class ConfigV1 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_Gsc16aiConfig };
00023 enum { Version = 1 };
00024 enum { LowestChannel = 0 };
00025 enum { HighestChannel = 15 };
00026 enum { LowestFps = 1 };
00027 enum { HighestFps = 120 };
00028 enum InputMode {
00029 InputMode_Differential = 0,
00030 InputMode_Zero = 1,
00031 InputMode_Vref = 2,
00032 };
00033 enum VoltageRange {
00034 VoltageRange_10V = 0,
00035 VoltageRange_5V,
00036 VoltageRange_2_5V,
00037 };
00038 enum TriggerMode {
00039 TriggerMode_ExtPos = 0,
00040 TriggerMode_ExtNeg,
00041 TriggerMode_IntClk,
00042 };
00043 enum DataFormat {
00044 DataFormat_TwosComplement = 0,
00045 DataFormat_OffsetBinary,
00046 };
00047 virtual ~ConfigV1();
00048 virtual Gsc16ai::ConfigV1::VoltageRange voltageRange() const = 0;
00049 virtual uint16_t firstChan() const = 0;
00050 virtual uint16_t lastChan() const = 0;
00051 virtual Gsc16ai::ConfigV1::InputMode inputMode() const = 0;
00052 virtual Gsc16ai::ConfigV1::TriggerMode triggerMode() const = 0;
00053 virtual Gsc16ai::ConfigV1::DataFormat dataFormat() const = 0;
00054 virtual uint16_t fps() const = 0;
00055 virtual uint8_t autocalibEnable() const = 0;
00056 virtual uint8_t timeTagEnable() const = 0;
00057 virtual uint16_t numChannels() const = 0;
00058 };
00059 std::ostream& operator<<(std::ostream& str, Gsc16ai::ConfigV1::InputMode enval);
00060 std::ostream& operator<<(std::ostream& str, Gsc16ai::ConfigV1::VoltageRange enval);
00061 std::ostream& operator<<(std::ostream& str, Gsc16ai::ConfigV1::TriggerMode enval);
00062 std::ostream& operator<<(std::ostream& str, Gsc16ai::ConfigV1::DataFormat enval);
00063
00064
00065
00066
00067
00068
00069 class ConfigV1;
00070
00071 class DataV1 {
00072 public:
00073 enum { TypeId = Pds::TypeId::Id_Gsc16aiData };
00074 enum { Version = 1 };
00075 virtual ~DataV1();
00076 virtual ndarray<const uint16_t, 1> timestamp() const = 0;
00077 virtual ndarray<const uint16_t, 1> channelValue() const = 0;
00078 };
00079 }
00080 }
00081 #endif // PSANA_GSC16AI_DDL_H