aboutsummaryrefslogtreecommitdiffstats
path: root/cphidgetstepper.h
diff options
context:
space:
mode:
Diffstat (limited to 'cphidgetstepper.h')
-rw-r--r--cphidgetstepper.h294
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
+