otsdaq  3.03.00
FEVInterfacesManager.h
1 #ifndef _ots_FEVInterfacesManager_h_
2 #define _ots_FEVInterfacesManager_h_
3 
4 #include <map>
5 #include <memory>
6 #include <mutex>
7 #include <queue>
8 #include <string>
9 #include "otsdaq/Configurable/Configurable.h"
10 #include "otsdaq/FECore/FEVInterface.h"
11 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
12 
13 namespace ots
14 {
19 {
20  public:
21  FEVInterfacesManager(const ConfigurationTree& theXDAQContextConfigTree,
22  const std::string& supervisorConfigurationPath);
23  virtual ~FEVInterfacesManager(void);
24 
26  void init(void);
27  void destroy(void);
28  void createInterfaces(void);
29 
31  virtual void configure(void) override;
32  virtual void halt(void) override;
33  virtual void pause(void) override;
34  virtual void resume(void) override;
35  virtual void start(std::string runNumber) override;
36  virtual void stop(void) override;
37  virtual std::string getStatusProgressDetail(
38  void) override;
39 
40  void universalRead(const std::string& interfaceID,
41  char* address,
42  char* returnValue);
43  void universalWrite(const std::string& interfaceID,
44  char* address,
45  char* writeValue);
46  std::string getFEListString(
47  const std::string& supervisorLid);
48  std::string getFEMacrosString(
49  const std::string& supervisorName,
50  const std::string& supervisorLid);
51  void runFEMacro(
52  const std::string& interfaceID,
54  const std::string& inputArgs,
55  std::string& outputArgs);
56  void runFEMacro(const std::string& interfaceID,
57  const std::string& feMacroName,
58  const std::string& inputArgs,
59  std::string& outputArgs);
60  void runMacro(const std::string& interfaceID,
61  const std::string& macroObjectString,
62  const std::string& inputArgs,
63  std::string& outputArgs);
64  void runFEMacroByFE(
65  const std::string& callingInterfaceID,
66  const std::string& interfaceID,
67  const std::string& feMacroName,
68  const std::string& inputArgs,
69  std::string& outputArgs);
71  const std::string& requester,
72  const std::string& interfaceID,
73  const std::string& feMacroName,
74  const bool enableSavingOutput,
75  const std::string& outputFilePath,
76  const std::string& outputFileRadix,
77  const std::string& inputArgs);
79  const std::string& requester,
80  const std::string& interfaceID,
81  const std::string& macroName,
82  const std::string& macroString,
83  const bool enableSavingOutput,
84  const std::string& outputFilePath,
85  const std::string& outputFileRadix,
86  const std::string& inputArgs);
88  const std::string& interfaceID,
89  const std::string& macroName);
90 
92  const std::string& interfaceID);
93  unsigned int getInterfaceUniversalDataSize(
94  const std::string& interfaceID);
95  bool allFEWorkloopsAreDone(void);
96  const FEVInterface& getFEInterface(const std::string& interfaceID) const;
97 
98  const std::map<std::string /*name*/, std::unique_ptr<FEVInterface> >& getFEInterfaces(
99  void) const
100  {
101  return theFEInterfaces_;
102  }
103  FEVInterface* getFEInterfaceP(const std::string& interfaceID);
104 
107  std::map<
108  std::string /*targetInterfaceID*/,
110  std::map<std::string /*requester*/, std::queue<std::string /*value*/> > >
111  frontEndCommunicationReceiveBuffer_;
112 
115  std::map<
116  std::string /*targetInterfaceID*/,
118  std::string /*status := Active, Done, Error: <message> */>
119  macroMultiDimensionalStatusMap_;
120 
121  private:
122  std::map<std::string /*name*/, std::unique_ptr<FEVInterface> > theFEInterfaces_;
123  std::vector<std::string /*name*/> theFENamesByPriority_;
124 
126  std::map<std::string /*name*/, bool /*isDone*/> stateMachinesIterationDone_;
127  unsigned int stateMachinesIterationWorkCount_;
128  unsigned int subIterationWorkStateMachineIndex_;
129  void preStateMachineExecution(unsigned int i, const std::string& transitionName);
130  bool postStateMachineExecution(unsigned int i);
131  void preStateMachineExecutionLoop(void);
132  void postStateMachineExecutionLoop(void);
133 };
134 
135 } // namespace ots
136 
137 #endif
const FEVInterface & getFEInterface(const std::string &interfaceID) const
getFEInterface
std::string getFEMacrosString(const std::string &supervisorName, const std::string &supervisorLid)
used by MacroMaker
std::mutex macroMultiDimensionalDoneMutex_
multi-dimensional FE Macro helpers
FEVInterface * getFEInterfaceP(const std::string &interfaceID)
getFEInterfaceP
void runFEMacro(const std::string &interfaceID, const FEVInterface::frontEndMacroStruct_t &feMacro, const std::string &inputArgs, std::string &outputArgs)
used by MacroMaker and FE calling indirectly
unsigned int getInterfaceUniversalAddressSize(const std::string &interfaceID)
used by MacroMaker
void startFEMacroMultiDimensional(const std::string &requester, const std::string &interfaceID, const std::string &feMacroName, const bool enableSavingOutput, const std::string &outputFilePath, const std::string &outputFileRadix, const std::string &inputArgs)
used by iterator calling (i.e. FESupervisor)
void universalWrite(const std::string &interfaceID, char *address, char *writeValue)
used by MacroMaker
bool allFEWorkloopsAreDone(void)
used by Iterator, e.g.
virtual void configure(void) override
State Machine Methods.
void runFEMacroByFE(const std::string &callingInterfaceID, const std::string &interfaceID, const std::string &feMacroName, const std::string &inputArgs, std::string &outputArgs)
used by FE calling (i.e. FESupervisor)
unsigned int getInterfaceUniversalDataSize(const std::string &interfaceID)
used by MacroMaker
void universalRead(const std::string &interfaceID, char *address, char *returnValue)
used by MacroMaker
virtual std::string getStatusProgressDetail(void) override
overriding VStateMachine::getStatusProgressDetail
void startMacroMultiDimensional(const std::string &requester, const std::string &interfaceID, const std::string &macroName, const std::string &macroString, const bool enableSavingOutput, const std::string &outputFilePath, const std::string &outputFileRadix, const std::string &inputArgs)
used by iterator calling (i.e. FESupervisor)
bool checkMacroMultiDimensional(const std::string &interfaceID, const std::string &macroName)
used by iterator calling (i.e. FESupervisor)
std::mutex frontEndCommunicationReceiveMutex_
FE communication helpers.
void runMacro(const std::string &interfaceID, const std::string &macroObjectString, const std::string &inputArgs, std::string &outputArgs)
used by MacroMaker
std::string getFEListString(const std::string &supervisorLid)
used by MacroMaker
< members fully define a front-end macro function
Definition: FEVInterface.h:169