ISSDK  1.8
IoT Sensing Software Development Kit
fxls8974_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright 2022 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 /**
9  * @file fxls8974_drv.h
10  * @brief The fxls8974_drv.h file describes the FXLS8974CF driver interface and structures.
11  */
12 
13 #ifndef FXLS8974_DRV_H_
14 #define FXLS8974_DRV_H_
15 
16 /* Standard C Includes */
17 #include <stdint.h>
18 
19 /* ISSDK Includes */
20 #include "fxls8974.h"
21 #include "sensor_io_i2c.h"
22 #include "sensor_io_spi.h"
23 #include "register_io_i2c.h"
24 #include "register_io_spi.h"
25 
26 /*******************************************************************************
27  * Definitions
28  ******************************************************************************/
29 /*!
30  * @brief This defines the sensor specific information for SPI.
31  */
32 typedef struct
33 {
34  registerDeviceInfo_t deviceInfo; /*!< SPI device context. */
35  ARM_DRIVER_SPI *pCommDrv; /*!< Pointer to the spi driver. */
36  bool isInitialized; /*!< Whether sensor is intialized or not.*/
37  spiSlaveSpecificParams_t slaveParams; /*!< Slave Specific Params.*/
39 
40 /*!
41  * @brief This defines the sensor specific information for I2C.
42  */
43 typedef struct
44 {
45  registerDeviceInfo_t deviceInfo; /*!< I2C device context. */
46  ARM_DRIVER_I2C *pCommDrv; /*!< Pointer to the i2c driver. */
47  bool isInitialized; /*!< whether sensor is intialized or not.*/
48  uint16_t slaveAddress; /*!< slave address.*/
50 
51 /*! @brief This structure defines the fxls8974 raw data buffer.*/
52 typedef struct
53 {
54  uint32_t timestamp; /*! The time, this sample was recorded. */
55  int16_t accel[3]; /*!< The accel data */
57 
58 /*! @def fxls8974_SPI_MAX_MSG_SIZE
59  * @brief The MAX size of SPI message. */
60 #define FXLS8974_SPI_MAX_MSG_SIZE (64)
61 
62 /*! @def FXLS8974_SPI_CMD_LEN
63  * @brief The size of the Sensor specific SPI Header. */
64 #define FXLS8974_SPI_CMD_LEN (2)
65 
66 /*! @def FXLS8974_SS_ACTIVE_VALUE
67  * @brief Is the Slave Select Pin Active Low or High. */
68 #define FXLS8974_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW
69 
70 /*******************************************************************************
71  * APIs
72  ******************************************************************************/
73 /*! @brief The interface function to initialize the sensor.
74  * @details This function initialize the sensor and sensor handle.
75  * @param[in] pSensorHandle handle to the sensor.
76  * @param[in] pBus pointer to the CMSIS API compatible I2C bus object.
77  * @param[in] index the I2C device number.
78  * @param[in] sAddress slave address of the device on the bus.
79  * @param[in] whoami WHO_AM_I value of the device.
80  * @constraints This should be the first API to be called.
81  * Application has to ensure that previous instances of these APIs have exited before invocation.
82  * @reeentrant No
83  * @return ::FXLS8974_I2C_Initialize() returns the status .
84  */
86  fxls8974_i2c_sensorhandle_t *pSensorHandle, ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress, uint8_t *whoAmi);
87 
88 /*! @brief : The interface function to set the I2C Idle Task.
89  * @param[in] : fxls8974_i2c_sensorhandle_t *pSensorHandle, handle to the sensor handle.
90  * @param[in] : registeridlefunction_t idleTask, function pointer to the function to execute on I2C Idle Time.
91  * @param[in] : void *userParam, the pointer to the user idle ftask parameters.
92  * @return void.
93  * @constraints This can be called any number of times only after FXLS8974_I2C_Initialize().
94  * Application has to ensure that previous instances of these APIs have exited before invocation.
95  * @reeentrant No
96  */
98  registeridlefunction_t idleTask,
99  void *userParam);
100 
101 /*! @brief The interface function to configure he sensor.
102  * @details This function configure the sensor with requested ODR, Range and registers in the regsiter pair array.
103  * @param[in] pSensorHandle handle to the sensor.
104  * @param[in] pRegWriteList pointer to the register list.
105  * @constraints This can be called any number of times only after FXLS8974_I2C_Initialize().
106  * Application has to ensure that previous instances of these APIs have exited before invocation.
107  * @reeentrant No
108  * @return ::FXLS8974_I2C_Configure() returns the status .
109  */
111 
112 /*! @brief The interface function to read the sensor data.
113  * @details This function read the sensor data out from the device and returns raw data in a byte stream.
114  * @param[in] pSensorHandle handle to the sensor.
115  * @param[in] pReadList pointer to the list of device registers and values to read.
116  * @param[out] pBuffer buffer which holds raw sensor data.This buffer may be back to back databuffer based
117  * command read in the list.
118  * @constraints This can be called any number of times only after FXLS8974_I2C_Initialize().
119  * Application has to ensure that previous instances of these APIs have exited before invocation.
120  * @reeentrant No
121  * @return ::FXLS8974_I2C_ReadData() returns the status .
122  */
124  const registerreadlist_t *pReadList,
125  uint8_t *pBuffer);
126 
127 /*! @brief The interface function to De Initialize sensor..
128  * @details This function made sensor in a power safe state and de initialize its handle.
129  * @param[in] pSensorHandle handle to the sensor.
130  * @constraints This can be called only after FXLS8974_I2C_Initialize().
131  * Application has to ensure that previous instances of these APIs have exited before invocation.
132  * @reeentrant No
133  * @return ::FXLS8974_I2C_DeInit() returns the status .
134  */
136 
137 /*! @brief The interface function to initialize the sensor.
138  * @details This function initializes the sensor and sensor handle.
139  * @param[in] pSensorHandle handle to the sensor.
140  * @param[in] pBus pointer to the CMSIS API compatible SPI bus object.
141  * @param[in] index the I2C device number.
142  * @param[in] pSlaveSelect slave select hndle of the device on the bus.
143  * @param[in] whoami WHO_AM_I value of the device.
144  * @constraints This should be the first API to be called.
145  * Application has to ensure that previous instances of these APIs have exited before invocation.
146  * @reeentrant No
147  * @return ::FXLS8974_SPI_Initialize() returns the status .
148  */
150  ARM_DRIVER_SPI *pBus,
151  uint8_t index,
152  void *pSlaveSelect,
153  uint8_t *whoAmi);
154 
155 /*! @brief : The interface function to set the SPI Idle Task.
156  * @param[in] : fxls8974_spi_sensorhandle_t *pSensorHandle, handle to the sensor handle.
157  * @param[in] : registeridlefunction_t idleTask, function pointer to the function to execute on SPI Idle Time.
158  * @param[in] : void *userParam, the pointer to the user idle ftask parameters.
159  * @return void.
160  * @constraints This can be called any number of times only after FXLS8974_SPI_Initialize().
161  * Application has to ensure that previous instances of these APIs have exited before invocation.
162  * @reeentrant No
163  */
165  registeridlefunction_t idleTask,
166  void *userParam);
167 
168 /*! @brief The interface function to configure he sensor.
169  * @details This function configure the sensor with requested ODR, Range and registers in the regsiter pair array.
170  * @param[in] pSensorHandle handle to the sensor.
171  * @param[in] pRegWriteList pointer to the register list.
172  * @constraints This can be called any number of times only after FXLS8974_SPI_Initialize().
173  * Application has to ensure that previous instances of these APIs have exited before invocation.
174  * @reeentrant No
175  * @return ::FXLS8974_SPI_Configure() returns the status .
176  */
178 
179 /*! @brief The interface function to read the sensor data.
180  * @details This function read the sensor data out from the device and returns raw data in a byte stream.
181  * @param[in] pSensorHandle handle to the sensor.
182  * @param[in] pReadList pointer to the list of device registers and values to read.
183  * @param[out] pBuffer buffer which holds raw sensor data.This buffer may be back to back databuffer based
184  * command read in the list.
185  * @constraints This can be called any number of times only after FXLS8974_SPI_Initialize().
186  * Application has to ensure that previous instances of these APIs have exited before invocation.
187  * @reeentrant No
188  * @return ::FXLS8974_SPI_ReadData() returns the status .
189  */
191  const registerreadlist_t *pReadList,
192  uint8_t *pBuffer);
193 
194 /*! @brief The interface function to De Initialize sensor..
195  * @details This function made sensor in a power safe state and de initialize its handle.
196  * @param[in] pSensorHandle handle to the sensor.
197  * @constraints This can be called only after after FXLS8974_SPI_Initialize().
198  * Application has to ensure that previous instances of these APIs have exited before invocation.
199  * @reeentrant No
200  * @return ::FXLS8974_SPI_Deinit() returns the status .
201  */
203 
204 /*! @brief The SPI Read Pre-Process function to generate Sensor specific SPI Message Header.
205  * @details This function prepares the SPI Read Command Header with register address and
206  * R/W bit encoded as the Sensor.
207  * @param[out] pCmdOut handle to the output buffer.
208  * @param[in] offset the address of the register to start reading from.
209  * @param[in] size number of bytes to read.
210  * @constraints None
211  * Application has to ensure that previous instances of these APIs have exited before invocation.
212  * @reeentrant No
213  * @return :: None.
214  */
215 void FXLS8974_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size);
216 
217 /*! @brief The SPI Write Pre-Process function to generate Sensor specific SPI Message Header.
218  * @details This function prepares the SPI Write Command Header with register address and
219  * R/W bit encoded as the Sensor.
220  * @param[out] pCmdOut handle to the output buffer.
221  * @param[in] offset the address of the register to start writing from.
222  * @param[in] size number of bytes to write.
223  * @constraints None
224  * Application has to ensure that previous instances of these APIs have exited before invocation.
225  * @reeentrant No
226  * @return :: None.
227  */
228 void FXLS8974_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer);
229 
230 #endif // FXLS8974_DRV_H_
uint32_t size
void FXLS8974_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer)
The SPI Write Pre-Process function to generate Sensor specific SPI Message Header.
Definition: fxls8974_drv.c:47
This structure defines the device specific info required by register I/O.
Definition: sensor_drv.h:102
This structure defines the Write command List.
Definition: sensor_drv.h:68
The sensor_io_spi.h file declares low-level interface functions for reading and writing sensor regist...
void FXLS8974_SPI_SetIdleTask(fxls8974_spi_sensorhandle_t *pSensorHandle, registeridlefunction_t idleTask, void *userParam)
: The interface function to set the SPI Idle Task.
Definition: fxls8974_drv.c:122
spiSlaveSpecificParams_t slaveParams
Definition: fxls8974_drv.h:37
int32_t FXLS8974_SPI_Initialize(fxls8974_spi_sensorhandle_t *pSensorHandle, ARM_DRIVER_SPI *pBus, uint8_t index, void *pSlaveSelect, uint8_t *whoAmi)
The interface function to initialize the sensor.
Definition: fxls8974_drv.c:67
The register_io_spi.h file declares low-level interface functions for reading and writing sensor regi...
This structure defines the spi slave command format.
int32_t FXLS8974_I2C_ReadData(fxls8974_i2c_sensorhandle_t *pSensorHandle, const registerreadlist_t *pReadList, uint8_t *pBuffer)
The interface function to read the sensor data.
Definition: fxls8974_drv.c:330
This defines the sensor specific information for I2C.
Definition: fxls8974_drv.h:43
void FXLS8974_I2C_SetIdleTask(fxls8974_i2c_sensorhandle_t *pSensorHandle, registeridlefunction_t idleTask, void *userParam)
: The interface function to set the I2C Idle Task.
Definition: fxls8974_drv.c:277
typedef int32_t(DATA_FORMAT_Append_t))(void *pData
The interface function to append the data on the formated stream.
int32_t FXLS8974_SPI_ReadData(fxls8974_spi_sensorhandle_t *pSensorHandle, const registerreadlist_t *pReadList, uint8_t *pBuffer)
The interface function to read the sensor data.
Definition: fxls8974_drv.c:175
int32_t FXLS8974_SPI_Deinit(fxls8974_spi_sensorhandle_t *pSensorHandle)
The interface function to De Initialize sensor..
Definition: fxls8974_drv.c:204
ARM_DRIVER_SPI * pCommDrv
Definition: fxls8974_drv.h:35
The register_io_i2c.h file declares low-level interface functions for reading and writing sensor regi...
int32_t FXLS8974_I2C_DeInit(fxls8974_i2c_sensorhandle_t *pSensorHandle)
The interface function to De Initialize sensor..
Definition: fxls8974_drv.c:359
This defines the sensor specific information for SPI.
Definition: fxls8974_drv.h:32
void(* registeridlefunction_t)(void *userParam)
This is the register idle function type.
Definition: sensor_drv.h:97
This structure defines the fxls8974 raw data buffer.
Definition: fxls8974_drv.h:52
int32_t FXLS8974_SPI_Configure(fxls8974_spi_sensorhandle_t *pSensorHandle, const registerwritelist_t *pRegWriteList)
The interface function to configure he sensor.
Definition: fxls8974_drv.c:130
registerDeviceInfo_t deviceInfo
Definition: fxls8974_drv.h:34
ARM_DRIVER_I2C * pCommDrv
Definition: fxls8974_drv.h:46
void FXLS8974_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
The SPI Read Pre-Process function to generate Sensor specific SPI Message Header. ...
Definition: fxls8974_drv.c:30
This structure defines the Read command List.
Definition: sensor_drv.h:78
int32_t FXLS8974_I2C_Initialize(fxls8974_i2c_sensorhandle_t *pSensorHandle, ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress, uint8_t *whoAmi)
The interface function to initialize the sensor.
Definition: fxls8974_drv.c:239
int32_t FXLS8974_I2C_Configure(fxls8974_i2c_sensorhandle_t *pSensorHandle, const registerwritelist_t *pRegWriteList)
The interface function to configure he sensor.
Definition: fxls8974_drv.c:285
registerDeviceInfo_t deviceInfo
Definition: fxls8974_drv.h:45
The sensor_io_i2c.h file declares low-level interface functions for reading and writing sensor regist...
This file contains the FXLS8974CF Accelerometer register definitions, access macros, and device access functions.