otsdaq  3.11.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 <set>
9 #include <string>
10 #include "otsdaq/Configurable/Configurable.h"
11 #include "otsdaq/FECore/FEVInterface.h"
12 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
13 
14 namespace ots
15 {
20 {
21  public:
22  FEVInterfacesManager(const ConfigurationTree& theXDAQContextConfigTree,
23  const std::string& supervisorConfigurationPath);
24  virtual ~FEVInterfacesManager(void);
25 
27  void init(void);
28  void destroy(void);
29  void createInterfaces(void);
30 
32  virtual void configure(void) override;
33  virtual void halt(void) override;
34  virtual void pause(void) override;
35  virtual void resume(void) override;
36  virtual void start(std::string runNumber) override;
37  virtual void stop(void) override;
38  virtual std::string getStatusProgressDetail(
39  void) override;
40  unsigned int getMinReadyForEventGenerationStartIteration(void) const override;
41 
42  void universalRead(const std::string& interfaceID,
43  char* address,
44  char* returnValue);
45  void universalWrite(const std::string& interfaceID,
46  char* address,
47  char* writeValue);
48  std::string getFEListString(
49  const std::string& supervisorLid);
50  std::string getFEMacrosString(
51  const std::string& supervisorName,
52  const std::string& supervisorLid);
53  std::map<std::string, std::string> getFEMacroInputDefaults(
54  const std::string& interfaceID,
55  const std::string& feMacroName,
56  const std::string& inputArgs);
57  void runFEMacro(
58  const std::string& interfaceID,
60  const std::string& inputArgs,
61  std::string& outputArgs);
62  void runFEMacro(const std::string& interfaceID,
63  const std::string& feMacroName,
64  const std::string& inputArgs,
65  std::string& outputArgs);
66  void runMacro(const std::string& interfaceID,
67  const std::string& macroObjectString,
68  const std::string& inputArgs,
69  std::string& outputArgs);
70  void runFEMacroByFE(
71  const std::string& callingInterfaceID,
72  const std::string& interfaceID,
73  const std::string& feMacroName,
74  const std::string& inputArgs,
75  std::string& outputArgs);
77  const std::string& requester,
78  const std::string& interfaceID,
79  const std::string& feMacroName,
80  const bool enableSavingOutput,
81  const std::string& outputFilePath,
82  const std::string& outputFileRadix,
83  const std::string& inputArgs);
85  const std::string& requester,
86  const std::string& interfaceID,
87  const std::string& macroName,
88  const std::string& macroString,
89  const bool enableSavingOutput,
90  const std::string& outputFilePath,
91  const std::string& outputFileRadix,
92  const std::string& inputArgs);
94  const std::string& interfaceID,
95  const std::string& macroName,
96  std::string* outputFile = nullptr);
97 
99  const std::string& interfaceID);
100  unsigned int getInterfaceUniversalDataSize(
101  const std::string& interfaceID);
102  bool allFEWorkloopsAreDone(void);
103  const FEVInterface& getFEInterface(const std::string& interfaceID) const;
104 
105  const std::map<std::string /*name*/, std::unique_ptr<FEVInterface> >& getFEInterfaces(
106  void) const
107  {
108  return theFEInterfaces_;
109  }
110  FEVInterface* getFEInterfaceP(const std::string& interfaceID);
111 
114  std::map<
115  std::string /*targetInterfaceID*/,
117  std::map<std::string /*requester*/, std::queue<std::string /*value*/> > >
118  frontEndCommunicationReceiveBuffer_;
119 
122  std::map<
123  std::string /*targetInterfaceID*/,
125  std::string /*status := Active, Done, Error: <message> */>
126  macroMultiDimensionalStatusMap_;
127  std::map<std::string /*targetInterfaceID*/, std::string /*output file path*/>
129 
130  private:
131  std::map<std::string /*name*/, std::unique_ptr<FEVInterface> > theFEInterfaces_;
132  std::vector<std::string /*name*/> theFENamesByPriority_;
133 
135  std::map<std::string /*name*/, bool /*isDone*/> stateMachinesIterationDone_;
136  std::set<std::string /*name*/> stateMachinesWaitingSubsystemIteration_;
137  unsigned int lastSubsystemIterationIndexSeen_ = 0;
138  unsigned int stateMachinesIterationWorkCount_;
139  unsigned int subIterationWorkStateMachineIndex_;
140  void preStateMachineExecution(unsigned int i, const std::string& transitionName);
141  bool postStateMachineExecution(unsigned int i);
142  void preStateMachineExecutionLoop(void);
143  void postStateMachineExecutionLoop(void);
144 };
145 
146 } // namespace ots
147 
148 #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.
std::map< std::string, std::string > macroMultiDimensionalOutputFileMap_
set when saving outputs; guarded by macroMultiDimensionalDoneMutex_
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)
bool checkMacroMultiDimensional(const std::string &interfaceID, const std::string &macroName, std::string *outputFile=nullptr)
used by iterator calling (i.e. FESupervisor); on Done, outputFile receives the saved-output path ("" ...
unsigned int getInterfaceUniversalDataSize(const std::string &interfaceID)
used by MacroMaker
void universalRead(const std::string &interfaceID, char *address, char *returnValue)
used by MacroMaker
std::map< std::string, std::string > getFEMacroInputDefaults(const std::string &interfaceID, const std::string &feMacroName, const std::string &inputArgs)
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)
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:180