tdaq-develop-2025-02-12
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(const std::string& supervisorLid);
47  std::string getFEMacrosString(
48  const std::string& supervisorName,
49  const std::string& supervisorLid);
50  void runFEMacro(
51  const std::string& interfaceID,
53  const std::string& inputArgs,
54  std::string& outputArgs);
55  void runFEMacro(const std::string& interfaceID,
56  const std::string& feMacroName,
57  const std::string& inputArgs,
58  std::string& outputArgs);
59  void runMacro(const std::string& interfaceID,
60  const std::string& macroObjectString,
61  const std::string& inputArgs,
62  std::string& outputArgs);
63  void runFEMacroByFE(
64  const std::string& callingInterfaceID,
65  const std::string& interfaceID,
66  const std::string& feMacroName,
67  const std::string& inputArgs,
68  std::string& outputArgs);
70  const std::string& requester,
71  const std::string& interfaceID,
72  const std::string& feMacroName,
73  const bool enableSavingOutput,
74  const std::string& outputFilePath,
75  const std::string& outputFileRadix,
76  const std::string& inputArgs);
78  const std::string& requester,
79  const std::string& interfaceID,
80  const std::string& macroName,
81  const std::string& macroString,
82  const bool enableSavingOutput,
83  const std::string& outputFilePath,
84  const std::string& outputFileRadix,
85  const std::string& inputArgs);
87  const std::string& interfaceID,
88  const std::string& macroName);
89 
91  const std::string& interfaceID);
92  unsigned int getInterfaceUniversalDataSize(
93  const std::string& interfaceID);
94  bool allFEWorkloopsAreDone(void);
95  const FEVInterface& getFEInterface(const std::string& interfaceID) const;
96 
97  const std::map<std::string /*name*/, std::unique_ptr<FEVInterface> >& getFEInterfaces(
98  void) const
99  {
100  return theFEInterfaces_;
101  }
102  FEVInterface* getFEInterfaceP(const std::string& interfaceID);
103 
106  std::map<std::string /*targetInterfaceID*/,
108  std::map<std::string /*requester*/, std::queue<std::string /*value*/> > >
109  frontEndCommunicationReceiveBuffer_;
110 
113  std::map<std::string /*targetInterfaceID*/,
115  std::string /*status := Active, Done, Error: <message> */>
116  macroMultiDimensionalStatusMap_;
117 
118  private:
119  std::map<std::string /*name*/, std::unique_ptr<FEVInterface> > theFEInterfaces_;
120  std::vector<std::string /*name*/> theFENamesByPriority_;
121 
123  std::map<std::string /*name*/, bool /*isDone*/> stateMachinesIterationDone_;
124  unsigned int stateMachinesIterationWorkCount_;
125  unsigned int subIterationWorkStateMachineIndex_;
126  void preStateMachineExecution(unsigned int i, const std::string& transitionName);
127  bool postStateMachineExecution(unsigned int i);
128  void preStateMachineExecutionLoop(void);
129  void postStateMachineExecutionLoop(void);
130 };
131 
132 } // namespace ots
133 
134 #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:146