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 --- cphidgetspatial.h | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 cphidgetspatial.h (limited to 'cphidgetspatial.h') diff --git a/cphidgetspatial.h b/cphidgetspatial.h new file mode 100644 index 0000000..8d9fdb7 --- /dev/null +++ b/cphidgetspatial.h @@ -0,0 +1,256 @@ +#ifndef __CPHIDGETSPATIAL +#define __CPHIDGETSPATIAL +#include "cphidget.h" + +/** \defgroup phidspatial Phidget Spatial + * \ingroup phidgets + * Calls specific to the Phidget Spatial. See the product manual for more specific API details, supported functionality, units, etc. + * @{ + */ + +DPHANDLE(Spatial) +CHDRSTANDARD(Spatial) + +/** + * Timestamped position data returned by the \ref CPhidgetSpatial_set_OnSpatialData_Handler event. + */ +typedef struct _CPhidgetSpatial_SpatialEventData +{ + double acceleration[3]; /**< Acceleration data for up to 3 axes. */ + double angularRate[3]; /**< Angular rate data (Gyroscope) for up to 3 axes */ + double magneticField[3]; /**< Magnetic field data (Compass) for up to 3 axes */ + CPhidget_Timestamp timestamp; /**< Hardware timestamp */ +} CPhidgetSpatial_SpatialEventData, *CPhidgetSpatial_SpatialEventDataHandle; + +/** + * Gets the number of acceleration axes supplied by this board. + * @param phid An attached phidget spatial handle. + * @param count The number of acceleration axes. + */ +CHDRGET(Spatial,AccelerationAxisCount,int *count) +/** + * Gets the number of gyroscope axes supplied by this board. + * @param phid An attached phidget spatial handle. + * @param count The number of gyro axes. + */ +CHDRGET(Spatial,GyroAxisCount,int *count) +/** + * Gets the number of compass axes supplied by this board. + * @param phid An attached phidget spatial handle. + * @param count The number of compass axes. + */ +CHDRGET(Spatial,CompassAxisCount,int *count) + +/** + * Gets the current acceleration of an axis. + * @param phid An attached phidget spatial handle. + * @param index The acceleration index. + * @param acceleration The acceleration in gs. + */ +CHDRGETINDEX(Spatial,Acceleration,double *acceleration) +/** + * Gets the maximum accleration supported by an axis. + * @param phid An attached phidget spatial handle. + * @param index The acceleration index + * @param max The maximum acceleration + */ +CHDRGETINDEX(Spatial,AccelerationMax,double *max) +/** + * Gets the minimum acceleration supported by an axis. + * @param phid An attached phidget spatial handle. + * @param index The acceleration index + * @param min The minimum acceleration + */ +CHDRGETINDEX(Spatial,AccelerationMin,double *min) + +/** + * Gets the current angular rate of an axis. + * @param phid An attached phidget spatial handle. + * @param index The angular rate index. + * @param angularRate The angular rate in degrees/second. + */ +CHDRGETINDEX(Spatial,AngularRate,double *angularRate) +/** + * Gets the maximum angular rate supported by an axis. + * @param phid An attached phidget spatial handle. + * @param index The angular rate index + * @param max The maximum angular rate + */ +CHDRGETINDEX(Spatial,AngularRateMax,double *max) +/** + * Gets the minimum angular rate supported by an axis. + * @param phid An attached phidget spatial handle. + * @param index The angular rate index + * @param min The minimum angular rate + */ +CHDRGETINDEX(Spatial,AngularRateMin,double *min) + +/** + * Gets the current magnetic field stregth of an axis. + * @param phid An attached phidget spatial handle. + * @param index The magnetic field index. + * @param magneticField The magnetic field strength in Gauss. + */ +CHDRGETINDEX(Spatial,MagneticField,double *magneticField) +/** + * Gets the maximum magnetic field stregth supported by an axis. + * @param phid An attached phidget spatial handle. + * @param index The magnetic field index + * @param max The maximum magnetic field stregth + */ +CHDRGETINDEX(Spatial,MagneticFieldMax,double *max) +/** + * Gets the minimum magnetic field stregth supported by an axis. + * @param phid An attached phidget spatial handle. + * @param index The magnetic field index + * @param min The minimum magnetic field stregth + */ +CHDRGETINDEX(Spatial,MagneticFieldMin,double *min) + +/** + * Zeroes the gyroscope. This takes about two seconds and the gyro zxes will report 0 during the process. + * This should only be called when the board is not moving. + * @param phid An attached phidget spatial handle. + */ +PHIDGET21_API int CCONV CPhidgetSpatial_zeroGyro(CPhidgetSpatialHandle phid); + +/** + * Get the data rate. + * @param phid An attached phidget spatial handle. + * @param milliseconds The data rate in milliseconds. + */ +CHDRGET(Spatial, DataRate, int *milliseconds) +/** + * Sets the data rate. Note that data at rates faster then 8ms will be delivered to events as an array of data. + * @param phid An attached phidget spatial handle. + * @param milliseconds The data rate in milliseconds. + */ +CHDRSET(Spatial, DataRate, int milliseconds) +/** + * Gets the maximum supported data rate. + * @param phid An attached phidget spatial handle. + * @param max Data rate in ms. + */ +CHDRGET(Spatial, DataRateMax, int *max) +/** + * Gets the minimum supported data rate. + * @param phid An attached phidget spatial handle. + * @param min Data rate in ms. + */ +CHDRGET(Spatial, DataRateMin, int *min) + +/** + * Sets the compass correction factors. This can be used to correcting any sensor errors, including hard and soft iron offsets and sensor error factors. + * @param phid An attached phidget spatial handle. + * @param magField Local magnetic field strength. + * @param offset0 Axis 0 offset correction. + * @param offset1 Axis 1 offset correction. + * @param offset2 Axis 2 offset correction. + * @param gain0 Axis 0 gain correction. + * @param gain1 Axis 1 gain correction. + * @param gain2 Axis 2 gain correction. + * @param T0 Non-orthogonality correction factor 0. + * @param T1 Non-orthogonality correction factor 1. + * @param T2 Non-orthogonality correction factor 2. + * @param T3 Non-orthogonality correction factor 3. + * @param T4 Non-orthogonality correction factor 4. + * @param T5 Non-orthogonality correction factor 5. + */ +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) +/** + * Resets the compass correction factors. Magnetic field data will be presented directly as reported by the sensor. + * @param phid An attached phidget spatial handle. + */ +PHIDGET21_API int CCONV CPhidgetSpatial_resetCompassCorrectionParameters(CPhidgetSpatialHandle phid); + +/** + * Set a Data event handler. This is called at /ref CPhidgetSpatial_getDataRate, up to 8ms, for faster then 8ms data, multiple + * sets of data are supplied in a single event. + * @param phid An attached phidget spatial handle. + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENT(Spatial,SpatialData,CPhidgetSpatial_SpatialEventDataHandle *data, int dataCount) + +#ifndef EXTERNALPROTO + +#define SPATIAL_MAX_ACCELAXES 3 +#define SPATIAL_MAX_GYROAXES 3 +#define SPATIAL_MAX_COMPASSAXES 3 + +//in milliseconds - this is the fastest hardware rate of any device +#define SPATIAL_MAX_DATA_RATE 1 +//1 second is the longest between events that we support +#define SPATIAL_MIN_DATA_RATE 1000 +//add 200ms for timing differences (late events, etc) - should be plenty +#define SPATIAL_DATA_BUFFER_SIZE ((SPATIAL_MIN_DATA_RATE + 200)/SPATIAL_MAX_DATA_RATE) +//1 second of data to zero the gyro - make sure DATA_BUFFER_SIZE is big enough to hold this much data +#define SPATIAL_ZERO_GYRO_TIME 2000 + +//packet types +//IN +#define SPATIAL_PACKET_DATA 0x00 +#define SPATIAL_PACKET_CALIB 0x80 +//OUT +#define SPATIAL_READCALIB 0x01 + +struct _CPhidgetSpatial { + CPhidget phid; + int (CCONV *fptrSpatialData)(CPhidgetSpatialHandle, void *, CPhidgetSpatial_SpatialEventDataHandle *, int); + void *fptrSpatialDataptr; + + double accelAxis[SPATIAL_MAX_ACCELAXES]; + double gyroAxis[SPATIAL_MAX_GYROAXES]; + double compassAxis[SPATIAL_MAX_COMPASSAXES]; + + double gryoCorrection[SPATIAL_MAX_GYROAXES]; + unsigned char doZeroGyro; + int gyroZeroReadPtr; + + CPhidgetSpatial_SpatialEventData dataBuffer[SPATIAL_DATA_BUFFER_SIZE]; + int bufferReadPtr, bufferWritePtr; + + double accelerationMax, accelerationMin; + double angularRateMax, angularRateMin; + double magneticFieldMax, magneticFieldMin; + + unsigned char calDataValid; + + double accelGain1[SPATIAL_MAX_ACCELAXES]; + double accelGain2[SPATIAL_MAX_ACCELAXES]; + double accelOffset[SPATIAL_MAX_ACCELAXES]; + double accelFactor1[SPATIAL_MAX_ACCELAXES]; + double accelFactor2[SPATIAL_MAX_ACCELAXES]; + + double gyroGain1[SPATIAL_MAX_GYROAXES]; + double gyroGain2[SPATIAL_MAX_GYROAXES]; + double gyroOffset[SPATIAL_MAX_GYROAXES]; + double gyroFactor1[SPATIAL_MAX_GYROAXES]; + double gyroFactor2[SPATIAL_MAX_GYROAXES]; + + int compassGain[SPATIAL_MAX_COMPASSAXES]; + int compassOffset[SPATIAL_MAX_COMPASSAXES]; + + double userMagField; + double userCompassGain[SPATIAL_MAX_COMPASSAXES]; + double userCompassOffset[SPATIAL_MAX_COMPASSAXES]; + double userCompassTransform[SPATIAL_MAX_COMPASSAXES*(SPATIAL_MAX_COMPASSAXES-1)]; + + CPhidget_Timestamp timestamp, lastEventTime, latestDataTime; + + unsigned char lastTimeCounterValid; + int lastTimeCounter; + int flip; + + char *compassCorrectionParamsString; + unsigned char spatialDataNetwork; + + int dataRate, interruptRate; + int dataRateMax, dataRateMin; + +} typedef CPhidgetSpatialInfo; +#endif + +/** @} */ + +#endif -- cgit v1.2.3