Files
motorBase/motorApp/ScriptMotorSrc/ScriptMotorDriver.h
T
2016-09-14 15:22:27 -05:00

77 lines
2.4 KiB
C++

#include "asynMotorController.h"
#include "asynMotorAxis.h"
#include <string>
#include "epicsScript.h"
class epicsShareClass ScriptMotorAxis : public asynMotorAxis
{
public:
/* These are the methods we override from the base class */
ScriptMotorAxis(class ScriptMotorController *pC, int axisNo, const char* script_file, const char* params);
void reload(const char* script, const char* params);
void report(FILE *fp, int level);
asynStatus move(double position, int relative, double min_velocity, double max_velocity, double acceleration);
asynStatus moveVelocity(double min_velocity, double max_velocity, double acceleration);
asynStatus home(double min_velocity, double max_velocity, double acceleration, int forwards);
asynStatus stop(double acceleration);
asynStatus poll(bool *moving);
asynStatus setPosition(double position);
asynStatus setEncoderPosition(double position);
asynStatus setHighLimit(double highLimit);
asynStatus setLowLimit(double lowLimit);
asynStatus setPGain(double pGain);
asynStatus setIGain(double iGain);
asynStatus setDGain(double dGain);
asynStatus setClosedLoop(bool closedLoop);
asynStatus setEncoderRatio(double ratio);
virtual epicsUInt32 setStatusParam(int index, int value);
virtual void setPositionParam(int index, double value);
private:
ScriptMotorController *pC_; /**< Pointer to the asynMotorController to which this axis belongs.
* Abbreviated because it is used very frequently */
int axisIndex_;
std::string params;
lua_State* state;
void initState(const char* script_file);
void config(const char* params);
void logError();
friend class ScriptMotorController;
};
class epicsShareClass ScriptMotorController : public asynMotorController {
public:
ScriptMotorController(const char *asyn_port, int max_axes, const char* script_file, const char* params);
virtual asynStatus setIntegerParam(int list, int function, int value);
virtual asynStatus setDoubleParam(int list, int function, double value);
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
void report(FILE *fp, int level);
ScriptMotorAxis* getAxis(asynUser *pasynUser);
ScriptMotorAxis* getAxis(int axisNo);
void configAxis(int axisNo, const char* params);
void reload();
protected:
int ScriptMotorReload;
private:
std::string script;
std::string init_params;
friend class ScriptMotorAxis;
};