/* **************************************************************************

 Author: Achim Gaedke
 Created: June 2004

****************************************************************************/
#ifndef FREQUGEN_H
#define FREQUGEN_H
#include "core/states.h"
#include "core/core_exception.h"

/**
   \addtogroup basedrivers
   @{
*/

/**
 * frequency generator exception
 */
class frequ_exception: public RecoverableException
{
public:
    explicit frequ_exception(const std::string& msg) throw (): RecoverableException(msg) {}
    explicit frequ_exception(const char* msg) throw (): RecoverableException(msg) {}
    virtual ~frequ_exception() throw () {}
protected:
    virtual const std::string prefix() const { return "ERROR (frequ_exception): "; }
};


/**
   \brief the frequency generator can set the reference frequency and pulse output
   also phase shifts and different channels are possible
 */
class frequgen {
 protected:
  /** reference frequency output */
  double frequency;
  /**
     default phase offset of the frequency generator
   */
  double phase;
  /**
     should move to frequgen
   */
  int pulse_channel;
  /**
     should move to frequgen
   */
  int gate_channel;
  /**
     should move to frequgen
   */
  double gate_time;
 public:
  virtual void set_frequency(double f)=0;
  virtual void set_frequency(state& experiment)=0;
  virtual ~frequgen() {}
};

/**
   @}
*/
#endif
