diff options
author | Jonathan McCrohan <jmccrohan@gmail.com> | 2012-04-14 12:56:48 +0100 |
---|---|---|
committer | Jonathan McCrohan <jmccrohan@gmail.com> | 2012-04-14 12:56:48 +0100 |
commit | 0b624384cd52be20e61284551d832b499d7b7707 (patch) | |
tree | 6f95a4bbef47abc9720b96c0722e8f632aef228a /cphidgetstepper.h | |
download | libphidget21-6c284da2cfff41863f06ee8109e2e20fbbd73940.tar.gz |
Imported Upstream version 2.1.8.20120216upstream/2.1.8.20120216
Diffstat (limited to 'cphidgetstepper.h')
-rw-r--r-- | cphidgetstepper.h | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/cphidgetstepper.h b/cphidgetstepper.h new file mode 100644 index 0000000..2fe59c4 --- /dev/null +++ b/cphidgetstepper.h @@ -0,0 +1,294 @@ +#ifndef __CPHIDGETSTEPPER +#define __CPHIDGETSTEPPER +#include "cphidget.h" + +/** \defgroup phidstepper Phidget Stepper + * \ingroup phidgets + * Calls specific to the Phidget Stepper. See the product manual for more specific API details, supported functionality, units, etc. + * @{ + */ + +DPHANDLE(Stepper) +CHDRSTANDARD(Stepper) + + +/** + * Gets the number of digital inputs supported by this board. + * @param phid An attached phidget stepper handle. + * @param count The ditial input count. + */ +CHDRGET(Stepper,InputCount,int *count) +/** + * Gets the state of a digital input. + * @param phid An attached phidget stepper handle. + * @param index The input index. + * @param inputState The input state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGETINDEX(Stepper,InputState,int *inputState) +/** + * Set a digital input change handler. This is called when a digital input changes. + * @param phid An attached phidget stepper handle. + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENTINDEX(Stepper,InputChange,int inputState) + +/** + * Gets the number of motors supported by this controller + * @param phid An attached phidget stepper handle. + * @param count The motor count. + */ +CHDRGET(Stepper,MotorCount,int *count) + +/** + * Gets the last set acceleration for a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param acceleration The acceleration + */ +CHDRGETINDEX(Stepper,Acceleration,double *acceleration) +/** + * Sets the acceleration for a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param acceleration The acceleration + */ +CHDRSETINDEX(Stepper,Acceleration,double acceleration) +/** + * Gets the maximum acceleration supported by a motor + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param max The maximum acceleration. + */ +CHDRGETINDEX(Stepper,AccelerationMax,double *max) +/** + * Gets the minimum acceleration supported by a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param min The minimum acceleration + */ +CHDRGETINDEX(Stepper,AccelerationMin,double *min) + +/** + * Gets the last set velocity limit for a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param limit The velocity limit. + */ +CHDRGETINDEX(Stepper,VelocityLimit,double *limit) +/** + * Sets the velocity limit for a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param limit The velocity limit. + */ +CHDRSETINDEX(Stepper,VelocityLimit,double limit) +/** + * Gets the current velocity of a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param velocity The current velocity. + */ +CHDRGETINDEX(Stepper,Velocity,double *velocity) +/** + * Gets the maximum velocity that can be set for a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param max The maximum velocity + */ +CHDRGETINDEX(Stepper,VelocityMax,double *max) +/** + * Gets the minimum velocity that can be set for a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param min The minimum velocity. + */ +CHDRGETINDEX(Stepper,VelocityMin,double *min) +/** + * Sets a velocity change event handler. This is called when the velocity changes. + * @param phid An attached phidget stepper handle + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENTINDEX(Stepper,VelocityChange,double velocity) + +/** + * Gets the last set target position of a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param position The position. + */ +CHDRGETINDEX(Stepper,TargetPosition,__int64 *position) +/** + * Sets the target position of a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param position The position. + */ +CHDRSETINDEX(Stepper,TargetPosition,__int64 position) +/** + * Gets the current position of a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param position The position. + */ +CHDRGETINDEX(Stepper,CurrentPosition,__int64 *position) +/** + * Sets the current position of a motor. This will not move the motor, just update the position value. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param position The position. + */ +CHDRSETINDEX(Stepper,CurrentPosition,__int64 position) +/** + * Gets the maximum position that a motor can go to. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param max The maximum position. + */ +CHDRGETINDEX(Stepper,PositionMax,__int64 *max) +/** + * Gets the minimum position that a motor can go to. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param min The minimum position + */ +CHDRGETINDEX(Stepper,PositionMin,__int64 *min) +/** + * Sets a position change event handler. This is called when the position changes. + * @param phid An attached phidget stepper handle + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENTINDEX(Stepper,PositionChange,__int64 position) + +/** + * Gets the current limit for a motor. + * @param phid An attached phidget stepper handle. + * @param index The motor index. + * @param limit The current limit. + */ +CHDRGETINDEX(Stepper,CurrentLimit,double *limit) +/** + * Sets the current limit for a motor. + * @param phid An attached phidget stepper handle. + * @param index The motor index. + * @param limit The current limit. + */ +CHDRSETINDEX(Stepper,CurrentLimit,double limit) +/** + * Gets the current current draw for a motor. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param current The current. + */ +CHDRGETINDEX(Stepper,Current,double *current) +/** + * Gets the maximum current limit. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param max The maximum current limit. + */ +CHDRGETINDEX(Stepper,CurrentMax,double *max) +/** + * Gets the minimum current limit. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param min The minimum current limit. + */ +CHDRGETINDEX(Stepper,CurrentMin,double *min) +/** + * Sets a current change event handler. This is called when the current draw changes. + * @param phid An attached phidget stepper handle + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENTINDEX(Stepper,CurrentChange,double current) + +/** + * Gets the engaged state of a motor. This is whether the motor is powered or not. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param engagedState The engaged state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGETINDEX(Stepper,Engaged,int *engagedState) +/** + * Sets the engaged state of a motor. This is whether the motor is powered or not. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param engagedState The engaged state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRSETINDEX(Stepper,Engaged,int engagedState) +/** + * Gets the stopped state of a motor. This is true when the motor is not moving and there are no outstanding commands. + * @param phid An attached phidget stepper handle + * @param index The motor index. + * @param stoppedState The stopped state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGETINDEX(Stepper,Stopped,int *stoppedState) + +#ifndef EXTERNALPROTO + +#define STEPPER_MAXSTEPPERS 8 +#define STEPPER_MAXINPUTS 8 + +#define BIPOLAR_STEPPER_CURRENT_SENSE_GAIN 8.5 +#define BIPOLAR_STEPPER_CURRENT_LIMIT_Rs 0.150 + +//flags - make sure these are in the upper 4 bits +#define MOTOR_DONE_STEPPER 0x10 +#define MOTOR_DISABLED_STEPPER 0x20 + +//packet types - room for one more +#define STEPPER_POSITION_PACKET 0x00 +#define STEPPER_VEL_ACCEL_PACKET 0x10 +#define STEPPER_RESET_PACKET 0x20 + +struct _CPhidgetStepper{ + CPhidget phid; + + int (CCONV *fptrPositionChange)(CPhidgetStepperHandle, void *, int, __int64); + int (CCONV *fptrPositionChange32)(CPhidgetStepperHandle, void *, int, int); + int (CCONV *fptrVelocityChange)(CPhidgetStepperHandle, void *, int, double); + int (CCONV *fptrCurrentChange)(CPhidgetStepperHandle, void *, int, double); + int (CCONV *fptrInputChange)(CPhidgetStepperHandle, void *, int, int); + + void *fptrPositionChangeptr; + void *fptrPositionChange32ptr; + void *fptrInputChangeptr; + void *fptrCurrentChangeptr; + void *fptrVelocityChangeptr; + + //data from the device + unsigned char inputState[STEPPER_MAXINPUTS]; + __int64 motorPositionEcho[STEPPER_MAXSTEPPERS]; + double motorSpeedEcho[STEPPER_MAXSTEPPERS]; + double motorSensedCurrent[STEPPER_MAXSTEPPERS]; + unsigned char motorEngagedStateEcho[STEPPER_MAXSTEPPERS]; + unsigned char motorStoppedState[STEPPER_MAXSTEPPERS]; + int packetCounterEcho[STEPPER_MAXSTEPPERS]; + + //data from the user + __int64 motorPosition[STEPPER_MAXSTEPPERS]; + __int64 motorPositionReset[STEPPER_MAXSTEPPERS]; + double motorAcceleration[STEPPER_MAXSTEPPERS]; + double motorSpeed[STEPPER_MAXSTEPPERS]; + double motorCurrentLimit[STEPPER_MAXSTEPPERS]; + unsigned char motorEngagedState[STEPPER_MAXSTEPPERS]; + int packetCounter[STEPPER_MAXSTEPPERS]; + + double motorSpeedMax, motorSpeedMin; + double accelerationMax, accelerationMin; + __int64 motorPositionMax, motorPositionMin; + double currentMax, currentMin; + int microSteps; + + unsigned char outputPacket[8]; + unsigned int outputPacketLen; +} typedef CPhidgetStepperInfo; +#endif + +/** @} */ + +#endif + |