From 0b624384cd52be20e61284551d832b499d7b7707 Mon Sep 17 00:00:00 2001 From: Jonathan McCrohan Date: Sat, 14 Apr 2012 12:56:48 +0100 Subject: Imported Upstream version 2.1.8.20120216 --- cphidgetmotorcontrol.h | 331 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 cphidgetmotorcontrol.h (limited to 'cphidgetmotorcontrol.h') diff --git a/cphidgetmotorcontrol.h b/cphidgetmotorcontrol.h new file mode 100644 index 0000000..0373e31 --- /dev/null +++ b/cphidgetmotorcontrol.h @@ -0,0 +1,331 @@ +#ifndef __CPHIDGETMOTORCONTROL +#define __CPHIDGETMOTORCONTROL +#include "cphidget.h" + +/** \defgroup phidmotorcontrol Phidget Motor Control + * \ingroup phidgets + * Calls specific to the Phidget Motor Control. See the product manual for more specific API details, supported functionality, units, etc. + * @{ + */ + +DPHANDLE(MotorControl) +CHDRSTANDARD(MotorControl) + +/** + * Gets the number of motors supported by this controller. + * @param phid An attached phidget motor control handle. + * @param count The motor count. + */ +CHDRGET(MotorControl,MotorCount,int *count) + +/** + * Gets the current velocity of a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param velocity The current velocity. + */ +CHDRGETINDEX(MotorControl,Velocity,double *velocity) +/** + * Sets the velocity of a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param velocity The velocity. + */ +CHDRSETINDEX(MotorControl,Velocity,double velocity) +/** + * Sets a velocity change event handler. This is called when the velocity changes. + * @param phid An attached phidget motor control 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(MotorControl,VelocityChange,double velocity) + +/** + * Gets the last set acceleration of a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param acceleration The acceleration. + */ +CHDRGETINDEX(MotorControl,Acceleration,double *acceleration) +/** + * Sets the last set acceleration of a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param acceleration The acceleration. + */ +CHDRSETINDEX(MotorControl,Acceleration,double acceleration) +/** + * Gets the maximum acceleration supported by a motor + * @param phid An attached phidget motor control handle + * @param index The motor index. + * @param max The maximum acceleration. + */ +CHDRGETINDEX(MotorControl,AccelerationMax,double *max) +/** + * Gets the minimum acceleration supported by a motor. + * @param phid An attached phidget motor control handle + * @param index The motor index. + * @param min The minimum acceleration + */ +CHDRGETINDEX(MotorControl,AccelerationMin,double *min) + + +/** + * Gets the current current draw for a motor. + * @param phid An attached phidget motor control handle + * @param index The motor index. + * @param current The current. + */ +CHDRGETINDEX(MotorControl,Current,double *current) +/** + * Sets a current change event handler. This is called when the current draw changes. + * @param phid An attached phidget motor control 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(MotorControl,CurrentChange,double current) + +/** + * Gets the number of digital inputs supported by this board. + * @param phid An attached phidget motor control handle. + * @param count The ditial input count. + */ +CHDRGET(MotorControl,InputCount,int *count) +/** + * Gets the state of a digital input. + * @param phid An attached phidget motor control handle. + * @param index The input index. + * @param inputState The input state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGETINDEX(MotorControl,InputState,int *inputState) +/** + * Set a digital input change handler. This is called when a digital input changes. + * @param phid An attached phidget motor control 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(MotorControl,InputChange,int inputState) + +/** + * Gets the number of encoder inputs supported by this board. + * @param phid An attached phidget motor control handle. + * @param count The encoder input count. + */ +CHDRGET(MotorControl,EncoderCount,int *count) +/** + * Gets the position of an encoder. This position starts at 0 every time the phidget is opened. + * @param phid An attached phidget motor control handle. + * @param index The encoder index. + * @param position The encoder position. + */ +CHDRGETINDEX(MotorControl,EncoderPosition,int *position) +/** + * Sets the encoder position. This can be used to set the position to a known value, and should only be called when the encoder is not moving. + * @param phid An attached phidget motor control handle. + * @param index The encoder index. + * @param position The encoder position. + */ +CHDRSETINDEX(MotorControl,EncoderPosition,int position) +/** + * Set an encoder position change handler. This is called when the encoder position changes. + * @param phid An attached phidget motor control 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(MotorControl,EncoderPositionChange,int time,int positionChange) +/** + * Set an encoder position update handler. This is called at a constant rate; every 8ms, whether the encoder position has changed or not. + * @param phid An attached phidget motor control 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(MotorControl,EncoderPositionUpdate,int positionChange) + +/** + * Gets the Back EMF sensing state for a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param bEMFState The back EMF sensing state. + */ +CHDRGETINDEX(MotorControl,BackEMFSensingState,int *bEMFState) +/** + * Sets the Back EMF sensing state for a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param bEMFState The back EMF sensing state. + */ +CHDRSETINDEX(MotorControl,BackEMFSensingState,int bEMFState) +/** + * Gets the Back EMF voltage for a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param voltage The back EMF voltage, in volts. + */ +CHDRGETINDEX(MotorControl,BackEMF,double *voltage) +/** + * Set a back EMF update handler. This is called at a constant rate; every 16ms, when back EMF sensing is enabled for that motor. + * @param phid An attached phidget motor control 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(MotorControl,BackEMFUpdate,double voltage) + +/** + * Gets the Supply voltage for the motors. This could be higher then the actual supply voltage. + * @param phid An attached phidget motor control handle. + * @param supplyVoltage The supply voltage, in volts. + */ +CHDRGET(MotorControl,SupplyVoltage,double *supplyVoltage) + +/** + * Gets the Braking value for a motor. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param braking The braking value, in percent. + */ +CHDRGETINDEX(MotorControl,Braking,double *braking) +/** + * Sets the Braking value for a motor. This is applied when velocity is 0. Default is 0%. + * @param phid An attached phidget motor control handle. + * @param index The motor index. + * @param braking The braking value, in percent. + */ +CHDRSETINDEX(MotorControl,Braking,double braking) + +/** + * Gets the number of sensor inputs supported by this board. + * @param phid An attached phidget motor control handle. + * @param count The sensor input count. + */ +CHDRGET(MotorControl, SensorCount, int *count) +/** + * Gets the value of a sensor. + * @param phid An attached phidget motor control handle. + * @param index The sensor index. + * @param sensorValue The sensor value, range: 0-1000. + */ +CHDRGETINDEX(MotorControl, SensorValue, int *sensorValue) +/** + * Gets the raw value of a sensor (12-bit). + * @param phid An attached phidget motor control handle. + * @param index The sensor index. + * @param sensorRawValue The sensor value, range: 0-4096. + */ +CHDRGETINDEX(MotorControl, SensorRawValue, int *sensorRawValue) +/** + * Set a sensor update handler. This is called at a constant rate; every 8ms. + * @param phid An attached phidget motor control 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(MotorControl, SensorUpdate, int sensorValue) +/** + * Gets the ratiometric state. + * @param phid An attached phidget motor control handle. + * @param ratiometric The ratiometric state. + */ +CHDRGET(MotorControl, Ratiometric, int *ratiometric) +/** + * Sets the ratiometric state. This control the voltage reference used for sampling the analog sensors. + * @param phid An attached phidget motor control handle. + * @param ratiometric The ratiometric state. + */ +CHDRSET(MotorControl, Ratiometric, int ratiometric) + +/** + * Set a current update handler. This is called at a constant rate; every 8ms. + * @param phid An attached phidget motor control 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(MotorControl,CurrentUpdate,double current) + +#ifndef REMOVE_DEPRECATED +DEP_CHDRGET("Deprecated - use CPhidgetMotorControl_getMotorCount",MotorControl,NumMotors,int *) +DEP_CHDRGET("Deprecated - use CPhidgetMotorControl_getInputCount",MotorControl,NumInputs,int *) +DEP_CHDRGETINDEX("Deprecated - use CPhidgetMotorControl_getVelocity",MotorControl,MotorSpeed,double *) +DEP_CHDRSETINDEX("Deprecated - use CPhidgetMotorControl_setVelocity",MotorControl,MotorSpeed,double) +DEP_CHDREVENTINDEX("Deprecated - use CPhidgetMotorControl_set_OnVelocityChange_Handler",MotorControl,MotorChange,double motorSpeed) +#endif + +#ifndef EXTERNALPROTO +#define MOTORCONTROL_MAXMOTORS 2 +#define MOTORCONTROL_MAXINPUTS 4 +#define MOTORCONTROL_MAXENCODERS 1 +#define MOTORCONTROL_MAXSENSORS 2 + +#define MOTORCONTROL_ERRORFLAG_OVERTEMP 0x0001 +#define MOTORCONTROL_ERRORFLAG_UNDERVOLTAGE_LOCKOUT 0x0002 +#define MOTORCONTROL_ERRORFLAG_NOPOWER 0x0004 +#define MOTORCONTROL_ERRORFLAG_LOWPOWER 0x0008 +#define MOTORCONTROL_ERRORFLAG_HIGHPOWER 0x0010 +#define MOTORCONTROL_ERRORFLAG_DANGERPOWER 0x0020 + +struct _CPhidgetMotorControl { + CPhidget phid; + + int (CCONV *fptrVelocityChange)(CPhidgetMotorControlHandle, void *, int, double); + int (CCONV *fptrInputChange)(CPhidgetMotorControlHandle, void *, int, int); + int (CCONV *fptrCurrentChange)(CPhidgetMotorControlHandle, void *, int, double); + int (CCONV *fptrEncoderPositionChange)(CPhidgetMotorControlHandle, void *, int, int, int); + int (CCONV *fptrEncoderPositionUpdate)(CPhidgetMotorControlHandle, void *, int, int); + int (CCONV *fptrBackEMFUpdate)(CPhidgetMotorControlHandle, void *, int, double); + int (CCONV *fptrSensorUpdate)(CPhidgetMotorControlHandle, void *, int, int); + int (CCONV *fptrCurrentUpdate)(CPhidgetMotorControlHandle, void *, int, double); + + void *fptrInputChangeptr; + void *fptrVelocityChangeptr; + void *fptrCurrentChangeptr; + void *fptrEncoderPositionChangeptr; + void *fptrEncoderPositionUpdateptr; + void *fptrBackEMFUpdateptr; + void *fptrSensorUpdateptr; + void *fptrCurrentUpdateptr; + + //Deprecated + int (CCONV *fptrMotorChange)(CPhidgetMotorControlHandle, void *, int, double); + void *fptrMotorChangeptr; + + //Returned from the device + unsigned char inputState[MOTORCONTROL_MAXINPUTS]; + double motorSpeedEcho[MOTORCONTROL_MAXMOTORS]; + double motorSensedCurrent[MOTORCONTROL_MAXMOTORS]; + double motorSensedBackEMF[MOTORCONTROL_MAXMOTORS]; + unsigned char backEMFSensingStateEcho[MOTORCONTROL_MAXMOTORS]; + double motorSetSpeedEcho[MOTORCONTROL_MAXMOTORS]; + double motorAccelerationEcho[MOTORCONTROL_MAXMOTORS]; + double motorBrakingEcho[MOTORCONTROL_MAXMOTORS]; + double supplyVoltage; + int encoderPositionEcho[MOTORCONTROL_MAXENCODERS]; + int encoderTimeStamp[MOTORCONTROL_MAXENCODERS]; + unsigned char ratiometricEcho; + int sensorRawValue[MOTORCONTROL_MAXSENSORS]; + int sensorValue[MOTORCONTROL_MAXSENSORS]; + + int lastPacketCount; + + //Local set data + double motorSpeed[MOTORCONTROL_MAXMOTORS]; + double motorAcceleration[MOTORCONTROL_MAXMOTORS]; + unsigned char backEMFSensingState[MOTORCONTROL_MAXMOTORS]; + double motorBraking[MOTORCONTROL_MAXMOTORS]; + unsigned char ratiometric; + + int encoderPositionDelta[MOTORCONTROL_MAXENCODERS]; + unsigned short motorErrors[MOTORCONTROL_MAXMOTORS]; + + //Constants + double accelerationMax, accelerationMin; + + //for Webservice + double lastVoltage; + int encoderPositionUpdates[MOTORCONTROL_MAXENCODERS]; + + unsigned char outputPacket[8]; + unsigned int outputPacketLen; +} typedef CPhidgetMotorControlInfo; +#endif + +/** @} */ + +#endif -- cgit v1.2.3