ActHandler.hpp
1 #ifndef _ACT_SCHILLING_ACTHANDLER_HPP_
2 #define _ACT_SCHILLING_ACTHANDLER_HPP_
3 #include <deque>
4 #include <base_schilling/Driver.hpp>
5 #include "ActRaw.hpp"
6 #include "Config.hpp"
7 #include "ActTypes.hpp"
8 
9 namespace act_schilling
10 {
11 
12  class ActHandler : public base_schilling::Driver
13  {
14  enum ActRunState{
15  RESET,
16  INIT,
17  INITIALIZED,
18  FINDMIN,
19  FINDMAX,
20  SETZERO,
21  GOHOME,
22  RUNNING
23  };
24 
25  struct LastPos{
26  int pos;
27  int count;
28  };
29 
30  struct UpdateState{
31  bool status_update;
32  bool pos_update;
33  bool drive_state_update;
34  bool act_info_update;
35  };
36 
37  public:
38  ActHandler(const Config& config = Config());
42  virtual void initDevice();
46  virtual void requestStatus();
50  virtual bool isIdle();
54  ActData getData() const;
62  ActState getState() const;
67  void setPos(int count, float velCoeff = 1);
72  void setAnglePos(double ang, double velCoeff = 1);
78  void setVelocity(double vel);
82  void calibrate();
87  void setControlMode(act_schilling::ControlMode const mode);
91  void requestPosition();
95  void requestDriveStatus();
99  void requestActInfo();
118  bool hasStatusUpdate();
122  bool hasPosUpdate();
126  bool hasDriveStatusUpdate();
130  bool hasActInfoUpdate();
134  void setResetState();
138  void clearError();
139  protected:
140  void enqueueCmdMsg(raw::CMD cmd,int value = 0, int length = 0);
141  int extractPacket (uint8_t const *buffer, size_t buffer_size) const;
142  virtual void setCS(char *cData);
143  virtual void checkCS(const char *cData);
144  virtual void parseReply(const std::vector<uint8_t>* buffer);
145  int ang2count(double ang);
146  double count2ang(int count);
147  bool checkMoving(int pos);
148  std::deque<std::vector<uint8_t> > mMsgQueue;
149  raw::CMD mLastCmd;
150  private:
151  void checkRunState();
152  Config mConfig;
153  ActData mActData;
154  ActDeviceStatus mActDevStatus;
155  ActState mActState;
156  ActRunState mActRunState;
157  LastPos mLastPos;
158  ActPosition mActPosition;
159  ActDriveStatus mActDriveStatus;
160  ActInfo mActInfo;
161  ActBoundaries mActBoundaries;
162  UpdateState mUpdateState;
163  };
164 }
165 
166 #endif
Definition: ActTypes.hpp:100
ActData getData() const
Definition: ActHandler.cpp:52
Definition: ActHandler.hpp:12
bool hasPosUpdate()
Definition: ActHandler.cpp:180
void calibrate()
Definition: ActHandler.cpp:106
void clearError()
Definition: ActHandler.cpp:214
ActPosition getPosition()
Definition: ActHandler.cpp:150
ActState getState() const
Definition: ActHandler.cpp:63
void requestPosition()
Definition: ActHandler.cpp:134
void setControlMode(act_schilling::ControlMode const mode)
Definition: ActHandler.cpp:119
virtual void requestStatus()
Definition: ActHandler.cpp:39
bool hasStatusUpdate()
Definition: ActHandler.cpp:170
Definition: ActTypes.hpp:34
Definition: ActTypes.hpp:62
bool hasDriveStatusUpdate()
Definition: ActHandler.cpp:189
virtual void initDevice()
Definition: ActHandler.cpp:26
ActInfo getActInfo()
Definition: ActHandler.cpp:160
Definition: ActTypes.hpp:81
virtual bool isIdle()
Definition: ActHandler.cpp:46
Definition: ActTypes.hpp:51
void requestActInfo()
Definition: ActHandler.cpp:144
void setVelocity(double vel)
Definition: ActHandler.cpp:95
Definition: ActTypes.hpp:113
Definition: ActHandler.hpp:9
void setAnglePos(double ang, double velCoeff=1)
Definition: ActHandler.cpp:90
bool hasActInfoUpdate()
Definition: ActHandler.cpp:198
void setResetState()
Definition: ActHandler.cpp:207
void setPos(int count, float velCoeff=1)
Definition: ActHandler.cpp:68
ActDriveStatus getDriveStatus()
Definition: ActHandler.cpp:155
void requestDriveStatus()
Definition: ActHandler.cpp:139
Definition: ActTypes.hpp:19
ActDeviceStatus getDeviceStatus() const
Definition: ActHandler.cpp:57
ActBoundaries getBoundaries()
Definition: ActHandler.cpp:165
Definition: Config.hpp:9