My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
AntennaControl.h
1 #ifndef GCP_MEDIATOR_ANTENNACONTROL_H
2 #define GCP_MEDIATOR_ANTENNACONTROL_H
3 
11 #include "gcp/util/specific/Directives.h"
12 
13 #include "gcp/util/common/GenericTask.h"
14 #include "gcp/util/common/LogMsgHandler.h"
15 #include "gcp/util/common/NetCommHandler.h"
16 #include "gcp/util/common/NetStr.h"
17 #include "gcp/util/common/TcpListener.h"
18 #include "gcp/util/common/TimeVal.h"
19 
20 #include "gcp/mediator/specific/ControlMsg.h"
21 
22 namespace gcp {
23  namespace mediator {
24 
29  class Control;
30 
35  public gcp::util::GenericTask<AntennaControlMsg> {
36 
37  public:
38 
42  AntennaControl(Control* parent);
43 
47  virtual ~AntennaControl();
48 
49  private:
50 
54  friend class Control;
55 
59  Control* parent_;
60 
64  static AntennaControl* control_;
65 
69  int nAntenna_;
70 
75  gcp::util::TcpListener* listener_;
76 
82  gcp::util::NetCommHandler temporaryHandler_;
83 
88  std::vector<gcp::util::NetCommHandler*> connectedHandlers_;
89 
93  std::list<AntennaControlMsg> initScript_;
94 
98  std::list<AntennaControlMsg>::iterator initScriptIter_;
99 
103  bool recordingInitScript_;
104 
108  bool initInProgress_;
109 
113  enum InitState {
114  UNINITIALIZED,
115  INITIALIZING,
116  INITIALIZED
117  };
118 
122  std::vector<InitState> antennaInitState_;
123 
124  enum ConnectState {
125  DISCONNECTED,
126  PENDING,
127  CONNECTED
128  };
129 
133  std::vector<ConnectState> antennaConnectState_;
134 
138  std::vector<bool> sendPending_;
139 
140  gcp::util::LogMsgHandler logMsgHandler_;
141 
145  void setPending(unsigned iant, bool pending);
146 
150  int nConnected_;
151 
155  gcp::util::TimeVal startTime_;
156  gcp::util::TimeVal timer_;
157  struct timeval* timeOut_;
158 
162  unsigned int pending_;
163 
167  bool haveControlConnection(unsigned short iant);
168 
172  void connectTcpIp();
173 
179  void processMsg(AntennaControlMsg* taskMsg);
180 
186  void processAntennaDriveMsg(AntennaControlMsg* taskMsg);
187 
193  void processTrackerMsg(AntennaControlMsg* taskMsg);
194 
199  void sendRtcNetCmd(AntennaControlMsg* msg);
200 
204  void decrementPending();
205 
209  static NET_SEND_HANDLER(netMsgSentHandler);
210 
214  static NET_SEND_HANDLER(netCmdSentHandler);
215 
220  static NET_ERROR_HANDLER(netErrorHandler);
221 
222  //------------------------------------------------------------
223  // Methods to do with antenna initialization
224  //------------------------------------------------------------
225 
229  void setInitState(InitState state);
230 
234  void recordInitMsg(AntennaControlMsg* msg);
235 
239  void beginInitScript();
240 
244  void sendNextInitMsg();
245 
249  void endInitScript();
250 
254  void sendNavUpdateMsg();
255 
259  bool haveAntennasReady();
260 
264  void flagAntenna(AntennaControlMsg* msg);
265 
270  bool listening();
271 
275  void serviceMsgQ();
276 
280  void initializeConnection();
281 
285  void finalizeConnection();
286 
290  void terminateConnection(gcp::util::NetCommHandler* str, bool shutdown=true);
291 
295  void terminateConnection(unsigned short iant, bool shutdown=true);
296 
300  void bufferLogMsg(gcp::util::NetMsg* msg);
301 
302  // Forward a net message to the control task
303 
304  void forwardNetMsg(gcp::util::NetMsg* msg);
305 
309  void sendGreetingMsg(gcp::util::NetCommHandler* netHandler);
310 
314  static NET_READ_HANDLER(processTemporaryNetMsg);
315  static NET_READ_HANDLER(processNetMsg);
316 
320  void listen(bool restartListening);
321 
325  bool timedOut();
326 
331  void startRecordingInitScript();
332 
336  void stopRecordingInitScript();
337 
338  }; // End class AntennaControl
339 
340 } // End namespace mediator
341 } // End namespace gcp
342 
343 #endif // End #ifndef
344 
345 
Definition: NetMsg.h:26
Definition: TimeVal.h:55
Definition: TcpListener.h:14
Definition: Control.h:53
Definition: LogMsgHandler.h:25
AntennaControl(Control *parent)
Definition: AntennaControl.cc:33
Definition: NetCommHandler.h:18
Definition: AntennaControl.h:34
Definition: GenericTask.h:33