From 244cb9e29a265159722a4c33cf98c023f661d7be Mon Sep 17 00:00:00 2001
From: Claudio Scafuri <claudio.scafuri@elettra.eu>
Date: Tue, 20 Oct 2020 15:49:15 +0200
Subject: [PATCH] first import from cvs repo

---
 .gitignore                       |  21 +
 SpectrumAnalyzer.h               | 621 ++++++++++++++++++++++
 SpectrumAnalyzerClass.cpp        | 844 ++++++++++++++++++++++++++++++
 SpectrumAnalyzerClass.h          | 840 ++++++++++++++++++++++++++++++
 SpectrumAnalyzerStateMachine.cpp | 852 +++++++++++++++++++++++++++++++
 doc_html/Attributes.html         | 148 ++++++
 doc_html/Description.html        |  61 +++
 doc_html/DevCommands.html        | 385 ++++++++++++++
 doc_html/DevCommandsFrame.html   |  19 +
 doc_html/DevCommandsList.html    |  36 ++
 doc_html/DevCommandsTable.html   | 137 +++++
 doc_html/Properties.html         |  63 +++
 doc_html/TangoDevStates.html     |  84 +++
 doc_html/index.html              |  87 ++++
 14 files changed, 4198 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 SpectrumAnalyzer.h
 create mode 100644 SpectrumAnalyzerClass.cpp
 create mode 100644 SpectrumAnalyzerClass.h
 create mode 100644 SpectrumAnalyzerStateMachine.cpp
 create mode 100644 doc_html/Attributes.html
 create mode 100644 doc_html/Description.html
 create mode 100644 doc_html/DevCommands.html
 create mode 100644 doc_html/DevCommandsFrame.html
 create mode 100644 doc_html/DevCommandsList.html
 create mode 100644 doc_html/DevCommandsTable.html
 create mode 100644 doc_html/Properties.html
 create mode 100644 doc_html/TangoDevStates.html
 create mode 100644 doc_html/index.html

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4b0db35
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+.pydevproject
+.project
+.cproject
+.settings
+obj
+bin
+core*
+*~
+*.pyc
+*.so
+*.so*
+.pylintrc
+.metadata
+.idea
+.cvsignore
+.nse_depinfo
+software
+oldsrc
+CVS
+Make*
+main.cpp
diff --git a/SpectrumAnalyzer.h b/SpectrumAnalyzer.h
new file mode 100644
index 0000000..d137c7b
--- /dev/null
+++ b/SpectrumAnalyzer.h
@@ -0,0 +1,621 @@
+//=============================================================================
+//
+// file :        SpectrumAnalyzer.h
+//
+// description : Include for the SpectrumAnalyzer class.
+//
+// project :	SpectrumAnalyzer
+//
+// $Author:  Giacomo Strangolino
+//
+// $Revision:  0.9 January, 26th, 2006.
+//
+// $Log: SpectrumAnalyzer.h,v $
+// Revision 1.1  2008/04/23 12:27:46  claudio
+// first import
+//
+//
+// copyleft :    European Synchrotron Radiation Facility
+//               BP 220, Grenoble 38043
+//               FRANCE
+//
+//=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+#ifndef _SPECTRUMANALYZER_H
+#define _SPECTRUMANALYZER_H
+
+#include <tango.h>
+//using namespace Tango;
+
+/**
+ * @author	$Author: claudio $
+ * @version	$Revision: 1.1 $
+ */
+
+ //	Add your own constants definitions here.
+ //-----------------------------------------------
+
+
+namespace SpectrumAnalyzer_ns
+{
+
+/**
+ * Class Description:
+ * Class for managing spectrum analyzer devices
+ */
+
+/*
+ *	Device States Description:
+ *	Tango::ON :	Device is online
+ *	Tango::OFF :	Device is offline
+ *	Tango::FAULT :	Device not working
+ *	Tango::DISABLE :	accepts commands only from frontal panel. Remote control disabled.
+ *	Tango::UNKNOWN :	Device is in unknown state when GPIB is not responding
+ */
+
+
+class SpectrumAnalyzer: public Tango::Device_3Impl
+{
+public :
+	//	Add your own data members here
+	//-----------------------------------------
+
+
+	//	Here is the Start of the automatic code generation part
+	//-------------------------------------------------------------	
+/**
+ *	@name attributes
+ *	Attributes member data.
+ */
+//@{
+		Tango::DevDouble	*attr_Span_read;
+		Tango::DevDouble	attr_Span_write;
+		Tango::DevDouble	*attr_CenterFrequency_read;
+		Tango::DevDouble	attr_CenterFrequency_write;
+		Tango::DevDouble	*attr_MarkerX_read;
+		Tango::DevDouble	*attr_MarkerY_read;
+		Tango::DevString	*attr_ErrorPolling_read;
+		Tango::DevDouble	*attr_Attenuation_read;
+		Tango::DevDouble	attr_Attenuation_write;
+		Tango::DevString	*attr_DetectorType_read;
+		Tango::DevString	attr_DetectorType_write;
+		Tango::DevDouble	*attr_StartFrequency_read;
+		Tango::DevDouble	attr_StartFrequency_write;
+		Tango::DevDouble	*attr_StopFrequency_read;
+		Tango::DevDouble	attr_StopFrequency_write;
+		Tango::DevDouble	*attr_FreqOffset_read;
+		Tango::DevDouble	attr_FreqOffset_write;
+		Tango::DevDouble	*attr_ReferenceLevel_read;
+		Tango::DevDouble	attr_ReferenceLevel_write;
+		Tango::DevDouble	*attr_StartStop_read;
+		Tango::DevDouble	attr_StartStop_write;
+		Tango::DevDouble	*attr_TraceReal32_read;
+		Tango::DevLong	*attr_TraceInt32_read;
+		Tango::DevShort	*attr_OPC_read;
+		Tango::DevShort	attr_OPC_write;
+		Tango::DevDouble	*attr_ResolutionBandwidth_read;
+		Tango::DevDouble	attr_ResolutionBandwidth_write;
+		Tango::DevDouble	*attr_PeakThreshold_read;
+		Tango::DevDouble	attr_PeakThreshold_write;
+		Tango::DevDouble	*attr_PeakExcursion_read;
+		Tango::DevDouble	attr_PeakExcursion_write;
+		Tango::DevDouble	*attr_GetSignalPeaks_read;
+		Tango::DevDouble	*attr_Fs_read;
+		Tango::DevDouble	attr_Fs_write;
+		Tango::DevDouble	*attr_WindowFs_read;
+		Tango::DevDouble	attr_WindowFs_write;
+		Tango::DevDouble	*attr_Window_read;
+		Tango::DevDouble	attr_Window_write;
+		Tango::DevLong	*attr_NumberOfSweeps_read;
+		Tango::DevLong	attr_NumberOfSweeps_write;
+//@}
+
+/**
+ *	@name Device properties
+ *	Device properties member data.
+ */
+//@{
+//@}
+
+/**@name Constructors
+ * Miscellaneous constructors */
+//@{
+/**
+ * Constructs a newly allocated Command object.
+ *
+ *	@param cl	Class.
+ *	@param s 	Device Name
+ */
+	SpectrumAnalyzer(Tango::DeviceClass *cl,string &s):Device_3Impl(cl,s) {};
+/**
+ * Constructs a newly allocated Command object.
+ *
+ *	@param cl	Class.
+ *	@param s 	Device Name
+ */
+	SpectrumAnalyzer(Tango::DeviceClass *cl,const char *s):Device_3Impl(cl,s) {};
+/**
+ * Constructs a newly allocated Command object.
+ *
+ *	@param cl	Class.
+ *	@param s 	Device name
+ *	@param d	Device description.
+ */
+	SpectrumAnalyzer(Tango::DeviceClass *cl,const char *s,const char *d):Device_3Impl(cl,s,d) {};
+//@}
+
+/**
+ * @name SpectrumAnalyzer methods prototypes
+ */
+
+//@{
+/**
+ *	Hardware acquisition for attributes.
+ */
+	virtual void read_attr_hardware(vector<long> &attr_list) = 0;
+/**
+ *	Extract real attribute values for Span acquisition result.
+ */
+	virtual void read_Span(Tango::Attribute &attr) = 0;
+/**
+ *	Write Span attribute values to hardware.
+ */
+	virtual void write_Span(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for CenterFrequency acquisition result.
+ */
+	virtual void read_CenterFrequency(Tango::Attribute &attr) = 0;
+/**
+ *	Write CenterFrequency attribute values to hardware.
+ */
+	virtual void write_CenterFrequency(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for MarkerX acquisition result.
+ */
+	virtual void read_MarkerX(Tango::Attribute &attr) = 0;
+/**
+ *	Extract real attribute values for MarkerY acquisition result.
+ */
+	virtual void read_MarkerY(Tango::Attribute &attr) = 0;
+/**
+ *	Extract real attribute values for ErrorPolling acquisition result.
+ */
+	virtual void read_ErrorPolling(Tango::Attribute &attr) = 0;
+/**
+ *	Extract real attribute values for Attenuation acquisition result.
+ */
+	virtual void read_Attenuation(Tango::Attribute &attr) = 0;
+/**
+ *	Write Attenuation attribute values to hardware.
+ */
+	virtual void write_Attenuation(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for DetectorType acquisition result.
+ */
+	virtual void read_DetectorType(Tango::Attribute &attr) = 0;
+/**
+ *	Write DetectorType attribute values to hardware.
+ */
+	virtual void write_DetectorType(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for StartFrequency acquisition result.
+ */
+	virtual void read_StartFrequency(Tango::Attribute &attr) = 0;
+/**
+ *	Write StartFrequency attribute values to hardware.
+ */
+	virtual void write_StartFrequency(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for StopFrequency acquisition result.
+ */
+	virtual void read_StopFrequency(Tango::Attribute &attr) = 0;
+/**
+ *	Write StopFrequency attribute values to hardware.
+ */
+	virtual void write_StopFrequency(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for FreqOffset acquisition result.
+ */
+	virtual void read_FreqOffset(Tango::Attribute &attr) = 0;
+/**
+ *	Write FreqOffset attribute values to hardware.
+ */
+	virtual void write_FreqOffset(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for ReferenceLevel acquisition result.
+ */
+	virtual void read_ReferenceLevel(Tango::Attribute &attr) = 0;
+/**
+ *	Write ReferenceLevel attribute values to hardware.
+ */
+	virtual void write_ReferenceLevel(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for StartStop acquisition result.
+ */
+	virtual void read_StartStop(Tango::Attribute &attr) = 0;
+/**
+ *	Write StartStop attribute values to hardware.
+ */
+	virtual void write_StartStop(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for TraceReal32 acquisition result.
+ */
+	virtual void read_TraceReal32(Tango::Attribute &attr) = 0;
+/**
+ *	Extract real attribute values for TraceInt32 acquisition result.
+ */
+	virtual void read_TraceInt32(Tango::Attribute &attr) = 0;
+/**
+ *	Extract real attribute values for OPC acquisition result.
+ */
+	virtual void read_OPC(Tango::Attribute &attr) = 0;
+/**
+ *	Write OPC attribute values to hardware.
+ */
+	virtual void write_OPC(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for ResolutionBandwidth acquisition result.
+ */
+	virtual void read_ResolutionBandwidth(Tango::Attribute &attr) = 0;
+/**
+ *	Write ResolutionBandwidth attribute values to hardware.
+ */
+	virtual void write_ResolutionBandwidth(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for PeakThreshold acquisition result.
+ */
+	virtual void read_PeakThreshold(Tango::Attribute &attr) = 0;
+/**
+ *	Write PeakThreshold attribute values to hardware.
+ */
+	virtual void write_PeakThreshold(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for PeakExcursion acquisition result.
+ */
+	virtual void read_PeakExcursion(Tango::Attribute &attr) = 0;
+/**
+ *	Write PeakExcursion attribute values to hardware.
+ */
+	virtual void write_PeakExcursion(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for GetSignalPeaks acquisition result.
+ */
+	virtual void read_GetSignalPeaks(Tango::Attribute &attr) = 0;
+/**
+ *	Extract real attribute values for Fs acquisition result.
+ */
+	virtual void read_Fs(Tango::Attribute &attr) = 0;
+/**
+ *	Write Fs attribute values to hardware.
+ */
+	virtual void write_Fs(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for WindowFs acquisition result.
+ */
+	virtual void read_WindowFs(Tango::Attribute &attr) = 0;
+/**
+ *	Write WindowFs attribute values to hardware.
+ */
+	virtual void write_WindowFs(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for Window acquisition result.
+ */
+	virtual void read_Window(Tango::Attribute &attr) = 0;
+/**
+ *	Write Window attribute values to hardware.
+ */
+	virtual void write_Window(Tango::WAttribute &attr) = 0;
+/**
+ *	Extract real attribute values for NumberOfSweeps acquisition result.
+ */
+	virtual void read_NumberOfSweeps(Tango::Attribute &attr) = 0;
+/**
+ *	Write NumberOfSweeps attribute values to hardware.
+ */
+	virtual void write_NumberOfSweeps(Tango::WAttribute &attr) = 0;
+/**
+ *	Read/Write allowed for Span attribute.
+ */
+	virtual bool is_Span_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for CenterFrequency attribute.
+ */
+	virtual bool is_CenterFrequency_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for MarkerX attribute.
+ */
+	virtual bool is_MarkerX_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for MarkerY attribute.
+ */
+	virtual bool is_MarkerY_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for ErrorPolling attribute.
+ */
+	virtual bool is_ErrorPolling_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for Attenuation attribute.
+ */
+	virtual bool is_Attenuation_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for DetectorType attribute.
+ */
+	virtual bool is_DetectorType_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for StartFrequency attribute.
+ */
+	virtual bool is_StartFrequency_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for StopFrequency attribute.
+ */
+	virtual bool is_StopFrequency_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for FreqOffset attribute.
+ */
+	virtual bool is_FreqOffset_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for ReferenceLevel attribute.
+ */
+	virtual bool is_ReferenceLevel_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for StartStop attribute.
+ */
+	virtual bool is_StartStop_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for TraceReal32 attribute.
+ */
+	virtual bool is_TraceReal32_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for TraceInt32 attribute.
+ */
+	virtual bool is_TraceInt32_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for OPC attribute.
+ */
+	virtual bool is_OPC_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for ResolutionBandwidth attribute.
+ */
+	virtual bool is_ResolutionBandwidth_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for PeakThreshold attribute.
+ */
+	virtual bool is_PeakThreshold_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for PeakExcursion attribute.
+ */
+	virtual bool is_PeakExcursion_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for GetSignalPeaks attribute.
+ */
+	virtual bool is_GetSignalPeaks_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for Fs attribute.
+ */
+	virtual bool is_Fs_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for WindowFs attribute.
+ */
+	virtual bool is_WindowFs_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for Window attribute.
+ */
+	virtual bool is_Window_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Read/Write allowed for NumberOfSweeps attribute.
+ */
+	virtual bool is_NumberOfSweeps_allowed(Tango::AttReqType type){ return true; };
+/**
+ *	Execution allowed for Reset command.
+ */
+	virtual bool is_Reset_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for ClearStatus command.
+ */
+	virtual bool is_ClearStatus_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for Remote command.
+ */
+	virtual bool is_Remote_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for Local command.
+ */
+	virtual bool is_Local_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for GetPeak command.
+ */
+	virtual bool is_GetPeak_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for SetSingleSweep command.
+ */
+	virtual bool is_SetSingleSweep_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for ChangePowUnits command.
+ */
+	virtual bool is_ChangePowUnits_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for GetErrorInfo command.
+ */
+	virtual bool is_GetErrorInfo_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for GetMin command.
+ */
+	virtual bool is_GetMin_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for SetContinuousSweep command.
+ */
+	virtual bool is_SetContinuousSweep_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for RestartMeasurement command.
+ */
+	virtual bool is_RestartMeasurement_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for SetAutoAttenuation command.
+ */
+	virtual bool is_SetAutoAttenuation_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for GetAutoAttenuation command.
+ */
+	virtual bool is_GetAutoAttenuation_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for SetAsciiData command.
+ */
+	virtual bool is_SetAsciiData_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for SetINT32Data command.
+ */
+	virtual bool is_SetINT32Data_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for SetReal32Data command.
+ */
+	virtual bool is_SetReal32Data_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for GetDataFormat command.
+ */
+	virtual bool is_GetDataFormat_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for SaveData command.
+ */
+	virtual bool is_SaveData_allowed(const CORBA::Any &any){ return true; };
+/**
+ *	Execution allowed for PrintData command.
+ */
+	virtual bool is_PrintData_allowed(const CORBA::Any &any){ return true; };
+/**
+ * Resets instrument
+ *	@exception DevFailed
+ */
+	virtual void	reset() = 0;
+/**
+ * Clears all data in instrument. IEEE common command.
+ *	See specific instrument documentation for details.
+ *	@exception DevFailed
+ */
+	virtual void	clear_status() = 0;
+/**
+ * Remote control enabled.
+ *	@exception DevFailed
+ */
+	virtual void	remote() = 0;
+/**
+ * Disables remote control and enables front panel instrument interaction.
+ *	@exception DevFailed
+ */
+	virtual void	local() = 0;
+/**
+ * Sets the marker to the maximum peak. Then one can read X and Y positions of the just
+ *	placed marker.
+ *	@exception DevFailed
+ */
+	virtual void	get_peak() = 0;
+/**
+ * Sets the analyzer to the single sweep mode.
+ *	See specific instrument documentation for details.
+ *	IVI SpecAn base attribute.
+ *	@exception DevFailed
+ */
+	virtual void	set_single_sweep() = 0;
+/**
+ * Changes the power units of measure. Values allowed: DBM, DBMV, DBUV, W, V.
+ *	IVI SpecAn base attribute.
+ *	See specific instrument documentation for details.
+ *	@param	argin	Set the power units of measure: DBM, DBMV, DBUV, W, V
+ *	@exception DevFailed
+ */
+	virtual void	change_pow_units(Tango::DevString) = 0;
+/**
+ * Queries the earliest entry to the error queue and then deletes that entry.
+ *	@return	The string represents the earliest entry to the error queue.
+ *	@exception DevFailed
+ */
+	virtual Tango::DevString	get_error_info() = 0;
+/**
+ * Sets marker to the minimum amplitude value in current measure. Then one can read
+ *	the X and Y values querying the MarkerX and MarkerY attributes.
+ *	@exception DevFailed
+ */
+	virtual void	get_min() = 0;
+/**
+ * The trigger system is continuously initiated.
+ *	See specific instrument documentation for details.
+ *	IVI SpecAn base attribute 'Sweep Mode Continuous'.
+ *	@exception DevFailed
+ */
+	virtual void	set_continuous_sweep() = 0;
+/**
+ * Restarts the measurement.
+ *	In instrument specific documentation one can find some details about the meaning of this
+ *	command.
+ *	@exception DevFailed
+ */
+	virtual void	restart_measurement() = 0;
+/**
+ * Enables or disables auto attenuation.
+ *	IVI SpecAn base attribute.
+ *	@param	argin	1 Enables auto attenuation, 0 disables it.
+ *	@exception DevFailed
+ */
+	virtual void	set_auto_attenuation(Tango::DevBoolean) = 0;
+/**
+ * Returns auto attenuation status: enabled or disabled.
+ *	Auto attenuation is an IVI SpecAn base attribute.
+ *	@return	! if auto attenuation is enabled, 0 if disabled
+ *	@exception DevFailed
+ */
+	virtual Tango::DevBoolean	get_auto_attenuation() = 0;
+/**
+ * Sets the format of the output data of a measurement to ASCII.
+ *	@exception DevFailed
+ */
+	virtual void	set_ascii_data() = 0;
+/**
+ * Sets the format of data to INT 32 (fastest). Trace data are in mdBm.
+ *	@exception DevFailed
+ */
+	virtual void	set_int32_data() = 0;
+/**
+ * Sets the format of data to REAL 32: real values in amplitude units, in a definite length block.
+ *	@exception DevFailed
+ */
+	virtual void	set_real32_data() = 0;
+/**
+ * Returns the format of the data in trace.
+ *	@return	Returns the format of the data in trace
+ *	@exception DevFailed
+ */
+	virtual Tango::DevString	get_data_format() = 0;
+/**
+ * Save trace data to the specified file.
+ *	@param	argin	Name of the file to which you want to save trace data.
+ *	@exception DevFailed
+ */
+	virtual void	save_data(Tango::DevString) = 0;
+/**
+ * Specifying a filename containing an instrument data trace, data in trace is printed out on a
+ *	string.
+ *	@param	argin	Input data filename.
+ *	@return	Output in string format.
+ *	@exception DevFailed
+ */
+	virtual Tango::ConstDevString	print_data(Tango::DevString) = 0;
+
+//@}
+
+	//	Here is the end of the automatic code generation part
+	//-------------------------------------------------------------	
+
+
+
+protected :	
+	//	Add your own data members here
+	//-----------------------------------------
+};
+
+}	// namespace_ns
+
+#endif	// _SPECTRUMANALYZER_H
diff --git a/SpectrumAnalyzerClass.cpp b/SpectrumAnalyzerClass.cpp
new file mode 100644
index 0000000..ad9d001
--- /dev/null
+++ b/SpectrumAnalyzerClass.cpp
@@ -0,0 +1,844 @@
+static const char *RcsId     = "$Header: /home/cvsadm/cvsroot/AbstractClasses/SpectrumAnalyzer/SpectrumAnalyzerClass.cpp,v 1.1 2008/04/23 12:27:46 claudio Exp $";
+static const char *TagName   = "$Name:  $";
+static const char *HttpServer= "http://www.esrf.fr/computing/cs/tango/tango_doc/ds_doc/";
+//+=============================================================================
+//
+// file :        SpectrumAnalyzerClass.cpp
+//
+// description : C++ source for the SpectrumAnalyzerClass. A singleton
+//               class derived from DeviceClass. It implements the
+//               command list and all properties and methods required
+//               by the SpectrumAnalyzer once per process.
+//
+// project :     TANGO Device Server
+//
+// $Author: claudio $
+//
+// $Revision: 1.1 $
+//
+// $Log: SpectrumAnalyzerClass.cpp,v $
+// Revision 1.1  2008/04/23 12:27:46  claudio
+// first import
+//
+//
+// copyleft :   European Synchrotron Radiation Facility
+//              BP 220, Grenoble 38043
+//              FRANCE
+//
+//-=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+
+
+#include <tango.h>
+
+#include <SpectrumAnalyzer.h>
+#include <SpectrumAnalyzerClass.h>
+
+
+namespace SpectrumAnalyzer_ns
+{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//+----------------------------------------------------------------------------
+//
+// method : 		ResetClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *ResetClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "ResetClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->reset());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		ClearStatusClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *ClearStatusClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "ClearStatusClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->clear_status());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		RemoteClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *RemoteClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "RemoteClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->remote());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		LocalClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *LocalClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "LocalClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->local());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		GetPeakClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *GetPeakClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "GetPeakClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->get_peak());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetSingleSweepClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SetSingleSweepClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "SetSingleSweepClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->set_single_sweep());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		ChangePowUnitsClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *ChangePowUnitsClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "ChangePowUnitsClass::execute(): arrived" << endl;
+
+	Tango::DevString	argin;
+	extract(in_any, argin);
+
+	((static_cast<SpectrumAnalyzer *>(device))->change_pow_units(argin));
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		GetErrorInfoClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *GetErrorInfoClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "GetErrorInfoClass::execute(): arrived" << endl;
+
+	return insert((static_cast<SpectrumAnalyzer *>(device))->get_error_info());
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		GetMinClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *GetMinClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "GetMinClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->get_min());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetContinuousSweepClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SetContinuousSweepClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "SetContinuousSweepClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->set_continuous_sweep());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		RestartMeasurementClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *RestartMeasurementClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "RestartMeasurementClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->restart_measurement());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetAutoAttenuationClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SetAutoAttenuationClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "SetAutoAttenuationClass::execute(): arrived" << endl;
+
+	Tango::DevBoolean	argin;
+	extract(in_any, argin);
+
+	((static_cast<SpectrumAnalyzer *>(device))->set_auto_attenuation(argin));
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		GetAutoAttenuationClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *GetAutoAttenuationClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "GetAutoAttenuationClass::execute(): arrived" << endl;
+
+	return insert((static_cast<SpectrumAnalyzer *>(device))->get_auto_attenuation());
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetAsciiDataClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SetAsciiDataClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "SetAsciiDataClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->set_ascii_data());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetINT32DataClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SetINT32DataClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "SetINT32DataClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->set_int32_data());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetReal32DataClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SetReal32DataClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "SetReal32DataClass::execute(): arrived" << endl;
+
+	((static_cast<SpectrumAnalyzer *>(device))->set_real32_data());
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		GetDataFormatClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *GetDataFormatClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "GetDataFormatClass::execute(): arrived" << endl;
+
+	return insert((static_cast<SpectrumAnalyzer *>(device))->get_data_format());
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SaveDataClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SaveDataClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "SaveDataClass::execute(): arrived" << endl;
+
+	Tango::DevString	argin;
+	extract(in_any, argin);
+
+	((static_cast<SpectrumAnalyzer *>(device))->save_data(argin));
+	return new CORBA::Any();
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		PrintDataClass::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *PrintDataClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "PrintDataClass::execute(): arrived" << endl;
+
+	Tango::DevString	argin;
+	extract(in_any, argin);
+
+	return insert((static_cast<SpectrumAnalyzer *>(device))->print_data(argin));
+}
+
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzerClass::SpectrumAnalyzerClass(string &s)
+// 
+// description : 	constructor for the SpectrumAnalyzerClass
+//
+// in : - s : The class name
+//
+//-----------------------------------------------------------------------------
+SpectrumAnalyzerClass::SpectrumAnalyzerClass(string &s):DeviceClass(s)
+{
+
+	cout2 << "Entering SpectrumAnalyzerClass constructor" << endl;
+	
+	cout2 << "Leaving SpectrumAnalyzerClass constructor" << endl;
+
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzerClass::command_factory
+// 
+// description : 	Create the command object(s) and store them in the 
+//			command list
+//
+//-----------------------------------------------------------------------------
+void SpectrumAnalyzerClass::command_factory()
+{
+	command_list.push_back(new ResetClass("Reset",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new ClearStatusClass("ClearStatus",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new RemoteClass("Remote",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new LocalClass("Local",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new GetPeakClass("GetPeak",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new SetSingleSweepClass("SetSingleSweep",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new ChangePowUnitsClass("ChangePowUnits",
+		Tango::DEV_STRING, Tango::DEV_VOID,
+		"Set the power units of measure: DBM, DBMV, DBUV, W, V",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new GetErrorInfoClass("GetErrorInfo",
+		Tango::DEV_VOID, Tango::DEV_STRING,
+		"",
+		"The string represents the earliest entry to the error queue.",
+		Tango::OPERATOR));
+	command_list.push_back(new GetMinClass("GetMin",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new SetContinuousSweepClass("SetContinuousSweep",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new RestartMeasurementClass("RestartMeasurement",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new SetAutoAttenuationClass("SetAutoAttenuation",
+		Tango::DEV_BOOLEAN, Tango::DEV_VOID,
+		"1 Enables auto attenuation, 0 disables it.",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new GetAutoAttenuationClass("GetAutoAttenuation",
+		Tango::DEV_VOID, Tango::DEV_BOOLEAN,
+		"",
+		"! if auto attenuation is enabled, 0 if disabled",
+		Tango::OPERATOR));
+	command_list.push_back(new SetAsciiDataClass("SetAsciiData",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new SetINT32DataClass("SetINT32Data",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new SetReal32DataClass("SetReal32Data",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new GetDataFormatClass("GetDataFormat",
+		Tango::DEV_VOID, Tango::DEV_STRING,
+		"",
+		"Returns the format of the data in trace",
+		Tango::OPERATOR));
+	command_list.push_back(new SaveDataClass("SaveData",
+		Tango::DEV_STRING, Tango::DEV_VOID,
+		"Name of the file to which you want to save trace data.",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new PrintDataClass("PrintData",
+		Tango::DEV_STRING, Tango::CONST_DEV_STRING,
+		"Input data filename.",
+		"Output in string format.",
+		Tango::OPERATOR));
+
+	//	add polling if any
+	for (unsigned int i=0 ; i<command_list.size(); i++)
+	{
+	}
+}
+//+----------------------------------------------------------------------------
+//	Method: SpectrumAnalyzerClass::attribute_factory(vector<Tango::Attr *> &att_list)
+//-----------------------------------------------------------------------------
+void SpectrumAnalyzerClass::attribute_factory(vector<Tango::Attr *> &att_list)
+{
+	//	Attribute : Span
+	SpanAttrib	*span = new SpanAttrib();
+	Tango::UserDefaultAttrProp	span_prop;
+	span_prop.set_label("Frequency  Span");
+	span_prop.set_unit("MHz");
+	span_prop.set_format("%6.2f");
+	span_prop.set_max_value("3000");
+	span_prop.set_min_value("0.009");
+	span_prop.set_description("Span Frequency, in MHz");
+	span->set_default_properties(span_prop);
+	att_list.push_back(span);
+
+	//	Attribute : CenterFrequency
+	CenterFrequencyAttrib	*center_frequency = new CenterFrequencyAttrib();
+	Tango::UserDefaultAttrProp	center_frequency_prop;
+	center_frequency_prop.set_label("Center Frequency");
+	center_frequency_prop.set_unit("MHz");
+	center_frequency_prop.set_max_value("3000");
+	center_frequency_prop.set_min_value("0.009");
+	center_frequency_prop.set_description("Sets or retrieves the central frequency. This is listed\nin the base IVI Spec functions.");
+	center_frequency->set_default_properties(center_frequency_prop);
+	att_list.push_back(center_frequency);
+
+	//	Attribute : MarkerX
+	MarkerXAttrib	*marker_x = new MarkerXAttrib();
+	Tango::UserDefaultAttrProp	marker_x_prop;
+	marker_x_prop.set_label("Marker at the oeak");
+	marker_x_prop.set_unit("MHz");
+	marker_x_prop.set_max_value("3000");
+	marker_x_prop.set_min_value("0.009");
+	marker_x_prop.set_description("Sets or retrieves the central frequency. This is listed\nin the base IVI Spec functions.");
+	marker_x->set_default_properties(marker_x_prop);
+	att_list.push_back(marker_x);
+
+	//	Attribute : MarkerY
+	MarkerYAttrib	*marker_y = new MarkerYAttrib();
+	Tango::UserDefaultAttrProp	marker_y_prop;
+	marker_y_prop.set_label("X-Axis point to marker");
+	marker_y_prop.set_unit("MHz");
+	marker_y_prop.set_description("The point on the y-axis corresponding to the value of the marker\nIVI Spec compliance: IviSpecAnMarker Extension Group.");
+	marker_y->set_default_properties(marker_y_prop);
+	att_list.push_back(marker_y);
+
+	//	Attribute : ErrorPolling
+	ErrorPollingAttrib	*error_polling = new ErrorPollingAttrib();
+	Tango::UserDefaultAttrProp	error_polling_prop;
+	error_polling_prop.set_label("Error polling status");
+	error_polling_prop.set_description("This function periodically polls the device and reads its status,\nsignaling malfunctioning.");
+	error_polling->set_default_properties(error_polling_prop);
+	error_polling->set_polling_period(5000);
+	att_list.push_back(error_polling);
+
+	//	Attribute : Attenuation
+	AttenuationAttrib	*attenuation = new AttenuationAttrib();
+	Tango::UserDefaultAttrProp	attenuation_prop;
+	attenuation_prop.set_label("Attenuation");
+	attenuation_prop.set_unit("dB");
+	attenuation_prop.set_standard_unit("dB");
+	attenuation_prop.set_max_value("75");
+	attenuation_prop.set_min_value("0");
+	attenuation_prop.set_description("Specifies the input attenuation (in positive dB).\nIVI Spec base attribute.");
+	attenuation->set_default_properties(attenuation_prop);
+	att_list.push_back(attenuation);
+
+	//	Attribute : DetectorType
+	DetectorTypeAttrib	*detector_type = new DetectorTypeAttrib();
+	Tango::UserDefaultAttrProp	detector_type_prop;
+	detector_type_prop.set_label("Detector type");
+	detector_type_prop.set_description("Specifies the detection method used to capture and process the signal.\nIVI SpecAn base attribute.");
+	detector_type->set_default_properties(detector_type_prop);
+	att_list.push_back(detector_type);
+
+	//	Attribute : StartFrequency
+	StartFrequencyAttrib	*start_frequency = new StartFrequencyAttrib();
+	Tango::UserDefaultAttrProp	start_frequency_prop;
+	start_frequency_prop.set_label("Frequency start");
+	start_frequency_prop.set_unit("MHz");
+	start_frequency_prop.set_standard_unit("MHz");
+	start_frequency_prop.set_max_value("3100");
+	start_frequency_prop.set_min_value("-80");
+	start_frequency_prop.set_description("Sets the start frequency. IVI SpecAn base functions.");
+	start_frequency->set_default_properties(start_frequency_prop);
+	att_list.push_back(start_frequency);
+
+	//	Attribute : StopFrequency
+	StopFrequencyAttrib	*stop_frequency = new StopFrequencyAttrib();
+	Tango::UserDefaultAttrProp	stop_frequency_prop;
+	stop_frequency_prop.set_label("Stop Frequency");
+	stop_frequency_prop.set_unit("MHz");
+	stop_frequency_prop.set_standard_unit("MHz");
+	stop_frequency_prop.set_max_value("3000");
+	stop_frequency_prop.set_description("Sets the stop frequency. IVI SpecAn base functions.");
+	stop_frequency->set_default_properties(stop_frequency_prop);
+	att_list.push_back(stop_frequency);
+
+	//	Attribute : FreqOffset
+	FreqOffsetAttrib	*freq_offset = new FreqOffsetAttrib();
+	Tango::UserDefaultAttrProp	freq_offset_prop;
+	freq_offset_prop.set_label("Frequency Offset");
+	freq_offset_prop.set_unit("MHz");
+	freq_offset_prop.set_standard_unit("MHz");
+	freq_offset_prop.set_max_value("500000000");
+	freq_offset_prop.set_min_value("-3000");
+	freq_offset_prop.set_description("Specifies the frequency offset for all frequency readouts \nsuch as center frequency, except that it does not affect \nmarker count.\nIVI SpecAn base functions.");
+	freq_offset->set_default_properties(freq_offset_prop);
+	att_list.push_back(freq_offset);
+
+	//	Attribute : ReferenceLevel
+	ReferenceLevelAttrib	*reference_level = new ReferenceLevelAttrib();
+	Tango::UserDefaultAttrProp	reference_level_prop;
+	reference_level_prop.set_label("reference Level");
+	reference_level_prop.set_standard_unit("dBm");
+	reference_level_prop.set_max_value("55");
+	reference_level_prop.set_min_value("-327.6");
+	reference_level_prop.set_description("Sets the amplitude of the reference level for the y axis.\nThis is used as reference for amplitude measurements.\nThis is typically set to a value slightly higher than the highest\nexpected signal level. The units are determined by the amplitude \nunits attribute. IVI SpecAn base attributes.");
+	reference_level->set_default_properties(reference_level_prop);
+	att_list.push_back(reference_level);
+
+	//	Attribute : StartStop
+	StartStopAttrib	*start_stop = new StartStopAttrib();
+	Tango::UserDefaultAttrProp	start_stop_prop;
+	start_stop_prop.set_label("Start and Stop Frequencies");
+	start_stop_prop.set_unit("MHz");
+	start_stop_prop.set_standard_unit("MHz");
+	start_stop_prop.set_description("Sets the start and stop frequencies. Center frequency \nwill be in the middle.");
+	start_stop->set_default_properties(start_stop_prop);
+	att_list.push_back(start_stop);
+
+	//	Attribute : TraceReal32
+	TraceReal32Attrib	*trace_real32 = new TraceReal32Attrib();
+	Tango::UserDefaultAttrProp	trace_real32_prop;
+	trace_real32_prop.set_label("Trace Float");
+	trace_real32_prop.set_unit("dBm");
+	trace_real32_prop.set_standard_unit("dBm");
+	trace_real32_prop.set_description("Vector containing the Y values corresponding to the 401 points \nof the spectrum.");
+	trace_real32->set_default_properties(trace_real32_prop);
+	att_list.push_back(trace_real32);
+
+	//	Attribute : TraceInt32
+	TraceInt32Attrib	*trace_int32 = new TraceInt32Attrib();
+	Tango::UserDefaultAttrProp	trace_int32_prop;
+	trace_int32_prop.set_label("Trace Int32");
+	trace_int32_prop.set_unit("dBm");
+	trace_int32_prop.set_standard_unit("dBm");
+	trace_int32_prop.set_description("Y values corresponding to the 401 points in X axis \nof the spectrum analyzer");
+	trace_int32->set_default_properties(trace_int32_prop);
+	att_list.push_back(trace_int32);
+
+	//	Attribute : OPC
+	OPCAttrib	*opc = new OPCAttrib();
+	Tango::UserDefaultAttrProp	opc_prop;
+	opc_prop.set_description("Operation completed command. \nSets bit 0 in the standard event status register to ");
+	opc->set_default_properties(opc_prop);
+	att_list.push_back(opc);
+
+	//	Attribute : ResolutionBandwidth
+	ResolutionBandwidthAttrib	*resolution_bandwidth = new ResolutionBandwidthAttrib();
+	Tango::UserDefaultAttrProp	resolution_bandwidth_prop;
+	resolution_bandwidth_prop.set_label("Resolution Bandwidth");
+	resolution_bandwidth_prop.set_unit("MHz");
+	resolution_bandwidth_prop.set_standard_unit("MHz");
+	resolution_bandwidth_prop.set_max_value("5");
+	resolution_bandwidth_prop.set_min_value("0.001");
+	resolution_bandwidth_prop.set_description("See specific instrument documentation.\nIVI SpecAn base attribute.");
+	resolution_bandwidth->set_default_properties(resolution_bandwidth_prop);
+	att_list.push_back(resolution_bandwidth);
+
+	//	Attribute : PeakThreshold
+	PeakThresholdAttrib	*peak_threshold = new PeakThresholdAttrib();
+	Tango::UserDefaultAttrProp	peak_threshold_prop;
+	peak_threshold_prop.set_label("Peak threshold");
+	peak_threshold_prop.set_unit("Amplitude Units");
+	peak_threshold_prop.set_description("Specifies the minimum signal level for thee analyzer's\ninternal peak identification routine to recognize a signal as\na peak. This applies to all traces and all windows.\nSee specific instrument documentation and manual for\ndetails.");
+	peak_threshold->set_default_properties(peak_threshold_prop);
+	att_list.push_back(peak_threshold);
+
+	//	Attribute : PeakExcursion
+	PeakExcursionAttrib	*peak_excursion = new PeakExcursionAttrib();
+	Tango::UserDefaultAttrProp	peak_excursion_prop;
+	peak_excursion_prop.set_label("Define Peak Excursion");
+	peak_excursion_prop.set_standard_unit("dB");
+	peak_excursion_prop.set_description("Specifies the minimum signal excursion above the threshold\nfor the internal peak identification routine to recognize\na signal as a peak .\nThe excursion is the delta power between the noise level\nand the signal peak.\nSee specific instrument documentation and manual for\ndetails.");
+	peak_excursion->set_default_properties(peak_excursion_prop);
+	att_list.push_back(peak_excursion);
+
+	//	Attribute : GetSignalPeaks
+	GetSignalPeaksAttrib	*get_signal_peaks = new GetSignalPeaksAttrib();
+	Tango::UserDefaultAttrProp	get_signal_peaks_prop;
+	get_signal_peaks_prop.set_description("Retrieves the signal peaks.");
+	get_signal_peaks->set_default_properties(get_signal_peaks_prop);
+	att_list.push_back(get_signal_peaks);
+
+	//	Attribute : Fs
+	FsAttrib	*fs = new FsAttrib();
+	Tango::UserDefaultAttrProp	fs_prop;
+	fs_prop.set_label("Synchrotron Frequency");
+	fs_prop.set_unit("kHz");
+	fs_prop.set_description("Sets/reads synchrotron frequency.\nThis is a synchrotron related functionality, it could be\nremoved from abstract class if one was interested only\nin a Spectrum Analyzer device.");
+	fs->set_default_properties(fs_prop);
+	att_list.push_back(fs);
+
+	//	Attribute : WindowFs
+	WindowFsAttrib	*window_fs = new WindowFsAttrib();
+	Tango::UserDefaultAttrProp	window_fs_prop;
+	window_fs_prop.set_label("Window around fs");
+	window_fs_prop.set_unit("kHz");
+	window_fs_prop.set_description("Window around fs in which we look for peaks.\nThis is a synchrotron related functionality, it could be\nremoved from abstract class if one was interested only\nin a Spectrum Analyzer device.");
+	window_fs->set_default_properties(window_fs_prop);
+	att_list.push_back(window_fs);
+
+	//	Attribute : Window
+	WindowAttrib	*window = new WindowAttrib();
+	att_list.push_back(window);
+
+	//	Attribute : NumberOfSweeps
+	NumberOfSweepsAttrib	*number_of_sweeps = new NumberOfSweepsAttrib();
+	Tango::UserDefaultAttrProp	number_of_sweeps_prop;
+	number_of_sweeps_prop.set_label("Number of sweeps");
+	number_of_sweeps_prop.set_description("Sets the number of measures.\nSets and reads the number of sweeps. See the related\nclass property for details. This instrument supports\nonly single and continuous sweep.\nIVI SpecAn base attribute.");
+	number_of_sweeps->set_default_properties(number_of_sweeps_prop);
+	att_list.push_back(number_of_sweeps);
+
+}
+
+}	// namespace
diff --git a/SpectrumAnalyzerClass.h b/SpectrumAnalyzerClass.h
new file mode 100644
index 0000000..1ab8014
--- /dev/null
+++ b/SpectrumAnalyzerClass.h
@@ -0,0 +1,840 @@
+//=============================================================================
+//
+// file :         SpectrumAnalyzerClass.h
+//
+// description :  Include for the SpectrumAnalyzerClass root class.
+//                This class is represents the singleton class for
+//                the SpectrumAnalyzer device class.
+//                It contains all properties and methods which the 
+//                SpectrumAnalyzer requires only once e.g. the commands.
+//			
+// project :      TANGO Device Server
+//
+// $Author: claudio $
+//
+// $Revision: 1.1 $
+//
+// $Log: SpectrumAnalyzerClass.h,v $
+// Revision 1.1  2008/04/23 12:27:46  claudio
+// first import
+//
+//
+// copyleft :     European Synchrotron Radiation Facility
+//                BP 220, Grenoble 38043
+//                FRANCE
+//
+//=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+
+#ifndef _SPECTRUMANALYZERCLASS_H
+#define _SPECTRUMANALYZERCLASS_H
+
+#include <tango.h>
+#include <SpectrumAnalyzer.h>
+#include <SpectrumAnalyzer.h>
+
+
+namespace SpectrumAnalyzer_ns
+{
+//=====================================
+//	Define classes for attributes
+//=====================================
+class NumberOfSweepsAttrib: public Tango::Attr
+{
+public:
+	NumberOfSweepsAttrib():Attr("NumberOfSweeps", Tango::DEV_LONG, Tango::READ_WRITE) {};
+	~NumberOfSweepsAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_NumberOfSweeps(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_NumberOfSweeps(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_NumberOfSweeps_allowed(ty);}
+};
+
+class WindowAttrib: public Tango::Attr
+{
+public:
+	WindowAttrib():Attr("Window", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~WindowAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_Window(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_Window(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_Window_allowed(ty);}
+};
+
+class WindowFsAttrib: public Tango::Attr
+{
+public:
+	WindowFsAttrib():Attr("WindowFs", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~WindowFsAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_WindowFs(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_WindowFs(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_WindowFs_allowed(ty);}
+};
+
+class FsAttrib: public Tango::Attr
+{
+public:
+	FsAttrib():Attr("Fs", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~FsAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_Fs(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_Fs(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_Fs_allowed(ty);}
+};
+
+class GetSignalPeaksAttrib: public Tango::SpectrumAttr
+{
+public:
+	GetSignalPeaksAttrib():SpectrumAttr("GetSignalPeaks", Tango::DEV_DOUBLE, Tango::READ, 100) {};
+	~GetSignalPeaksAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_GetSignalPeaks(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_GetSignalPeaks_allowed(ty);}
+};
+
+class PeakExcursionAttrib: public Tango::Attr
+{
+public:
+	PeakExcursionAttrib():Attr("PeakExcursion", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~PeakExcursionAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_PeakExcursion(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_PeakExcursion(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_PeakExcursion_allowed(ty);}
+};
+
+class PeakThresholdAttrib: public Tango::Attr
+{
+public:
+	PeakThresholdAttrib():Attr("PeakThreshold", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~PeakThresholdAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_PeakThreshold(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_PeakThreshold(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_PeakThreshold_allowed(ty);}
+};
+
+class ResolutionBandwidthAttrib: public Tango::Attr
+{
+public:
+	ResolutionBandwidthAttrib():Attr("ResolutionBandwidth", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~ResolutionBandwidthAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_ResolutionBandwidth(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_ResolutionBandwidth(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_ResolutionBandwidth_allowed(ty);}
+};
+
+class OPCAttrib: public Tango::Attr
+{
+public:
+	OPCAttrib():Attr("OPC", Tango::DEV_SHORT, Tango::READ_WRITE) {};
+	~OPCAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_OPC(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_OPC(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_OPC_allowed(ty);}
+};
+
+class TraceInt32Attrib: public Tango::SpectrumAttr
+{
+public:
+	TraceInt32Attrib():SpectrumAttr("TraceInt32", Tango::DEV_LONG, Tango::READ, 401) {};
+	~TraceInt32Attrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_TraceInt32(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_TraceInt32_allowed(ty);}
+};
+
+class TraceReal32Attrib: public Tango::SpectrumAttr
+{
+public:
+	TraceReal32Attrib():SpectrumAttr("TraceReal32", Tango::DEV_DOUBLE, Tango::READ, 401) {};
+	~TraceReal32Attrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_TraceReal32(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_TraceReal32_allowed(ty);}
+};
+
+class StartStopAttrib: public Tango::SpectrumAttr
+{
+public:
+	StartStopAttrib():SpectrumAttr("StartStop", Tango::DEV_DOUBLE, Tango::READ_WRITE, 2) {};
+	~StartStopAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_StartStop(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_StartStop(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_StartStop_allowed(ty);}
+};
+
+class ReferenceLevelAttrib: public Tango::Attr
+{
+public:
+	ReferenceLevelAttrib():Attr("ReferenceLevel", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~ReferenceLevelAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_ReferenceLevel(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_ReferenceLevel(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_ReferenceLevel_allowed(ty);}
+};
+
+class FreqOffsetAttrib: public Tango::Attr
+{
+public:
+	FreqOffsetAttrib():Attr("FreqOffset", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~FreqOffsetAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_FreqOffset(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_FreqOffset(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_FreqOffset_allowed(ty);}
+};
+
+class StopFrequencyAttrib: public Tango::Attr
+{
+public:
+	StopFrequencyAttrib():Attr("StopFrequency", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~StopFrequencyAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_StopFrequency(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_StopFrequency(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_StopFrequency_allowed(ty);}
+};
+
+class StartFrequencyAttrib: public Tango::Attr
+{
+public:
+	StartFrequencyAttrib():Attr("StartFrequency", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~StartFrequencyAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_StartFrequency(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_StartFrequency(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_StartFrequency_allowed(ty);}
+};
+
+class DetectorTypeAttrib: public Tango::Attr
+{
+public:
+	DetectorTypeAttrib():Attr("DetectorType", Tango::DEV_STRING, Tango::READ_WRITE) {};
+	~DetectorTypeAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_DetectorType(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_DetectorType(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_DetectorType_allowed(ty);}
+};
+
+class AttenuationAttrib: public Tango::Attr
+{
+public:
+	AttenuationAttrib():Attr("Attenuation", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~AttenuationAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_Attenuation(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_Attenuation(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_Attenuation_allowed(ty);}
+};
+
+class ErrorPollingAttrib: public Tango::Attr
+{
+public:
+	ErrorPollingAttrib():Attr("ErrorPolling", Tango::DEV_STRING, Tango::READ) {};
+	~ErrorPollingAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_ErrorPolling(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_ErrorPolling_allowed(ty);}
+};
+
+class MarkerYAttrib: public Tango::Attr
+{
+public:
+	MarkerYAttrib():Attr("MarkerY", Tango::DEV_DOUBLE, Tango::READ) {};
+	~MarkerYAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_MarkerY(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_MarkerY_allowed(ty);}
+};
+
+class MarkerXAttrib: public Tango::Attr
+{
+public:
+	MarkerXAttrib():Attr("MarkerX", Tango::DEV_DOUBLE, Tango::READ) {};
+	~MarkerXAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_MarkerX(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_MarkerX_allowed(ty);}
+};
+
+class CenterFrequencyAttrib: public Tango::Attr
+{
+public:
+	CenterFrequencyAttrib():Attr("CenterFrequency", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~CenterFrequencyAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_CenterFrequency(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_CenterFrequency(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_CenterFrequency_allowed(ty);}
+};
+
+class SpanAttrib: public Tango::Attr
+{
+public:
+	SpanAttrib():Attr("Span", Tango::DEV_DOUBLE, Tango::READ_WRITE) {};
+	~SpanAttrib() {};
+	
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->read_Span(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+	{(static_cast<SpectrumAnalyzer *>(dev))->write_Span(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+	{return (static_cast<SpectrumAnalyzer *>(dev))->is_Span_allowed(ty);}
+};
+
+//=========================================
+//	Define classes for commands
+//=========================================
+class PrintDataClass : public Tango::Command
+{
+public:
+	PrintDataClass(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)	{};
+
+	PrintDataClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~PrintDataClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_PrintData_allowed(any);}
+};
+
+
+
+class SaveDataClass : public Tango::Command
+{
+public:
+	SaveDataClass(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)	{};
+
+	SaveDataClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~SaveDataClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_SaveData_allowed(any);}
+};
+
+
+
+class GetDataFormatClass : public Tango::Command
+{
+public:
+	GetDataFormatClass(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)	{};
+
+	GetDataFormatClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~GetDataFormatClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_GetDataFormat_allowed(any);}
+};
+
+
+
+class SetReal32DataClass : public Tango::Command
+{
+public:
+	SetReal32DataClass(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)	{};
+
+	SetReal32DataClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~SetReal32DataClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_SetReal32Data_allowed(any);}
+};
+
+
+
+class SetINT32DataClass : public Tango::Command
+{
+public:
+	SetINT32DataClass(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)	{};
+
+	SetINT32DataClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~SetINT32DataClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_SetINT32Data_allowed(any);}
+};
+
+
+
+class SetAsciiDataClass : public Tango::Command
+{
+public:
+	SetAsciiDataClass(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)	{};
+
+	SetAsciiDataClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~SetAsciiDataClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_SetAsciiData_allowed(any);}
+};
+
+
+
+class GetAutoAttenuationClass : public Tango::Command
+{
+public:
+	GetAutoAttenuationClass(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)	{};
+
+	GetAutoAttenuationClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~GetAutoAttenuationClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_GetAutoAttenuation_allowed(any);}
+};
+
+
+
+class SetAutoAttenuationClass : public Tango::Command
+{
+public:
+	SetAutoAttenuationClass(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)	{};
+
+	SetAutoAttenuationClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~SetAutoAttenuationClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_SetAutoAttenuation_allowed(any);}
+};
+
+
+
+class RestartMeasurementClass : public Tango::Command
+{
+public:
+	RestartMeasurementClass(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)	{};
+
+	RestartMeasurementClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~RestartMeasurementClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_RestartMeasurement_allowed(any);}
+};
+
+
+
+class SetContinuousSweepClass : public Tango::Command
+{
+public:
+	SetContinuousSweepClass(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)	{};
+
+	SetContinuousSweepClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~SetContinuousSweepClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_SetContinuousSweep_allowed(any);}
+};
+
+
+
+class GetMinClass : public Tango::Command
+{
+public:
+	GetMinClass(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)	{};
+
+	GetMinClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~GetMinClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_GetMin_allowed(any);}
+};
+
+
+
+class GetErrorInfoClass : public Tango::Command
+{
+public:
+	GetErrorInfoClass(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)	{};
+
+	GetErrorInfoClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~GetErrorInfoClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_GetErrorInfo_allowed(any);}
+};
+
+
+
+class ChangePowUnitsClass : public Tango::Command
+{
+public:
+	ChangePowUnitsClass(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)	{};
+
+	ChangePowUnitsClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~ChangePowUnitsClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_ChangePowUnits_allowed(any);}
+};
+
+
+
+class SetSingleSweepClass : public Tango::Command
+{
+public:
+	SetSingleSweepClass(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)	{};
+
+	SetSingleSweepClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~SetSingleSweepClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_SetSingleSweep_allowed(any);}
+};
+
+
+
+class GetPeakClass : public Tango::Command
+{
+public:
+	GetPeakClass(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)	{};
+
+	GetPeakClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~GetPeakClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_GetPeak_allowed(any);}
+};
+
+
+
+class LocalClass : public Tango::Command
+{
+public:
+	LocalClass(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)	{};
+
+	LocalClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~LocalClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_Local_allowed(any);}
+};
+
+
+
+class RemoteClass : public Tango::Command
+{
+public:
+	RemoteClass(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)	{};
+
+	RemoteClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~RemoteClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_Remote_allowed(any);}
+};
+
+
+
+class ClearStatusClass : public Tango::Command
+{
+public:
+	ClearStatusClass(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)	{};
+
+	ClearStatusClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~ClearStatusClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_ClearStatus_allowed(any);}
+};
+
+
+
+class ResetClass : public Tango::Command
+{
+public:
+	ResetClass(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)	{};
+
+	ResetClass(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~ResetClass() {};
+	
+	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<SpectrumAnalyzer *>(dev))->is_Reset_allowed(any);}
+};
+
+
+
+//
+// The SpectrumAnalyzerClass singleton definition
+//
+
+class SpectrumAnalyzerClass : public Tango::DeviceClass
+{
+public:
+
+//	add your own data members here
+//------------------------------------
+
+public:
+
+protected:
+	SpectrumAnalyzerClass(string &);
+	void command_factory();
+	void attribute_factory(vector<Tango::Attr *> &);
+
+private:
+};
+
+
+}	//	namespace SpectrumAnalyzer_ns
+
+#endif // _SPECTRUMANALYZERCLASS_H
diff --git a/SpectrumAnalyzerStateMachine.cpp b/SpectrumAnalyzerStateMachine.cpp
new file mode 100644
index 0000000..6353d31
--- /dev/null
+++ b/SpectrumAnalyzerStateMachine.cpp
@@ -0,0 +1,852 @@
+static const char *RcsId = "$Header: /home/cvsadm/cvsroot/AbstractClasses/SpectrumAnalyzer/SpectrumAnalyzerStateMachine.cpp,v 1.1 2008/04/23 12:27:46 claudio Exp $";
+//+=============================================================================
+//
+// file :         SpectrumAnalyzerStateMachine.cpp
+//
+// description :  C++ source for the SpectrumAnalyzer and its alowed. 
+//                method for commands and attributes
+//
+// project :      TANGO Device Server
+//
+// $Author: claudio $
+//
+// $Revision: 1.1 $
+//
+// $Log: SpectrumAnalyzerStateMachine.cpp,v $
+// Revision 1.1  2008/04/23 12:27:46  claudio
+// first import
+//
+//
+// copyleft :     European Synchrotron Radiation Facility
+//                BP 220, Grenoble 38043
+//                FRANCE
+//
+//-=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+
+#include <tango.h>
+#include <SpectrumAnalyzer.h>
+#include <SpectrumAnalyzerClass.h>
+
+/*====================================================================
+ *	This file contains the methods to allow commands and attributes
+ * read or write execution.
+ *
+ * If you wand to add your own code, add it between 
+ * the "End/Re-Start of Generated Code" comments.
+ *
+ * If you want, you can also add your own methods.
+ *====================================================================
+ */
+
+namespace SpectrumAnalyzer_ns
+{
+
+//=================================================
+//		Attributes Allowed Methods
+//=================================================
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_Span_allowed
+// 
+// description : 	Read/Write allowed for Span attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_Span_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_CenterFrequency_allowed
+// 
+// description : 	Read/Write allowed for CenterFrequency attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_CenterFrequency_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_MarkerX_allowed
+// 
+// description : 	Read/Write allowed for MarkerX attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_MarkerX_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_MarkerY_allowed
+// 
+// description : 	Read/Write allowed for MarkerY attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_MarkerY_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_ErrorPolling_allowed
+// 
+// description : 	Read/Write allowed for ErrorPolling attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_ErrorPolling_allowed(Tango::AttReqType type)
+{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_Attenuation_allowed
+// 
+// description : 	Read/Write allowed for Attenuation attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_Attenuation_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_DetectorType_allowed
+// 
+// description : 	Read/Write allowed for DetectorType attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_DetectorType_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_StartFrequency_allowed
+// 
+// description : 	Read/Write allowed for StartFrequency attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_StartFrequency_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_StopFrequency_allowed
+// 
+// description : 	Read/Write allowed for StopFrequency attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_StopFrequency_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_FreqOffset_allowed
+// 
+// description : 	Read/Write allowed for FreqOffset attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_FreqOffset_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_ReferenceLevel_allowed
+// 
+// description : 	Read/Write allowed for ReferenceLevel attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_ReferenceLevel_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_StartStop_allowed
+// 
+// description : 	Read/Write allowed for StartStop attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_StartStop_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_TraceReal32_allowed
+// 
+// description : 	Read/Write allowed for TraceReal32 attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_TraceReal32_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_TraceInt32_allowed
+// 
+// description : 	Read/Write allowed for TraceInt32 attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_TraceInt32_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_OPC_allowed
+// 
+// description : 	Read/Write allowed for OPC attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_OPC_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_ResolutionBandwidth_allowed
+// 
+// description : 	Read/Write allowed for ResolutionBandwidth attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_ResolutionBandwidth_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_PeakThreshold_allowed
+// 
+// description : 	Read/Write allowed for PeakThreshold attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_PeakThreshold_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_PeakExcursion_allowed
+// 
+// description : 	Read/Write allowed for PeakExcursion attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_PeakExcursion_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_GetSignalPeaks_allowed
+// 
+// description : 	Read/Write allowed for GetSignalPeaks attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_GetSignalPeaks_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_Fs_allowed
+// 
+// description : 	Read/Write allowed for Fs attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_Fs_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_WindowFs_allowed
+// 
+// description : 	Read/Write allowed for WindowFs attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_WindowFs_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_Window_allowed
+// 
+// description : 	Read/Write allowed for Window attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_Window_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_NumberOfSweeps_allowed
+// 
+// description : 	Read/Write allowed for NumberOfSweeps attribute.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_NumberOfSweeps_allowed(Tango::AttReqType type)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+
+//=================================================
+//		Commands Allowed Methods
+//=================================================
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_Reset_allowed
+// 
+// description : 	Execution allowed for Reset command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_Reset_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_ClearStatus_allowed
+// 
+// description : 	Execution allowed for ClearStatus command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_ClearStatus_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_Remote_allowed
+// 
+// description : 	Execution allowed for Remote command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_Remote_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_Local_allowed
+// 
+// description : 	Execution allowed for Local command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_Local_allowed(const CORBA::Any &any)
+{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_GetPeak_allowed
+// 
+// description : 	Execution allowed for GetPeak command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_GetPeak_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_SetSingleSweep_allowed
+// 
+// description : 	Execution allowed for SetSingleSweep command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_SetSingleSweep_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_ChangePowUnits_allowed
+// 
+// description : 	Execution allowed for ChangePowUnits command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_ChangePowUnits_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_GetErrorInfo_allowed
+// 
+// description : 	Execution allowed for GetErrorInfo command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_GetErrorInfo_allowed(const CORBA::Any &any)
+{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_GetMin_allowed
+// 
+// description : 	Execution allowed for GetMin command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_GetMin_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_SetContinuousSweep_allowed
+// 
+// description : 	Execution allowed for SetContinuousSweep command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_SetContinuousSweep_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_RestartMeasurement_allowed
+// 
+// description : 	Execution allowed for RestartMeasurement command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_RestartMeasurement_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT	||
+		get_state() == Tango::DISABLE)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_SetAutoAttenuation_allowed
+// 
+// description : 	Execution allowed for SetAutoAttenuation command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_SetAutoAttenuation_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_GetAutoAttenuation_allowed
+// 
+// description : 	Execution allowed for GetAutoAttenuation command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_GetAutoAttenuation_allowed(const CORBA::Any &any)
+{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_SetAsciiData_allowed
+// 
+// description : 	Execution allowed for SetAsciiData command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_SetAsciiData_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_SetINT32Data_allowed
+// 
+// description : 	Execution allowed for SetINT32Data command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_SetINT32Data_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_SetReal32Data_allowed
+// 
+// description : 	Execution allowed for SetReal32Data command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_SetReal32Data_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_GetDataFormat_allowed
+// 
+// description : 	Execution allowed for GetDataFormat command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_GetDataFormat_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_SaveData_allowed
+// 
+// description : 	Execution allowed for SaveData command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_SaveData_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SpectrumAnalyzer::is_PrintData_allowed
+// 
+// description : 	Execution allowed for PrintData command.
+//
+//-----------------------------------------------------------------------------
+bool SpectrumAnalyzer::is_PrintData_allowed(const CORBA::Any &any)
+{
+	if (get_state() == Tango::OFF	||
+		get_state() == Tango::FAULT)
+	{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return false;
+	}
+	return true;
+}
+
+}	// namespace SpectrumAnalyzer_ns
diff --git a/doc_html/Attributes.html b/doc_html/Attributes.html
new file mode 100644
index 0000000..2c8ab1d
--- /dev/null
+++ b/doc_html/Attributes.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<TABLE BORDER="0" WIDTH="100%">
+    <TR>
+        <TD ALIGN="left">
+			<A HREF="http://www.esrf.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0></A>
+		</Td>
+        <TD ALIGN="center">
+			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0></A>
+
+		</Td>
+        <TD ALIGN="right">
+			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0></A>
+		</Td>
+    	 <Td>
+    	 <Td>
+			<H2><FONT COLOR="#7F00FF">
+			<Center><A HREF="http://www.esrf.fr/Infrastructure/Computing/tango/" TARGET="_top">
+					 TANGO </a> <Br> Device Server
+			</Center></FONT>
+    	</Td>
+    </TR>
+</TABLE>
+
+<HR WIDTH="100%"></H5>
+<Br>
+<center>
+<h1>
+SpectrumAnalyzer		<Br>
+Device Attributes Description 		<Br> <Br>
+SpectrumAnalyzer Class	<Br>
+</h1>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=4> <Font Size=+2><Center><b>Scalar Attributes</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Attribute name</b></td></Center>
+<Td><Center><b>Data Type</b></td></Center>
+<Td><Center><b>R/W Type</b></td></Center>
+<Td><Center><b>Expert</b></td></Center>
+<Tr><Td><b><Center>Span</b><Br>( Span Frequency, in MHz )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>CenterFrequency</b><Br>( Sets or retrieves the central frequency. This is listed in the base IVI Spec functions. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>MarkerX</b><Br>( Sets or retrieves the central frequency. This is listed in the base IVI Spec functions. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>MarkerY</b><Br>( The point on the y-axis corresponding to the value of the marker IVI Spec compliance: IviSpecAnMarker Extension Group. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>ErrorPolling</b><Br>( This function periodically polls the device and reads its status, signaling malfunctioning. )</Center></Td>
+<Td><Center>DEV_STRING</Center></Td><Td><Center>READ</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>Attenuation</b><Br>( Specifies the input attenuation (in positive dB). IVI Spec base attribute. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>DetectorType</b><Br>( Specifies the detection method used to capture and process the signal. IVI SpecAn base attribute. )</Center></Td>
+<Td><Center>DEV_STRING</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>StartFrequency</b><Br>( Sets the start frequency. IVI SpecAn base functions. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>StopFrequency</b><Br>( Sets the stop frequency. IVI SpecAn base functions. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>FreqOffset</b><Br>( Specifies the frequency offset for all frequency readouts  such as center frequency, except that it does not affect  marker count. IVI SpecAn base functions. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>ReferenceLevel</b><Br>( Sets the amplitude of the reference level for the y axis. This is used as reference for amplitude measurements. This is typically set to a value slightly higher than the highest expected signal level. The units are determined by the amplitude  units attribute. IVI SpecAn base attributes. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>OPC</b><Br>( Operation completed command.  Sets bit 0 in the standard event status register to  )</Center></Td>
+<Td><Center>DEV_SHORT</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>ResolutionBandwidth</b><Br>( See specific instrument documentation. IVI SpecAn base attribute. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>PeakThreshold</b><Br>( Specifies the minimum signal level for thee analyzer's internal peak identification routine to recognize a signal as a peak. This applies to all traces and all windows. See specific instrument documentation and manual for details. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>PeakExcursion</b><Br>( Specifies the minimum signal excursion above the threshold for the internal peak identification routine to recognize a signal as a peak . The excursion is the delta power between the noise level and the signal peak. See specific instrument documentation and manual for details. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>Fs</b><Br>( Sets/reads synchrotron frequency. This is a synchrotron related functionality, it could be removed from abstract class if one was interested only in a Spectrum Analyzer device. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>WindowFs</b><Br>( Window around fs in which we look for peaks. This is a synchrotron related functionality, it could be removed from abstract class if one was interested only in a Spectrum Analyzer device. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>Window</b><Br>( Unused. This is a synchrotron related functionality, it could be removed from abstract class if one was interested only in a Spectrum Analyzer device. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>NumberOfSweeps</b><Br>( Sets the number of measures. Sets and reads the number of sweeps. See the related class property for details. This instrument supports only single and continuous sweep. IVI SpecAn base attribute. )</Center></Td>
+<Td><Center>DEV_LONG</Center></Td><Td><Center>READ_WRITE</Center></Td><Td><Center>No</Center></Td></Tr>
+
+</Table>
+</Center>
+<Br><Br><Br><Br><Br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=4> <Font Size=+2><Center><b>Spectrum Attributes</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Attribute name</b></td></Center>
+<Td><Center><b>Data Type</b></td></Center>
+<Td><Center><b>X Data Length</b></td></Center>
+<Td><Center><b>Expert</b></td></Center>
+<Tr><Td><b><Center>StartStop</b><Br>( Sets the start and stop frequencies. Center frequency  will be in the middle. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>2</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>TraceReal32</b><Br>( Vector containing the Y values corresponding to the 401 points  of the spectrum. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>401</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>TraceInt32</b><Br>( Y values corresponding to the 401 points in X axis  of the spectrum analyzer )</Center></Td>
+<Td><Center>DEV_LONG</Center></Td><Td><Center>401</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>GetSignalPeaks</b><Br>( Retrieves the signal peaks. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100</Center></Td><Td><Center>No</Center></Td></Tr>
+
+</Table>
+</Center>
+<Br><Br><Br><Br><Br>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3> ESRF - Software Engineering Group </H33>
+</Center>
+</body>
+</html>
diff --git a/doc_html/Description.html b/doc_html/Description.html
new file mode 100644
index 0000000..f9fa65c
--- /dev/null
+++ b/doc_html/Description.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<TABLE BORDER="0" WIDTH="100%">
+    <TR>
+        <TD ALIGN="left">
+			<A HREF="http://www.esrf.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0></A>
+		</Td>
+        <TD ALIGN="center">
+			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0></A>
+
+		</Td>
+        <TD ALIGN="right">
+			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0></A>
+		</Td>
+    	 <Td>
+    	 <Td>
+			<H2><FONT COLOR="#7F00FF">
+			<Center><A HREF="http://www.esrf.fr/Infrastructure/Computing/tango/" TARGET="_top">
+					 TANGO </a> <Br> Device Server
+			</Center></FONT>
+    	</Td>
+    </TR>
+</TABLE>
+
+<HR WIDTH="100%"></H5>
+<Br>
+<center>
+<h1>
+SpectrumAnalyzer		<Br>
+Device Description 		<Br> <Br>
+SpectrumAnalyzer Class	<Br>
+</h1>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Center>
+Class for managing spectrum analyzer devices
+<Br>
+<Br>
+</Center>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3> ESRF - Software Engineering Group </H33>
+</Center>
+</body>
+</html>
diff --git a/doc_html/DevCommands.html b/doc_html/DevCommands.html
new file mode 100644
index 0000000..704002e
--- /dev/null
+++ b/doc_html/DevCommands.html
@@ -0,0 +1,385 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<TABLE BORDER="0" WIDTH="100%">
+    <TR>
+        <TD ALIGN="left">
+			<A HREF="http://www.esrf.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0></A>
+		</Td>
+        <TD ALIGN="center">
+			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0></A>
+
+		</Td>
+        <TD ALIGN="right">
+			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0></A>
+		</Td>
+    	 <Td>
+    	 <Td>
+			<H2><FONT COLOR="#7F00FF">
+			<Center><A HREF="http://www.esrf.fr/Infrastructure/Computing/tango/" TARGET="_top">
+					 TANGO </a> <Br> Device Server
+			</Center></FONT>
+    	</Td>
+    </TR>
+</TABLE>
+
+<HR WIDTH="100%"></H5>
+<Br>
+<center>
+<h1>
+SpectrumAnalyzer		<Br>
+Device Commands Description 		<Br> <Br>
+SpectrumAnalyzer Class	<Br>
+</h1>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Br>
+<Br>
+<Br>
+<A NAME="Init"><!-- --></A>
+<A NAME="Init"><!-- --></A>
+<h2>1 - Init</h2>
+<ul>
+<Li><Strong>Description: </Strong> This commands re-initialise a device keeping the same network connection.<Br>
+After an Init command executed on a device, it is not necessary for client to re-connect to the device.<Br>
+This command first calls the device <i> delete_device() </i>method and then execute its <i> init_device()</i> method.<Br>
+For C++ device server, all the memory allocated in the <i> nit_device() </i> method must be freed in the <i> delete_device() </i> method.<Br>
+The language device desctructor automatically calls the <i> delete_device() </i> method.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::OFF<Li>Tango::FAULT<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="State"><!-- --></A>
+<A NAME="State"><!-- --></A>
+<h2>2 - State</h2>
+<ul>
+<Li><Strong>Description: </Strong> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_STATE</Strong>
+ : State Code<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::OFF<Li>Tango::FAULT<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="Status"><!-- --></A>
+<A NAME="Status"><!-- --></A>
+<h2>3 - Status</h2>
+<ul>
+<Li><Strong>Description: </Strong> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Argout:<Br>CONST_DEV_STRING</Strong>
+ : Status descrition<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::OFF<Li>Tango::FAULT<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="Reset"><!-- --></A>
+<A NAME="Reset"><!-- --></A>
+<h2>4 - Reset</h2>
+<ul>
+<Li><Strong>Description: </Strong> Resets instrument<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="ClearStatus"><!-- --></A>
+<A NAME="ClearStatus"><!-- --></A>
+<h2>5 - ClearStatus</h2>
+<ul>
+<Li><Strong>Description: </Strong> Clears all data in instrument. IEEE common command.
+See specific instrument documentation for details.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="Remote"><!-- --></A>
+<A NAME="Remote"><!-- --></A>
+<h2>6 - Remote</h2>
+<ul>
+<Li><Strong>Description: </Strong> Remote control enabled.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="Local"><!-- --></A>
+<A NAME="Local"><!-- --></A>
+<h2>7 - Local</h2>
+<ul>
+<Li><Strong>Description: </Strong> Disables remote control and enables front panel instrument interaction.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::OFF<Li>Tango::FAULT<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="GetPeak"><!-- --></A>
+<A NAME="GetPeak"><!-- --></A>
+<h2>8 - GetPeak</h2>
+<ul>
+<Li><Strong>Description: </Strong> Sets the marker to the maximum peak. Then one can read X and Y positions of the just
+placed marker.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SetSingleSweep"><!-- --></A>
+<A NAME="SetSingleSweep"><!-- --></A>
+<h2>9 - SetSingleSweep</h2>
+<ul>
+<Li><Strong>Description: </Strong> Sets the analyzer to the single sweep mode.
+See specific instrument documentation for details.
+IVI SpecAn base attribute.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="ChangePowUnits"><!-- --></A>
+<A NAME="ChangePowUnits"><!-- --></A>
+<h2>10 - ChangePowUnits</h2>
+<ul>
+<Li><Strong>Description: </Strong> Changes the power units of measure. Values allowed: DBM, DBMV, DBUV, W, V.
+IVI SpecAn base attribute. 
+See specific instrument documentation for details.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_STRING</Strong>
+ : Set the power units of measure: DBM, DBMV, DBUV, W, V<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="GetErrorInfo"><!-- --></A>
+<A NAME="GetErrorInfo"><!-- --></A>
+<h2>11 - GetErrorInfo</h2>
+<ul>
+<Li><Strong>Description: </Strong> Queries the earliest entry to the error queue and then deletes that entry.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_STRING</Strong>
+ : The string represents the earliest entry to the error queue.<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::OFF<Li>Tango::FAULT<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="GetMin"><!-- --></A>
+<A NAME="GetMin"><!-- --></A>
+<h2>12 - GetMin</h2>
+<ul>
+<Li><Strong>Description: </Strong> Sets marker to the minimum amplitude value in current measure. Then one can read
+the X and Y values querying the MarkerX and MarkerY attributes.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SetContinuousSweep"><!-- --></A>
+<A NAME="SetContinuousSweep"><!-- --></A>
+<h2>13 - SetContinuousSweep</h2>
+<ul>
+<Li><Strong>Description: </Strong> The trigger system is continuously initiated.
+See specific instrument documentation for details.
+IVI SpecAn base attribute 'Sweep Mode Continuous'.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="RestartMeasurement"><!-- --></A>
+<A NAME="RestartMeasurement"><!-- --></A>
+<h2>14 - RestartMeasurement</h2>
+<ul>
+<Li><Strong>Description: </Strong> Restarts the measurement.
+In instrument specific documentation one can find some details about the meaning of this
+command.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SetAutoAttenuation"><!-- --></A>
+<A NAME="SetAutoAttenuation"><!-- --></A>
+<h2>15 - SetAutoAttenuation</h2>
+<ul>
+<Li><Strong>Description: </Strong> Enables or disables auto attenuation.
+IVI SpecAn base attribute.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_BOOLEAN</Strong>
+ : 1 Enables auto attenuation, 0 disables it.<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="GetAutoAttenuation"><!-- --></A>
+<A NAME="GetAutoAttenuation"><!-- --></A>
+<h2>16 - GetAutoAttenuation</h2>
+<ul>
+<Li><Strong>Description: </Strong> Returns auto attenuation status: enabled or disabled.
+Auto attenuation is an IVI SpecAn base attribute.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_BOOLEAN</Strong>
+ : ! if auto attenuation is enabled, 0 if disabled<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::OFF<Li>Tango::FAULT<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SetAsciiData"><!-- --></A>
+<A NAME="SetAsciiData"><!-- --></A>
+<h2>17 - SetAsciiData</h2>
+<ul>
+<Li><Strong>Description: </Strong> Sets the format of the output data of a measurement to ASCII.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SetINT32Data"><!-- --></A>
+<A NAME="SetINT32Data"><!-- --></A>
+<h2>18 - SetINT32Data</h2>
+<ul>
+<Li><Strong>Description: </Strong> Sets the format of data to INT 32 (fastest). Trace data are in mdBm.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SetReal32Data"><!-- --></A>
+<A NAME="SetReal32Data"><!-- --></A>
+<h2>19 - SetReal32Data</h2>
+<ul>
+<Li><Strong>Description: </Strong> Sets the format of data to REAL 32: real values in amplitude units, in a definite length block.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="GetDataFormat"><!-- --></A>
+<A NAME="GetDataFormat"><!-- --></A>
+<h2>20 - GetDataFormat</h2>
+<ul>
+<Li><Strong>Description: </Strong> Returns the format of the data in trace.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_STRING</Strong>
+ : Returns the format of the data in trace<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SaveData"><!-- --></A>
+<A NAME="SaveData"><!-- --></A>
+<h2>21 - SaveData</h2>
+<ul>
+<Li><Strong>Description: </Strong> Save trace data to the specified file.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_STRING</Strong>
+ : Name of the file to which you want to save trace data.<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="PrintData"><!-- --></A>
+<A NAME="PrintData"><!-- --></A>
+<h2>22 - PrintData</h2>
+<ul>
+<Li><Strong>Description: </Strong> Specifying a filename containing an instrument data trace, data in trace is printed out on a 
+string.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_STRING</Strong>
+ : Input data filename.<Br>&nbsp
+<Li><Strong>Argout:<Br>CONST_DEV_STRING</Strong>
+ : Output in string format.<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::ON<Li>Tango::DISABLE<Li>Tango::UNKNOWN</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3> ESRF - Software Engineering Group </H33>
+</Center>
+</body>
+</html>
diff --git a/doc_html/DevCommandsFrame.html b/doc_html/DevCommandsFrame.html
new file mode 100644
index 0000000..a696d50
--- /dev/null
+++ b/doc_html/DevCommandsFrame.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+
+<FRAMESET cols="20%,80%">
+<FRAME src="DevCommandsList.html" name="DevCommandsList">
+<FRAME src="DevCommands.html" name="DevCommands">
+</FRAMESET>
+<NOFRAMES>
+<H2>
+Frame Alert</H2>
+
+<P>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<BR>
+Link to <A HREF="DevCommands.html">Non-frame version.</A></NOFRAMES>
+</HTML>
diff --git a/doc_html/DevCommandsList.html b/doc_html/DevCommandsList.html
new file mode 100644
index 0000000..c43cdad
--- /dev/null
+++ b/doc_html/DevCommandsList.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML><HEAD>
+<TITLE>Commands
+</TITLE></HEAD>
+<BODY BGCOLOR="white">
+<FONT size="+1" ID="FrameHeadingFont">
+<B>Commands:</B></FONT>
+<Br>
+<Br>
+<Br>
+<A Href="DevCommands.html#Init" TARGET="DevCommands"> Init</a><Br>
+<A Href="DevCommands.html#State" TARGET="DevCommands"> State</a><Br>
+<A Href="DevCommands.html#Status" TARGET="DevCommands"> Status</a><Br>
+<A Href="DevCommands.html#Reset" TARGET="DevCommands"> Reset</a><Br>
+<A Href="DevCommands.html#ClearStatus" TARGET="DevCommands"> ClearStatus</a><Br>
+<A Href="DevCommands.html#Remote" TARGET="DevCommands"> Remote</a><Br>
+<A Href="DevCommands.html#Local" TARGET="DevCommands"> Local</a><Br>
+<A Href="DevCommands.html#GetPeak" TARGET="DevCommands"> GetPeak</a><Br>
+<A Href="DevCommands.html#SetSingleSweep" TARGET="DevCommands"> SetSingleSweep</a><Br>
+<A Href="DevCommands.html#ChangePowUnits" TARGET="DevCommands"> ChangePowUnits</a><Br>
+<A Href="DevCommands.html#GetErrorInfo" TARGET="DevCommands"> GetErrorInfo</a><Br>
+<A Href="DevCommands.html#GetMin" TARGET="DevCommands"> GetMin</a><Br>
+<A Href="DevCommands.html#SetContinuousSweep" TARGET="DevCommands"> SetContinuousSweep</a><Br>
+<A Href="DevCommands.html#RestartMeasurement" TARGET="DevCommands"> RestartMeasurement</a><Br>
+<A Href="DevCommands.html#SetAutoAttenuation" TARGET="DevCommands"> SetAutoAttenuation</a><Br>
+<A Href="DevCommands.html#GetAutoAttenuation" TARGET="DevCommands"> GetAutoAttenuation</a><Br>
+<A Href="DevCommands.html#SetAsciiData" TARGET="DevCommands"> SetAsciiData</a><Br>
+<A Href="DevCommands.html#SetINT32Data" TARGET="DevCommands"> SetINT32Data</a><Br>
+<A Href="DevCommands.html#SetReal32Data" TARGET="DevCommands"> SetReal32Data</a><Br>
+<A Href="DevCommands.html#GetDataFormat" TARGET="DevCommands"> GetDataFormat</a><Br>
+<A Href="DevCommands.html#SaveData" TARGET="DevCommands"> SaveData</a><Br>
+<A Href="DevCommands.html#PrintData" TARGET="DevCommands"> PrintData</a><Br>
+
+
+</BODY>
+</HTML>
diff --git a/doc_html/DevCommandsTable.html b/doc_html/DevCommandsTable.html
new file mode 100644
index 0000000..a7daea5
--- /dev/null
+++ b/doc_html/DevCommandsTable.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<TABLE BORDER="0" WIDTH="100%">
+    <TR>
+        <TD ALIGN="left">
+			<A HREF="http://www.esrf.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0></A>
+		</Td>
+        <TD ALIGN="center">
+			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0></A>
+
+		</Td>
+        <TD ALIGN="right">
+			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0></A>
+		</Td>
+    	 <Td>
+    	 <Td>
+			<H2><FONT COLOR="#7F00FF">
+			<Center><A HREF="http://www.esrf.fr/Infrastructure/Computing/tango/" TARGET="_top">
+					 TANGO </a> <Br> Device Server
+			</Center></FONT>
+    	</Td>
+    </TR>
+</TABLE>
+
+<HR WIDTH="100%"></H5>
+<Br>
+<center>
+<h1>
+SpectrumAnalyzer		<Br>
+Device Commands Description 		<Br> <Br>
+SpectrumAnalyzer Class	<Br>
+</h1>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Center>
+<Br><Br>
+<A Href="DevCommandsFrame.html"> More Details on commands.... </a><Br>
+<Br> <Br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=3> <Font Size=+2><Center><b>Device Commands for Operator Level</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Command name</b></td></Center>
+<Td><Center><b>Argument In</b></td></Center>
+<Td><Center><b>Argument Out</b></td></Center>
+<Tr><Td>Init</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>State</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_STATE</Td>
+<Tr><Td>Status</Td>
+<Td>DEV_VOID</Td>
+<Td>CONST_DEV_STRING</Td>
+<Tr><Td>Reset</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>ClearStatus</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>Remote</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>Local</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>GetPeak</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>SetSingleSweep</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>ChangePowUnits</Td>
+<Td>DEV_STRING</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>GetErrorInfo</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_STRING</Td>
+<Tr><Td>GetMin</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>SetContinuousSweep</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>RestartMeasurement</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>SetAutoAttenuation</Td>
+<Td>DEV_BOOLEAN</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>GetAutoAttenuation</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_BOOLEAN</Td>
+<Tr><Td>SetAsciiData</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>SetINT32Data</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>SetReal32Data</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>GetDataFormat</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_STRING</Td>
+<Tr><Td>SaveData</Td>
+<Td>DEV_STRING</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>PrintData</Td>
+<Td>DEV_STRING</Td>
+<Td>CONST_DEV_STRING</Td>
+
+
+
+</Table></Center>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3> ESRF - Software Engineering Group </H33>
+</Center>
+</body>
+</html>
diff --git a/doc_html/Properties.html b/doc_html/Properties.html
new file mode 100644
index 0000000..af50cb4
--- /dev/null
+++ b/doc_html/Properties.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<TABLE BORDER="0" WIDTH="100%">
+    <TR>
+        <TD ALIGN="left">
+			<A HREF="http://www.esrf.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0></A>
+		</Td>
+        <TD ALIGN="center">
+			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0></A>
+
+		</Td>
+        <TD ALIGN="right">
+			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0></A>
+		</Td>
+    	 <Td>
+    	 <Td>
+			<H2><FONT COLOR="#7F00FF">
+			<Center><A HREF="http://www.esrf.fr/Infrastructure/Computing/tango/" TARGET="_top">
+					 TANGO </a> <Br> Device Server
+			</Center></FONT>
+    	</Td>
+    </TR>
+</TABLE>
+
+<HR WIDTH="100%"></H5>
+<Br>
+<center>
+<h1>
+SpectrumAnalyzer		<Br>
+Properties Description 		<Br> <Br>
+SpectrumAnalyzer Class	<Br>
+</h1>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Br> <Br> <Br> 
+<Center>
+<Br><Br><Br>
+<Center><b>
+There is no Class properties.<Br><Br>
+There is no Device Properties.<Br><Br>
+</Center></b>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3> ESRF - Software Engineering Group </H33>
+</Center>
+</body>
+</html>
diff --git a/doc_html/TangoDevStates.html b/doc_html/TangoDevStates.html
new file mode 100644
index 0000000..553fa4f
--- /dev/null
+++ b/doc_html/TangoDevStates.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<TABLE BORDER="0" WIDTH="100%">
+    <TR>
+        <TD ALIGN="left">
+			<A HREF="http://www.esrf.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0></A>
+		</Td>
+        <TD ALIGN="center">
+			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0></A>
+
+		</Td>
+        <TD ALIGN="right">
+			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0></A>
+		</Td>
+    	 <Td>
+    	 <Td>
+			<H2><FONT COLOR="#7F00FF">
+			<Center><A HREF="http://www.esrf.fr/Infrastructure/Computing/tango/" TARGET="_top">
+					 TANGO </a> <Br> Device Server
+			</Center></FONT>
+    	</Td>
+    </TR>
+</TABLE>
+
+<HR WIDTH="100%"></H5>
+<Br>
+<center>
+<h1>
+SpectrumAnalyzer		<Br>
+Device States Description 		<Br> <Br>
+SpectrumAnalyzer Class	<Br>
+</h1>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Center>
+<Br> <Br> <Br> 
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=2> <Font Size=+2><Center><b>States</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Names</b></td></Center>
+<Td><Center><b>Descriptions</b></td></Center>
+<Tr><Td>ON</Td>
+<Td>Device is online</Td></Tr>
+
+<Tr><Td>OFF</Td>
+<Td>Device is offline</Td></Tr>
+
+<Tr><Td>FAULT</Td>
+<Td>Device not working</Td></Tr>
+
+<Tr><Td>DISABLE</Td>
+<Td>accepts commands only from frontal panel. Remote control disabled.</Td></Tr>
+
+<Tr><Td>UNKNOWN</Td>
+<Td>Device is in unknown state when GPIB is not responding</Td></Tr>
+
+
+
+
+</Table>
+</Center>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3> ESRF - Software Engineering Group </H33>
+</Center>
+</body>
+</html>
diff --git a/doc_html/index.html b/doc_html/index.html
new file mode 100644
index 0000000..0396f80
--- /dev/null
+++ b/doc_html/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<TABLE BORDER="0" WIDTH="100%">
+    <TR>
+        <TD ALIGN="left">
+			<A HREF="http://www.esrf.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0></A>
+		</Td>
+        <TD ALIGN="center">
+			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0></A>
+
+		</Td>
+        <TD ALIGN="right">
+			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
+			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0></A>
+		</Td>
+    	 <Td>
+			<H2><FONT COLOR="#7F00FF">
+			<Center><A HREF="http://www.esrf.fr/Infrastructure/Computing/tango/" TARGET="_top">
+					 TANGO </a> <Br> Device Server
+			</Center></FONT>
+		</Td>
+    </TR>
+</TABLE>
+
+<HR WIDTH="100%"></H5>
+
+<!---------- center>
+<h1>
+SpectrumAnalyzer					<Br>
+Device Server User's Guide	<Br><Br>
+SpectrumAnalyzer Class				<Br>
+
+</h1>
+<b ---------->
+Revision:  - Author: 
+</b>
+</center>
+<Br>
+<Br>
+<Br>
+<Br>
+<Br>
+<Br>
+<h2>Introduction:</h2>
+Class for managing spectrum analyzer devices<Br>
+<Br>
+<Br>
+<h2>Description:</h2>
+<ul>
+	<li> <a href=Description.html>      Device description.</a>
+	<li> <a href=Properties.html>       Properties description</a>
+	<li> <a href=TangoDevStates.html>   States description</a>
+	<li> <a href=DevCommandsTable.html> Commands description</a>
+	<li> <a href=Attributes.html>       Attributes description</a>
+</ul>
+<Br>
+<Br>
+<Br>
+<!--------------h2>Programmer's guide:</h2>
+<ul>
+	<li> <a href="html/index.html">		Software description.</a>
+</ul>
+<Br------>
+<Br>
+<Br>
+<h2>Conclusion:</h2>
+The device server is ready for distribution application programmers.<Br>
+The author will be interested in any feedback which arise from their
+usage of this device server.
+<Br>
+
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3> ESRF - Software Engineering Group </H33>
+</Center>
+</body>
+</html>
-- 
GitLab