ROOT logo
#ifndef TMBSCONTROL
#define TMBSCONTROL
#include "TTimer.h"
#include <TSocket.h>
#include <TObjString.h>
#include <TOrdCollection.h>

#include <iostream>
#include <iomanip>

namespace std {} using namespace std;

const Int_t kHeaderLength      = 54;  
const Int_t kRunTableLength    = 20;
const Int_t kServerTableLength = 17;
const Int_t kTypesLength       = 20;
const Int_t kMapLength         = 20;
const Int_t kActiveLength      = 20;
const Int_t kTextLength        = 64;

const Int_t kStatusPort  = 6008;
const Int_t kCommandPort = 6006;
const Int_t kMessagePort = 6007;

const Char_t kReadoutVSBAddress[] = "0xf0000000";
const Char_t kEvbVSBAddress[] =     "0xf5000000";

enum eMbsStates {absent, dirty, loaded, configured, running, paused, moving};

class TMbsNode : public TNamed {

protected:

   TOrdCollection * fProcessNames;
   Int_t fHeader[kHeaderLength];
   Int_t fRunTable[kRunTableLength];
   Int_t fServerTable[kServerTableLength];
   Int_t fTypes[kTypesLength];
   Int_t fMap[kMapLength];
   Int_t fActive[kActiveLength];

   Int_t fNbytesRead;
   Int_t fEndian;
   Int_t fProcType;

public:
   TMbsNode(){};
   TMbsNode(const Char_t * node);
   ~TMbsNode(){};

   Int_t  GetStatus();
   void   PrintHeader();
   Int_t  PrintProcesses();
   Int_t  GetNbytesRead(){ return fNbytesRead;};

   Char_t fUser[kTextLength];   
   Char_t fDaqDate[kTextLength];
   Char_t fRun[kTextLength];    
   Char_t fExper[kTextLength];  
   Char_t fNode[kTextLength];   
   Char_t fRemote[kTextLength]; 
   Char_t fDisp[kTextLength];   
   Char_t fStr[kTextLength];    
   Char_t fSetup[kTextLength];  
   Char_t fMlSetup[kTextLength];
   Char_t fReadout[kTextLength];
   Char_t fRemDir[kTextLength]; 
   Char_t fDevice[kTextLength]; 
   Char_t fTapeL[kTextLength];  
   Char_t fFile[kTextLength];   
   Char_t fTrCli[kTextLength]; 
    
   Int_t iE              (){return  fHeader[0];};
   Int_t iSize           (){return  fHeader[2];};
   Int_t iSwap           (){return  fHeader[3];};
   Int_t iProcs          (){return  fHeader[4];};
   Int_t iLength         (){return  fHeader[5];};
   Int_t iTrigs          (){return  fHeader[6];};
   Int_t iDaqInit        (){return  fHeader[7];};
   Int_t iRun            (){return  fHeader[9];};
   Int_t iProcsA         (){return  fHeader[10];};
   Int_t iSetup          (){return  fHeader[11];};
   Int_t iSetMl          (){return  fHeader[12];};
   Int_t iCamTab         (){return  fHeader[13];};
   Int_t laNevents       (){return  fHeader[15];};
   Int_t laNbuffers      (){return  fHeader[16];};
   Int_t laNstreams      (){return  fHeader[17];};
   Int_t laNKbyte        (){return  fHeader[18];};
   Int_t laNEvtServEv    (){return  fHeader[19];};
   Int_t laNEvtServKb    (){return  fHeader[20];};
   Int_t laNStrServBuf   (){return  fHeader[21];};
   Int_t laNStrServKb    (){return  fHeader[22];};
   Int_t laNTapeKb       (){return  fHeader[23];};
   Int_t laNFileKb       (){return  fHeader[24];};
   Int_t laRevents       (){return  fHeader[25];};
   Int_t laRbuffers      (){return  fHeader[26];};
   Int_t laRstreams      (){return  fHeader[27];};
   Int_t laRKbyte        (){return  fHeader[28];};
   Int_t laRFileKb       (){return  fHeader[29];};
   Int_t laREvtServEv    (){return  fHeader[30];};
   Int_t laREvtServKb    (){return  fHeader[31];};
   Int_t laRStrServBuf   (){return  fHeader[32];};
   Int_t laRStrServKb    (){return  fHeader[33];};
   Int_t iTapePos        (){return  fHeader[37];};
   Int_t iTapeSize       (){return  fHeader[38];};
   Int_t iFileMax        (){return  fHeader[40];};
   Int_t iFileCur        (){return  fHeader[41];};
   Int_t iFileSize       (){return  fHeader[42];};
   Int_t iFilePos        (){return  fHeader[43];};
   Int_t iRecSize        (){return  fHeader[45];};
   Int_t iOpenFile       (){return  fHeader[47];};
   Int_t iTrigger        (){return  fHeader[50];};

//  running table
   Int_t iCollector    (){return fRunTable[1];};
   Int_t iTransport    (){return fRunTable[2];};
   Int_t iEvServ       (){return fRunTable[3];};
   Int_t iStrServ      (){return fRunTable[10];};
   Int_t iPrompt       (){return fRunTable[12];};

   Int_t iStrsrvScale    (){return fServerTable[6];};
   Int_t iStrsrvSync     (){return fServerTable[7];};
   Int_t iStrsrvNosync   (){return fServerTable[8];};
   Int_t iStrsrvKeep     (){return fServerTable[9];};
   Int_t iStrsrvNokeep   (){return fServerTable[10];};
   Int_t iStrsrvScaled   (){return fServerTable[11];};
   Int_t iEvtsrvScale    (){return fServerTable[12];};
   Int_t iEvtsrvEvents   (){return fServerTable[13];};
   Int_t iEvtsrvMaxcli   (){return fServerTable[14];};
   Int_t iEvtsrvAll      (){return fServerTable[15];};
   Int_t iEsosrvMaxcli   (){return fServerTable[16];};

ClassDef(TMbsNode,1)
};

//____________________________________________________________________

class TMbsControl : public TObject {

protected:
   TOrdCollection * fNodes;
   TOrdCollection * fNodeNames;
   TMbsNode * fPrompterNode;
   TMbsNode * fTriggerNode;
   TMbsNode * fCollectorNode;
   TString fCurNode;
   TString fCurDomain;
   TString fMBSVersion;
   TString fProcType;
   TString fFullDir;
   TString fDir;
   TString fUserName;
   TString fGuiNode;
   TString fDisplay;
   Bool_t fUseSSH;
   TString fRshSshCmd;
   TSocket * fPrompterSocket;

public:
   TMbsControl(){};
   TMbsControl(const Char_t * node, const Char_t * procType, Bool_t UseSSH, const Char_t * version, const Char_t * dir);
   ~TMbsControl(){};
   TMbsNode * PrompterNode(){return fPrompterNode;};
   TMbsNode * TriggerNode() {return fTriggerNode;};
   Bool_t PrompterConnected() {return fPrompterSocket != 0;};
   Int_t  GetNodeNames();
   Int_t  GetMbsNodes();
   Int_t  GetNofMbsProcs();
   TSocket * GetPrompterSocket() {return fPrompterSocket;};
   Bool_t IdentifyMbsNodes();
   Bool_t StartMbs(Int_t Interrupt = 0);
   Bool_t StopMbs();
   Bool_t ConnectPrompter(Int_t timeout = 10);
   Bool_t DisConnectPrompter();
   Int_t  SendToPrompter(const char * cmd);
   Int_t  GetFromPrompter(char * rchar, Int_t nbytes = 64);
//   Bool_t StartMessageServer(){};
   Bool_t Startup(Bool_t debug = kFALSE);
   Bool_t Reload(Bool_t debug = kFALSE);
   Bool_t  Shutdown();
   Bool_t  InitMbs();
   Bool_t  StartAcquisition();
   Bool_t  StopAcquisition();
//   void   Swap(Int_t * data, Int_t ndata, Int_t ie);
//____________________________________________________________________

ClassDef(TMbsControl,1)
};
//_____________________________________________________________________________________

class MessageServer : public TTimer{

protected:
   TSocket * fMessageSocket;
   Int_t fLogLevel;
public:
   MessageServer(const Char_t * msgnode, Long_t ms, Bool_t synch);
   ~MessageServer() {
      if(fMessageSocket) {
         fMessageSocket->Close();
         delete fMessageSocket;
         fMessageSocket = NULL;
      } 
   };
   Bool_t DisConnect();
   void   SetLogLevel(Int_t ll){fLogLevel = ll;};
   Int_t  GetLogLevel(){return fLogLevel;};
   Bool_t Notify();
   Bool_t ReadNotify(){return Notify();}
//   void   Swap(Int_t * data, Int_t ndata, Int_t ie);
ClassDef(MessageServer,0)
};
#endif
 TMbsControl.h:1
 TMbsControl.h:2
 TMbsControl.h:3
 TMbsControl.h:4
 TMbsControl.h:5
 TMbsControl.h:6
 TMbsControl.h:7
 TMbsControl.h:8
 TMbsControl.h:9
 TMbsControl.h:10
 TMbsControl.h:11
 TMbsControl.h:12
 TMbsControl.h:13
 TMbsControl.h:14
 TMbsControl.h:15
 TMbsControl.h:16
 TMbsControl.h:17
 TMbsControl.h:18
 TMbsControl.h:19
 TMbsControl.h:20
 TMbsControl.h:21
 TMbsControl.h:22
 TMbsControl.h:23
 TMbsControl.h:24
 TMbsControl.h:25
 TMbsControl.h:26
 TMbsControl.h:27
 TMbsControl.h:28
 TMbsControl.h:29
 TMbsControl.h:30
 TMbsControl.h:31
 TMbsControl.h:32
 TMbsControl.h:33
 TMbsControl.h:34
 TMbsControl.h:35
 TMbsControl.h:36
 TMbsControl.h:37
 TMbsControl.h:38
 TMbsControl.h:39
 TMbsControl.h:40
 TMbsControl.h:41
 TMbsControl.h:42
 TMbsControl.h:43
 TMbsControl.h:44
 TMbsControl.h:45
 TMbsControl.h:46
 TMbsControl.h:47
 TMbsControl.h:48
 TMbsControl.h:49
 TMbsControl.h:50
 TMbsControl.h:51
 TMbsControl.h:52
 TMbsControl.h:53
 TMbsControl.h:54
 TMbsControl.h:55
 TMbsControl.h:56
 TMbsControl.h:57
 TMbsControl.h:58
 TMbsControl.h:59
 TMbsControl.h:60
 TMbsControl.h:61
 TMbsControl.h:62
 TMbsControl.h:63
 TMbsControl.h:64
 TMbsControl.h:65
 TMbsControl.h:66
 TMbsControl.h:67
 TMbsControl.h:68
 TMbsControl.h:69
 TMbsControl.h:70
 TMbsControl.h:71
 TMbsControl.h:72
 TMbsControl.h:73
 TMbsControl.h:74
 TMbsControl.h:75
 TMbsControl.h:76
 TMbsControl.h:77
 TMbsControl.h:78
 TMbsControl.h:79
 TMbsControl.h:80
 TMbsControl.h:81
 TMbsControl.h:82
 TMbsControl.h:83
 TMbsControl.h:84
 TMbsControl.h:85
 TMbsControl.h:86
 TMbsControl.h:87
 TMbsControl.h:88
 TMbsControl.h:89
 TMbsControl.h:90
 TMbsControl.h:91
 TMbsControl.h:92
 TMbsControl.h:93
 TMbsControl.h:94
 TMbsControl.h:95
 TMbsControl.h:96
 TMbsControl.h:97
 TMbsControl.h:98
 TMbsControl.h:99
 TMbsControl.h:100
 TMbsControl.h:101
 TMbsControl.h:102
 TMbsControl.h:103
 TMbsControl.h:104
 TMbsControl.h:105
 TMbsControl.h:106
 TMbsControl.h:107
 TMbsControl.h:108
 TMbsControl.h:109
 TMbsControl.h:110
 TMbsControl.h:111
 TMbsControl.h:112
 TMbsControl.h:113
 TMbsControl.h:114
 TMbsControl.h:115
 TMbsControl.h:116
 TMbsControl.h:117
 TMbsControl.h:118
 TMbsControl.h:119
 TMbsControl.h:120
 TMbsControl.h:121
 TMbsControl.h:122
 TMbsControl.h:123
 TMbsControl.h:124
 TMbsControl.h:125
 TMbsControl.h:126
 TMbsControl.h:127
 TMbsControl.h:128
 TMbsControl.h:129
 TMbsControl.h:130
 TMbsControl.h:131
 TMbsControl.h:132
 TMbsControl.h:133
 TMbsControl.h:134
 TMbsControl.h:135
 TMbsControl.h:136
 TMbsControl.h:137
 TMbsControl.h:138
 TMbsControl.h:139
 TMbsControl.h:140
 TMbsControl.h:141
 TMbsControl.h:142
 TMbsControl.h:143
 TMbsControl.h:144
 TMbsControl.h:145
 TMbsControl.h:146
 TMbsControl.h:147
 TMbsControl.h:148
 TMbsControl.h:149
 TMbsControl.h:150
 TMbsControl.h:151
 TMbsControl.h:152
 TMbsControl.h:153
 TMbsControl.h:154
 TMbsControl.h:155
 TMbsControl.h:156
 TMbsControl.h:157
 TMbsControl.h:158
 TMbsControl.h:159
 TMbsControl.h:160
 TMbsControl.h:161
 TMbsControl.h:162
 TMbsControl.h:163
 TMbsControl.h:164
 TMbsControl.h:165
 TMbsControl.h:166
 TMbsControl.h:167
 TMbsControl.h:168
 TMbsControl.h:169
 TMbsControl.h:170
 TMbsControl.h:171
 TMbsControl.h:172
 TMbsControl.h:173
 TMbsControl.h:174
 TMbsControl.h:175
 TMbsControl.h:176
 TMbsControl.h:177
 TMbsControl.h:178
 TMbsControl.h:179
 TMbsControl.h:180
 TMbsControl.h:181
 TMbsControl.h:182
 TMbsControl.h:183
 TMbsControl.h:184
 TMbsControl.h:185
 TMbsControl.h:186
 TMbsControl.h:187
 TMbsControl.h:188
 TMbsControl.h:189
 TMbsControl.h:190
 TMbsControl.h:191
 TMbsControl.h:192
 TMbsControl.h:193
 TMbsControl.h:194
 TMbsControl.h:195
 TMbsControl.h:196
 TMbsControl.h:197
 TMbsControl.h:198
 TMbsControl.h:199
 TMbsControl.h:200
 TMbsControl.h:201
 TMbsControl.h:202
 TMbsControl.h:203
 TMbsControl.h:204
 TMbsControl.h:205
 TMbsControl.h:206
 TMbsControl.h:207
 TMbsControl.h:208
 TMbsControl.h:209
 TMbsControl.h:210
 TMbsControl.h:211
 TMbsControl.h:212
 TMbsControl.h:213