ROOT logo
#ifndef __TMrbEsoneCnaf_h__
#define __TMrbEsoneCnaf_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           esone/inc/TMrbEsoneCnaf.h
// Purpose:        Interface to the ESONE client library
// Class:          TMrbEsoneCnaf         -- C.N.A.F handling
// Description:    Class definitions to establish an
//                 ESONE client/server connection.
// Author:         R. Lutter
// Revision:       $Id: TMrbEsoneCnaf.h,v 1.5 2005-09-09 06:59:13 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TSystem.h"
#include "TString.h"
#include "TArrayI.h"
#include "TArrayL.h"

#include "TMrbString.h"
#include "TMrbEsoneCommon.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbEsoneCnaf
// Purpose:        Handle Camac CNAF definitions
// Methods:        Ascii2Int  -- decode B.C.N.A.F to int values
// Description:    Converts Camac [B]CNAFs.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbEsoneCnaf : public TObject {

	public:
		enum EMrbEsoneCnaf		{	kCnafBranch 		=	BIT(0),			// cnaf code names
									kCnafCrate			=	BIT(1),
									kCnafStation		=	BIT(2),
									kCnafAddr			=	BIT(3),
									kCnafFunction		=	BIT(4),
									kCnafData			=	BIT(5),
									kCnafQ				=	BIT(6),
									kCnafX				=	BIT(7)
								};

		enum					{	kEsoneCnafBits		=	kCnafCrate | kCnafStation | kCnafAddr | kCnafFunction | kCnafData	};

	public:
		TMrbEsoneCnaf() { Reset(); };						// default ctor
		~TMrbEsoneCnaf() {}; 								// default dtor

		Bool_t Ascii2Int(const Char_t * Cnaf); 				// decode C.N.A.F from ascii to int values
		const Char_t * Int2Ascii(Bool_t DataFlag = kTRUE);	// convert to ascii

		Bool_t Set(Int_t Crate, Int_t Station = -1, Int_t Subaddr = -1, Int_t Function = -1, Int_t Data = kEsoneNoData);	// set cnaf
		Bool_t SetC(Int_t Crate);
		Bool_t SetN(Int_t Station);
		Bool_t SetA(Int_t Addr);
		Bool_t SetF(Int_t Function);
		Bool_t SetData(Int_t Data, EMrbEsoneCnafType Type = kCnafTypeUndefined);
		inline void ClearStatus() { fStatus = 0; };
		Bool_t ClearData(EMrbEsoneCnafType Type = kCnafTypeUndefined);
		inline void SetX() { fStatus |= (UInt_t) kEsoneX; };
		inline void SetQ() { fStatus |= (UInt_t) kEsoneQ; };
		inline void SetXQ() { fStatus |= ((UInt_t) (kEsoneQ|kEsoneX)); };
		inline void SetError() { fStatus |= (UInt_t) kEsoneError; };

		inline Int_t GetC() { return(fCrate); };									// get cnaf
		inline Int_t GetN() { return(fStation); };
		inline Int_t GetA() { return(fAddr); };
		inline Int_t GetF() { return(fFunction); };
		Int_t GetData(EMrbEsoneCnafType Type = kCnafTypeUndefined);
		Bool_t GetData(Int_t & DataRead, Int_t & DataWrite);
		inline Bool_t GetX() { return(IS_X(fStatus)); };
		inline Bool_t GetQ() { return(IS_Q(fStatus)); };
		inline Bool_t IsError() { return(IS_ERROR(fStatus)); };

		inline EMrbEsoneCnafType GetType() { return(fType); };

		inline EMrbEsoneCamacAction GetAction() { return(fAction); };	// return action
		inline void SetAction(EMrbEsoneCamacAction Action) { fAction = Action; };

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

		void Reset();										// reset data
		Bool_t CheckCnaf(UInt_t CnafBits = kEsoneCnafBits);	// check for missing cnaf components
		Bool_t CheckCnaf(UInt_t CnafBit, Int_t Data);		// check for valid cnaf component

		inline Bool_t IsWrite() { return(fType == kCnafTypeWrite); };
		inline Bool_t IsRead() { return(fType == kCnafTypeRead); };
		inline Bool_t IsControl() { return(fType == kCnafTypeControl); };
		inline Bool_t IsReadStatus() { return(fType == kCnafTypeReadStatus); };

	protected:
		TMrbString fAscii; 				// ascii representation

		Int_t fCrate;					// Camac crate: Cxx
		Int_t fStation; 				// Camac station: N1 .. N31
		Int_t fAddr;					// Camac subaddress: A0 .. A15
		Int_t fFunction;				// Camac function: F0 .. F31
		Int_t fDataRead;				// Camac data (read)
		Int_t fDataWrite;				// Camac data (write)

		UInt_t fStatus;					// X, Q, error

		EMrbEsoneCamacAction fAction;	// Camac action

		EMrbEsoneCnafType fType; 		// Camac read / control / write

	ClassDef(TMrbEsoneCnaf, 1)		// [CAMAC Access] Camac command C.N.A.F
};

#endif
 TMrbEsoneCnaf.h:1
 TMrbEsoneCnaf.h:2
 TMrbEsoneCnaf.h:3
 TMrbEsoneCnaf.h:4
 TMrbEsoneCnaf.h:5
 TMrbEsoneCnaf.h:6
 TMrbEsoneCnaf.h:7
 TMrbEsoneCnaf.h:8
 TMrbEsoneCnaf.h:9
 TMrbEsoneCnaf.h:10
 TMrbEsoneCnaf.h:11
 TMrbEsoneCnaf.h:12
 TMrbEsoneCnaf.h:13
 TMrbEsoneCnaf.h:14
 TMrbEsoneCnaf.h:15
 TMrbEsoneCnaf.h:16
 TMrbEsoneCnaf.h:17
 TMrbEsoneCnaf.h:18
 TMrbEsoneCnaf.h:19
 TMrbEsoneCnaf.h:20
 TMrbEsoneCnaf.h:21
 TMrbEsoneCnaf.h:22
 TMrbEsoneCnaf.h:23
 TMrbEsoneCnaf.h:24
 TMrbEsoneCnaf.h:25
 TMrbEsoneCnaf.h:26
 TMrbEsoneCnaf.h:27
 TMrbEsoneCnaf.h:28
 TMrbEsoneCnaf.h:29
 TMrbEsoneCnaf.h:30
 TMrbEsoneCnaf.h:31
 TMrbEsoneCnaf.h:32
 TMrbEsoneCnaf.h:33
 TMrbEsoneCnaf.h:34
 TMrbEsoneCnaf.h:35
 TMrbEsoneCnaf.h:36
 TMrbEsoneCnaf.h:37
 TMrbEsoneCnaf.h:38
 TMrbEsoneCnaf.h:39
 TMrbEsoneCnaf.h:40
 TMrbEsoneCnaf.h:41
 TMrbEsoneCnaf.h:42
 TMrbEsoneCnaf.h:43
 TMrbEsoneCnaf.h:44
 TMrbEsoneCnaf.h:45
 TMrbEsoneCnaf.h:46
 TMrbEsoneCnaf.h:47
 TMrbEsoneCnaf.h:48
 TMrbEsoneCnaf.h:49
 TMrbEsoneCnaf.h:50
 TMrbEsoneCnaf.h:51
 TMrbEsoneCnaf.h:52
 TMrbEsoneCnaf.h:53
 TMrbEsoneCnaf.h:54
 TMrbEsoneCnaf.h:55
 TMrbEsoneCnaf.h:56
 TMrbEsoneCnaf.h:57
 TMrbEsoneCnaf.h:58
 TMrbEsoneCnaf.h:59
 TMrbEsoneCnaf.h:60
 TMrbEsoneCnaf.h:61
 TMrbEsoneCnaf.h:62
 TMrbEsoneCnaf.h:63
 TMrbEsoneCnaf.h:64
 TMrbEsoneCnaf.h:65
 TMrbEsoneCnaf.h:66
 TMrbEsoneCnaf.h:67
 TMrbEsoneCnaf.h:68
 TMrbEsoneCnaf.h:69
 TMrbEsoneCnaf.h:70
 TMrbEsoneCnaf.h:71
 TMrbEsoneCnaf.h:72
 TMrbEsoneCnaf.h:73
 TMrbEsoneCnaf.h:74
 TMrbEsoneCnaf.h:75
 TMrbEsoneCnaf.h:76
 TMrbEsoneCnaf.h:77
 TMrbEsoneCnaf.h:78
 TMrbEsoneCnaf.h:79
 TMrbEsoneCnaf.h:80
 TMrbEsoneCnaf.h:81
 TMrbEsoneCnaf.h:82
 TMrbEsoneCnaf.h:83
 TMrbEsoneCnaf.h:84
 TMrbEsoneCnaf.h:85
 TMrbEsoneCnaf.h:86
 TMrbEsoneCnaf.h:87
 TMrbEsoneCnaf.h:88
 TMrbEsoneCnaf.h:89
 TMrbEsoneCnaf.h:90
 TMrbEsoneCnaf.h:91
 TMrbEsoneCnaf.h:92
 TMrbEsoneCnaf.h:93
 TMrbEsoneCnaf.h:94
 TMrbEsoneCnaf.h:95
 TMrbEsoneCnaf.h:96
 TMrbEsoneCnaf.h:97
 TMrbEsoneCnaf.h:98
 TMrbEsoneCnaf.h:99
 TMrbEsoneCnaf.h:100
 TMrbEsoneCnaf.h:101
 TMrbEsoneCnaf.h:102
 TMrbEsoneCnaf.h:103
 TMrbEsoneCnaf.h:104
 TMrbEsoneCnaf.h:105
 TMrbEsoneCnaf.h:106
 TMrbEsoneCnaf.h:107
 TMrbEsoneCnaf.h:108
 TMrbEsoneCnaf.h:109
 TMrbEsoneCnaf.h:110
 TMrbEsoneCnaf.h:111
 TMrbEsoneCnaf.h:112
 TMrbEsoneCnaf.h:113
 TMrbEsoneCnaf.h:114