summaryrefslogtreecommitdiff
path: root/examples/imx7d_sdb_m4/demo_apps/sensor_demo/common/fxos8700.h
diff options
context:
space:
mode:
Diffstat (limited to 'examples/imx7d_sdb_m4/demo_apps/sensor_demo/common/fxos8700.h')
-rw-r--r--examples/imx7d_sdb_m4/demo_apps/sensor_demo/common/fxos8700.h194
1 files changed, 167 insertions, 27 deletions
diff --git a/examples/imx7d_sdb_m4/demo_apps/sensor_demo/common/fxos8700.h b/examples/imx7d_sdb_m4/demo_apps/sensor_demo/common/fxos8700.h
index 65e61cd..2cd9a3c 100644
--- a/examples/imx7d_sdb_m4/demo_apps/sensor_demo/common/fxos8700.h
+++ b/examples/imx7d_sdb_m4/demo_apps/sensor_demo/common/fxos8700.h
@@ -27,46 +27,186 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
-#ifndef __FXOS8700_H__
-#define __FXOS8700_H__
+
+#ifndef __FXOS_8700_H__
+#define __FXOS_8700_H__
#include <stdint.h>
#include <stdbool.h>
-/* I2C Slave Address define */
-#define FXOS8700_ADDRESS_0 (0x1C)
-#define FXOS8700_ADDRESS_1 (0x1D)
-#define FXOS8700_ADDRESS_2 (0x1E)
-#define FXOS8700_ADDRESS_3 (0x1F)
-#define FXOS8700_ADDRESS_DEFAULT (FXOS8700_ADDRESS_0)
-
-/* FXOS8700 device ID number */
-#define FXOS8700_DEVICE_ID (0xC7)
-
-/* FXOS8700 Registers address definition */
-#define FXOS8700_OUT_X_MSB (0x01)
-#define FXOS8700_WHO_AM_I (0x0D)
-#define FXOS8700_XYZ_DATA_CFG (0x0E)
-#define FXOS8700_CTRL_REG1 (0x2A)
-#define FXOS8700_CTRL_REG2 (0x2B)
-#define FXOS8700_M_CTRL_REG1 (0x5B)
-#define FXOS8700_M_CTRL_REG2 (0x5C)
-
-/* Function prototypes */
+/*!
+ * @addtogroup fxos8700
+ * @{
+ */
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+/*! @brief FXOS8700 I2C address. */
+#define FXOS8700_ADDRESS_0 (0x1C)
+#define FXOS8700_ADDRESS_1 (0x1D)
+#define FXOS8700_ADDRESS_2 (0x1E)
+#define FXOS8700_ADDRESS_3 (0x1F)
+#define FXOS8700_ADDRESS_DEFAULT (FXOS8700_ADDRESS_0)
+
+/*! @brief FXOS8700 device ID number. */
+#define FXOS8700_DEVICE_ID (0xC7)
+
+/*! @brief FXOS8700 Registers address definition. */
+#define FXOS8700_OUT_X_MSB (0x01)
+#define FXOS8700_WHO_AM_I (0x0D)
+#define FXOS8700_XYZ_DATA_CFG (0x0E)
+#define FXOS8700_CTRL_REG1 (0x2A)
+#define FXOS8700_CTRL_REG2 (0x2B)
+#define FXOS8700_CTRL_REG3 (0x2C)
+#define FXOS8700_CTRL_REG4 (0x2D)
+#define FXOS8700_CTRL_REG5 (0x2E)
+#define FXOS8700_M_CTRL_REG1 (0x5B)
+#define FXOS8700_M_CTRL_REG2 (0x5C)
+
+/*
+ * Field Definitions.
+ */
+
+/*! @brief fxos8700 output data rate configuration. */
+typedef enum _fxos_data_rate_cfg
+{
+ fxosDataRate800Hz = 0x0 << 3,
+ fxosDataRate400HZ = 0x1 << 3,
+ fxosDataRate200HZ = 0x2 << 3,
+ fxosDataRate100HZ = 0x3 << 3,
+ fxosDataRate50HZ = 0x4 << 3,
+ fxosDataRate12_5HZ = 0x5 << 3,
+ fxosDataRate6_25HZ = 0x6 << 3,
+ fxosDataRate1_56HZ = 0x7 << 3
+} fxos_data_rate_cfg_t;
+
+/*! @brief fxos8700 oversample ratio configuration. */
+typedef enum _fxos_oversample_cfg
+{
+ fxosOSR0 = 0x0 << 2,
+ fxosOSR1 = 0x1 << 2,
+ fxosOSR2 = 0x2 << 2,
+ fxosOSR3 = 0x3 << 2,
+ fxosOSR4 = 0x4 << 2,
+ fxosOSR5 = 0x5 << 2,
+ fxosOSR6 = 0x6 << 2,
+ fxosOSR7 = 0x7 << 2
+} fxos_oversample_cfg_t;
+
+/*! @brief fxos8700 accelerometer/magnetometer selection. */
+typedef enum _fxos_hms_cfg
+{
+ fxosAccelerometerOnly = 0x0, /*!< accelerometer only */
+ fxosMagnetometerOnly = 0x1, /*!< magnetometer only */
+ fxosBoth = 0x3 /*!< select both accelerometer and magnetometer */
+} fxos_hms_cfg_t;
+
+/*! @brief fxos accelerometer full-scale range */
+typedef enum _fxos_range_cfg
+{
+ fxosRange2gMode = 0x0, /*!< 2g mode */
+ fxosRange4gMode = 0x1, /*!< 4g mode */
+ fxosRange8gMode = 0x2 /*!< 8g mode */
+} fxos_range_cfg_t;
+
+/*! @brief fxos configure definition. */
+typedef struct _fxos_handle
+{
+ /* I2C relevant definition. */
+ i2c_handle_t *device; /*!< I2C handle. */
+ uint8_t address; /*!< fxos I2C bus address. */
+} fxos_handle_t;
+
+/*! @brief Initialize structure of fxos8700 */
+typedef struct _fxos_init
+{
+ fxos_data_rate_cfg_t dataRate; /*!< Output data rate selection */
+ fxos_oversample_cfg_t osr; /*!< Over sample ratio selection */
+ fxos_hms_cfg_t hms; /*!< Accelerometer/Magnetometer selection */
+ fxos_range_cfg_t range; /*!< Accelerometer full scale range selection */
+} fxos_init_t;
+
+/*! @brief fxos accelerometer and magnetometer data structure */
+typedef struct _fxos_data
+{
+ int16_t accX;
+ int16_t accY;
+ int16_t accZ;
+ int16_t magX;
+ int16_t magY;
+ int16_t magZ;
+} fxos_data_t;
+
+/*******************************************************************************
+ * API
+ ******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
-bool fxos8700_init(void);
-bool fxos8700_read_data(int16_t *, int16_t *, int16_t *, int16_t *, int16_t *, int16_t *);
+/*!
+ * @brief fxos8700 initialize function.
+ *
+ * This function should be called after i2c module initialize, and in this function,
+ * some configurations are fixed. The second parameter is the initialize structure to fxos8700.
+ * If users want to change the settings after initialization, they have to use FXOS_writeReg()
+ * to set the register value of fxos8700.
+ * @param handle fxos8700 handle structure.
+ * @param fxos_config fxos8700 configuration structure.
+ */
+bool FXOS_Init(fxos_handle_t *handle, const fxos_init_t *fxos_config);
+
+/*!
+ * @brief Deinit the fxos8700 sensor.
+ *
+ * Mainly used to set fxos8700 to standby mode and reset its registers content.
+ * @param handle fxos8700 handle structure pointer.
+ */
+bool FXOS_Deinit(fxos_handle_t *handle);
+
+/*!
+ * @brief Enable the FXOS8700 sensor.
+ * @param handle FXOS8700 handler structure.
+ */
+bool FXOS_Enable(fxos_handle_t *handle);
+
+/*!
+ * @brief Disable the FXOS8700 sensor.
+ * @param handle FXOS8700 handler structure.
+ */
+bool FXOS_Disable(fxos_handle_t *handle);
-#ifdef __cplusplus
+/*!
+ * @brief Write register to fxos8700 using I2C.
+ * @param handle fxos8700 handle structure.
+ * @param regAddr The register address in fxos8700.
+ * @param regVal Value needs to write into the register.
+ */
+bool FXOS_WriteReg(fxos_handle_t *handle, uint8_t regAddr, uint8_t regVal);
+
+/*!
+ * @brief Read register from fxos8700 using I2C.
+ * @param handle fxos8700 handle structure.
+ * @param regAddr The register address in fxos8700.
+ * @param regValPtr The read value buffer pointer.
+ */
+bool FXOS_ReadReg(fxos_handle_t *handle, uint8_t regAddr, uint8_t *regValPtr);
+
+/*!
+ * @brief Read sensor data from fxos8700 using I2C
+ * @param handle fxos8700 handle structure.
+ * @param val Sensor data read from fxos8700.
+ */
+bool FXOS_ReadData(fxos_handle_t *handle, fxos_data_t *val);
+
+#if defined(__cplusplus)
}
#endif
+/*! @} */
-#endif/* __FXOS8700_H__ */
+#endif/* __FXOS_8700_H__ */
/*******************************************************************************
* EOF
******************************************************************************/