00001 #ifndef __CPHIDGETADVANCEDSERVO
00002 #define __CPHIDGETADVANCEDSERVO
00003 #include "cphidget.h"
00004
00011 DPHANDLE(AdvancedServo)
00012 CHDRSTANDARD(AdvancedServo)
00013
00014
00018 typedef enum {
00019 PHIDGET_SERVO_DEFAULT = 1,
00020 PHIDGET_SERVO_RAW_us_MODE,
00021 PHIDGET_SERVO_HITEC_HS322HD,
00022 PHIDGET_SERVO_HITEC_HS5245MG,
00023 PHIDGET_SERVO_HITEC_805BB,
00024 PHIDGET_SERVO_HITEC_HS422,
00025 PHIDGET_SERVO_TOWERPRO_MG90,
00026 PHIDGET_SERVO_HITEC_HSR1425CR,
00027 PHIDGET_SERVO_HITEC_HS785HB,
00028 PHIDGET_SERVO_HITEC_HS485HB,
00029 PHIDGET_SERVO_HITEC_HS645MG,
00030 PHIDGET_SERVO_HITEC_815BB,
00031 PHIDGET_SERVO_FIRGELLI_L12_30_50_06_R,
00032 PHIDGET_SERVO_FIRGELLI_L12_50_100_06_R,
00033 PHIDGET_SERVO_FIRGELLI_L12_50_210_06_R,
00034 PHIDGET_SERVO_FIRGELLI_L12_100_50_06_R,
00035 PHIDGET_SERVO_FIRGELLI_L12_100_100_06_R,
00036 PHIDGET_SERVO_SPRINGRC_SM_S2313M,
00037 PHIDGET_SERVO_SPRINGRC_SM_S3317M,
00038 PHIDGET_SERVO_SPRINGRC_SM_S3317SR,
00039 PHIDGET_SERVO_SPRINGRC_SM_S4303R,
00040 PHIDGET_SERVO_SPRINGRC_SM_S4315M,
00041 PHIDGET_SERVO_SPRINGRC_SM_S4315R,
00042 PHIDGET_SERVO_SPRINGRC_SM_S4505B,
00043 PHIDGET_SERVO_USER_DEFINED
00044 } CPhidget_ServoType;
00045
00051 CHDRGET(AdvancedServo,MotorCount,int *count)
00052
00053
00059 CHDRGETINDEX(AdvancedServo,Acceleration,double *acceleration)
00066 CHDRSETINDEX(AdvancedServo,Acceleration,double acceleration)
00073 CHDRGETINDEX(AdvancedServo,AccelerationMax,double *max)
00080 CHDRGETINDEX(AdvancedServo,AccelerationMin,double *min)
00081
00082
00089 CHDRGETINDEX(AdvancedServo,VelocityLimit,double *limit)
00096 CHDRSETINDEX(AdvancedServo,VelocityLimit,double limit)
00097
00104 CHDRGETINDEX(AdvancedServo,Velocity,double *velocity)
00111 CHDRGETINDEX(AdvancedServo,VelocityMax,double *max)
00118 CHDRGETINDEX(AdvancedServo,VelocityMin,double *min)
00125 CHDREVENTINDEX(AdvancedServo,VelocityChange,double velocity)
00126
00127
00133 CHDRGETINDEX(AdvancedServo,Position,double *position)
00140 CHDRSETINDEX(AdvancedServo,Position,double position)
00147 CHDRGETINDEX(AdvancedServo,PositionMax,double *max)
00154 CHDRSETINDEX(AdvancedServo,PositionMax,double max)
00161 CHDRGETINDEX(AdvancedServo,PositionMin,double *min)
00168 CHDRSETINDEX(AdvancedServo,PositionMin,double min)
00175 CHDREVENTINDEX(AdvancedServo,PositionChange,double position)
00176
00177
00183 CHDRGETINDEX(AdvancedServo,Current,double *current)
00190 CHDREVENTINDEX(AdvancedServo,CurrentChange,double current)
00191
00192
00198 CHDRGETINDEX(AdvancedServo,SpeedRampingOn,int *rampingState)
00205 CHDRSETINDEX(AdvancedServo,SpeedRampingOn,int rampingState)
00212 CHDRGETINDEX(AdvancedServo,Engaged,int *engagedState)
00219 CHDRSETINDEX(AdvancedServo,Engaged,int engagedState)
00226 CHDRGETINDEX(AdvancedServo,Stopped,int *stoppedState)
00233 CHDRGETINDEX(AdvancedServo,ServoType,CPhidget_ServoType *servoType)
00240 CHDRSETINDEX(AdvancedServo,ServoType,CPhidget_ServoType servoType)
00250 CHDRSETINDEX(AdvancedServo,ServoParameters,double min_us,double max_us,double degrees,double velocity_max)
00251
00252 #ifndef EXTERNALPROTO
00253 #define ADVSERVO_MAXSERVOS 8
00254
00255 #define ADVSERVO_NORMAL_PACKET 0x00
00256 #define ADVSERVO_MINMAX_PACKET 0x10
00257
00258
00259 #define MOTOR_DONE_ADVSERVO 0x20
00260 #define MOTOR_DISABLED_ADVSERVO 0x40
00261 #define NO_RAMPING_FLAG_ADVSERVO 0x80
00262
00263 #define ADVSERVO_PGOOD_FLAG 0x01
00264
00265
00266 struct _CPhidgetServoParameters
00267 {
00268 CPhidget_ServoType servoType;
00269 double min_us;
00270 double max_us;
00271 double us_per_degree;
00272 double max_us_per_s;
00273 unsigned char state;
00274 } typedef CPhidgetServoParameters, *CPhidgetServoParametersHandle;
00275
00276 extern const CPhidgetServoParameters Phid_Servo_Types[];
00277 int getServoParameterIndex(CPhidget_ServoType type);
00278 PHIDGET21_API double CCONV servo_us_to_degrees(CPhidgetServoParameters params, double us, unsigned char round);
00279 PHIDGET21_API double CCONV servo_degrees_to_us(CPhidgetServoParameters params, double degrees);
00280 PHIDGET21_API double CCONV servo_us_to_degrees_vel(CPhidgetServoParameters params, double us, unsigned char round);
00281 PHIDGET21_API double CCONV servo_degrees_to_us_vel(CPhidgetServoParameters params, double degrees);
00282
00283 PHIDGET21_API int CCONV setupNewAdvancedServoParams(CPhidgetAdvancedServoHandle phid, int Index, CPhidgetServoParameters newVal);
00284
00285 struct _CPhidgetAdvancedServo {
00286 CPhidget phid;
00287
00288 int (CCONV *fptrPositionChange)(CPhidgetAdvancedServoHandle, void *, int, double);
00289 int (CCONV *fptrVelocityChange)(CPhidgetAdvancedServoHandle, void *, int, double);
00290 int (CCONV *fptrCurrentChange)(CPhidgetAdvancedServoHandle, void *, int, double);
00291
00292 void *fptrPositionChangeptr;
00293 void *fptrVelocityChangeptr;
00294 void *fptrCurrentChangeptr;
00295
00296
00297
00298
00299 double motorVelocityEcho[ADVSERVO_MAXSERVOS];
00300 double motorPositionEcho[ADVSERVO_MAXSERVOS];
00301 double motorSensedCurrent[ADVSERVO_MAXSERVOS];
00302 unsigned char motorSpeedRampingStateEcho[ADVSERVO_MAXSERVOS];
00303 unsigned char motorEngagedStateEcho[ADVSERVO_MAXSERVOS];
00304 unsigned char motorStoppedState[ADVSERVO_MAXSERVOS];
00305 int packetCounterEcho[ADVSERVO_MAXSERVOS];
00306
00307
00308 double motorPosition[ADVSERVO_MAXSERVOS];
00309 double motorAcceleration[ADVSERVO_MAXSERVOS];
00310 double motorVelocity[ADVSERVO_MAXSERVOS];
00311 unsigned char motorSpeedRampingState[ADVSERVO_MAXSERVOS];
00312 unsigned char motorEngagedState[ADVSERVO_MAXSERVOS];
00313 int packetCounter[ADVSERVO_MAXSERVOS];
00314 double motorPositionMax[ADVSERVO_MAXSERVOS];
00315 double motorPositionMin[ADVSERVO_MAXSERVOS];
00316
00317 double velocityMax[ADVSERVO_MAXSERVOS], velocityMin;
00318 double velocityMaxLimit;
00319 double accelerationMax, accelerationMin;
00320 double motorPositionMaxLimit, motorPositionMinLimit;
00321
00322 unsigned char PGoodErrState;
00323
00324 CPhidgetServoParameters servoParams[ADVSERVO_MAXSERVOS];
00325 char *servoParamString[ADVSERVO_MAXSERVOS];
00326
00327 unsigned char outputPacket[MAX_OUT_PACKET_SIZE];
00328 unsigned int outputPacketLen;
00329 } typedef CPhidgetAdvancedServoInfo;
00330
00331 #endif
00332
00335 #endif