diff options
Diffstat (limited to '60xx/mlsdk/mllite/mldl_cfg_mpu.c')
-rw-r--r-- | 60xx/mlsdk/mllite/mldl_cfg_mpu.c | 477 |
1 files changed, 0 insertions, 477 deletions
diff --git a/60xx/mlsdk/mllite/mldl_cfg_mpu.c b/60xx/mlsdk/mllite/mldl_cfg_mpu.c deleted file mode 100644 index 3d4496e..0000000 --- a/60xx/mlsdk/mllite/mldl_cfg_mpu.c +++ /dev/null @@ -1,477 +0,0 @@ -/* - $License: - Copyright 2011 InvenSense, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - $ - */ - -/****************************************************************************** - * - * $Id: mldl_cfg_mpu.c 5653 2011-06-16 21:06:55Z nroyer $ - * - *****************************************************************************/ - -/** - * @addtogroup MLDL - * - * @{ - * @file mldl_cfg_mpu.c - * @brief The Motion Library Driver Layer. - */ - -/* ------------------ */ -/* - Include Files. - */ -/* ------------------ */ - -#include <stddef.h> -#include "mldl_cfg.h" -#include "mlsl.h" -#include "mpu.h" - -#ifdef LINUX -#include <sys/ioctl.h> -#endif - -#include "log.h" -#undef MPL_LOG_TAG -#define MPL_LOG_TAG "MPL-mldl_cfg_mpu:" - -/* --------------------- */ -/* - Variables. - */ -/* --------------------- */ - - -/* ---------------------- */ -/* - Static Functions. - */ -/* ---------------------- */ -void mpu_print_cfg(struct mldl_cfg * mldl_cfg) -{ - struct mpu_platform_data *pdata = mldl_cfg->pdata; - struct ext_slave_platform_data *accel = &mldl_cfg->pdata->accel; - struct ext_slave_platform_data *compass = &mldl_cfg->pdata->compass; - struct ext_slave_platform_data *pressure = &mldl_cfg->pdata->pressure; - - MPL_LOGD("mldl_cfg.addr = %02x\n", mldl_cfg->addr); - MPL_LOGD("mldl_cfg.int_config = %02x\n", mldl_cfg->int_config); - MPL_LOGD("mldl_cfg.ext_sync = %02x\n", mldl_cfg->ext_sync); - MPL_LOGD("mldl_cfg.full_scale = %02x\n", mldl_cfg->full_scale); - MPL_LOGD("mldl_cfg.lpf = %02x\n", mldl_cfg->lpf); - MPL_LOGD("mldl_cfg.clk_src = %02x\n", mldl_cfg->clk_src); - MPL_LOGD("mldl_cfg.divider = %02x\n", mldl_cfg->divider); - MPL_LOGD("mldl_cfg.dmp_enable = %02x\n", mldl_cfg->dmp_enable); - MPL_LOGD("mldl_cfg.fifo_enable = %02x\n", mldl_cfg->fifo_enable); - MPL_LOGD("mldl_cfg.dmp_cfg1 = %02x\n", mldl_cfg->dmp_cfg1); - MPL_LOGD("mldl_cfg.dmp_cfg2 = %02x\n", mldl_cfg->dmp_cfg2); - MPL_LOGD("mldl_cfg.offset_tc[0] = %02x\n", mldl_cfg->offset_tc[0]); - MPL_LOGD("mldl_cfg.offset_tc[1] = %02x\n", mldl_cfg->offset_tc[1]); - MPL_LOGD("mldl_cfg.offset_tc[2] = %02x\n", mldl_cfg->offset_tc[2]); - MPL_LOGD("mldl_cfg.silicon_revision = %02x\n", mldl_cfg->silicon_revision); - MPL_LOGD("mldl_cfg.product_id = %02x\n", mldl_cfg->product_id); - MPL_LOGD("mldl_cfg.gyro_sens_trim = %02x\n", mldl_cfg->gyro_sens_trim); -#if defined CONFIG_MPU_SENSORS_MPU6050A2 || defined CONFIG_MPU_SENSORS_MPU6050B1 - MPL_LOGD("mldl_cfg.accel_sens_trim = %02x\n", mldl_cfg->accel_sens_trim); -#endif - - if (mldl_cfg->accel) { - MPL_LOGD("slave_accel->suspend = %p\n", mldl_cfg->accel->suspend); - MPL_LOGD("slave_accel->resume = %p\n", mldl_cfg->accel->resume); - MPL_LOGD("slave_accel->read = %p\n", mldl_cfg->accel->read); - MPL_LOGD("slave_accel->type = %02x\n", mldl_cfg->accel->type); - MPL_LOGD("slave_accel->read_reg = %02x\n", - mldl_cfg->accel->read_reg); - MPL_LOGD("slave_accel->read_len = %02x\n", - mldl_cfg->accel->read_len); - MPL_LOGD("slave_accel->endian = %02x\n", mldl_cfg->accel->endian); - MPL_LOGD("slave_accel->range.mantissa= %02x\n", (int)mldl_cfg->accel->range.mantissa); - MPL_LOGD("slave_accel->range.fraction= %02x\n", (int)mldl_cfg->accel->range.fraction); - } else { - MPL_LOGD("slave_accel = NULL\n"); - } - - if (mldl_cfg->compass) { - MPL_LOGD("slave_compass->suspend = %p\n", mldl_cfg->compass->suspend); - MPL_LOGD("slave_compass->resume = %p\n", mldl_cfg->compass->resume); - MPL_LOGD("slave_compass->read = %p\n", mldl_cfg->compass->read); - MPL_LOGD("slave_compass->type = %02x\n", mldl_cfg->compass->type); - MPL_LOGD("slave_compass->read_reg = %02x\n", - mldl_cfg->compass->read_reg); - MPL_LOGD("slave_compass->read_len = %02x\n", - mldl_cfg->compass->read_len); - MPL_LOGD("slave_compass->endian = %02x\n", mldl_cfg->compass->endian); - MPL_LOGD("slave_compass->range.mantissa= %02x\n", (int)mldl_cfg->compass->range.mantissa); - MPL_LOGD("slave_compass->range.fraction= %02x\n", (int)mldl_cfg->compass->range.fraction); - } else { - MPL_LOGD("slave_compass = NULL\n"); - } - - if (mldl_cfg->pressure) { - MPL_LOGD("slave_pressure->suspend = %p\n", mldl_cfg->pressure->suspend); - MPL_LOGD("slave_pressure->resume = %p\n", mldl_cfg->pressure->resume); - MPL_LOGD("slave_pressure->read = %p\n", mldl_cfg->pressure->read); - MPL_LOGD("slave_pressure->type = %02x\n", mldl_cfg->pressure->type); - MPL_LOGD("slave_pressure->read_reg = %02x\n", - mldl_cfg->pressure->read_reg); - MPL_LOGD("slave_pressure->read_len = %02x\n", - mldl_cfg->pressure->read_len); - MPL_LOGD("slave_pressure->endian = %02x\n", mldl_cfg->pressure->endian); - MPL_LOGD("slave_pressure->range.mantissa= %02x\n", (int)mldl_cfg->pressure->range.mantissa); - MPL_LOGD("slave_pressure->range.fraction= %02x\n", (int)mldl_cfg->pressure->range.fraction); - } else { - MPL_LOGD("slave_pressure = NULL\n"); - } - - MPL_LOGD("accel->get_slave_descr = %p\n",accel->get_slave_descr); - MPL_LOGD("accel->adapt_num = %02x\n", accel->adapt_num); - MPL_LOGD("accel->bus = %02x\n", accel->bus); - MPL_LOGD("accel->address = %02x\n", accel->address); - MPL_LOGD("accel->orientation = \n" - " %2d %2d %2d\n" - " %2d %2d %2d\n" - " %2d %2d %2d\n", - accel->orientation[0],accel->orientation[1],accel->orientation[2], - accel->orientation[3],accel->orientation[4],accel->orientation[5], - accel->orientation[6],accel->orientation[7],accel->orientation[8]); - MPL_LOGD("compass->get_slave_descr = %p\n",compass->get_slave_descr); - MPL_LOGD("compass->adapt_num = %02x\n", compass->adapt_num); - MPL_LOGD("compass->bus = %02x\n", compass->bus); - MPL_LOGD("compass->address = %02x\n", compass->address); - MPL_LOGD("compass->orientation = \n" - " %2d %2d %2d\n" - " %2d %2d %2d\n" - " %2d %2d %2d\n", - compass->orientation[0],compass->orientation[1],compass->orientation[2], - compass->orientation[3],compass->orientation[4],compass->orientation[5], - compass->orientation[6],compass->orientation[7],compass->orientation[8]); - MPL_LOGD("pressure->get_slave_descr = %p\n",pressure->get_slave_descr); - MPL_LOGD("pressure->adapt_num = %02x\n", pressure->adapt_num); - MPL_LOGD("pressure->bus = %02x\n", pressure->bus); - MPL_LOGD("pressure->address = %02x\n", pressure->address); - MPL_LOGD("pressure->orientation = \n" - " %2d %2d %2d\n" - " %2d %2d %2d\n" - " %2d %2d %2d\n", - pressure->orientation[0],pressure->orientation[1],pressure->orientation[2], - pressure->orientation[3],pressure->orientation[4],pressure->orientation[5], - pressure->orientation[6],pressure->orientation[7],pressure->orientation[8]); - - MPL_LOGD("pdata->int_config = %02x\n", pdata->int_config); - MPL_LOGD("pdata->level_shifter = %02x\n", pdata->level_shifter); - MPL_LOGD("pdata->orientation = \n" - " %2d %2d %2d\n" - " %2d %2d %2d\n" - " %2d %2d %2d\n", - pdata->orientation[0],pdata->orientation[1],pdata->orientation[2], - pdata->orientation[3],pdata->orientation[4],pdata->orientation[5], - pdata->orientation[6],pdata->orientation[7],pdata->orientation[8]); - - MPL_LOGD("Struct sizes: mldl_cfg: %zu, " - "ext_slave_descr:%zu, mpu_platform_data:%zu: RamOffset: %zu\n", - sizeof(struct mldl_cfg), sizeof(struct ext_slave_descr), - sizeof(struct mpu_platform_data), - offsetof(struct mldl_cfg, ram)); -} - -/****************************************************************************** - ****************************************************************************** - * Exported functions - ****************************************************************************** - *****************************************************************************/ - -/** - * Initializes the pdata structure to defaults. - * - * Opens the device to read silicon revision, product id and whoami. Leaves - * the device in suspended state for low power. - * - * @param mldl_cfg handle to the config structure - * @param mlsl_handle handle to the mpu serial layer - * @param accel_handle handle to the accel serial layer - * @param compass_handle handle to the compass serial layer - * @param pressure_handle handle to the pressure serial layer - * - * @return INV_SUCCESS if silicon revision, product id and woami are supported - * by this software. - */ -int inv_mpu_open(struct mldl_cfg *mldl_cfg, - void *mlsl_handle, - void *accel_handle, - void *compass_handle, - void *pressure_handle) -{ - int result; - result = ioctl((int)(uintptr_t)mlsl_handle, MPU_GET_MPU_CONFIG, mldl_cfg); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - - result = inv_mpu_suspend(mldl_cfg, mlsl_handle, NULL, NULL, NULL, - INV_ALL_SENSORS); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - return result; -} - -/** - * Stub for driver close. Just verify that the devices are suspended - * - * @param mldl_cfg handle to the config structure - * @param mlsl_handle handle to the mpu serial layer - * @param accel_handle handle to the accel serial layer - * @param compass_handle handle to the compass serial layer - * @param pressure_handle handle to the compass serial layer - * - * @return INV_SUCCESS or non-zero error code - */ -int inv_mpu_close(struct mldl_cfg *mldl_cfg, - void *mlsl_handle, - void *accel_handle, - void *compass_handle, - void *pressure_handle) -{ - int result = INV_SUCCESS; - - result = inv_mpu_suspend(mldl_cfg, mlsl_handle, NULL, NULL, NULL, - INV_ALL_SENSORS); - return result; -} - -int inv_mpu_resume(struct mldl_cfg* mldl_cfg, - void *mlsl_handle, - void *accel_handle, - void *compass_handle, - void *pressure_handle, - unsigned long sensors) -{ - int result; - - mldl_cfg->requested_sensors = sensors; - result = ioctl((int)(uintptr_t)mlsl_handle, MPU_SET_MPU_CONFIG, mldl_cfg); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - result = ioctl((int)(uintptr_t)mlsl_handle, MPU_RESUME, NULL); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - result = ioctl((int)(uintptr_t)mlsl_handle, MPU_GET_MPU_CONFIG, mldl_cfg); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - //MPL_LOGI("%s: Resuming to %04lx\n", __func__, mldl_cfg->requested_sensors); - - return result; -} - - -int inv_mpu_suspend(struct mldl_cfg *mldl_cfg, - void *mlsl_handle, - void *accel_handle, - void *compass_handle, - void *pressure_handle, - unsigned long sensors) -{ - int result; - unsigned long requested = mldl_cfg->requested_sensors; - - mldl_cfg->requested_sensors = (~sensors) & INV_ALL_SENSORS; - //MPL_LOGI("%s: suspending sensors to %04lx\n", __func__, - // mldl_cfg->requested_sensors); - - result = ioctl((int)(uintptr_t)mlsl_handle, MPU_SET_MPU_CONFIG, mldl_cfg); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - result = ioctl((int)(uintptr_t)mlsl_handle, MPU_SUSPEND, NULL); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - result = ioctl((int)(uintptr_t)mlsl_handle, MPU_GET_MPU_CONFIG, mldl_cfg); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - - mldl_cfg->requested_sensors = requested; - //MPL_LOGI("%s: Will resume next to %04lx\n", __func__, requested); - - return result; -} - -/** - * Send slave configuration information - * - * @param mldl_cfg pointer to the mldl configuration structure - * @param gyro_handle handle to the gyro sensor - * @param slave_handle handle to the slave sensor - * @param slave slave description - * @param pdata slave platform data - * @param data where to store the read data - * - * @return 0 or non-zero error code - */ -int inv_mpu_slave_read(struct mldl_cfg *mldl_cfg, - void *gyro_handle, - void *slave_handle, - struct ext_slave_descr *slave, - struct ext_slave_platform_data *pdata, - unsigned char *data) -{ - int result; - if (!mldl_cfg || !gyro_handle || !data || !slave) { - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - } - - switch (slave->type) { - case EXT_SLAVE_TYPE_ACCELEROMETER: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_READ_ACCEL, data); - break; - case EXT_SLAVE_TYPE_COMPASS: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_READ_COMPASS, data); - break; - case EXT_SLAVE_TYPE_PRESSURE: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_READ_PRESSURE, data); - break; - default: - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - break; - } - - return result; -} - -/** - * Send slave configuration information - * - * @param mldl_cfg pointer to the mldl configuration structure - * @param gyro_handle handle to the gyro sensor - * @param slave_handle handle to the slave sensor - * @param data the data being sent - * @param slave slave description - * @param pdata slave platform data - * - * @return 0 or non-zero error code - */ -int inv_mpu_slave_config(struct mldl_cfg *mldl_cfg, - void *gyro_handle, - void *slave_handle, - struct ext_slave_config *data, - struct ext_slave_descr *slave, - struct ext_slave_platform_data *pdata) -{ - int result; - if (!mldl_cfg || !data || !slave || !pdata || !slave) { - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - } - - switch (slave->type) { - case EXT_SLAVE_TYPE_ACCELEROMETER: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_CONFIG_ACCEL, data); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - break; - case EXT_SLAVE_TYPE_COMPASS: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_CONFIG_COMPASS, data); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - break; - case EXT_SLAVE_TYPE_PRESSURE: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_CONFIG_PRESSURE, data); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - break; - default: - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - break; - } - - return result; -} - -/** - * Request slave configuration information - * - * Use this specifically after requesting a slave configuration to see what the - * slave accually accepted. - * - * @param mldl_cfg pointer to the mldl configuration structure - * @param gyro_handle handle to the gyro sensor - * @param slave_handle handle to the slave sensor - * @param data the data being requested. - * @param slave slave description - * @param pdata slave platform data - * - * @return 0 or non-zero error code - */ -int inv_mpu_get_slave_config(struct mldl_cfg *mldl_cfg, - void *gyro_handle, - void *slave_handle, - struct ext_slave_config *data, - struct ext_slave_descr *slave, - struct ext_slave_platform_data *pdata) -{ - int result; - if (!mldl_cfg || !data || !slave) { - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - } - switch (slave->type) { - case EXT_SLAVE_TYPE_ACCELEROMETER: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_GET_CONFIG_ACCEL, data); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - break; - case EXT_SLAVE_TYPE_COMPASS: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_GET_CONFIG_COMPASS, data); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - break; - case EXT_SLAVE_TYPE_PRESSURE: - result = ioctl((int)(uintptr_t)gyro_handle, MPU_GET_CONFIG_PRESSURE, data); - if (result) { - LOG_RESULT_LOCATION(result); - return result; - } - break; - default: - LOG_RESULT_LOCATION(INV_ERROR_INVALID_PARAMETER); - return INV_ERROR_INVALID_PARAMETER; - break; - } - return result; -} -/** - *@} - */ |