VectorNav C/C++ Library
include/vn100.h
Go to the documentation of this file.
00001 
00031 #ifndef _VN100_H_
00032 #define _VN100_H_
00033 
00034 #include "vncp_services.h"
00035 #include "vn_kinematics.h"
00036 #include "vn_linearAlgebra.h"
00037 
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041 
00042 #define VNASYNC_OFF     0       
00043 #define VNASYNC_VNYPR   1       
00044 #define VNASYNC_VNQTN   2       
00045 #define VNASYNC_VNQTM   3       
00046 #define VNASYNC_VNQTA   4       
00047 #define VNASYNC_VNQTR   5       
00048 #define VNASYNC_VNQMA   6       
00049 #define VNASYNC_VNQAR   7       
00050 #define VNASYNC_VNQMR   8       
00051 #define VNASYNC_VNDCM   9       
00052 #define VNASYNC_VNMAG   10      
00053 #define VNASYNC_VNACC   11      
00054 #define VNASYNC_VNGYR   12      
00055 #define VNASYNC_VNMAR   13      
00056 #define VNASYNC_VNYMR   14      
00057 #define VNASYNC_VNYCM   15      
00058 #define VNASYNC_VNYBA   16      
00059 #define VNASYNC_VNYIA   17      
00060 #define VNASYNC_VNICM   18      
00061 #define VNASYNC_VNRAW   252     
00062 #define VNASYNC_VNCMV   253     
00063 #define VNASYNC_VNSTV   254     
00064 #define VNASYNC_VNCOV   255     
00069 typedef struct {
00070     char*   portName;       
00071     int     baudRate;       
00072     VN_BOOL isConnected;    
00073     void*   internalData;   
00074 } Vn100;
00075 
00080 typedef struct {
00081     VnYpr           ypr;                        
00082     VnQuaternion    quaternion;                 
00083     VnVector3       magnetic;                   
00084     VnVector3       acceleration;               
00085     VnVector3       angularRate;                
00086     VnMatrix3x3     dcm;                        
00087     double          temperature;                
00088     VnVector3       magneticVoltage;            
00089     VnVector3       accelerationVoltage;        
00090     VnVector3       angularRateVoltage;         
00091     double          temperatureVoltage;         
00092     VnVector3       angularRateBias;            
00093     VnVector3       attitudeVariance;           
00094     VnVector3       angularRateBiasVariance;    
00095 } Vn100CompositeData;
00096 
00104 typedef void (*Vn100NewAsyncDataReceivedListener)(Vn100* sender, Vn100CompositeData* newData);
00105 
00114 VN_ERROR_CODE vn100_connect(Vn100* newVn100, const char* portName, int baudrate);
00115 
00122 VN_ERROR_CODE vn100_disconnect(Vn100* vn100);
00123 
00132 unsigned char vn100_checksum_compute(const char* cmdToCheck);
00133 
00144 void vn100_checksum_computeAndReturnAsHex(const char* cmdToCheck, char* checksum);
00145 
00155 VN_ERROR_CODE vn100_set_timeout(Vn100* vn100, int timeout);
00156 
00165 int vn100_get_timeout(Vn100* vn100);
00166 
00177 VN_ERROR_CODE vn100_getCurrentAsyncData(Vn100* vn100, Vn100CompositeData* curData);
00178 
00186 VN_ERROR_CODE vn100_writeSettings(Vn100* vn100, VN_BOOL waitForResponse);
00187 
00194 VN_ERROR_CODE vn100_restoreFactorySettings(Vn100* vn100, VN_BOOL waitForResponse);
00195 
00202 VN_ERROR_CODE vn100_tare(Vn100* vn100, VN_BOOL waitForResponse);
00203 
00210 VN_ERROR_CODE vn100_reset(Vn100* vn100);
00211 
00219 VN_ERROR_CODE vn100_knownMagneticDisturbance(Vn100* vn100, VN_BOOL isDisturbancePresent, VN_BOOL waitForResponse);
00220 
00228 VN_ERROR_CODE vn100_knownAccelerationDisturbance(Vn100* vn100, VN_BOOL isDisturbancePresent, VN_BOOL waitForResponse);
00229 
00237 VN_ERROR_CODE vn100_setGyroBias(Vn100* vn100, VN_BOOL waitForResponse);
00238 
00247 VN_ERROR_CODE vn100_registerAsyncDataReceivedListener(Vn100* vn100, Vn100NewAsyncDataReceivedListener listener);
00248 
00257 VN_ERROR_CODE vn100_unregisterAsyncDataReceivedListener(Vn100* vn100, Vn100NewAsyncDataReceivedListener listener);
00258 
00259 /* VN100_CODE_GENERATION_SPOT_0_START */
00260 
00269 VN_ERROR_CODE vn100_getUserTag(Vn100* vn100, char* userTagBuffer, unsigned int userTagBufferLength);
00270 
00282 VN_ERROR_CODE vn100_setUserTag(Vn100* vn100, char* userTagData, unsigned int userTagDataLength, VN_BOOL waitForResponse);
00283 
00292 VN_ERROR_CODE vn100_getModelNumber(Vn100* vn100, char* modelBuffer, unsigned int modelBufferLength);
00293 
00301 VN_ERROR_CODE vn100_getHardwareRevision(Vn100* vn100, int* hardwareRevision);
00302 
00311 VN_ERROR_CODE vn100_getSerialNumber(Vn100* vn100, char* serialNumberBuffer, unsigned int serialNumberBufferLength);
00312 
00321 VN_ERROR_CODE vn100_getFirmwareVersion(Vn100* vn100, char* firmwareVersionBuffer, unsigned int firmwareVersionBufferLength);
00322 
00330 VN_ERROR_CODE vn100_getSerialBaudRate(Vn100* vn100, unsigned int* serialBaudrate);
00331 
00342 VN_ERROR_CODE vn100_setSerialBaudRate(Vn100* vn100, unsigned int serialBaudrate, VN_BOOL waitForResponse);
00343 
00351 VN_ERROR_CODE vn100_getAsynchronousDataOutputType(Vn100* vn100, unsigned int* asyncDataOutputType);
00352 
00363 VN_ERROR_CODE vn100_setAsynchronousDataOutputType(Vn100* vn100, unsigned int asyncDataOutputType, VN_BOOL waitForResponse);
00364 
00372 VN_ERROR_CODE vn100_getAsynchronousDataOutputFrequency(Vn100* vn100, unsigned int* asyncDataOutputFrequency);
00373 
00384 VN_ERROR_CODE vn100_setAsynchronousDataOutputFrequency(Vn100* vn100, unsigned int asyncDataOutputFrequency, VN_BOOL waitForResponse);
00385 
00393 VN_ERROR_CODE vn100_getYawPitchRoll(Vn100* vn100, VnYpr* attitude);
00394 
00402 VN_ERROR_CODE vn100_getQuaternion(Vn100* vn100, VnQuaternion* attitude);
00403 
00412 VN_ERROR_CODE vn100_getQuaternionMagnetic(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic);
00413 
00422 VN_ERROR_CODE vn100_getQuaternionAcceleration(Vn100* vn100, VnQuaternion* attitude, VnVector3* acceleration);
00423 
00432 VN_ERROR_CODE vn100_getQuaternionAngularRate(Vn100* vn100, VnQuaternion* attitude, VnVector3* angularRate);
00433 
00443 VN_ERROR_CODE vn100_getQuaternionMagneticAcceleration(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic, VnVector3* acceleration);
00444 
00454 VN_ERROR_CODE vn100_getQuaternionAccelerationAngularRate(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic, VnVector3* angularRate);
00455 
00466 VN_ERROR_CODE vn100_getQuaternionMagneticAcclerationAngularRate(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate);
00467 
00475 VN_ERROR_CODE vn100_getDirectionCosineMatrix(Vn100* vn100, VnMatrix3x3* attitude);
00476 
00484 VN_ERROR_CODE vn100_getMagnetic(Vn100* vn100, VnVector3* magnetic);
00485 
00493 VN_ERROR_CODE vn100_getAcceleration(Vn100* vn100, VnVector3* acceleration);
00494 
00502 VN_ERROR_CODE vn100_getAngularRate(Vn100* vn100, VnVector3* angularRate);
00503 
00513 VN_ERROR_CODE vn100_getMagneticAccelerationAngularRate(Vn100* vn100, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate);
00514 
00523 VN_ERROR_CODE vn100_getMagneticGravityReferenceVectors(Vn100* vn100, VnVector3* magneticReference, VnVector3* gravityReference);
00524 
00536 VN_ERROR_CODE vn100_setMagneticGravityReferenceVectors(Vn100* vn100, VnVector3 magneticReference, VnVector3 gravityReference, VN_BOOL waitForResponse);
00537 
00548 VN_ERROR_CODE vn100_getFilterMeasurementVarianceParameters(Vn100* vn100, double* angularWalkVariance, VnVector3* angularRateVariance, VnVector3* magneticVariance, VnVector3* accelerationVariance);
00549 
00563 VN_ERROR_CODE vn100_setFilterMeasurementVarianceParameters(Vn100* vn100, double angularWalkVariance, VnVector3 angularRateVariance, VnVector3 magneticVariance, VnVector3 accelerationVariance, VN_BOOL waitForResponse);
00564 
00573 VN_ERROR_CODE vn100_getMagneticHardSoftIronCompensationParameters(Vn100* vn100, VnMatrix3x3* c, VnVector3* b);
00574 
00586 VN_ERROR_CODE vn100_setMagneticHardSoftIronCompensationParameters(Vn100* vn100, VnMatrix3x3 c, VnVector3 b, VN_BOOL waitForResponse);
00587 
00598 VN_ERROR_CODE vn100_getFilterActiveTuningParameters(Vn100* vn100, double* magneticGain, double* accelerationGain, double* magneticMemory, double* accelerationMemory);
00599 
00613 VN_ERROR_CODE vn100_setFilterActiveTuningParameters(Vn100* vn100, double magneticGain, double accelerationGain, double magneticMemory, double accelerationMemory, VN_BOOL waitForResponse);
00614 
00623 VN_ERROR_CODE vn100_getAccelerometerCompensation(Vn100* vn100, VnMatrix3x3* c, VnVector3* b);
00624 
00636 VN_ERROR_CODE vn100_setAccelerometerCompensation(Vn100* vn100, VnMatrix3x3 c, VnVector3 b, VN_BOOL waitForResponse);
00637 
00645 VN_ERROR_CODE vn100_getReferenceFrameRotation(Vn100* vn100, VnMatrix3x3* c);
00646 
00657 VN_ERROR_CODE vn100_setReferenceFrameRotation(Vn100* vn100, VnMatrix3x3 c, VN_BOOL waitForResponse);
00658 
00669 VN_ERROR_CODE vn100_getYawPitchRollMagneticAccelerationAngularRate(Vn100* vn100, VnYpr* attitude, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate);
00670 
00678 VN_ERROR_CODE vn100_getAccelerometerGain(Vn100* vn100, unsigned int* accelerometerGain);
00679 
00690 VN_ERROR_CODE vn100_setAccelerometerGain(Vn100* vn100, unsigned int accelerometerGain, VN_BOOL waitForResponse);
00691 
00703 VN_ERROR_CODE vn100_getYawPitchRollAndCalibratedMeasurements(Vn100* vn100, VnYpr* attitude, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate, double* temperature);
00704 
00718 VN_ERROR_CODE vn100_getCommunicationProtocolControl(Vn100* vn100, unsigned char* serialCount, unsigned char* serialStatus, unsigned char* spiCount, unsigned char* spiStatus, unsigned char* serialChecksum, unsigned char* spiChecksum, unsigned char* errorMode);
00719 
00736 VN_ERROR_CODE vn100_setCommunicationProtocolControl(Vn100* vn100, unsigned char serialCount, unsigned char serialStatus, unsigned char spiCount, unsigned char spiStatus, unsigned char serialChecksum, unsigned char spiChecksum, unsigned char errorMode, VN_BOOL waitForResponse);
00737 
00766 VN_ERROR_CODE vn100_getCommunicationProtocolStatus(Vn100* vn100, unsigned int* numOfParsedSerialMessages, unsigned int* numOfParsedSpiMessages, unsigned char* maxUsageSerialRxBuffer, unsigned char* maxUsageSerialTxBuffer, unsigned char* maxUsageSpiRxBuffer, unsigned char* maxUsageSpiTxBuffer, unsigned short* reserved0, unsigned short* reserved1, unsigned short* reserved2, unsigned short* reserved3, unsigned short* reserved4, unsigned short* reserved5, unsigned short* reserved6, unsigned short* reserved7, unsigned short* reserved8, unsigned short* reserved9, unsigned short* reserved10, unsigned short* reserved11, unsigned short* reserved12, unsigned short* reserved13, unsigned short* reserved14, unsigned short* reserved15);
00767 
00799 VN_ERROR_CODE vn100_setCommunicationProtocolStatus(Vn100* vn100, unsigned int numOfParsedSerialMessages, unsigned int numOfParsedSpiMessages, unsigned char maxUsageSerialRxBuffer, unsigned char maxUsageSerialTxBuffer, unsigned char maxUsageSpiRxBuffer, unsigned char maxUsageSpiTxBuffer, unsigned short reserved0, unsigned short reserved1, unsigned short reserved2, unsigned short reserved3, unsigned short reserved4, unsigned short reserved5, unsigned short reserved6, unsigned short reserved7, unsigned short reserved8, unsigned short reserved9, unsigned short reserved10, unsigned short reserved11, unsigned short reserved12, unsigned short reserved13, unsigned short reserved14, unsigned short reserved15, VN_BOOL waitForResponse);
00800 
00816 VN_ERROR_CODE vn100_getSynchronizationControl(Vn100* vn100, unsigned char* syncInMode, unsigned char* syncInEdge, unsigned short* syncInSkipFactor, unsigned int* reserved0, unsigned char* syncOutMode, unsigned char* syncOutPolarity, unsigned short* syncOutSkipFactor, unsigned int* syncOutPulseWidth, unsigned int* reserved1);
00817 
00836 VN_ERROR_CODE vn100_setSynchronizationControl(Vn100* vn100, unsigned char syncInMode, unsigned char syncInEdge, unsigned short syncInSkipFactor, unsigned int reserved0, unsigned char syncOutMode, unsigned char syncOutPolarity, unsigned short syncOutSkipFactor, unsigned int syncOutPulseWidth, unsigned int reserved1, VN_BOOL waitForResponse);
00837 
00847 VN_ERROR_CODE vn100_getSynchronizationStatus(Vn100* vn100, unsigned int* syncInCount, unsigned int* syncInTime, unsigned int* syncOutCount);
00848 
00861 VN_ERROR_CODE vn100_setSynchronizationStatus(Vn100* vn100, unsigned int syncInCount, unsigned int syncInTime, unsigned int syncOutCount, VN_BOOL waitForResponse);
00862 
00874 VN_ERROR_CODE vn100_getAttitudeFilterControl(Vn100* vn100, unsigned char* magneticMode, unsigned char* externalMagnetometerMode, unsigned char* externalAccelerometerMode, unsigned char* externalGyroscopeMode, VnVector3* angularRateLimit);
00875 
00890 VN_ERROR_CODE vn100_setAttitudeFilterControl(Vn100* vn100, unsigned char magneticMode, unsigned char externalMagnetometerMode, unsigned char externalAccelerometerMode, unsigned char externalGyroscopeMode, VnVector3 angularRateLimit, VN_BOOL waitForResponse);
00891 
00902 VN_ERROR_CODE vn100_getVpeControl(Vn100* vn100, unsigned char* enable, unsigned char* headingMode, unsigned char* filteringMode, unsigned char* tuningMode);
00903 
00917 VN_ERROR_CODE vn100_setVpeControl(Vn100* vn100, unsigned char enable, unsigned char headingMode, unsigned char filteringMode, unsigned char tuningMode, VN_BOOL waitForResponse);
00918 
00928 VN_ERROR_CODE vn100_getVpeMagnetometerBasicTuning(Vn100* vn100, VnVector3* baseTuning, VnVector3* adaptiveTuning, VnVector3* adaptiveFiltering);
00929 
00942 VN_ERROR_CODE vn100_setVpeMagnetometerBasicTuning(Vn100* vn100, VnVector3 baseTuning, VnVector3 adaptiveTuning, VnVector3 adaptiveFiltering, VN_BOOL waitForResponse);
00943 
00955 VN_ERROR_CODE vn100_getVpeMagnetometerAdvancedTuning(Vn100* vn100, VnVector3* minimumFiltering, VnVector3* maximumFiltering, double* maximumAdaptRate, double* disturbanceWindow, double* maximumTuning);
00956 
00971 VN_ERROR_CODE vn100_setVpeMagnetometerAdvancedTuning(Vn100* vn100, VnVector3 minimumFiltering, VnVector3 maximumFiltering, double maximumAdaptRate, double disturbanceWindow, double maximumTuning, VN_BOOL waitForResponse);
00972 
00982 VN_ERROR_CODE vn100_getVpeAccelerometerBasicTuning(Vn100* vn100, VnVector3* baseTuning, VnVector3* adaptiveTuning, VnVector3* adaptiveFiltering);
00983 
00996 VN_ERROR_CODE vn100_setVpeAccelerometerBasicTuning(Vn100* vn100, VnVector3 baseTuning, VnVector3 adaptiveTuning, VnVector3 adaptiveFiltering, VN_BOOL waitForResponse);
00997 
01009 VN_ERROR_CODE vn100_getVpeAccelerometerAdvancedTuning(Vn100* vn100, VnVector3* minimumFiltering, VnVector3* maximumFiltering, double* maximumAdaptRate, double* disturbanceWindow, double* maximumTuning);
01010 
01025 VN_ERROR_CODE vn100_setVpeAccelerometerAdvancedTuning(Vn100* vn100, VnVector3 minimumFiltering, VnVector3 maximumFiltering, double maximumAdaptRate, double disturbanceWindow, double maximumTuning, VN_BOOL waitForResponse);
01026 
01036 VN_ERROR_CODE vn100_getVpeGyroBasicTuning(Vn100* vn100, VnVector3* baseTuning, VnVector3* adaptiveTuning, VnVector3* adaptiveFiltering);
01037 
01050 VN_ERROR_CODE vn100_setVpeGyroBasicTuning(Vn100* vn100, VnVector3 baseTuning, VnVector3 adaptiveTuning, VnVector3 adaptiveFiltering, VN_BOOL waitForResponse);
01051 
01065 VN_ERROR_CODE vn100_getFilterStatus(Vn100* vn100, unsigned short* solutionStatus, double* yawUncertainty, double* pitchUncertainty, double* rollUncertainty, double* gyroBiasUncertainty, double* magUncertainty, double* accelUncertainty);
01066 
01074 VN_ERROR_CODE vn100_getFilterStartupGyroBias(Vn100* vn100, VnVector3* gyroBias);
01075 
01086 VN_ERROR_CODE vn100_setFilterStartupGyroBias(Vn100* vn100, VnVector3 gyroBias, VN_BOOL waitForResponse);
01087 
01097 VN_ERROR_CODE vn100_getMagnetometerBasicCalibrationControl(Vn100* vn100, unsigned char* hsiMode, unsigned char* hsiOutput, unsigned char* convergeRate);
01098 
01111 VN_ERROR_CODE vn100_setMagnetometerBasicCalibrationControl(Vn100* vn100, unsigned char hsiMode, unsigned char hsiOutput, unsigned char convergeRate, VN_BOOL waitForResponse);
01112 
01131 VN_ERROR_CODE vn100_getMagnetometerCalibrationStatus(Vn100* vn100, unsigned char* lastBin, unsigned short* numOfMeasurements, double* avgResidual, VnVector3* lastMeasurement, unsigned char* bin0, unsigned char* bin1, unsigned char* bin2, unsigned char* bin3, unsigned char* bin4, unsigned char* bin5, unsigned char* bin6, unsigned char* bin7);
01132 
01141 VN_ERROR_CODE vn100_getCalculatedMagnetometerCalibration(Vn100* vn100, VnMatrix3x3* c, VnVector3* b);
01142 
01151 VN_ERROR_CODE vn100_getIndoorHeadingModeControl(Vn100* vn100, double* maxRateError, double* reserved);
01152 
01164 VN_ERROR_CODE vn100_setIndoorHeadingModeControl(Vn100* vn100, double maxRateError, double reserved, VN_BOOL waitForResponse);
01165 
01175 VN_ERROR_CODE vn100_getYawPitchRollTrueBodyAccelerationAngularRate(Vn100* vn100, VnYpr* attitude, VnVector3* bodyAcceleration, VnVector3* angularRate);
01176 
01186 VN_ERROR_CODE vn100_getYawPitchRollTrueInertialAcclerationAngularRate(Vn100* vn100, VnYpr* attitude, VnVector3* inertialAcceleration, VnVector3* angularRate);
01187 
01198 VN_ERROR_CODE vn100_getYawPitchRollInertialCalibratedMeasurements(Vn100* vn100, VnYpr* attitude, VnVector3* inertialMagnetic, VnVector3* inertialAcceleration, VnVector3* angularRate);
01199 
01210 VN_ERROR_CODE vn100_getRawVoltageMeasurements(Vn100* vn100, VnVector3* magnetometer, VnVector3* accelerometer, VnVector3* gyroscope, double* temperature);
01211 
01222 VN_ERROR_CODE vn100_getCalibratedImuMeasurements(Vn100* vn100, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate, double* temperature);
01223 
01232 VN_ERROR_CODE vn100_getKalmanFilterStateVector(Vn100* vn100, VnQuaternion* attitude, VnVector3* gyroscopeBias);
01233 
01234 
01235 /* VN100_CODE_GENERATION_SPOT_0_END */
01236 
01237 #ifdef __cplusplus
01238 }
01239 #endif
01240 
01241 #endif /* _VN100_H_ */
 All Data Structures Files Functions Variables Typedefs Defines