LiftingColumn_controller/LiftingColumn_controller.h Source File

[[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
    };
 
 
}// namespace ControlAPI
 
 
[[PREPROC_HEADER_GUARD_END]]