zaber_controller/zaber_controller.h Source File

1 [[PREPROC_HEADER_GUARD_BEGIN]]
2 
3 #include <HC_API.h>
4 #include <controllers_utils.h>
5 
6 namespace zaber {
7  namespace motion {
8  namespace ascii {
9  class Device;
10  class AlertEvent;
11  class Connection;
12  }
13  namespace exceptions {
14  class MotionLibException;
15  }
16  }
17 }
18 
19 
20 namespace ZABM = zaber::motion;
21 
22 #ifdef ZABER_API_V_5
23 namespace ZABMEX = zaber::motion::exceptions;
24 #else
25 namespace ZABMEX = ZABM;
26 #endif
27 namespace ZAB = ZABM::ascii;
28 
29 
30 
31 
32 namespace ControlAPI {
33 
38  HC_SWIG_SHAREDPTR(ZaberAxisInfo)
39  std::string alias = "";
40  int apiAxisIdx = 0;
41  };
42 
43  class ZaberDeviceInfoInternal;
44  class ZaberMotionSim;
48  class HC_API ZaberDeviceInfo : public DeviceInfo {
49  public:
50  HC_CLASS_META(ZaberDeviceInfo)
51  HC_SWIG_SHAREDPTR(ZaberDeviceInfo)
52  HC_CLASS_DEVICEINFO_META(ZaberDeviceInfo, CommandStatus)
53  friend class zaberController;
54 
56  virtual ~ZaberDeviceInfo() = default;
57 
58  void AddAxisInfo(ZaberAxisInfo* axis);
59 
60  virtual DeviceCommandPackage* initializeCommand(DeviceCommandPackage* commandPacakge) override;
61 
62 
63  int zaberDeviceAddress = 1;
64 
65  std::shared_ptr<ZaberDeviceInfoInternal> internals;
66  std::shared_ptr<ZaberMotionSim> motionSim;
67 
68 
69  protected:
70  zaber::motion::ascii::Device* mZaberDevice = nullptr;
71 
72  std::vector<ZaberAxisInfo*> axisInfoList;
73  int nextAxisApiId = 0;
74 
75  float initialConnection_Position = 0.0f;
76 
77  };
78 
83  public:
84  HC_CLASS_DEVICECOMMANDPACKAGE_META(ZaberCommandSetAxisMovement)
85  virtual ~ZaberCommandSetAxisMovement() = default;
86 
87 #ifdef HC_API_MACRO_EXCLUDE_DOCS
88  virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo() override { return std::make_shared<MovementStateInfo>(); }
89  virtual void cloneFrom(DeviceCommandPackage* other) override { *this = *(dynamic_cast<ZaberCommandSetAxisMovement*>(other)); }
90 
91 #endif
92 
93 
97  bool doNativeHome = false;
98 
99  int zaberAxisId = 1;
100  };
101  std::shared_ptr<ZaberCommandSetAxisMovement> HC_API As_ZaberCommandSetAxisMovement(std::shared_ptr<DeviceCommandPackage> package);
102 
107  public:
108  HC_CLASS_META(ZaberCommandStorageKeyStateInfo)
109  HC_SWIG_SHAREDPTR(ZaberCommandStorageKeyStateInfo)
110 
111  float value = 0.0f;
112 #ifdef HC_API_FEATURE_NETWORKING
113  void cacheOnNetwork(CommandStatus* command) override;
114 #endif
115  };
116 
121  public:
122  HC_CLASS_DEVICECOMMANDPACKAGE_META(ZaberCommandSetStorageKey)
123  virtual ~ZaberCommandSetStorageKey() = default;
124 
125 #ifdef HC_API_MACRO_EXCLUDE_DOCS
126  virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo() override { return std::make_shared<ZaberCommandStorageKeyStateInfo>(); }
127 #ifdef HC_API_FEATURE_NETWORKING
128  virtual void syncFromNetwork(CommandStatus* command) override;
129 #endif
130 #endif
131  std::string key;
135 
136  float number = 0.0f;
137  };
138  std::shared_ptr<ZaberCommandSetStorageKey> HC_API As_ZaberCommandSetStorageKey(std::shared_ptr<DeviceCommandPackage> package);
139 
144  public:
145  HC_CLASS_DEVICECOMMANDPACKAGE_META(ZaberCommandGetStorageKey)
146  virtual ~ZaberCommandGetStorageKey() = default;
147 
148 #ifdef HC_API_MACRO_EXCLUDE_DOCS
149  virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo() override { return std::make_shared<ZaberCommandStorageKeyStateInfo>(); }
150 #ifdef HC_API_FEATURE_NETWORKING
151  virtual void syncFromNetwork(CommandStatus* command) override;
152 #endif
153 #endif
154  std::string key;
158  };
159  std::shared_ptr<ZaberCommandGetStorageKey> HC_API As_ZaberCommandGetStorageKey(std::shared_ptr<DeviceCommandPackage> package);
160 
161 
162 
163 
164 
165 
166  class ZaberControllerInternals;
171  public:
172  HC_CLASS_META(zaberController)
173  HC_SWIG_SHAREDPTR(zaberController)
174 
175  explicit zaberController();
176  virtual ~zaberController();
177 
178  friend class ZaberControllerInternals;
179 
180 
181 #ifdef HC_API_MACRO_EXCLUDE_DOCS
182  virtual bool init() override;
183  virtual bool deInit() override;
184  virtual bool issueCommand(CommandStatus* command) override;
185 
186 
187  virtual std::vector<std::pair<int, ZaberAxisInfo>> preConnect();
188 
189 #endif
190 
191  private:
192  bool StartTrackingCommand(int apiDeviceId, int deviceAxisIdx);
193 
194  bool SetStorageKey(int apiDeviceId, float number);
195  bool GetStorageKey(int apiDeviceId, float *number_out);
196 
197  virtual bool checkCommandPackage(int apiDeviceId, DeviceCommandPackage* package) override;
198 
199  ZaberDeviceInfo *GetDeviceInfoFromZaberDeviceAddress(int address);
200 
201 
202  ZAB::Device *GetZaberDeviceFromZaberDeviceAddress(int address);
203  ZAB::Device *GetZaberDeviceFromSerialNumber(int serialNumber);
204 
205 
206 
207 
208 
209 
210  std::shared_ptr<ZAB::Connection> mConnection;
211 
212 
213  std::shared_ptr<ControlAPI::ZaberControllerInternals> internals;
214 
215 
216 
217  };
218 
219 }
220 
221 [[PREPROC_HEADER_GUARD_END]]