My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
PmacBoard.h
Go to the documentation of this file.
1 #ifndef PMACBOARD_H
2 #define PMACBOARD_H
3 
11 #include <vector>
12 
13 #include "gcp/antenna/control/specific/AxisPositions.h"
14 #include "gcp/antenna/control/specific/Board.h"
15 #include "gcp/antenna/control/specific/Model.h"
16 #include "gcp/antenna/control/specific/ServoComms.h"
17 #include "gcp/antenna/control/specific/PmacTarget.h"
18 #include "gcp/antenna/control/specific/SpecificShare.h"
19 
20 #define DPRAM_TIMEOUT 100
21 
22 #define PMAC_TEST
23 
24 namespace gcp {
25  namespace antenna {
26  namespace control {
27 
31  class PmacBoard : public Board {
32 
33  public:
34 
40  PmacBoard(SpecificShare* share, std::string name, bool simPmac=false);
41 
45  ~PmacBoard();
46 
50  bool isBusyOld(); // Version until 1 Oct 2008
51 
52  bool isBusy(); // No-op version for the new tracking mode,
53  // in which we don't synchronize with the
54  // pmac
55 
61  unsigned int readPositionFault();
62 
66  void commandNewPosition(PmacTarget* pmac);
67 
68  // Read out the last position information from the servo box
69 
70  void strobeServo();
71 
84  bool readPosition(AxisPositions* axes, Model* model);
85 
90  bool connect();
91 
96  void disconnect();
97 
102 
106  bool pmacIsConnected();
107 
108  unsigned char driveStatusToBit(unsigned int driveStatus);
109 
110  private:
111 
116  bool simPmac_;
117 
121  ServoComms* comms_;
122 
127  RegMapBlock* hostRead_;
128 
133  RegMapBlock* pmacWrite_;
134 
141  RegMapBlock* newPosition_;
142 
148  RegMapBlock* positionFault_;
149 
166  RegMapBlock* newMode_;
167 
171  RegMapBlock* newAz_;
172 
176  RegMapBlock* newEl_;
177 
181  RegMapBlock* newDk_;
182 
186  RegMapBlock* newAzRate_;
187 
191  RegMapBlock* newElRate_;
192 
196  RegMapBlock* newDkRate_;
197 
201  RegMapBlock* azPos_;
202 
206  RegMapBlock* elPos_;
207 
211  RegMapBlock* dkPos_;
212 
217  RegMapBlock* driveStatus_;
218  RegMapBlock* statusMask_;
219 
223  unsigned long dpramSize_;
224 
228  unsigned long dpramBaseAddr_;
229 
233  unsigned long dpramCmdSize_;
234 
238  unsigned long dpramCmdBaseAddr_;
239 
244  std::vector<unsigned char> dpramWork_;
245 
249  void computeDpramStats();
250 
254  unsigned int* readoutDpram();
255 
259  void readReg(RegMapBlock* blk, unsigned int first,
260  unsigned int nreg, unsigned int* value);
261 
265  void writeReg(RegMapBlock* blk, unsigned int first,
266  unsigned int nreg, unsigned int* value);
267 
271  void writeRegToWork(RegMapBlock *blk,
272  unsigned int first, unsigned int nreg,
273  unsigned int *value);
274 
278  void writeWork();
279 
283  void initializePmac();
284 
285  }; // End class PmacBoard
286 
287  }; // End namespace control
288  }; // End namespace antenna
289 }; // End namespace gcp
290 
291 #endif // End #ifndef
bool isBusy()
Definition: PmacBoard.cc:152
~PmacBoard()
Definition: PmacBoard.cc:101
unsigned int readPositionFault()
Definition: PmacBoard.cc:160
bool pmacIsConnected()
Definition: PmacBoard.cc:501
Definition: Board.h:24
void mirrorDpramToSharedMemory()
Definition: PmacBoard.cc:373
Definition: PmacBoard.h:31
bool connect()
Definition: PmacBoard.cc:261
void disconnect()
Definition: PmacBoard.cc:293
Definition: Model.h:33
bool isBusyOld()
Definition: PmacBoard.cc:112
void commandNewPosition(PmacTarget *pmac)
Definition: PmacBoard.cc:182
void strobeServo()
Definition: PmacBoard.cc:198
PmacBoard(SpecificShare *share, std::string name, bool simPmac=false)
Definition: PmacBoard.cc:22
bool readPosition(AxisPositions *axes, Model *model)
Definition: PmacBoard.cc:213
Definition: PmacTarget.h:28
Definition: AxisPositions.h:38
Definition: ServoComms.h:42