otsdaq  3.10.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  unsigned int getMinReadyForEventGenerationStartIteration(void) const override;
40 
41  void universalRead(const std::string& interfaceID,
42  char* address,
43  char* returnValue);
44  void universalWrite(const std::string& interfaceID,
45  char* address,
46  char* writeValue);
47  std::string getFEListString(
48  const std::string& supervisorLid);
49  std::string getFEMacrosString(
50  const std::string& supervisorName,
51  const std::string& supervisorLid);
52  void runFEMacro(
53  const std::string& interfaceID,
55  const std::string& inputArgs,
56  std::string& outputArgs);
57  void runFEMacro(const std::string& interfaceID,
58  const std::string& feMacroName,
59  const std::string& inputArgs,
60  std::string& outputArgs);
61  void runMacro(const std::string& interfaceID,
62  const std::string& macroObjectString,
63  const std::string& inputArgs,
64  std::string& outputArgs);
65  void runFEMacroByFE(
66  const std::string& callingInterfaceID,
67  const std::string& interfaceID,
68  const std::string& feMacroName,
69  const std::string& inputArgs,
70  std::string& outputArgs);
72  const std::string& requester,
73  const std::string& interfaceID,
74  const std::string& feMacroName,
75  const bool enableSavingOutput,
76  const std::string& outputFilePath,
77  const std::string& outputFileRadix,
78  const std::string& inputArgs);
80  const std::string& requester,
81  const std::string& interfaceID,
82  const std::string& macroName,
83  const std::string& macroString,
84  const bool enableSavingOutput,
85  const std::string& outputFilePath,
86  const std::string& outputFileRadix,
87  const std::string& inputArgs);
89  const std::string& interfaceID,
90  const std::string& macroName);
91 
93  const std::string& interfaceID);
94  unsigned int getInterfaceUniversalDataSize(
95  const std::string& interfaceID);
96  bool allFEWorkloopsAreDone(void);
97  const FEVInterface& getFEInterface(const std::string& interfaceID) const;
98 
99  const std::map<std::string /*name*/, std::unique_ptr<FEVInterface> >& getFEInterfaces(
100  void) const
101  {
102  return theFEInterfaces_;
103  }
104  FEVInterface* getFEInterfaceP(const std::string& interfaceID);
105 
108  std::map<
109  std::string /*targetInterfaceID*/,
111  std::map<std::string /*requester*/, std::queue<std::string /*value*/> > >
112  frontEndCommunicationReceiveBuffer_;
113 
116  std::map<
117  std::string /*targetInterfaceID*/,
119  std::string /*status := Active, Done, Error: <message> */>
120  macroMultiDimensionalStatusMap_;
121 
122  private:
123  std::map<std::string /*name*/, std::unique_ptr<FEVInterface> > theFEInterfaces_;
124  std::vector<std::string /*name*/> theFENamesByPriority_;
125 
127  std::map<std::string /*name*/, bool /*isDone*/> stateMachinesIterationDone_;
128  unsigned int stateMachinesIterationWorkCount_;
129  unsigned int subIterationWorkStateMachineIndex_;
130  void preStateMachineExecution(unsigned int i, const std::string& transitionName);
131  bool postStateMachineExecution(unsigned int i);
132  void preStateMachineExecutionLoop(void);
133  void postStateMachineExecutionLoop(void);
134 };
135 
136 } // namespace ots
137 
138 #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
defines used also by OtsConfigurationWizardSupervisor
< members fully define a front-end macro function
Definition: FEVInterface.h:178