1 #ifndef _ots_EpicsInterface_h
2 #define _ots_EpicsInterface_h
13 #include <arpa/inet.h>
17 #include <netinet/in.h>
21 #include <sys/socket.h>
22 #include <sys/types.h>
28 #include "otsdaq/SlowControlsCore/SlowControlsVInterface.h"
52 PVAlerts(time_t t,
const char* c,
const char* d)
65 PVInfo(chtype tmpChannelType)
67 channelType = tmpChannelType;
71 std::pair<time_t, std::string> filler(0,
"");
77 chid channelID = NULL;
83 unsigned int mostRecentBufferIndex = -1;
84 std::vector<std::pair<time_t, std::string>>
89 std::queue<PVAlerts> alerts;
91 struct dbr_ctrl_double settings;
96 PGconn *dcsArchiveDbConn;
97 PGconn *dcsAlarmDbConn;
99 int dcsArchiveDbConnStatus_;
100 int dcsAlarmDbConnStatus_;
101 int dcsLogDbConnStatus_;
107 const std::string& pluginType,
108 const std::string& interfaceUID,
109 const ConfigurationTree& theXDAQContextConfigTree,
110 const std::string& controlsConfigurationPath);
113 static const std::string EPICS_NO_ALARM;
114 static const std::string EPICS_INVALID_ALARM;
115 static const std::string EPICS_MINOR_ALARM;
116 static const std::string EPICS_MAJOR_ALARM;
118 void initialize (
void)
override;
121 std::vector<std::string> getChannelList (
void)
override;
122 std::string getList (
const std::string& format)
override;
123 void subscribe (
const std::string& pvName)
override;
124 void subscribeJSON (
const std::string& JSONpvList)
override;
125 void unsubscribe (
const std::string& pvName)
override;
126 std::array<std::string, 4> getCurrentValue (
const std::string& pvName)
override;
127 std::array<std::string, 9> getSettings (
const std::string& pvName)
override;
128 std::vector<std::vector<std::string>> getChannelHistory (
const std::string& pvName,
int startTime,
int endTime)
override;
129 std::vector<std::vector<std::string>> getLastAlarms (
const std::string& pvName)
override;
130 std::vector<std::vector<std::string>> getAlarmsLog (
const std::string& pvName)
override;
132 std::vector<std::string>
checkAlarm (
const std::string& pvName,
bool ignoreMinor =
false);
134 void dbSystemLogin (
void);
135 void dbSystemLogout (
void);
138 void handleAlarmsForFSM (
const std::string& fsmTransitionName, ConfigurationTree LinkToAlarmsToMonitor);
143 virtual void halt (
void)
override { handleAlarmsForFSM(
"halt", getSelfNode().getNode(
"LinkToHaltAlarmsToMonitorTable")); }
144 virtual void pause (
void)
override { handleAlarmsForFSM(
"pause", getSelfNode().getNode(
"LinkToPauseAlarmsToMonitorTable")); }
145 virtual void resume (
void)
override { handleAlarmsForFSM(
"resume", getSelfNode().getNode(
"LinkToResumeAlarmsToMonitorTable")); }
146 virtual void start (std::string )
override { handleAlarmsForFSM(
"start",getSelfNode().getNode(
"LinkToStartAlarmsToMonitorTable")); }
147 virtual void stop (
void)
override { handleAlarmsForFSM(
"stop", getSelfNode().getNode(
"LinkToStopAlarmsToMonitorTable")); }
150 virtual bool running (
void)
override { handleAlarmsForFSM(
"running", getSelfNode().getNode(
"LinkToRunningAlarmsToMonitorTable")); sleep(1);
return true;}
154 bool checkIfPVExists (
const std::string& pvName);
155 void loadListOfPVs (
void);
156 void getControlValues (
const std::string& pvName);
157 void createChannel (
const std::string& pvName);
158 void destroyChannel (
const std::string& pvName);
159 void subscribeToChannel (
const std::string& pvName, chtype subscriptionType);
160 void cancelSubscriptionToChannel(
const std::string& pvName);
161 void readValueFromPV (
const std::string& pvName);
162 void writePVValueToRecord (
const std::string& pvName,
const std::string& pdata);
164 void writePVControlValueToRecord(
const std::string& pvName,
struct dbr_ctrl_double* pdata);
165 void writePVAlertToQueue (
const std::string& pvName,
const char* status,
const char* severity);
166 void readPVRecord (
const std::string& pvName);
167 void debugConsole (
const std::string& pvName);
168 static void eventCallback (
struct event_handler_args eha);
169 static void eventCallbackAlarm (
struct event_handler_args eha);
170 static void staticChannelCallbackHandler(
struct connection_handler_args cha);
171 static void accessRightsCallback (
struct access_rights_handler_args args);
172 static void printChidInfo (chid chid,
const std::string& message);
173 void channelCallbackHandler (
struct connection_handler_args& cha);
174 void popQueue (
const std::string& pvName);
178 std::map<std::string, PVInfo*> mapOfPVInfo_;
180 std::string loginErrorMsg_;
std::vector< std::string > checkAlarm(const std::string &pvName, bool ignoreMinor=false)
virtual void configure(void) override
Configure override for Epics.
virtual bool running(void) override
States.
std::vector< std::vector< std::string > > checkAlarmNotifications(void) override
Check Alarms from Epics.
std::vector< std::pair< time_t, std::string > > dataCache
(10, std::pair<time_t, std::string> (0, ""));
int circularBufferSize
Default Guess.