diff options
Diffstat (limited to 'libsensors_iio/software/simple_apps/common/mlsetup.c')
-rw-r--r-- | libsensors_iio/software/simple_apps/common/mlsetup.c | 1722 |
1 files changed, 0 insertions, 1722 deletions
diff --git a/libsensors_iio/software/simple_apps/common/mlsetup.c b/libsensors_iio/software/simple_apps/common/mlsetup.c deleted file mode 100644 index f11bce9..0000000 --- a/libsensors_iio/software/simple_apps/common/mlsetup.c +++ /dev/null @@ -1,1722 +0,0 @@ -/* - $License: - Copyright (C) 2011 InvenSense Corporation, All Rights Reserved. - $ - */ -/****************************************************************************** - * - * $Id: mlsetup.c 6113 2011-09-29 23:40:55Z jcalizo $ - * - *****************************************************************************/ -#undef MPL_LOG_NDEBUG -#ifdef UNITTESTING -#define MPL_LOG_NDEBUG 1 -#else -#define MPL_LOG_NDEBUG 0 -#endif - -/** - * @defgroup MLSETUP - * @brief The Motion Library external slaves setup override suite. - * - * Use these APIs to override the kernel/default settings in the - * corresponding data structures for gyros, accel, and compass. - * - * @{ - * @file mlsetup.c - * @brief The Motion Library external slaves setup override suite. - */ - -/* ------------------ */ -/* - Include Files. - */ -/* ------------------ */ - -/* - Defines -*/ -/* these have to appear before inclusion of mpu.h */ -#define CONFIG_MPU_SENSORS_KXSD9 y // Kionix accel -#define CONFIG_MPU_SENSORS_KXTF9 y // Kionix accel -#define CONFIG_MPU_SENSORS_LIS331DLH y // ST accelerometer -#define CONFIG_MPU_SENSORS_LSM303DLX_A y // ST accelerometer in LSM303DLx combo -#define CONFIG_MPU_SENSORS_LIS3DH y // ST accelerometer -#define CONFIG_MPU_SENSORS_BMA150 y // Bosch 150 accelerometer -#define CONFIG_MPU_SENSORS_BMA222 y // Bosch 222 accelerometer -#define CONFIG_MPU_SENSORS_BMA250 y // Bosch 250 accelerometer -#define CONFIG_MPU_SENSORS_ADXL34X y // AD 345 or 346 accelerometer -#define CONFIG_MPU_SENSORS_MMA8450 y // Freescale MMA8450 accelerometer -#define CONFIG_MPU_SENSORS_MMA845X y // Freescale MMA845X accelerometer -#if defined CONFIG_MPU_SENSORS_MPU6050A2 || defined CONFIG_MPU_SENSORS_MPU6050B1 -#define CONFIG_MPU_SENSORS_MPU6050_ACCEL y // Invensense MPU6050 built-in accelerometer -#endif - -#define CONFIG_MPU_SENSORS_AK8975 y // AKM compass -#define CONFIG_MPU_SENSORS_AMI30X y // AICHI AMI304/305 compass -#define CONFIG_MPU_SENSORS_AMI306 y // AICHI AMI306 compass -#define CONFIG_MPU_SENSORS_HMC5883 y // Honeywell compass -#define CONFIG_MPU_SENSORS_LSM303DLX_M y // ST compass in LSM303DLx combo -#define CONFIG_MPU_SENSORS_YAS529 y // Yamaha compass -#define CONFIG_MPU_SENSORS_YAS530 y // Yamaha compass -#define CONFIG_MPU_SENSORS_MMC314X y // MEMSIC compass -#define CONFIG_MPU_SENSORS_HSCDTD002B y // ALPS compass -#define CONFIG_MPU_SENSORS_HSCDTD004A y // ALPS HSCDTD004A compass - -#define CONFIG_MPU_SENSORS_BMA085 y // Bosch 085 pressure - -#include "external_hardware.h" - -#include <stdio.h> -#include <string.h> - -#include "slave.h" -#include "compass.h" -#include "log.h" -#undef MPL_LOG_TAG -#define MPL_LOG_TAG "MPL-mlsetup" - -#include "linux/mpu.h" - -#include "mlsetup.h" - -#ifdef LINUX -#include "errno.h" -#endif - -/* Override these structures from mldl.c */ -extern struct ext_slave_descr g_slave_accel; -extern struct ext_slave_descr g_slave_compass; -//extern struct ext_slave_descr g_slave_pressure; -/* Platform Data */ -//extern struct mpu_platform_data g_pdata; -extern struct ext_slave_platform_data g_pdata_slave_accel; -extern struct ext_slave_platform_data g_pdata_slave_compass; -//extern struct ext_slave_platform_data g_pdata_slave_pressure; -signed char g_gyro_orientation[9]; - -/* - Typedefs -*/ -typedef void tSetupFuncAccel(void); -typedef void tSetupFuncCompass(void); -typedef void tSetupFuncPressure(void); - -#ifdef LINUX -#include <sys/ioctl.h> -#endif - -/********************************************************************* - Dragon - PLATFORM_ID_DRAGON_PROTOTYPE -*********************************************************************/ -/** - * @internal - * @brief performs a 180' rotation around Z axis to reflect - * usage of the multi sensor board (MSB) with the - * beagleboard - * @note assumes well formed mounting matrix, with only - * one 1 for each row. - */ -static void Rotate180DegAroundZAxis(signed char matrix[]) -{ - int ii; - for(ii=0; ii<6; ii++) { - matrix[ii] = -matrix[ii]; - } -} - -/** - * @internal - * Sets the orientation based on the position of the mounting. For different - * devices the relative position to pin 1 will be different. - * - * Positions are: - * - 0-3 are Z up - * - 4-7 are Z down - * - 8-11 are Z right - * - 12-15 are Z left - * - 16-19 are Z front - * - 20-23 are Z back - * - * @param position The position of the orientation - * @param orientation the location to store the new oreintation - */ -static inv_error_t SetupOrientation(unsigned int position, - signed char *orientation) -{ - memset(orientation, 0, 9); - switch (position){ - case 0: - /*-------------------------*/ - orientation[0] = +1; - orientation[4] = +1; - orientation[8] = +1; - break; - case 1: - /*-------------------------*/ - orientation[1] = +1; - orientation[3] = -1; - orientation[8] = +1; - break; - case 2: - /*-------------------------*/ - orientation[0] = -1; - orientation[4] = -1; - orientation[8] = +1; - break; - case 3: - /*-------------------------*/ - orientation[1] = -1; - orientation[3] = +1; - orientation[8] = +1; - break; - case 4: - /*-------------------------*/ - orientation[0] = -1; - orientation[4] = +1; - orientation[8] = -1; - break; - case 5: - /*-------------------------*/ - orientation[1] = -1; - orientation[3] = -1; - orientation[8] = -1; - break; - case 6: - /*-------------------------*/ - orientation[0] = +1; - orientation[4] = -1; - orientation[8] = -1; - break; - case 7: - /*-------------------------*/ - orientation[1] = +1; - orientation[3] = +1; - orientation[8] = -1; - break; - case 8: - /*-------------------------*/ - orientation[2] = +1; - orientation[3] = +1; - orientation[7] = +1; - break; - case 9: - /*-------------------------*/ - orientation[2] = +1; - orientation[4] = +1; - orientation[6] = -1; - break; - case 10: - orientation[2] = +1; - orientation[3] = -1; - orientation[7] = -1; - break; - case 11: - orientation[2] = +1; - orientation[4] = -1; - orientation[6] = +1; - break; - case 12: - orientation[2] = -1; - orientation[3] = -1; - orientation[7] = +1; - break; - case 13: - orientation[2] = -1; - orientation[4] = -1; - orientation[6] = -1; - break; - case 14: - orientation[2] = -1; - orientation[3] = +1; - orientation[7] = -1; - break; - case 15: - orientation[2] = -1; - orientation[4] = +1; - orientation[6] = +1; - break; - case 16: - orientation[0] = -1; - orientation[5] = +1; - orientation[7] = +1; - break; - case 17: - orientation[1] = -1; - orientation[5] = +1; - orientation[6] = -1; - break; - case 18: - orientation[0] = +1; - orientation[5] = -1; - orientation[7] = -1; - break; - case 19: - orientation[1] = -1; - orientation[5] = +1; - orientation[6] = +1; - break; - case 20: - orientation[0] = +1; - orientation[5] = -1; - orientation[7] = +1; - break; - case 21: - orientation[1] = -1; - orientation[5] = -1; - orientation[6] = +1; - break; - case 22: - orientation[0] = -1; - orientation[5] = -1; - orientation[7] = -1; - break; - case 23: - orientation[1] = +1; - orientation[5] = -1; - orientation[6] = -1; - break; - default: - MPL_LOGE("Invalid position %d\n", position); - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - } - - return INV_SUCCESS; -} - -static void PrintMountingOrientation( - const char * header, signed char *orientation) -{ - MPL_LOGV("%s:\n", header); - MPL_LOGV("\t[[%3d, %3d, %3d]\n", - orientation[0], orientation[1], orientation[2]); - MPL_LOGV("\t [%3d, %3d, %3d]\n", - orientation[3], orientation[4], orientation[5]); - MPL_LOGV("\t [%3d, %3d, %3d]]\n", - orientation[6], orientation[7], orientation[8]); -} - -/***************************** - * Accel Setup Functions * - *****************************/ - -static inv_error_t SetupAccelSTLIS331Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_SPIDER_PROTOTYPE: - position = 5; - break; - case PLATFORM_ID_ST_6AXIS: - position = 0; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *lis331_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_LIS331; - return INV_SUCCESS; -} - -static inv_error_t SetupAccelSTLIS3DHCalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_SPIDER_PROTOTYPE: - position = 1; - break; - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - position = 3; - break; - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *lis3dh_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_LIS3DH; - return result; -} - -static inv_error_t SetupAccelKionixKXSD9Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 7; - break; - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *kxsd9_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_KXSD9; - return result; -} - -static inv_error_t SetupAccelKionixKXTF9Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB_EVB: - position =0; - break; - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_SPIDER_PROTOTYPE: - position = 7; - break; -#ifdef WIN32 - case PLATFORM_ID_DONGLE: - position = 1; - break; -#endif - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - position = 1; - break; - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *kxtf9_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_KXTF9; - return result; -} - -static inv_error_t SetupAccelLSM303Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - position = 3; - break; - case PLATFORM_ID_MSB_V2: - position = 1; - break; - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *lsm303dlx_a_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_LSM303; - return result; -} - -static inv_error_t SetupAccelBMA150Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 6; - break; -#ifdef WIN32 - case PLATFORM_ID_DONGLE: - position = 3; - break; -#endif - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *bma150_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_BMA150; - return result; -} - -static inv_error_t SetupAccelBMA222Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 0; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *bma222_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_BMA222; - return result; -} - -static inv_error_t SetupAccelBMA250Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - position = 0; - break; - case PLATFORM_ID_SPIDER_PROTOTYPE: - position = 3; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *bma250_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_BMA250; - return result; -} - -static inv_error_t SetupAccelADXL34XCalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 6; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *adxl34x_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_ADXL34X; - return result; -} - - -static inv_error_t SetupAccelMMA8450Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 5; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *mma8450_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_MMA8450; - return result; -} - - -static inv_error_t SetupAccelMMA845XCalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 5; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_accel.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_accel = *mma845x_get_slave_descr(); -#endif - g_pdata_slave_accel.address = ACCEL_SLAVEADDR_MMA845X; - return result; -} - - -/** - * @internal - * Sets up the orientation matrix according to how the gyro was - * mounted. - * - * @param platforId Platform identification for mounting information - * @return INV_SUCCESS or non-zero error code - */ -static inv_error_t SetupAccelMPU6050Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_MANTIS_MSB: - position = 6; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_DRAGON_USB_DONGLE: - position = 1; - break; - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - case PLATFORM_ID_MANTIS_EVB: - position = 0; - break; - case PLATFORM_ID_MSB_V3: - position = 2; - break; - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - return INV_ERROR_INVALID_PARAMETER; - }; - - SetupOrientation(position, g_pdata_slave_accel.orientation); - /* Interrupt */ -#ifndef LINUX -#if defined CONFIG_MPU_SENSORS_MPU6050A2 || defined CONFIG_MPU_SENSORS_MPU6050B1 - // g_slave_accel = // fixme *mpu6050_get_slave_descr(); -#endif -#endif - g_pdata_slave_accel.address = 0x68; - return result; -} - -/***************************** - Compass Setup Functions -******************************/ -static inv_error_t SetupCompassAKM8975Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_MANTIS_MSB: - position = 2; - break; -#ifdef WIN32 - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_MANTIS_USB_DONGLE: - position = 4; - break; -#endif - case PLATFORM_ID_SPIDER_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - position = 7; - break; - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V3: - case PLATFORM_ID_MSB_V2_MANTIS: - position = 6; - break; - case PLATFORM_ID_DRAGON_USB_DONGLE: - case PLATFORM_ID_MSB_EVB: - position = 5; - break; - case PLATFORM_ID_MANTIS_EVB: - position = 4; - break; - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *ak8975_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_AKM; - return result; -} - -static inv_error_t SetupCompassMMCCalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 7; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *mmc314x_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_MMC314X; - return result; -} - -static inv_error_t SetupCompassAMI304Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 4; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_AMI304; -#ifndef LINUX - g_slave_compass = *ami30x_get_slave_descr(); -#endif - return result; -} - -static inv_error_t SetupCompassAMI306Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_SPIDER_PROTOTYPE: - position = 3; - break; - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - position = 1; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *ami306_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_AMI306; - return result; -} - -static inv_error_t SetupCompassHMC5883Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 6; - break; -#ifdef WIN32 - case PLATFORM_ID_DONGLE: - position = 2; - break; -#endif - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *hmc5883_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_HMC5883; - return result; -} - - -static inv_error_t SetupCompassLSM303DLHCalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_10AXIS: - position = 1; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - }; - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } -#ifndef LINUX - g_slave_compass = *lsm303dlx_m_get_slave_descr(); - g_slave_compass.id = COMPASS_ID_LSM303DLH; -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_HMC5883; - return result; -} - -static inv_error_t SetupCompassLSM303DLMCalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - position = 8; - break; - case PLATFORM_ID_MSB_V2: - position = 12; - break; - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - }; - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *lsm303dlx_m_get_slave_descr(); - g_slave_compass.id = COMPASS_ID_LSM303DLM; -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_HMC5883; - return result; -} - -static inv_error_t SetupCompassYAS530Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - position = 1; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *yas530_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_YAS530; - return result; -} - -static inv_error_t SetupCompassYAS529Calibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 6; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *yas529_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_YAS529; - return result; -} - - -static inv_error_t SetupCompassHSCDTD002BCalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 2; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *hscdtd002b_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_HSCDTD00XX; - return result; -} - -static inv_error_t SetupCompassHSCDTD004ACalibration(unsigned short platformId) -{ - inv_error_t result = INV_SUCCESS; - unsigned int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - position = 1; - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_MANTIS_MSB: - case PLATFORM_ID_MANTIS_USB_DONGLE: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - LOG_RESULT_LOCATION(INV_ERROR_FEATURE_NOT_IMPLEMENTED); - return INV_ERROR_FEATURE_NOT_IMPLEMENTED; - }; - result = SetupOrientation(position, g_pdata_slave_compass.orientation); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - -#ifndef LINUX - g_slave_compass = *hscdtd004a_get_slave_descr(); -#endif - g_pdata_slave_compass.address = COMPASS_SLAVEADDR_HSCDTD00XX; - return result; -} - - -/***************************** - Pressure Setup Functions -******************************/ -#if 0 -static inv_error_t SetupPressureBMA085Calibration(unsigned short platformId) -{ - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - memset(g_pdata_slave_pressure.orientation, 0, sizeof(g_pdata_slave_pressure.orientation)); - - g_pdata_slave_pressure.bus = EXT_SLAVE_BUS_PRIMARY; -#ifndef LINUX - g_slave_pressure = *bma085_get_slave_descr(); -#endif - g_pdata_slave_pressure.address = PRESSURE_SLAVEADDR_BMA085; - return INV_SUCCESS; -} -#endif -/** - * @internal - * Sets up the orientation matrix according to how the part was - * mounted. - * - * @param platforId Platform identification for mounting information - * @return INV_SUCCESS or non-zero error code - */ -static inv_error_t SetupAccelCalibration(unsigned short platformId, - unsigned short accelId) -{ - /*---- setup the accels ----*/ - switch(accelId) { - case ACCEL_ID_LSM303DLX: - SetupAccelLSM303Calibration(platformId); - break; - case ACCEL_ID_LIS331: - SetupAccelSTLIS331Calibration(platformId); - break; - case ACCEL_ID_KXSD9: - SetupAccelKionixKXSD9Calibration(platformId); - break; - case ACCEL_ID_KXTF9: - SetupAccelKionixKXTF9Calibration(platformId); - break; - case ACCEL_ID_BMA150: - SetupAccelBMA150Calibration(platformId); - break; - case ACCEL_ID_BMA222: - SetupAccelBMA222Calibration(platformId); - break; - case ACCEL_ID_BMA250: - SetupAccelBMA250Calibration(platformId); - break; - case ACCEL_ID_ADXL34X: - SetupAccelADXL34XCalibration(platformId); - break; - case ACCEL_ID_MMA8450: - SetupAccelMMA8450Calibration(platformId); - break; - case ACCEL_ID_MMA845X: - SetupAccelMMA845XCalibration(platformId); - break; - case ACCEL_ID_LIS3DH: - SetupAccelSTLIS3DHCalibration(platformId); - break; - case ACCEL_ID_MPU6050: - SetupAccelMPU6050Calibration(platformId); - break; - case ID_INVALID: - break; - default: - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - } - - if (accelId != ID_INVALID && accelId != ACCEL_ID_MPU6050) { - g_pdata_slave_accel.bus = EXT_SLAVE_BUS_SECONDARY; - } else if (accelId != ACCEL_ID_MPU6050) { - g_pdata_slave_accel.bus = EXT_SLAVE_BUS_PRIMARY; - } - -#ifndef WIN32 - if (accelId != ID_INVALID) - Rotate180DegAroundZAxis(g_pdata_slave_accel.orientation); -#endif - - return INV_SUCCESS; -} - -/** - * @internal - * Sets up the orientation matrix according to how the part was - * mounted. - * - * @param platforId Platform identification for mounting information - * @return INV_SUCCESS or non-zero error code - */ -inv_error_t SetupCompassCalibration(unsigned short platformId, - unsigned short compassId) -{ - /*---- setup the compass ----*/ - switch(compassId) { - case COMPASS_ID_AK8975: - SetupCompassAKM8975Calibration(platformId); - break; - case COMPASS_ID_AMI30X: - SetupCompassAMI304Calibration(platformId); - break; - case COMPASS_ID_AMI306: - SetupCompassAMI306Calibration(platformId); - break; - case COMPASS_ID_LSM303DLH: - SetupCompassLSM303DLHCalibration(platformId); - break; - case COMPASS_ID_LSM303DLM: - SetupCompassLSM303DLMCalibration(platformId); - break; - case COMPASS_ID_HMC5883: - SetupCompassHMC5883Calibration(platformId); - break; - case COMPASS_ID_YAS529: - SetupCompassYAS529Calibration(platformId); - break; - case COMPASS_ID_YAS530: - SetupCompassYAS530Calibration(platformId); - break; - case COMPASS_ID_MMC314X: - SetupCompassMMCCalibration(platformId); - break; - case COMPASS_ID_HSCDTD002B: - SetupCompassHSCDTD002BCalibration(platformId); - break; - case COMPASS_ID_HSCDTD004A: - SetupCompassHSCDTD004ACalibration(platformId); - break; - case ID_INVALID: - break; - default: - if (INV_ERROR_INVALID_PARAMETER) { - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - } - break; - } - - if (platformId == PLATFORM_ID_MSB_V2_MANTIS || - platformId == PLATFORM_ID_MANTIS_MSB || - platformId == PLATFORM_ID_MANTIS_USB_DONGLE || - platformId == PLATFORM_ID_MANTIS_PROTOTYPE || - platformId == PLATFORM_ID_DRAGON_PROTOTYPE) { - switch (compassId) { - case ID_INVALID: - g_pdata_slave_compass.bus = EXT_SLAVE_BUS_INVALID; - break; - case COMPASS_ID_AK8975: - case COMPASS_ID_AMI306: - g_pdata_slave_compass.bus = EXT_SLAVE_BUS_SECONDARY; - break; - default: - g_pdata_slave_compass.bus = EXT_SLAVE_BUS_PRIMARY; - }; - } else { - g_pdata_slave_compass.bus = EXT_SLAVE_BUS_PRIMARY; - } - -#ifndef WIN32 - if (compassId != ID_INVALID) - Rotate180DegAroundZAxis(g_pdata_slave_compass.orientation); -#endif - - return INV_SUCCESS; -} - -/** - * @internal - * Sets up the orientation matrix according to how the part was - * mounted. - * - * @param platforId Platform identification for mounting information - * @return INV_SUCCESS or non-zero error code - */ -#if 0 -inv_error_t SetupPressureCalibration(unsigned short platformId, - unsigned short pressureId) -{ - inv_error_t result = INV_SUCCESS; - /*---- setup the compass ----*/ - switch(pressureId) { - case PRESSURE_ID_BMA085: - result = SetupPressureBMA085Calibration(platformId); - break; - default: - if (INV_ERROR_INVALID_PARAMETER) { - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - } - }; - - return result; -} -#endif -/** - * @internal - * Sets up the orientation matrix according to how the gyro was - * mounted. - * - * @param platforId Platform identification for mounting information - * @return INV_SUCCESS or non-zero error code - */ -static inv_error_t SetupGyroCalibration(unsigned short platformId) -{ - int position; - MPL_LOGV("Calibrating '%s'\n", __func__); - - /* Orientation */ - switch (platformId) { - case PLATFORM_ID_SPIDER_PROTOTYPE: - position = 2; - break; - case PLATFORM_ID_MSB: - case PLATFORM_ID_MSB_10AXIS: - case PLATFORM_ID_MANTIS_MSB: -#ifndef WIN32 - position = 4; -#else - position = 6; -#endif - break; - case PLATFORM_ID_DONGLE: - case PLATFORM_ID_MANTIS_USB_DONGLE: - position = 1; - break; - case PLATFORM_ID_DRAGON_USB_DONGLE: - position = 3; - break; - case PLATFORM_ID_MANTIS_PROTOTYPE: - case PLATFORM_ID_DRAGON_PROTOTYPE: - case PLATFORM_ID_ST_6AXIS: - case PLATFORM_ID_MSB_V2: - case PLATFORM_ID_MSB_V2_MANTIS: -#ifndef WIN32 - position = 2; -#else - position = 0; -#endif - break; - case PLATFORM_ID_MANTIS_EVB: - case PLATFORM_ID_MSB_EVB: - position = 0; - break; - case PLATFORM_ID_MSB_V3: - position = 2; - break; - default: - MPL_LOGE("Unsupported platform %d\n", platformId); - return INV_ERROR_INVALID_PARAMETER; - }; - - SetupOrientation(position, g_gyro_orientation); - - return INV_SUCCESS; -} - -/** - * @brief Setup the Hw orientation and full scale. - * @param platfromId - * an user defined Id to distinguish the Hw platform in - * use from others. - * @param accelId - * the accelerometer specific id, as specified in the MPL. - * @param compassId - * the compass specific id, as specified in the MPL. - * @return INV_SUCCESS or a non-zero error code. - */ -inv_error_t SetupPlatform( - unsigned short platformId, - unsigned short accelId, - unsigned short compassId) -{ - int result; - - memset(&g_slave_accel, 0, sizeof(g_slave_accel)); - memset(&g_slave_compass, 0, sizeof(g_slave_compass)); -// memset(&g_slave_pressure, 0, sizeof(g_slave_pressure)); -// memset(&g_pdata, 0, sizeof(g_pdata)); - -#ifdef LINUX - /* On Linux initialize the global platform data with the driver defaults */ - { - void *mpu_handle; - int ii; - - struct ext_slave_descr *slave[EXT_SLAVE_NUM_TYPES]; - struct ext_slave_platform_data *pdata_slave[EXT_SLAVE_NUM_TYPES]; - slave[EXT_SLAVE_TYPE_GYROSCOPE] = NULL; - slave[EXT_SLAVE_TYPE_ACCEL] = &g_slave_accel; - slave[EXT_SLAVE_TYPE_COMPASS] = &g_slave_compass; - //slave[EXT_SLAVE_TYPE_PRESSURE] = &g_slave_pressure; - - pdata_slave[EXT_SLAVE_TYPE_GYROSCOPE] = NULL; - pdata_slave[EXT_SLAVE_TYPE_ACCEL] = &g_pdata_slave_accel; - pdata_slave[EXT_SLAVE_TYPE_COMPASS] = &g_pdata_slave_compass; - //pdata_slave[EXT_SLAVE_TYPE_PRESSURE] = &g_pdata_slave_pressure; - - MPL_LOGI("Getting the MPU_GET_PLATFORM_DATA\n"); - result = inv_serial_open("/dev/mpu",&mpu_handle); - if (result) { - MPL_LOGE("MPU_GET_PLATFORM_DATA failed %d\n", result); - } - for (ii = 0; ii < EXT_SLAVE_NUM_TYPES; ii++) { - if (!slave[ii]) - continue; - slave[ii]->type = ii; - result = ioctl((int)mpu_handle, MPU_GET_EXT_SLAVE_DESCR, - slave[ii]); - if (result) - result = errno; - if(result == INV_ERROR_INVALID_MODULE) { - slave[ii] = NULL; - result = 0; - } else if (result) { - LOG_RESULT_LOCATION(result); - LOG_RESULT_LOCATION(INV_ERROR_INVALID_MODULE); - return result; - } - } - //result = ioctl((int)mpu_handle, MPU_GET_MPU_PLATFORM_DATA, &g_pdata); - if (result) { - result = errno; - LOG_RESULT_LOCATION(result); - return result; - } - for (ii = 0; ii < EXT_SLAVE_NUM_TYPES; ii++) { - if (!pdata_slave[ii]) - continue; - pdata_slave[ii]->type = ii; - result = ioctl( - (int)mpu_handle, MPU_GET_EXT_SLAVE_PLATFORM_DATA, - pdata_slave[ii]); - if (result) - result = errno; - if (result == INV_ERROR_INVALID_MODULE) { - pdata_slave[ii] = NULL; - result = 0; - } else if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - } - if (result) { - MPL_LOGE("MPU_GET_PLATFORM_DATA failed %d\n", result); - } - inv_serial_close(mpu_handle); - } -#endif - - result = SetupGyroCalibration(platformId); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - PrintMountingOrientation("Gyroscope", g_gyro_orientation); - result = SetupAccelCalibration(platformId, accelId); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - PrintMountingOrientation("Accelerometer", g_pdata_slave_accel.orientation); - result = SetupCompassCalibration(platformId, compassId); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - PrintMountingOrientation("Compass", g_pdata_slave_compass.orientation); -#if 0 - if (platformId == PLATFORM_ID_MSB_10AXIS) { - result = SetupPressureCalibration(platformId, PRESSURE_ID_BMA085); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - PrintMountingOrientation("Pressure", g_pdata_slave_pressure.orientation); - } -#endif -#ifdef LINUX - /* On Linux override the orientation, level shifter etc */ - { - void *mpu_handle; - int ii; - struct ext_slave_descr *slave[EXT_SLAVE_NUM_TYPES]; - struct ext_slave_platform_data *pdata_slave[EXT_SLAVE_NUM_TYPES]; - slave[EXT_SLAVE_TYPE_GYROSCOPE] = NULL; - slave[EXT_SLAVE_TYPE_ACCEL] = &g_slave_accel; - slave[EXT_SLAVE_TYPE_COMPASS] = &g_slave_compass; - //slave[EXT_SLAVE_TYPE_PRESSURE] = &g_slave_pressure; - - pdata_slave[EXT_SLAVE_TYPE_GYROSCOPE] = NULL; - pdata_slave[EXT_SLAVE_TYPE_ACCEL] = &g_pdata_slave_accel; - pdata_slave[EXT_SLAVE_TYPE_COMPASS] = &g_pdata_slave_compass; - //pdata_slave[EXT_SLAVE_TYPE_PRESSURE] = &g_pdata_slave_pressure; - - MPL_LOGI("Setting the MPU_SET_PLATFORM_DATA\n"); - result = inv_serial_open("/dev/mpu",&mpu_handle); - if (result) { - MPL_LOGE("MPU_SET_PLATFORM_DATA failed %d\n", result); - } - for (ii = 0; ii < EXT_SLAVE_NUM_TYPES; ii++) { - if (!slave[ii]) - continue; - slave[ii]->type = ii; - result = ioctl((int)mpu_handle, MPU_SET_EXT_SLAVE_PLATFORM_DATA, - slave[ii]); - if (result) - result = errno; - if (result == INV_ERROR_INVALID_MODULE) { - slave[ii] = NULL; - result = 0; - } else if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - } - //result = ioctl((int)mpu_handle, MPU_SET_MPU_PLATFORM_DATA, &g_pdata); - if (result) { - result = errno; - LOG_RESULT_LOCATION(result); - return result; - } - for (ii = 0; ii < EXT_SLAVE_NUM_TYPES; ii++) { - if (!pdata_slave[ii]) - continue; - pdata_slave[ii]->type = ii; - result = ioctl((int)mpu_handle, MPU_SET_EXT_SLAVE_PLATFORM_DATA, - pdata_slave[ii]); - if (result) - result = errno; - if (result == INV_ERROR_INVALID_MODULE) { - pdata_slave[ii] = NULL; - result = 0; - } else if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - } - if (result) { - MPL_LOGE("MPU_SET_PLATFORM_DATA failed %d\n", result); - } - inv_serial_close(mpu_handle); - } -#endif - return INV_SUCCESS; -} - -/** - * @} - */ - - |