ROOT logo
#ifndef __TMrbVMEModule_h__
#define __TMrbVMEModule_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           expconf/inc/TMrbVMEModule.h
// Purpose:        Define experimental configuration for MARaBOU
// Class:          TMrbVMEModule        -- base class for vme modules
// Description:    Class definitions to implement a configuration front-end for MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbVMEModule.h,v 1.12 2011-05-18 11:04:49 Marabou Exp $
// Date:
// Keywords:
//////////////////////////////////////////////////////////////////////////////

namespace std {} using namespace std;

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>

#include "Rtypes.h"
#include "TSystem.h"

#include "TMrbTemplate.h"
#include "TMrbModule.h"

class TMrbSubvent;

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbVMEModule
// Purpose:        Define methods for a VME module
// Description:    Defines a VME module to be used in the MARaBOU environment.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbVMEModule : public TMrbModule {

	public:

		TMrbVMEModule() {};										// default ctor

																// explicit ctor:	name, id, addr, modifier, segment
																//					nofchannels, range
		TMrbVMEModule(const Char_t * ModuleName, const Char_t * ModuleID,
							UInt_t BaseAddr, UInt_t AddrMod, Int_t SegLength,
							Int_t SubDevice, Int_t NofChannels, Int_t Range);

		~TMrbVMEModule() {};									// default dtor

		inline void SetBaseAddr(UInt_t Base) { fBaseAddr = Base; };			// base address
		inline UInt_t GetBaseAddr() const { return(fBaseAddr); };

		inline void SetSegmentSize(Int_t SegSize) { fSegmentSize = SegSize; };		// segment size
		inline Int_t GetSegmentSize() const { return(fSegmentSize); };

		inline void SetVMEMapping(UInt_t Mapping) { fVMEMapping = Mapping; };		// VME mapping
		inline UInt_t GetVMEMapping() const { return(fVMEMapping); };

		inline void SetAddrModifier(Int_t AddrMod) { fAddrModifier = AddrMod; };	// addr modifier
		inline Int_t GetAddrModifier() const { return(fAddrModifier); };

		virtual inline Bool_t UseLVME() const { return(kFALSE); };				// connect via LVME interface

		virtual inline Bool_t HasBlockXfer() const { return(kFALSE); };				// module is capable of using BLT
		virtual inline Bool_t UseA32Addressing() const { return(kFALSE); };			// use a32 addressing anyway
		
		Bool_t MakeReadoutCode(ofstream & RdoStrm, TMrbConfig::EMrbReadoutTag TagIndex, 		// generate readout code
												TMrbTemplate & Template, const Char_t * Prefix = NULL);
		Bool_t MakeReadoutCode(ofstream & RdoStrm, TMrbConfig::EMrbModuleTag TagIndex) { return(kFALSE); };  	// generate code for given channel
		Bool_t MakeReadoutCode(ofstream & RdoStrm, TMrbConfig::EMrbModuleTag TagIndex, TMrbSubevent * Subevent, Int_t Value = 0) { return(kFALSE); };

		virtual inline Bool_t HasOwnMapping() const { return(kFALSE); };				// module has its own vme mapping

		inline void UseVMEMapping(UInt_t Mapping) { fVMEMapping = Mapping; };
		inline UInt_t GetVMEMapping() { return fVMEMapping; };

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

		void Print(Option_t * Option) const { TObject::Print(Option); }
		void Print(ostream & OutStrm, const Char_t * Prefix = "") const;		// show data
		virtual inline void Print() const { Print(cout, ""); };

	protected:
		UInt_t fBaseAddr;					// base address
		UInt_t fAddrModifier;					// address modifier
		Int_t fSegmentSize; 					// segment size
		UInt_t fVMEMapping;					// VME mapping

	ClassDef(TMrbVMEModule, 1)		// [Config] Base class for VME modules
};

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