summaryrefslogtreecommitdiffstats
path: root/libsensors/mlsdk/mllite/pressure.c
diff options
context:
space:
mode:
Diffstat (limited to 'libsensors/mlsdk/mllite/pressure.c')
-rw-r--r--libsensors/mlsdk/mllite/pressure.c166
1 files changed, 166 insertions, 0 deletions
diff --git a/libsensors/mlsdk/mllite/pressure.c b/libsensors/mlsdk/mllite/pressure.c
new file mode 100644
index 0000000..f32229f
--- /dev/null
+++ b/libsensors/mlsdk/mllite/pressure.c
@@ -0,0 +1,166 @@
+/*
+ $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: pressure.c 4120 2010-11-21 19:56:16Z mcaramello $
+ *
+ *******************************************************************************/
+
+/**
+ * @defgroup PRESSUREDL
+ * @brief Motion Library - Pressure Driver Layer.
+ * Provides the interface to setup and handle a pressure sensor
+ * connected to either the primary or the seconday I2C interface
+ * of the gyroscope.
+ *
+ * @{
+ * @file pressure.c
+ * @brief Pressure setup and handling methods.
+**/
+
+/* ------------------ */
+/* - Include Files. - */
+/* ------------------ */
+
+#include <string.h>
+
+#include "pressure.h"
+
+#include "ml.h"
+#include "mlinclude.h"
+#include "dmpKey.h"
+#include "mlFIFO.h"
+#include "mldl.h"
+#include "mldl_cfg.h"
+#include "mlMathFunc.h"
+#include "mlsl.h"
+#include "mlos.h"
+
+#include "log.h"
+#undef MPL_LOG_TAG
+#define MPL_LOG_TAG "MPL-pressure"
+
+#define _pressureDebug(x) //{x}
+
+/* --------------------- */
+/* - Global Variables. - */
+/* --------------------- */
+
+/* --------------------- */
+/* - Static Variables. - */
+/* --------------------- */
+
+/* --------------- */
+/* - Prototypes. - */
+/* --------------- */
+
+/* -------------- */
+/* - Externs. - */
+/* -------------- */
+
+/* -------------- */
+/* - Functions. - */
+/* -------------- */
+
+/**
+ * @brief Is a pressure configured and used by MPL?
+ * @return INV_SUCCESS if the pressure is present.
+ */
+unsigned char inv_pressure_present(void)
+{
+ INVENSENSE_FUNC_START;
+ struct mldl_cfg *mldl_cfg = inv_get_dl_config();
+ if (NULL != mldl_cfg->pressure &&
+ NULL != mldl_cfg->pressure->resume &&
+ mldl_cfg->requested_sensors & INV_THREE_AXIS_PRESSURE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/**
+ * @brief Query the pressure slave address.
+ * @return The 7-bit pressure slave address.
+ */
+unsigned char inv_get_pressure_slave_addr(void)
+{
+ INVENSENSE_FUNC_START;
+ struct mldl_cfg *mldl_cfg = inv_get_dl_config();
+ if (NULL != mldl_cfg->pdata)
+ return mldl_cfg->pdata->pressure.address;
+ else
+ return 0;
+}
+
+/**
+ * @brief Get the ID of the pressure in use.
+ * @return ID of the pressure in use.
+ */
+unsigned short inv_get_pressure_id(void)
+{
+ INVENSENSE_FUNC_START;
+ struct mldl_cfg *mldl_cfg = inv_get_dl_config();
+ if (NULL != mldl_cfg->pressure) {
+ return mldl_cfg->pressure->id;
+ }
+ return ID_INVALID;
+}
+
+/**
+ * @brief Get a sample of pressure data from the device.
+ * @param data
+ * the buffer to store the pressure raw data for
+ * X, Y, and Z axes.
+ * @return INV_SUCCESS or a non-zero error code.
+ */
+inv_error_t inv_get_pressure_data(long *data)
+{
+ inv_error_t result = INV_SUCCESS;
+ unsigned char tmp[3];
+ struct mldl_cfg *mldl_cfg = inv_get_dl_config();
+
+ /*--- read the pressure sensor data.
+ The pressure read function may return an INV_ERROR_PRESSURE_* errors
+ when the data is not ready (read/refresh frequency mismatch) or
+ the internal data sampling timing of the device was not respected.
+ Returning the error code will make the sensor fusion supervisor
+ ignore this pressure data sample. ---*/
+ result = (inv_error_t) inv_mpu_read_pressure(mldl_cfg,
+ inv_get_serial_handle(),
+ inv_get_serial_handle(), tmp);
+ if (result) {
+ _pressureDebug(MPL_LOGV
+ ("inv_mpu_read_pressure returned %d (%s)\n", result,
+ MLErrorCode(result)));
+ return result;
+ }
+ if (EXT_SLAVE_BIG_ENDIAN == mldl_cfg->pressure->endian)
+ data[0] =
+ (((long)((signed char)tmp[0])) << 16) + (((long)tmp[1]) << 8) +
+ ((long)tmp[2]);
+ else
+ data[0] =
+ (((long)((signed char)tmp[2])) << 16) + (((long)tmp[1]) << 8) +
+ ((long)tmp[0]);
+
+ return INV_SUCCESS;
+}
+
+/**
+ * @}
+ */