My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
servoCommsSa.h
1 #ifndef SERVOCOMMSSA_H
2 #define SERVOCOMMSSA_H
3 
12 // Required C header files from the array control code
13 
14 #include "gcp/control/code/unix/libunix_src/common/regmap.h" // RegMapBlock
15 
16 #include "gcp/antenna/control/specific/AxisPositions.h"
17 #include "gcp/antenna/control/specific/Board.h"
18 #include "gcp/antenna/control/specific/Model.h"
19 #include "gcp/antenna/control/specific/ServoCommandSa.h"
20 #include "gcp/antenna/control/specific/PmacTarget.h"
21 
22 #include "gcp/util/common/Angle.h"
23 #include "gcp/util/common/FdSet.h"
24 
25 #include <termios.h>
26 
27 #include <string>
28 
34 #define SERVO_TIMEOUT_USEC 150000
35 
36 namespace gcp {
37  namespace antenna {
38  namespace control {
39 
40  class SpecificShare;
41 
42  class ServoCommsSa : public Board {
43 
44  public:
45 
49  ServoCommsSa(SpecificShare* share, std::string name, bool sim);
50 
54  ServoCommsSa();
55 
59  ~ServoCommsSa();
60 
66  void haltAntenna();
67  void hardStopAntenna();
68  void initializeAntenna();
69  void queryStatus();
70  void queryStatus(gcp::util::TimeVal& currTime);
71  void queryAntPositions();
72  void queryAntPositions(gcp::util::TimeVal& currTime);
73 
74  bool readPosition(AxisPositions* axes, Model* model);
75  void commandNewPosition(PmacTarget* pmac);
76  void commandNewPosition(PmacTarget* pmac, PmacTarget* pmac1, PmacTarget* pmac2, gcp::util::TimeVal& mjd);
77 
82  bool isThermalTripped();
83  bool isLidOpen();
84  bool isBrakeOn();
85  bool isInitialized();
86 
87  /*
88  * Check for first part of initialization
89  */
90  bool isPartOneComplete();
91 
95  void finishInitialization();
96 
101  void fillUtc(gcp::util::TimeVal& currTime);
102 
103 
109  bool connect();
110 
114  void disconnect();
115 
119  bool servoIsConnected();
120 
124  void sendCommand(ServoCommandSa& command);
125 
131  int readResponse(ServoCommandSa& command);
132 
133  // Return true if the servo is not ready for another command
134 
135  bool isBusy();
136 
137  unsigned readPositionFault();
138 
139  //------------------------------------------------------------
140  // Methods which will be used to read and write register values.
141  // These methods will send a the appropriate command to the servo,
142  // and time out waiting for a response.
143  //------------------------------------------------------------
144 
148  int writeString(std::string message);
149 
150  private:
151 
152  bool sim_;
153 
157  int fd_;
158 
162  struct termios termioSave_;
163 
167  RegMapBlock* utc_;
168  RegMapBlock* azPositions_;
169  RegMapBlock* azErrors_;
170  RegMapBlock* elPositions_;
171  RegMapBlock* elErrors_;
172  RegMapBlock* slowAzPos_;
173  RegMapBlock* slowElPos_;
174  RegMapBlock* servoStatus_;
175  RegMapBlock* servoThermalCutouts_;
176  RegMapBlock* servoContactors_;
177  RegMapBlock* servoCircuitBreakers_;
178  RegMapBlock* servoBrakes_;
179  RegMapBlock* driveLids_;
180  RegMapBlock* azWrap_;
181 
185  gcp::util::FdSet fdSet_;
186 
190  bool connected_;
191 
197  public:
198  ServoCommandSa command_;
199 
203  ServoCommandSa issueCommand(ServoCommandSa::Request req, std::vector<float>& values);
204  ServoCommandSa issueCommand(ServoCommandSa::Request req);
205 
206  private:
210  bool responsePending_;
211 
215  bool initializationPartOne_;
216 
220  bool initializationComplete_;
221 
225  bool alarmStatus_;
226 
230  void serviceMsgQ();
231 
236  void zeroReadFds();
237 
242  void registerReadFd(int fd);
243 
248  int waitForNextMessage();
249 
253  int readTCPPort(ServoCommandSa& command);
254 
258  void waitForResponse();
259 
263  void recordStatusResponse(ServoCommandSa& command);
264 
268  void wait(long nsec=100000000);
269 
270 
271  }; // End class ServoCommsSa
272 
273  }; // End namespace control
274  }; // End namespace antenna
275 }; // End namespace gcp
276 
277 
278 
279 
280 #endif // End
281 
ServoCommandSa command_
Definition: servoCommsSa.h:198
void fillUtc(gcp::util::TimeVal &currTime)
Definition: servoCommsSa.cc:785
ServoCommandSa issueCommand(ServoCommandSa::Request req, std::vector< float > &values)
Definition: servoCommsSa.cc:171
bool connect()
Definition: servoCommsSa.cc:260
void queryAntPositions()
Definition: servoCommsSa.cc:700
Request
Definition: ServoCommandSa.h:37
void initializeAntenna()
Definition: servoCommsSa.cc:551
~ServoCommsSa()
Definition: servoCommsSa.cc:106
void queryStatus()
Definition: servoCommsSa.cc:629
void setAzEl(gcp::util::Angle &az, gcp::util::Angle &el)
void disconnect()
Definition: servoCommsSa.cc:236
void sendCommand(ServoCommandSa &command)
Definition: servoCommsSa.cc:116
Definition: FdSet.h:16
ServoCommsSa()
Definition: servoCommsSa.cc:96
int readResponse(ServoCommandSa &command)
Definition: servoCommsSa.cc:143
void finishInitialization()
Definition: servoCommsSa.cc:998
void haltAntenna()
Definition: servoCommsSa.cc:519
bool isBrakeOn()
Definition: servoCommsSa.cc:1131
bool servoIsConnected()
Definition: servoCommsSa.cc:372
bool readPosition(AxisPositions *axes, Model *model)
Definition: servoCommsSa.cc:825
bool isCircuitBreakerTripped()
Definition: servoCommsSa.cc:1079
bool isLidOpen()
Definition: servoCommsSa.cc:1119
Definition: Angle.h:20
Definition: TimeVal.h:55
int writeString(std::string message)
Definition: servoCommsSa.cc:380
bool isThermalTripped()
Definition: servoCommsSa.cc:1098
bool isInitialized()
Definition: servoCommsSa.cc:1143
void hardStopAntenna()
Definition: servoCommsSa.cc:536