Skip to content
Snippets Groups Projects
TIMIQLib.h 5.67 KiB
Newer Older
ELATTAOUI's avatar
ELATTAOUI committed
//=============================================================================
// TIMIQLib.h
//=============================================================================
// abstraction.......Tim IQ Application Programming Interface
// class.............TIMIQLib 
// original author...J. GOUNO - NEXEYA-FRANCE
//=============================================================================

#ifndef _TIMIQ_LIB_H_
#define _TIMIQ_LIB_H_

// ============================================================================
// DEPENDENCIES
// ============================================================================
#include <TIMIQException.h>
#include <TIMIQCurl.h>
#include <yat/threading/Task.h>
ELATTAOUI's avatar
ELATTAOUI committed



// ==========================================================================
// DEFINITION OF API
//
// This API allows access to an electronic equipment "TimIQ". 
// It allows a control software to send and receive data 
// via a http web protocol.
// ===========================================================================

namespace TIMIQLib_ns {
	//------------------------------------------------------------------------
	// Class Description:
	// Thread to write the values and commands on the TimIQ equipment
	//------------------------------------------------------------------------
	class ThreadedAction : public yat::Thread
	{
		friend class TIMIQLib;
	  
	protected:
		//- ctor ---------------------------------
		ThreadedAction ( yat::Thread::IOArg ioa, timIQConfig& cfg);

		//- dtor ---------------------------------
		virtual ~ThreadedAction (void);

		//- thread's entry point
		virtual yat::Thread::IOArg run_undetached (yat::Thread::IOArg ioa);
	  
		//- asks this ThreadedAction to quit
		virtual void exit (void);
	  
		//- Thread state
		bool isThreadAlive()
		{
			return m_goOn;
		}	
		
		bool  isWriteDone()
		{
			return m_isActionDone; 
		}
		
	private:
		
		//- thread's ctrl flag
		bool m_goOn;
		
		//- indicates if the threaded action is done
		bool m_isActionDone;

		//- indicates if the threaded action has generated an error
		bool m_isActionInError;
		
		//- Thread action configuration member
		timIQConfig m_ti_cfg;
	};

ELATTAOUI's avatar
ELATTAOUI committed
	
	//- low layer TimIQ curl class
	//-----------------------------
	class TIMIQCurl;
	
	//------------------------------------------------------------------------
	//- TIMIQProxy Class
	//- Ensures the interface of the timIQ equipment with 
	//- a tango software control system 
	//------------------------------------------------------------------------
	class TIMIQLib
	{
		friend class ThreadedAction;
		
ELATTAOUI's avatar
ELATTAOUI committed
		public:
			// Contructor 
			TIMIQLib ();
    
			// Destructor
			~TIMIQLib();
			
			//- Write functions
			//---------------------------------------------------------------------------
			// Sets data to TimIQ equipment
			// @param data float value.	
			void set_data(float data) throw (Exception);
			
			// Regulates "I" tension to TimIQ equipment
			// @param iValue float value.	
			void set_iValue(float iValue)throw (Exception);
			
			// Regulates "Q" tension to TimIQ equipment
			// @param qValue float value.
			void set_qValue(float qValue)throw (Exception);
			
			// Sets board temperature to TimIQ equipment
			// @param boardTemperature float value.
			void set_boardTemperature(float boardTemperature) throw (Exception);
			
			// Sets command to TimIQ equipment
			// @param cmd TimIQCmd_t value.
			void set_command(E_timiq_cmd_t& cmd) throw (Exception);
				
			//- Read functions
			//---------------------------------------------------------------------------
			// Gets data from TimIQ equipment
			// @param [out] data float pointer.
			void get_data(float &data)throw (Exception);
			
			// Gets "I" value from TimIQ equipment 
			// @param [out] iValue float pointer.
			void get_iValue(float& iValue)throw (Exception);
			
			// Gets "Q" value from TimIQ equipment 
			// @param [out] qValue float pointer.
			void get_qValue(float& qValue)throw (Exception);
			
			// Gets the mixer cosinus output from TimIQ equipment 
			// @param [out] mixerCosOutput float pointer.
			void get_mixerCosOutput(float& mixerCosOutput)throw (Exception);
			
			// Gets the mixer sinus output from TimIQ equipment
			// @param [out] mixerSinOutput float pointer.
			void get_mixerSinOutput(float& mixerSinOutput)throw (Exception);
			
			// Gets the board temperature from TimIQ equipment
			// @param [out] boardTemperature float pointer.
			void get_boardTemperature(float& boardTemperature)throw (Exception);
		
			// Gets state of TimIQ equipment
			// @param [out] status string
			E_timiq_code_t get_state(std::string& status) throw (Exception);
			
			// Initialize  TimIQCurl library
			// @param ip_address string, port_number string				
			void init (const std::string& ip_address, const short& port_number) throw (Exception);
			
		private:
			//- internal members
			//--------------------------
			TIMIQCurl * m_timiq_hw;
			
			//- ip address number
			std::string m_ipAddress;
			
			//- port number
			std::string m_numPort;
			
			//- internal timiq state
			E_timiq_code_t m_internal_timiq_state;
			
			
		protected:	
ELATTAOUI's avatar
ELATTAOUI committed
			//- internal function
			//-------------------------
			// ...
			
			//- manage command by using task
			ThreadedAction * m_timiq_task;
			
			void ExecuteAction(timIQConfig & cfg);
			void end_task() throw (Exception);
			//  soso à supprimer:
			void iVal_end_task() throw (Exception);
			void qVal_end_task() throw (Exception);
			void data_end_task() throw (Exception);
			void boardT_end_task() throw (Exception);	
ELATTAOUI's avatar
ELATTAOUI committed
	};

} // namespace TIMIQLib_ns

#endif // _TIMIQ_LIB_H_