[[PREPROC_HEADER_GUARD_BEGIN]]
#include "HC_API.h"
#include "controllers_utils.h"
namespace ControlAPI {
class HC_API LiftingColumnMovementStateInfo : public MovementStateInfo {
public:
HC_CLASS_META(LiftingColumnMovementStateInfo)
HC_SWIG_SHAREDPTR(LiftingColumnMovementStateInfo)
#ifdef HC_API_FEATURE_NETWORKING
void cacheOnNetwork(CommandStatus* command) override;
#endif
bool isStalled = false;
};
class HC_API LiftingColumnCommandStatus : public CommandStatus {
public:
HC_CLASS_META(LiftingColumnCommandStatus)
HC_SWIG_SHAREDPTR(LiftingColumnCommandStatus)
virtual ~LiftingColumnCommandStatus() = default;
LiftingColumnMovementStateInfo *stateInfo();
};
class HC_API LiftingColumnCommandMovementPackage : public MovementCommandPackage {
public:
HC_CLASS_DEVICECOMMANDPACKAGE_META(LiftingColumnCommandMovementPackage)
virtual ~LiftingColumnCommandMovementPackage() = default;
virtual void cloneFrom(DeviceCommandPackage* other) override;
#ifdef HC_API_MACRO_EXCLUDE_DOCS
virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo() override { return std::make_shared<LiftingColumnMovementStateInfo>(); }
virtual std::shared_ptr<CommandStatus> createCommandStatus() override { return std::make_shared<LiftingColumnCommandStatus>(); }
#endif
bool expectStall = false;
};
class HC_API LiftingColumnCommandSetEncoderPos : public DeviceCommandPackage {
public:
HC_CLASS_DEVICECOMMANDPACKAGE_META(LiftingColumnCommandSetEncoderPos)
virtual ~LiftingColumnCommandSetEncoderPos() = default;
#ifdef HC_API_MACRO_EXCLUDE_DOCS
virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo() override { return std::make_shared<LiftingColumnMovementStateInfo>(); }
virtual std::shared_ptr<CommandStatus> createCommandStatus() override { return std::make_shared<LiftingColumnCommandStatus>(); }
virtual void cloneFrom(DeviceCommandPackage *other) override;
#endif
int counts = 0;
};
class HC_API LiftingColumnCommandGetEncoderPos : public DeviceCommandPackage {
public:
HC_CLASS_DEVICECOMMANDPACKAGE_META(LiftingColumnCommandGetEncoderPos)
virtual ~LiftingColumnCommandGetEncoderPos() = default;
#ifdef HC_API_MACRO_EXCLUDE_DOCS
virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo() override { return std::make_shared<LiftingColumnMovementStateInfo>(); }
virtual std::shared_ptr<CommandStatus> createCommandStatus() override { return std::make_shared<LiftingColumnCommandStatus>(); }
virtual void cloneFrom(DeviceCommandPackage *other) override;
#endif
};
class HC_API LiftingColumnDeviceInfo : public DeviceInfo {
public:
HC_CLASS_META(LiftingColumnDeviceInfo)
HC_SWIG_SHAREDPTR(LiftingColumnDeviceInfo)
HC_CLASS_DEVICEINFO_META(LiftingColumnDeviceInfo, LiftingColumnCommandStatus)
friend class LiftingColumnController;
LiftingColumnDeviceInfo();
virtual ~LiftingColumnDeviceInfo() = default;
int roboClawAddress;
int QPSS;
int encoderDeadZone;
float mm_s_p_duty;
int maxDutyCycle;
float countsPerMM;
protected:
enum MotionState {
STATE_IDLE = 0,
STATE_MOVING_TO_TARGET_POS
};
MotionState currentState = STATE_IDLE;
};
class RoboClaw_ComHandler;
class SimpleLiftingMotionSim;
class HC_API LiftingColumnController : public HardwareDeviceController {
public:
HC_CLASS_META(LiftingColumnController)
HC_SWIG_SHAREDPTR(LiftingColumnController)
virtual ~LiftingColumnController();
#ifdef HC_API_MACRO_EXCLUDE_DOCS
virtual bool init() override;
virtual bool deInit() override;
virtual bool issueCommand(CommandStatus* command) override;
#endif
public:
private:
bool SetEncoderPosition(int apiDeviceId, int encoderPos);
bool StartTrackingCommand(int apiDeviceId);
bool ReadEncoderPosition(int apiDeviceId);
virtual void disconnect(bool expected = false) override;
#ifdef HC_API_MACRO_EXCLUDE_DOCS
std::shared_ptr<RoboClaw_ComHandler> roboClawComs;
std::shared_ptr<SimpleLiftingMotionSim> motionSim;
#endif
};
}
[[PREPROC_HEADER_GUARD_END]]