//*******************************************************************************
//* Copyright (c) 2008-2014 Synchrotron SOLEIL
//* All rights reserved. This program and the accompanying materials
//* are made available under the terms of the GNU Lesser Public License v3
//* which accompanies this distribution, and is available at
//* http://www.gnu.org/licenses/lgpl.html
//******************************************************************************
//=============================================================================
//
// file :         AcquireWaveformLecroyClass.h
//
// description :  Include for the AcquireWaveformLecroyClass root class.
//                This class is represents the singleton class for
//                the AcquireWaveformLecroy device class.
//                It contains all properties and methods which the 
//                AcquireWaveformLecroy requires only once e.g. the commands.
//			
// project :      TANGO Device Server
//
// $Author: syldup $
//
// $Revision: 1.8 $
//
// $Log: not supported by cvs2svn $
// Revision 1.7  2008/02/28 09:02:05  xavela
// xavier :
// StateMachine file added !! (oups)
//
// Revision 1.5  2004/10/18 13:17:49  xavela
// xavier : add an attr waveArray2.
// Sorts attr in expert and operator view with Pogo.
// Inconsistencies removed.
//
// Revision 1.4  2004/10/07 09:21:18  xavela
// xavier : no cout now.
//
// Revision 1.3  2004/10/05 13:11:11  xavela
// Xavier : previous commit failed.
//
// Revision 1.2  2004/10/05 13:09:10  xavela
// Xavier : memory allocation in read_attr_hardware() method.
// calculation of offset of the begining of the struct, which contains the context of the waveform acquisition, in the received block data.
//
//
// copyleft :     Synchrotron SOLEIL
//                L'Orme des Merisiers
//                Saint-Aubin - BP 48
//=============================================================================
//
//  		This file is generated by POGO
//	(Program Obviously used to Generate tango Object)
//
//         (c) - Software Engineering Group - ESRF
//=============================================================================

#ifndef _ACQUIREWAVEFORMLECROYCLASS_H
#define _ACQUIREWAVEFORMLECROYCLASS_H

// #include <tango.h>
#include <AcquireWaveformLecroy.h>


namespace AcquireWaveformLecroy_ns
{
//=====================================
//	Define classes for attributes
//=====================================
class rawWaveformDataAttrib: public Tango::SpectrumAttr
{
public:
	rawWaveformDataAttrib():SpectrumAttr("rawWaveformData", Tango::DEV_SHORT, Tango::READ, 1500000) {};
	~rawWaveformDataAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_rawWaveformData(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_rawWaveformData_allowed(ty);}
};

class verticalScaledDataAttrib: public Tango::SpectrumAttr
{
public:
	verticalScaledDataAttrib():SpectrumAttr("verticalScaledData", Tango::DEV_DOUBLE, Tango::READ, 1500000) {};
	~verticalScaledDataAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_verticalScaledData(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_verticalScaledData_allowed(ty);}
};

class waveArray1Attrib: public Tango::Attr
{
public:
	waveArray1Attrib():Attr("waveArray1", Tango::DEV_LONG, Tango::READ) {};
	~waveArray1Attrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_waveArray1(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_waveArray1_allowed(ty);}
};

class waveArray2Attrib: public Tango::Attr
{
public:
	waveArray2Attrib():Attr("waveArray2", Tango::DEV_LONG, Tango::READ) {};
	~waveArray2Attrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_waveArray2(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_waveArray2_allowed(ty);}
};

class waveArrayCountAttrib: public Tango::Attr
{
public:
	waveArrayCountAttrib():Attr("waveArrayCount", Tango::DEV_LONG, Tango::READ) {};
	~waveArrayCountAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_waveArrayCount(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_waveArrayCount_allowed(ty);}
};

class nominalBitsAttrib: public Tango::Attr
{
public:
	nominalBitsAttrib():Attr("nominalBits", Tango::DEV_SHORT, Tango::READ) {};
	~nominalBitsAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_nominalBits(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_nominalBits_allowed(ty);}
};

class horizontalIntervalAttrib: public Tango::Attr
{
public:
	horizontalIntervalAttrib():Attr("horizontalInterval", Tango::DEV_DOUBLE, Tango::READ) {};
	~horizontalIntervalAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_horizontalInterval(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_horizontalInterval_allowed(ty);}
};

class horizontalOffsetAttrib: public Tango::Attr
{
public:
	horizontalOffsetAttrib():Attr("horizontalOffset", Tango::DEV_DOUBLE, Tango::READ) {};
	~horizontalOffsetAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_horizontalOffset(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_horizontalOffset_allowed(ty);}
};

class verticalGainAttrib: public Tango::Attr
{
public:
	verticalGainAttrib():Attr("verticalGain", Tango::DEV_DOUBLE, Tango::READ) {};
	~verticalGainAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_verticalGain(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_verticalGain_allowed(ty);}
};

class verticalOffsetAttrib: public Tango::Attr
{
public:
	verticalOffsetAttrib():Attr("verticalOffset", Tango::DEV_DOUBLE, Tango::READ) {};
	~verticalOffsetAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_verticalOffset(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_verticalOffset_allowed(ty);}
};

class triggerTimeAttrib: public Tango::Attr
{
public:
	triggerTimeAttrib():Attr("triggerTime", Tango::DEV_STRING, Tango::READ) {};
	~triggerTimeAttrib() {};
	
	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
	{(static_cast<AcquireWaveformLecroy *>(dev))->read_triggerTime(att);}
	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_triggerTime_allowed(ty);}
};

//=========================================
//	Define classes for commands
//=========================================
class WriteReadCmd : public Tango::Command
{
public:
	WriteReadCmd(const char   *name,
	               Tango::CmdArgType in,
				   Tango::CmdArgType out,
				   const char        *in_desc,
				   const char        *out_desc,
				   Tango::DispLevel  level)
	:Command(name,in,out,in_desc,out_desc, level)	{};

	WriteReadCmd(const char   *name,
	               Tango::CmdArgType in,
				   Tango::CmdArgType out)
	:Command(name,in,out)	{};
	~WriteReadCmd() {};
	
	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
	{return (static_cast<AcquireWaveformLecroy *>(dev))->is_WriteRead_allowed(any);}
};



//
// The AcquireWaveformLecroyClass singleton definition
//

class
#ifdef WIN32
	__declspec(dllexport)
#endif
	AcquireWaveformLecroyClass : public Tango::DeviceClass
{
public:
//	properties member data

//	add your own data members here
//------------------------------------

public:
	Tango::DbData	cl_prop;
	Tango::DbData	cl_def_prop;
	Tango::DbData	dev_def_prop;

//	Method prototypes
	static AcquireWaveformLecroyClass *init(const char *);
	static AcquireWaveformLecroyClass *instance();
	~AcquireWaveformLecroyClass();
	Tango::DbDatum	get_class_property(string &);
	Tango::DbDatum	get_default_device_property(string &);
	Tango::DbDatum	get_default_class_property(string &);
	
protected:
	AcquireWaveformLecroyClass(string &);
	static AcquireWaveformLecroyClass *_instance;
	void command_factory();
	void get_class_property();
	void attribute_factory(vector<Tango::Attr *> &);
	void write_class_property();
	void set_default_property();
	string get_cvstag();
	string get_cvsroot();

private:
	void device_factory(const Tango::DevVarStringArray *);
};


}	//	namespace AcquireWaveformLecroy_ns

#endif // _ACQUIREWAVEFORMLECROYCLASS_H