ROOT logo
#ifndef __TC2LSis3302_h__
#define __TC2LSis3302_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           TC2LSis3302.h
// Purpose:        Connect to a SIS 3302 flash ADC
// Class:          TC2LSis3302            -- base class
// Description:    Class definitions to establish a connection to a VME
//                 module running under LynxOs.
// Author:         R. Lutter
// Revision:       $Id: TC2LSis3302.h,v 1.17 2011-07-26 08:41:50 Marabou Exp $
// Date:           $Date: 2011-07-26 08:41:50 $
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TArrayI.h"
#include "TC2LVMEModule.h"
#include "M2L_CommonDefs.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TC2LSis3302
// Purpose:        Connect to a SIS 3302 ADC
// Description:    Defines a module and tries to connect to it
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TC2LSis3302 : public TC2LVMEModule {

	public:
		enum	{	kRcModuleSettings	=	1	};

	public:

		TC2LSis3302() { fStatus = 0; };		// default ctor

		TC2LSis3302(const Char_t * ModuleName,
			UInt_t Address = 0, Int_t SegSize = 0, Int_t NofChans = 0, UInt_t Mapping = 0, Bool_t Offline = kFALSE)
					: TC2LVMEModule(ModuleName, "Sis3302", Address, SegSize, NofChans, Mapping, Offline) { fStatus = 0; };

		~TC2LSis3302() {};							// default dtor

		Bool_t GetModuleInfo(Int_t & BoardId, Int_t & MajorVersion, Int_t & MinorVersion);
		Bool_t GetModuleAddress(UInt_t & Address, Int_t & AddrSpace);

		Bool_t SetUserLED(Bool_t & OnFlag);

		Bool_t ReadDac(TArrayI & DacValues, Int_t Chan = kSis3302AllChans);
		Bool_t WriteDac(TArrayI & DacValues, Int_t Chan = kSis3302AllChans);

		Bool_t KeyAddr(Int_t Key);
		inline Bool_t KeyReset() { return(this->KeyAddr(kSis3302KeyReset)); };

		Bool_t ReadEventConfig(Int_t & Bits, Int_t ChanNo);
		Bool_t WriteEventConfig(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);
		Bool_t ReadEventExtendedConfig(Int_t & Bits, Int_t ChanNo);
		Bool_t WriteEventExtendedConfig(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetPolarity(Bool_t & InvertFlag, Int_t ChanNo);
		Bool_t SetPolarity(Bool_t & InvertFlag, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetTriggerMode(Int_t & Bits, Int_t ChanNo);
		Bool_t SetTriggerMode(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetGateMode(Int_t & Bits, Int_t ChanNo);
		Bool_t SetGateMode(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetNextNeighborTriggerMode(Int_t & Bits, Int_t ChanNo);
		Bool_t SetNextNeighborTriggerMode(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetNextNeighborGateMode(Int_t & Bits, Int_t ChanNo);
		Bool_t SetNextNeighborGateMode(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);

		Bool_t GetHeaderBits(Int_t & Bits, Int_t ChanNo);
		Bool_t SetHeaderBits(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetGroupId(Int_t & GroupId, Int_t ChanNo);

		Bool_t ReadEndAddrThresh(Int_t & Thresh, Int_t ChanNo);
		Bool_t WriteEndAddrThresh(Int_t & Thresh, Int_t ChanNo = kSis3302AllChans);

		Bool_t ReadPreTrigDelay(Int_t & Delay, Int_t ChanNo);
		Bool_t WritePreTrigDelay(Int_t & Delay, Int_t ChanNo = kSis3302AllChans);
		Bool_t ReadTrigGateLength(Int_t & Gate, Int_t ChanNo);
		Bool_t WriteTrigGateLength(Int_t & Gate, Int_t ChanNo = kSis3302AllChans);

		Bool_t ReadRawDataSampleLength(Int_t & SampleLength, Int_t ChanNo);
		Bool_t WriteRawDataSampleLength(Int_t & SampleLength, Int_t ChanNo = kSis3302AllChans);
		Bool_t ReadRawDataStartIndex(Int_t & Start, Int_t ChanNo);
		Bool_t WriteRawDataStartIndex(Int_t & Start, Int_t ChanNo = kSis3302AllChans);

		Bool_t ReadNextSampleAddr(Int_t & Addr, Int_t ChanNo);
		Bool_t ReadPrevBankSampleAddr(Int_t & Addr, Int_t ChanNo);
		Bool_t ReadActualSample(Int_t & Data, Int_t ChanNo);

		Bool_t ReadTrigPeakAndGap(Int_t & Peak, Int_t & Gap, Int_t ChanNo);
		Bool_t WriteTrigPeakAndGap(Int_t & Peak, Int_t & Gap, Int_t ChanNo);
		Bool_t ReadTrigPulseLength(Int_t & PulseLength, Int_t ChanNo);
		Bool_t WriteTrigPulseLength(Int_t & PulseLength, Int_t ChanNo);
		Bool_t ReadTrigInternalGate(Int_t & Gate, Int_t ChanNo);
		Bool_t WriteTrigInternalGate(Int_t & Gate, Int_t ChanNo);
		Bool_t ReadTrigInternalDelay(Int_t & Delay, Int_t ChanNo);
		Bool_t WriteTrigInternalDelay(Int_t & Delay, Int_t ChanNo);
		Bool_t GetTrigDecimation(Int_t & Decimation, Int_t ChanNo);
		Bool_t SetTrigDecimation(Int_t & Decimation, Int_t ChanNo = kSis3302AllChans);

		Bool_t ReadTrigThreshold(Int_t & Thresh, Int_t ChanNo);
		Bool_t WriteTrigThreshold(Int_t & Thresh, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetTriggerGT(Bool_t & GTFlag, Int_t ChanNo);
		Bool_t SetTriggerGT(Bool_t & GTFlag, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetTriggerOut(Bool_t & TrigOutFlag, Int_t ChanNo);
		Bool_t SetTriggerOut(Bool_t & TrigOutFlag, Int_t ChanNo = kSis3302AllChans);

		Bool_t ReadEnergyPeakAndGap(Int_t & Peak, Int_t & Gap, Int_t ChanNo);
		Bool_t WriteEnergyPeakAndGap(Int_t & Peak, Int_t & Gap, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetEnergyDecimation(Int_t & Decimation, Int_t ChanNo);
		Bool_t SetEnergyDecimation(Int_t & Decimation, Int_t ChanNo = kSis3302AllChans);
		Bool_t ReadEnergyGateLength(Int_t & GateLength, Int_t ChanNo);
		Bool_t WriteEnergyGateLength(Int_t & GateLength, Int_t ChanNo = kSis3302AllChans);
		Bool_t GetTestBits(Int_t & Bits, Int_t ChanNo);
		Bool_t SetTestBits(Int_t & Bits, Int_t ChanNo = kSis3302AllChans);
		Bool_t ReadEnergySampleLength(Int_t & SampleLength, Int_t ChanNo);
		Bool_t WriteEnergySampleLength(Int_t & SampleLength, Int_t ChanNo = kSis3302AllChans);

		Bool_t ReadStartIndex(Int_t & IdxVal, Int_t IdxNo, Int_t ChanNo);
		Bool_t WriteStartIndex(Int_t & IdxVal, Int_t IdxNo, Int_t ChanNo = kSis3302AllChans);

		Bool_t ReadTauFactor(Int_t & Tau, Int_t ChanNo);
		Bool_t WriteTauFactor(Int_t & Tau, Int_t ChanNo = kSis3302AllChans);

		Bool_t GetLemoInMode(Int_t & Bits);
		Bool_t SetLemoInMode(Int_t & Bits);
		Bool_t GetLemoOutMode(Int_t & Bits);
		Bool_t SetLemoOutMode(Int_t & Bits);
		Bool_t GetLemoInEnableMask(Int_t & Bits);
		Bool_t SetLemoInEnableMask(Int_t & Bits);
		
		Bool_t GetTriggerFeedback(Bool_t & Feedback);
		Bool_t SetTriggerFeedback(Bool_t & Feedback);

		Bool_t GetClockSource(Int_t & ClockSource);
		Bool_t SetClockSource(Int_t & ClockSource);

		Bool_t SaveSettings(const Char_t * SettingsFile = NULL);
		Bool_t RestoreSettings(const Char_t * SettingsFile = NULL);

		Bool_t StartTraceCollection(Int_t & NofEvents, Int_t & ChanPattern);
		Bool_t ContinueTraceCollection();
		Bool_t StopTraceCollection();
		Bool_t GetTraceData(TArrayI & Data, Int_t & EventNo, Int_t ChanNo);
		Bool_t GetTraceLength(TArrayI & Data, Int_t ChanNo);
		Bool_t DumpTrace();

		Bool_t RampDac(TArrayI & Data, Int_t ChanNo);

		Bool_t DumpRegisters();
		
		inline void SetFirmwareVersion(Int_t Major, Int_t Minor) { fMajorVersion = Major; fMinorVersion = Minor; };
		inline UInt_t GetFirmwareVersion() { return ((fMajorVersion << 8) | fMinorVersion); };
		inline UInt_t GetFirmwareMajor() { return fMajorVersion; };
		inline UInt_t GetFirmwareMinor() { return fMinorVersion; };
		
		Bool_t SetVerboseMode(UInt_t SetFlag, UInt_t ClearFlag);
		
		inline Bool_t IsVerbose() { return (fStatus & kSis3302StatusVerboseMode); };
		inline Bool_t IsDebug() { return (fStatus & kSis3302StatusDebugMode); };		
		inline Bool_t IsDebugStop() { return (fStatus & kSis3302StatusDebugStopMode); };	

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

	protected:
		Bool_t ExecFunction(Int_t Fcode, TArrayI & DataSend, TArrayI & DataRecv, Int_t Chan = kSis3302AllChans);

	protected:
		Int_t fMajorVersion;				// firmware version
		Int_t fMinorVersion;
		
		UInt_t fStatus;

	ClassDef(TC2LSis3302, 1)		// [Access to LynxOs] Connect to a Sis3302 adc
};

#endif
 TC2LSis3302.h:1
 TC2LSis3302.h:2
 TC2LSis3302.h:3
 TC2LSis3302.h:4
 TC2LSis3302.h:5
 TC2LSis3302.h:6
 TC2LSis3302.h:7
 TC2LSis3302.h:8
 TC2LSis3302.h:9
 TC2LSis3302.h:10
 TC2LSis3302.h:11
 TC2LSis3302.h:12
 TC2LSis3302.h:13
 TC2LSis3302.h:14
 TC2LSis3302.h:15
 TC2LSis3302.h:16
 TC2LSis3302.h:17
 TC2LSis3302.h:18
 TC2LSis3302.h:19
 TC2LSis3302.h:20
 TC2LSis3302.h:21
 TC2LSis3302.h:22
 TC2LSis3302.h:23
 TC2LSis3302.h:24
 TC2LSis3302.h:25
 TC2LSis3302.h:26
 TC2LSis3302.h:27
 TC2LSis3302.h:28
 TC2LSis3302.h:29
 TC2LSis3302.h:30
 TC2LSis3302.h:31
 TC2LSis3302.h:32
 TC2LSis3302.h:33
 TC2LSis3302.h:34
 TC2LSis3302.h:35
 TC2LSis3302.h:36
 TC2LSis3302.h:37
 TC2LSis3302.h:38
 TC2LSis3302.h:39
 TC2LSis3302.h:40
 TC2LSis3302.h:41
 TC2LSis3302.h:42
 TC2LSis3302.h:43
 TC2LSis3302.h:44
 TC2LSis3302.h:45
 TC2LSis3302.h:46
 TC2LSis3302.h:47
 TC2LSis3302.h:48
 TC2LSis3302.h:49
 TC2LSis3302.h:50
 TC2LSis3302.h:51
 TC2LSis3302.h:52
 TC2LSis3302.h:53
 TC2LSis3302.h:54
 TC2LSis3302.h:55
 TC2LSis3302.h:56
 TC2LSis3302.h:57
 TC2LSis3302.h:58
 TC2LSis3302.h:59
 TC2LSis3302.h:60
 TC2LSis3302.h:61
 TC2LSis3302.h:62
 TC2LSis3302.h:63
 TC2LSis3302.h:64
 TC2LSis3302.h:65
 TC2LSis3302.h:66
 TC2LSis3302.h:67
 TC2LSis3302.h:68
 TC2LSis3302.h:69
 TC2LSis3302.h:70
 TC2LSis3302.h:71
 TC2LSis3302.h:72
 TC2LSis3302.h:73
 TC2LSis3302.h:74
 TC2LSis3302.h:75
 TC2LSis3302.h:76
 TC2LSis3302.h:77
 TC2LSis3302.h:78
 TC2LSis3302.h:79
 TC2LSis3302.h:80
 TC2LSis3302.h:81
 TC2LSis3302.h:82
 TC2LSis3302.h:83
 TC2LSis3302.h:84
 TC2LSis3302.h:85
 TC2LSis3302.h:86
 TC2LSis3302.h:87
 TC2LSis3302.h:88
 TC2LSis3302.h:89
 TC2LSis3302.h:90
 TC2LSis3302.h:91
 TC2LSis3302.h:92
 TC2LSis3302.h:93
 TC2LSis3302.h:94
 TC2LSis3302.h:95
 TC2LSis3302.h:96
 TC2LSis3302.h:97
 TC2LSis3302.h:98
 TC2LSis3302.h:99
 TC2LSis3302.h:100
 TC2LSis3302.h:101
 TC2LSis3302.h:102
 TC2LSis3302.h:103
 TC2LSis3302.h:104
 TC2LSis3302.h:105
 TC2LSis3302.h:106
 TC2LSis3302.h:107
 TC2LSis3302.h:108
 TC2LSis3302.h:109
 TC2LSis3302.h:110
 TC2LSis3302.h:111
 TC2LSis3302.h:112
 TC2LSis3302.h:113
 TC2LSis3302.h:114
 TC2LSis3302.h:115
 TC2LSis3302.h:116
 TC2LSis3302.h:117
 TC2LSis3302.h:118
 TC2LSis3302.h:119
 TC2LSis3302.h:120
 TC2LSis3302.h:121
 TC2LSis3302.h:122
 TC2LSis3302.h:123
 TC2LSis3302.h:124
 TC2LSis3302.h:125
 TC2LSis3302.h:126
 TC2LSis3302.h:127
 TC2LSis3302.h:128
 TC2LSis3302.h:129
 TC2LSis3302.h:130
 TC2LSis3302.h:131
 TC2LSis3302.h:132
 TC2LSis3302.h:133
 TC2LSis3302.h:134
 TC2LSis3302.h:135
 TC2LSis3302.h:136
 TC2LSis3302.h:137
 TC2LSis3302.h:138
 TC2LSis3302.h:139
 TC2LSis3302.h:140
 TC2LSis3302.h:141
 TC2LSis3302.h:142
 TC2LSis3302.h:143
 TC2LSis3302.h:144
 TC2LSis3302.h:145
 TC2LSis3302.h:146
 TC2LSis3302.h:147
 TC2LSis3302.h:148
 TC2LSis3302.h:149
 TC2LSis3302.h:150
 TC2LSis3302.h:151
 TC2LSis3302.h:152
 TC2LSis3302.h:153
 TC2LSis3302.h:154
 TC2LSis3302.h:155
 TC2LSis3302.h:156
 TC2LSis3302.h:157
 TC2LSis3302.h:158
 TC2LSis3302.h:159
 TC2LSis3302.h:160
 TC2LSis3302.h:161
 TC2LSis3302.h:162
 TC2LSis3302.h:163
 TC2LSis3302.h:164
 TC2LSis3302.h:165
 TC2LSis3302.h:166
 TC2LSis3302.h:167
 TC2LSis3302.h:168
 TC2LSis3302.h:169
 TC2LSis3302.h:170
 TC2LSis3302.h:171
 TC2LSis3302.h:172
 TC2LSis3302.h:173
 TC2LSis3302.h:174
 TC2LSis3302.h:175
 TC2LSis3302.h:176
 TC2LSis3302.h:177
 TC2LSis3302.h:178
 TC2LSis3302.h:179