cphidgetspatial.h
Go to the documentation of this file.
00001 #ifndef __CPHIDGETSPATIAL
00002 #define __CPHIDGETSPATIAL
00003 #include "cphidget.h"
00004 
00011 DPHANDLE(Spatial)
00012 CHDRSTANDARD(Spatial)
00013 
00017 typedef struct _CPhidgetSpatial_SpatialEventData
00018 {
00019         double acceleration[3]; 
00020         double angularRate[3]; 
00021         double magneticField[3]; 
00022         CPhidget_Timestamp timestamp; 
00023 } CPhidgetSpatial_SpatialEventData, *CPhidgetSpatial_SpatialEventDataHandle;
00024 
00030 CHDRGET(Spatial,AccelerationAxisCount,int *count)
00036 CHDRGET(Spatial,GyroAxisCount,int *count)
00042 CHDRGET(Spatial,CompassAxisCount,int *count)
00043 
00044 
00050 CHDRGETINDEX(Spatial,Acceleration,double *acceleration)
00057 CHDRGETINDEX(Spatial,AccelerationMax,double *max)
00064 CHDRGETINDEX(Spatial,AccelerationMin,double *min)
00065 
00066 
00072 CHDRGETINDEX(Spatial,AngularRate,double *angularRate)
00079 CHDRGETINDEX(Spatial,AngularRateMax,double *max)
00086 CHDRGETINDEX(Spatial,AngularRateMin,double *min)
00087 
00088 
00094 CHDRGETINDEX(Spatial,MagneticField,double *magneticField)
00101 CHDRGETINDEX(Spatial,MagneticFieldMax,double *max)
00108 CHDRGETINDEX(Spatial,MagneticFieldMin,double *min)
00109 
00110 
00115 PHIDGET21_API int CCONV CPhidgetSpatial_zeroGyro(CPhidgetSpatialHandle phid);
00116 
00122 CHDRGET(Spatial, DataRate, int *milliseconds)
00128 CHDRSET(Spatial, DataRate, int milliseconds)
00134 CHDRGET(Spatial, DataRateMax, int *max)
00140 CHDRGET(Spatial, DataRateMin, int *min)
00141 
00142 
00159 CHDRSET(Spatial, CompassCorrectionParameters, double magField, double offset0, double offset1, double offset2, double gain0, double gain1, double gain2, double T0, double T1, double T2, double T3, double T4, double T5)
00164 PHIDGET21_API int CCONV CPhidgetSpatial_resetCompassCorrectionParameters(CPhidgetSpatialHandle phid);
00165 
00173 CHDREVENT(Spatial,SpatialData,CPhidgetSpatial_SpatialEventDataHandle *data, int dataCount)
00174 
00175 //These are for a prototype device - hide until it's released
00176 #if !defined(EXTERNALPROTO) || defined(DEBUG)
00177 
00178 #define SPATIAL_ANALOG_AND_DIGITAL      0x00
00179 #define SPATIAL_ANALOG                          0x01
00180 #define SPATIAL_DIGITAL                         0x02
00181 
00182 typedef enum {
00183         PHIDGET_SPATIAL_ANALOG_AND_DIGITAL = 0, 
00184         PHIDGET_SPATIAL_ANALOG,                                 
00185         PHIDGET_SPATIAL_DIGITAL,                                
00186 }  CPhidgetSpatial_AnalogDigitalMode;
00187 
00188 CHDRSET(Spatial, AnalogDigitalMode, CPhidgetSpatial_AnalogDigitalMode mode)
00189 PHIDGET21_API int CCONV CPhidgetSpatial_unZeroGyro(CPhidgetSpatialHandle phid);
00190 PHIDGET21_API int CCONV CPhidgetSpatial_setDigitalGyroCalibrationValues(CPhidgetSpatialHandle phid,
00191         double gainPositive[3], double gainNegative[3], double offset[3], double factor1[3], double factor2[3]);
00192 PHIDGET21_API int CCONV CPhidgetSpatial_setAnalogGyroCalibrationValues(CPhidgetSpatialHandle phid,
00193         double gainPositive[3], double gainNegative[3], double offset[3], double factor1[3], double factor2[3]);
00194 PHIDGET21_API int CCONV CPhidgetSpatial_setDigitalAccelCalibrationValues(CPhidgetSpatialHandle phid,
00195         double gainPositive[3], double gainNegative[3], double offset[3], double factor1[3], double factor2[3]);
00196 PHIDGET21_API int CCONV CPhidgetSpatial_setAnalogAccelCalibrationValues(CPhidgetSpatialHandle phid,
00197         double gainPositive[3], double gainNegative[3], double offset[3], double factor1[3], double factor2[3]);
00198 
00199 #endif
00200 
00201 #ifndef EXTERNALPROTO
00202 
00203 #define SPATIAL_MAX_ACCELAXES 3
00204 #define SPATIAL_MAX_GYROAXES 3
00205 #define SPATIAL_MAX_COMPASSAXES 3
00206 
00207 //in milliseconds - this is the fastest hardware rate of any device
00208 #define SPATIAL_MAX_DATA_RATE 1
00209 //1 second is the longest between events that we support
00210 #define SPATIAL_MIN_DATA_RATE 1000
00211 //add 200ms for timing differences (late events, etc) - should be plenty
00212 #define SPATIAL_DATA_BUFFER_SIZE ((SPATIAL_MIN_DATA_RATE * 2 + 200)/SPATIAL_MAX_DATA_RATE)
00213 //2 seconds of data to zero the gyro - make sure DATA_BUFFER_SIZE is big enough to hold this much data
00214 #define SPATIAL_ZERO_GYRO_TIME 2000
00215 
00216 //packet types
00217 //IN
00218 #define SPATIAL_PACKET_DATA             0x00
00219 #define SPATIAL_PACKET_CALIB    0x80
00220 //OUT
00221 #define SPATIAL_READCALIB                       0x01
00222 #define SPATIAL_SET_POLLING_TYPE        0x02
00223 #define SPATIAL_ZERO_GYRO                       0x03
00224 #define SPATIAL_UNZERO_GYRO                     0x04
00225 
00226 //M3 Spatial calibration table indexes
00227 #define SPATIAL_DIGITAL_ACCEL_CALIB_TABLE_INDEX         0
00228 #define SPATIAL_ANALOG_ACCEL_CALIB_TABLE_INDEX          1
00229 #define SPATIAL_DIGITAL_GYRO_CALIB_TABLE_INDEX          2
00230 #define SPATIAL_ANALOG_GYRO_CALIB_TABLE_INDEX           3
00231 #define SPATIAL_COMPASS_CALIB_TABLE_INDEX                       4
00232 #define SPATIAL_COMPASS_TEMP_CALIB_TABLE_INDEX          5
00233 
00234 #define SPATIAL_ACCEL_GYRO_CALIB_TABLE_LENGTH           64
00235 #define SPATIAL_COMPASS_CALIB_TABLE_LENGTH                      56
00236 
00237 #define SPATIAL_GyroCalibTable_ID               1000
00238 #define SPATIAL_AccelCalibTable_ID              1001
00239 
00258 #define SPATIAL_VOLTAGE_REF 3.3
00259 #define SPATIAL_AD7689_BITS_PER_VOLT (0x10000 / SPATIAL_VOLTAGE_REF)
00260 
00261 #define SPATIAL_LPR410AL_VOLTS_PER_DPS 0.0025
00262 #define SPATIAL_LRP410AL_w_AD7689_BITS_PER_DPS (SPATIAL_LPR410AL_VOLTS_PER_DPS * SPATIAL_AD7689_BITS_PER_VOLT)
00263 
00264 #define SPATIAL_LY330ALH_VOLTS_PER_DPS 0.003752
00265 #define SPATIAL_LY330ALH_w_AD7689_BITS_PER_DPS (SPATIAL_LY330ALH_VOLTS_PER_DPS * SPATIAL_AD7689_BITS_PER_VOLT)
00266 
00267 #define SPATIAL_L3GD20_DPS_PER_BIT 0.07
00268 #define SPATIAL_L3GD20_BITS_PER_DPS (1 / SPATIAL_L3GD20_DPS_PER_BIT)
00269 
00270 #define SPATIAL_KXR94_2050_VOLTS_PER_G 0.660
00271 #define SPATIAL_KXR94_2050_w_AD7689_BITS_PER_G (SPATIAL_KXR94_2050_VOLTS_PER_G * SPATIAL_AD7689_BITS_PER_VOLT)
00272 
00273 #define SPATIAL_MMA8451Q_BITS_PER_G 1024
00274 
00275 #define SPATIAL_HMC5883L_GAUSS_PER_BIT 0.00303
00276 #define SPATIAL_HMC5883L_BITS_PER_GAUSS (1 / SPATIAL_HMC5883L_GAUSS_PER_BIT)
00277 
00278 
00279 struct _CPhidgetSpatial {
00280         CPhidget phid;
00281         int (CCONV *fptrSpatialData)(CPhidgetSpatialHandle, void *, CPhidgetSpatial_SpatialEventDataHandle *, int);           
00282         void *fptrSpatialDataptr;
00283 
00284         double accelAxis[SPATIAL_MAX_ACCELAXES];
00285         double gyroAxis[SPATIAL_MAX_GYROAXES];
00286         double compassAxis[SPATIAL_MAX_COMPASSAXES];
00287 
00288         double gryoCorrection[SPATIAL_MAX_GYROAXES];
00289         unsigned char doZeroGyro;
00290         int gyroZeroReadPtr;
00291 
00292         CPhidgetSpatial_SpatialEventData dataBuffer[SPATIAL_DATA_BUFFER_SIZE];
00293         int bufferReadPtr, bufferWritePtr;
00294 
00295         double accelerationMax, accelerationMin;
00296         double angularRateMax, angularRateMin;
00297         double magneticFieldMax, magneticFieldMin;
00298 
00299         unsigned char calDataValid;
00300 
00301         double accelGain1[SPATIAL_MAX_ACCELAXES];
00302         double accelGain2[SPATIAL_MAX_ACCELAXES];
00303         double accelOffset[SPATIAL_MAX_ACCELAXES];
00304         double accelFactor1[SPATIAL_MAX_ACCELAXES];
00305         double accelFactor2[SPATIAL_MAX_ACCELAXES];
00306 
00307         double gyroGain1[SPATIAL_MAX_GYROAXES];
00308         double gyroGain2[SPATIAL_MAX_GYROAXES];
00309         double gyroOffset[SPATIAL_MAX_GYROAXES];
00310         double gyroFactor1[SPATIAL_MAX_GYROAXES];
00311         double gyroFactor2[SPATIAL_MAX_GYROAXES];
00312 
00313         int compassGain[SPATIAL_MAX_COMPASSAXES];
00314         int compassOffset[SPATIAL_MAX_COMPASSAXES];
00315 
00316         double userMagField;
00317         double userCompassGain[SPATIAL_MAX_COMPASSAXES];
00318         double userCompassOffset[SPATIAL_MAX_COMPASSAXES];
00319         double userCompassTransform[SPATIAL_MAX_COMPASSAXES*(SPATIAL_MAX_COMPASSAXES-1)];
00320         
00321         CPhidget_Timestamp timestamp, lastEventTime, latestDataTime;
00322 
00323         unsigned char lastTimeCounterValid;
00324         int lastTimeCounter;
00325         int flip;
00326 
00327         char *compassCorrectionParamsString;
00328         unsigned char spatialDataNetwork;
00329 
00330         int dataRate, interruptRate;
00331         int dataRateMax, dataRateMin;
00332 
00333 } typedef CPhidgetSpatialInfo;
00334 #endif
00335 
00338 #endif


pedal_monitor
Author(s): Pedro Mendes
autogenerated on Fri Jun 6 2014 18:37:20