1 /* 2 * Copyright (c) 2016, Freescale Semiconductor, Inc. 3 * Copyright 2016-2017 NXP 4 * All rights reserved. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 /** 10 * @file mma8491q_drv.h 11 * @brief The mma8491q_drv.h file describes the MMA8491Q driver interface and structures. 12 */ 13 14 #ifndef MMA8491Q_FI_H_ 15 #define MMA8491Q_FI_H_ 16 17 /* Standard C Includes */ 18 #include <stdint.h> 19 20 /* ISSDK Includes */ 21 #include "mma8491q.h" 22 #include "sensor_io_i2c.h" 23 #include "register_io_i2c.h" 24 25 /******************************************************************************* 26 * Definitions 27 ******************************************************************************/ 28 /*! @brief This defines the function pointers and sensor specific information. */ 29 typedef struct 30 { 31 registerDeviceInfo_t deviceInfo; /*!< I2C device context. */ 32 ARM_DRIVER_I2C *pCommDrv; /*!< Pointer to the i2c driver. */ 33 bool isInitialized; /*!< Init status.*/ 34 uint16_t slaveAddress; /*!< slave address.*/ 35 } mma8491q_i2c_sensorhandle_t; 36 37 /*! @brief This structure defines the mma8491q data buffer.*/ 38 typedef struct 39 { 40 uint32_t timestamp; /*!< Time stamp value in micro-seconds. */ 41 int16_t accel[3]; /*! Sensor Acceleration output: signed 14-bits. */ 42 uint8_t tilt[3]; /*! 3-Axis Tilt output. */ 43 } mma8491q_acceldata_t; 44 45 /*! @brief This structure stores the Sensor's context parameters. */ 46 typedef struct 47 { 48 uint64_t adjustedODR; /*! The actual ODR calculated considering T_On and T_Rst. */ 49 void *pGpioEN; /*! The GPIO handle for the EN Pin. */ 50 uint8_t sensorMode; /*! The current operating Mode of the Sensor. */ 51 volatile bool inTransition; /*! The Flag indicating Sensor is undergoing Transition to another mode as a result of 52 EN pin toggling. */ 53 } mma8491q_context_t; 54 55 /*! @brief This enum lists the MMA8491Q operating Modes. */ 56 enum 57 { 58 SENSOR_MODE_SHUTDOWN, 59 SENSOR_MODE_ACTIVE, 60 SENSOR_MODE_STANDBY, 61 }; 62 63 #define MMA8491Q_DATA_SIZE (6) /* 2 byte X,Y,Z Axis Data each. */ 64 65 /******************************************************************************* 66 * APIs 67 ******************************************************************************/ 68 /*! @brief The interface function to initialize the sensor. 69 * @details This function initialize the sensor and sensor handle. 70 * @param[in] pSensorHandle handle to the sensor. 71 * @param[in] pBus pointer to the CMSIS API compatible I2C bus object. 72 * @param[in] index the I2C device number. 73 * @param[in] sAddress slave address of the device on the bus. 74 * @param[in] whoami WHO_AM_I value of the device. 75 * @constraints This should be the first API to be called. 76 * Application has to ensure that previous instances of these APIs have exited before invocation. 77 * @reeentrant No 78 * @return ::MMA8491Q_I2C_Initialize() returns the status. 79 */ 80 int32_t MMA8491Q_I2C_Initialize(mma8491q_i2c_sensorhandle_t *pSensorHandle, 81 ARM_DRIVER_I2C *pBus, 82 uint8_t index, 83 uint16_t sAddress); 84 85 /*! @brief : The interface function to set the I2C Idle Task. 86 * @param[in] : mma8491q_i2c_sensorhandle_t *pSensorHandle, handle to the sensor handle. 87 * @param[in] : registeridlefunction_t idleTask, function pointer to the function to execute on I2C Idle Time. 88 * @param[in] : void *userParam, the pointer to the user idle ftask parameters. 89 * @return void. 90 * @constraints This can be called any number of times only after MMA8491Q_I2C_Initialize(). 91 * Application has to ensure that previous instances of these APIs have exited before invocation. 92 * @reeentrant No 93 */ 94 void MMA8491Q_I2C_SetIdleTask(mma8491q_i2c_sensorhandle_t *pSensorHandle, 95 registeridlefunction_t idleTask, 96 void *userParam); 97 98 /*! @brief The interface function to read the sensor data. 99 * @details This function read the sensor data out from the device and returns raw data in a byte stream. 100 * @param[in] pSensorHandle handle to the sensor. 101 * @param[in] pReadList pointer to the list of device registers and values to read. 102 * @param[out] pBuffer buffer which holds raw sensor data.This buffer may be back to back databuffer based 103 * command read in the list. 104 * @constraints This can be called any number of times only after MMA8491Q_I2C_Initialize(). 105 * Application has to ensure that previous instances of these APIs have exited before invocation. 106 * @reeentrant No 107 * @return ::MMA8491Q_I2C_ReadData() returns the status . 108 */ 109 110 int32_t MMA8491Q_I2C_ReadData(mma8491q_i2c_sensorhandle_t *pSensorHandle, 111 const registerreadlist_t *pReadList, 112 uint8_t *pBuffer); 113 114 #endif // MMA8491Q_FI_H_ 115