#ifndef FLUXSOURCE_H #define FLUXSOURCE_H #include "flags.h" class CwfFluxSourceProto; class EraseFluxSourceProto; class Fl2FluxSourceProto; class FluxSourceProto; class FluxSpec; class Fluxmap; class HardwareFluxSourceProto; class KryofluxFluxSourceProto; class ScpFluxSourceProto; class TestPatternFluxSourceProto; class FluxSource { public: virtual ~FluxSource() {} private: static std::unique_ptr createCwfFluxSource(const CwfFluxSourceProto& config); static std::unique_ptr createEraseFluxSource(const EraseFluxSourceProto& config); static std::unique_ptr createFl2FluxSource(const Fl2FluxSourceProto& config); static std::unique_ptr createHardwareFluxSource(const HardwareFluxSourceProto& config); static std::unique_ptr createKryofluxFluxSource(const KryofluxFluxSourceProto& config); static std::unique_ptr createScpFluxSource(const ScpFluxSourceProto& config); static std::unique_ptr createSqliteFluxSource(const std::string& filename); static std::unique_ptr createTestPatternFluxSource(const TestPatternFluxSourceProto& config); public: static std::unique_ptr create(const FluxSourceProto& spec); static void updateConfigForFilename(FluxSourceProto* proto, const std::string& filename); public: virtual std::unique_ptr readFlux(int track, int side) = 0; virtual void recalibrate() {} virtual bool retryable() { return false; } }; #endif