1 /* 2 * Copyright (c) 2015-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 fxls8962_drv.h 11 * @brief The fxls8962_drv.h file describes the FXLS8962AF driver interface and structures. 12 */ 13 14 #ifndef FXLS8962_AF_H_ 15 #define FXLS8962_AF_H_ 16 17 /* Standard C Includes */ 18 #include <stdint.h> 19 20 /* ISSDK Includes */ 21 #include "fxls8962.h" 22 #include "sensor_io_i2c.h" 23 #include "sensor_io_spi.h" 24 #include "register_io_i2c.h" 25 #include "register_io_spi.h" 26 27 /******************************************************************************* 28 * Definitions 29 ******************************************************************************/ 30 /*! 31 * @brief This defines the sensor specific information for SPI. 32 */ 33 typedef struct 34 { 35 registerDeviceInfo_t deviceInfo; /*!< SPI device context. */ 36 ARM_DRIVER_SPI *pCommDrv; /*!< Pointer to the spi driver. */ 37 bool isInitialized; /*!< Whether sensor is intialized or not.*/ 38 spiSlaveSpecificParams_t slaveParams; /*!< Slave Specific Params.*/ 39 } fxls8962_spi_sensorhandle_t; 40 41 /*! 42 * @brief This defines the sensor specific information for I2C. 43 */ 44 typedef struct 45 { 46 registerDeviceInfo_t deviceInfo; /*!< I2C device context. */ 47 ARM_DRIVER_I2C *pCommDrv; /*!< Pointer to the i2c driver. */ 48 bool isInitialized; /*!< whether sensor is intialized or not.*/ 49 uint16_t slaveAddress; /*!< slave address.*/ 50 } fxls8962_i2c_sensorhandle_t; 51 52 /*! @brief This structure defines the fxls8962 raw data buffer.*/ 53 typedef struct 54 { 55 uint32_t timestamp; /*! The time, this sample was recorded. */ 56 int16_t accel[3]; /*!< The accel data */ 57 } fxls8962_acceldata_t; 58 59 /*! @def FXLS8962_SPI_MAX_MSG_SIZE 60 * @brief The MAX size of SPI message. */ 61 #define FXLS8962_SPI_MAX_MSG_SIZE (64) 62 63 /*! @def FXLS8962_SPI_CMD_LEN 64 * @brief The size of the Sensor specific SPI Header. */ 65 #define FXLS8962_SPI_CMD_LEN (2) 66 67 /*! @def FXLS8962_SS_ACTIVE_VALUE 68 * @brief Is the Slave Select Pin Active Low or High. */ 69 #define FXLS8962_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW 70 71 /******************************************************************************* 72 * APIs 73 ******************************************************************************/ 74 /*! @brief The interface function to initialize the sensor. 75 * @details This function initialize the sensor and sensor handle. 76 * @param[in] pSensorHandle handle to the sensor. 77 * @param[in] pBus pointer to the CMSIS API compatible I2C bus object. 78 * @param[in] index the I2C device number. 79 * @param[in] sAddress slave address of the device on the bus. 80 * @param[in] whoami WHO_AM_I value of the device. 81 * @constraints This should be the first API to be called. 82 * Application has to ensure that previous instances of these APIs have exited before invocation. 83 * @reeentrant No 84 * @return ::FXLS8962_I2C_Initialize() returns the status . 85 */ 86 int32_t FXLS8962_I2C_Initialize( 87 fxls8962_i2c_sensorhandle_t *pSensorHandle, ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress, uint8_t *whoAmi); 88 89 /*! @brief : The interface function to set the I2C Idle Task. 90 * @param[in] : fxls8962_i2c_sensorhandle_t *pSensorHandle, handle to the sensor handle. 91 * @param[in] : registeridlefunction_t idleTask, function pointer to the function to execute on I2C Idle Time. 92 * @param[in] : void *userParam, the pointer to the user idle ftask parameters. 93 * @return void. 94 * @constraints This can be called any number of times only after FXLS8962_I2C_Initialize(). 95 * Application has to ensure that previous instances of these APIs have exited before invocation. 96 * @reeentrant No 97 */ 98 void FXLS8962_I2C_SetIdleTask(fxls8962_i2c_sensorhandle_t *pSensorHandle, 99 registeridlefunction_t idleTask, 100 void *userParam); 101 102 /*! @brief The interface function to configure he sensor. 103 * @details This function configure the sensor with requested ODR, Range and registers in the regsiter pair array. 104 * @param[in] pSensorHandle handle to the sensor. 105 * @param[in] pRegWriteList pointer to the register list. 106 * @constraints This can be called any number of times only after FXLS8962_I2C_Initialize(). 107 * Application has to ensure that previous instances of these APIs have exited before invocation. 108 * @reeentrant No 109 * @return ::FXLS8962_I2C_Configure() returns the status . 110 */ 111 int32_t FXLS8962_I2C_Configure(fxls8962_i2c_sensorhandle_t *pSensorHandle, const registerwritelist_t *pRegWriteList); 112 113 /*! @brief The interface function to read the sensor data. 114 * @details This function read the sensor data out from the device and returns raw data in a byte stream. 115 * @param[in] pSensorHandle handle to the sensor. 116 * @param[in] pReadList pointer to the list of device registers and values to read. 117 * @param[out] pBuffer buffer which holds raw sensor data.This buffer may be back to back databuffer based 118 * command read in the list. 119 * @constraints This can be called any number of times only after FXLS8962_I2C_Initialize(). 120 * Application has to ensure that previous instances of these APIs have exited before invocation. 121 * @reeentrant No 122 * @return ::FXLS8962_I2C_ReadData() returns the status . 123 */ 124 int32_t FXLS8962_I2C_ReadData(fxls8962_i2c_sensorhandle_t *pSensorHandle, 125 const registerreadlist_t *pReadList, 126 uint8_t *pBuffer); 127 128 /*! @brief The interface function to De Initialize sensor.. 129 * @details This function made sensor in a power safe state and de initialize its handle. 130 * @param[in] pSensorHandle handle to the sensor. 131 * @constraints This can be called only after FXLS8962_I2C_Initialize(). 132 * Application has to ensure that previous instances of these APIs have exited before invocation. 133 * @reeentrant No 134 * @return ::FXLS8962_I2C_DeInit() returns the status . 135 */ 136 int32_t FXLS8962_I2C_DeInit(fxls8962_i2c_sensorhandle_t *pSensorHandle); 137 138 /*! @brief The interface function to initialize the sensor. 139 * @details This function initializes the sensor and sensor handle. 140 * @param[in] pSensorHandle handle to the sensor. 141 * @param[in] pBus pointer to the CMSIS API compatible SPI bus object. 142 * @param[in] index the I2C device number. 143 * @param[in] pSlaveSelect slave select hndle of the device on the bus. 144 * @param[in] whoami WHO_AM_I value of the device. 145 * @constraints This should be the first API to be called. 146 * Application has to ensure that previous instances of these APIs have exited before invocation. 147 * @reeentrant No 148 * @return ::FXLS8962_SPI_Initialize() returns the status . 149 */ 150 int32_t FXLS8962_SPI_Initialize(fxls8962_spi_sensorhandle_t *pSensorHandle, 151 ARM_DRIVER_SPI *pBus, 152 uint8_t index, 153 void *pSlaveSelect, 154 uint8_t *whoAmi); 155 156 /*! @brief : The interface function to set the SPI Idle Task. 157 * @param[in] : fxls8962_spi_sensorhandle_t *pSensorHandle, handle to the sensor handle. 158 * @param[in] : registeridlefunction_t idleTask, function pointer to the function to execute on SPI Idle Time. 159 * @param[in] : void *userParam, the pointer to the user idle ftask parameters. 160 * @return void. 161 * @constraints This can be called any number of times only after FXLS8962_SPI_Initialize(). 162 * Application has to ensure that previous instances of these APIs have exited before invocation. 163 * @reeentrant No 164 */ 165 void FXLS8962_SPI_SetIdleTask(fxls8962_spi_sensorhandle_t *pSensorHandle, 166 registeridlefunction_t idleTask, 167 void *userParam); 168 169 /*! @brief The interface function to configure he sensor. 170 * @details This function configure the sensor with requested ODR, Range and registers in the regsiter pair array. 171 * @param[in] pSensorHandle handle to the sensor. 172 * @param[in] pRegWriteList pointer to the register list. 173 * @constraints This can be called any number of times only after FXLS8962_SPI_Initialize(). 174 * Application has to ensure that previous instances of these APIs have exited before invocation. 175 * @reeentrant No 176 * @return ::FXLS8962_SPI_Configure() returns the status . 177 */ 178 int32_t FXLS8962_SPI_Configure(fxls8962_spi_sensorhandle_t *pSensorHandle, const registerwritelist_t *pRegWriteList); 179 180 /*! @brief The interface function to read the sensor data. 181 * @details This function read the sensor data out from the device and returns raw data in a byte stream. 182 * @param[in] pSensorHandle handle to the sensor. 183 * @param[in] pReadList pointer to the list of device registers and values to read. 184 * @param[out] pBuffer buffer which holds raw sensor data.This buffer may be back to back databuffer based 185 * command read in the list. 186 * @constraints This can be called any number of times only after FXLS8962_SPI_Initialize(). 187 * Application has to ensure that previous instances of these APIs have exited before invocation. 188 * @reeentrant No 189 * @return ::FXLS8962_SPI_ReadData() returns the status . 190 */ 191 int32_t FXLS8962_SPI_ReadData(fxls8962_spi_sensorhandle_t *pSensorHandle, 192 const registerreadlist_t *pReadList, 193 uint8_t *pBuffer); 194 195 /*! @brief The interface function to De Initialize sensor.. 196 * @details This function made sensor in a power safe state and de initialize its handle. 197 * @param[in] pSensorHandle handle to the sensor. 198 * @constraints This can be called only after after FXLS8962_SPI_Initialize(). 199 * Application has to ensure that previous instances of these APIs have exited before invocation. 200 * @reeentrant No 201 * @return ::FXLS8962_SPI_Deinit() returns the status . 202 */ 203 int32_t FXLS8962_SPI_Deinit(fxls8962_spi_sensorhandle_t *pSensorHandle); 204 205 /*! @brief The SPI Read Pre-Process function to generate Sensor specific SPI Message Header. 206 * @details This function prepares the SPI Read Command Header with register address and 207 * R/W bit encoded as the Sensor. 208 * @param[out] pCmdOut handle to the output buffer. 209 * @param[in] offset the address of the register to start reading from. 210 * @param[in] size number of bytes to read. 211 * @constraints None 212 * Application has to ensure that previous instances of these APIs have exited before invocation. 213 * @reeentrant No 214 * @return :: None. 215 */ 216 void FXLS8962_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size); 217 218 /*! @brief The SPI Write Pre-Process function to generate Sensor specific SPI Message Header. 219 * @details This function prepares the SPI Write Command Header with register address and 220 * R/W bit encoded as the Sensor. 221 * @param[out] pCmdOut handle to the output buffer. 222 * @param[in] offset the address of the register to start writing from. 223 * @param[in] size number of bytes to write. 224 * @constraints None 225 * Application has to ensure that previous instances of these APIs have exited before invocation. 226 * @reeentrant No 227 * @return :: None. 228 */ 229 void FXLS8962_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer); 230 231 #endif // FXLS8962_AF_H_ 232