ISSDK  1.8
IoT Sensing Software Development Kit
fxlc95000_drv.h
Go to the documentation of this file.
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 fxlc95000_drv.h
11  * @brief The fxlc95000_drv.h file describes the FXLC95000L driver interface and structures.
12  */
13 
14 #ifndef MMA9553_DRV_H_
15 #define MMA9553_DRV_H_
16 
17 /* Standard C Includes */
18 #include <stdint.h>
19 
20 /* ISSDK Includes */
21 #include "fxlc95000.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.*/
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.*/
51 
52 /*! @brief This structure defines the fxlc95000 pedometer data buffer. */
53 typedef struct
54 {
55  uint32_t timestamp; /*! The time, this sample was recorded. */
56  int16_t accel[3]; /*! The raw accel data */
58 
59 /*! @def FXLC95000_COCO_ERROR_MASK
60  * @brief The Error Bit Mask in COCO Byte. */
61 #define FXLC95000_COCO_ERROR_MASK (0x7F)
62 
63 /*! @def FXLC95000_SPI_MAX_MSG_SIZE
64  * @brief The MAX size of SPI message. */
65 #define FXLC95000_SPI_MAX_MSG_SIZE (64)
66 
67 /*! @def FXLC95000_SPI_CMD_LEN
68  * @brief The size of the Sensor specific SPI Header. */
69 #define FXLC95000_SPI_CMD_LEN (1)
70 
71 /*! @def FXLC95000_SS_ACTIVE_VALUE
72  * @brief Is the Slave Select Pin Active Low or High. */
73 #define FXLC95000_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW
74 
75 /*! @def FXLC95000_ROM_CI_WRITE_MIN_LEN
76  * @brief The MIN Length of ROM CI_WRITE Data. */
77 #define FXLC95000_ROM_CI_WRITE_MIN_LEN 4
78 
79 /*! @def FXLC95000_ROM_CI_WRITE_MAX_LEN
80  * @brief The MAX Length of ROM CI_WRITE Data. */
81 #define FXLC95000_ROM_CI_WRITE_MAX_LEN 24
82 
83 /*! @def FXLC95000_ROM_CI_READ_WRITE_MAX_LEN
84  * @brief The MAX Length of ROM CI_READ_WRITE Command. */
85 #define FXLC95000_ROM_CI_READ_WRITE_MAX_LEN 32
86 
87 /*! @def FXLC95000_ROM_CI_READ_WRITE_HDR_LEN
88  * @brief The Length of ROM CI_READ_WRITE Command Header. */
89 #define FXLC95000_ROM_CI_READ_WRITE_HDR_LEN 6
90 
91 /*! @def FXLC95000_ROM_CI_READ_WRITE_ADDR_LEN
92  * @brief The Length of Address field in ROM CI_READ_WRITE Command Header. */
93 #define FXLC95000_ROM_CI_READ_WRITE_ADDR_LEN 2
94 
95 /*! @def FXLC95000_FLASH_PAYLOAD_ADDR_LEN
96  * @brief The Length of Address field in FLASH Payload form Host. */
97 #define FXLC95000_FLASH_PAYLOAD_ADDR_LEN 4
98 
99 /*******************************************************************************
100  * APIs
101  ******************************************************************************/
102 /*! @brief The interface function to check if the sensor is in ROM CI Mode.
103  * @details This function checks the Response of Version Info command to determine if Sensor is in ROM CI Mode.
104  * @param[in] pBus pointer to the CMSIS API compatible I2C bus object.
105  * @param[in] index the I2C device number.
106  * @param[in] sAddress slave address of the device on the bus.
107  * @constraints This can be called any time.
108  * Application has to ensure that previous instances of these APIs have exited before invocation.
109  * @reeentrant No
110  * @return ::FXLC95000_I2C_CheckRomMode() returns the status.
111  */
112 int32_t FXLC95000_I2C_CheckRomMode(ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress);
113 
114 /*! @brief The interface function to write ROM CI Commands.
115  * @details This function Writes ROM CI commands over I2C to the Sensor.
116  * @param[in] pBus pointer to the CMSIS API compatible I2C bus object.
117  * @param[in] index the I2C device number.
118  * @param[in] sAddress slave address of the device on the bus.
119  * @param[in] pCommandList pointer to the command read list.
120  * @constraints This can be called only if Sensor is in ROM CI Mode.
121  * Application has to ensure that previous instances of these APIs have exited before invocation.
122  * @reeentrant No
123  * @return ::FXLC95000_I2C_FlashCommands() returns the status.
124  */
125 int32_t FXLC95000_I2C_FlashCommands(ARM_DRIVER_I2C *pBus,
126  uint8_t index,
127  uint16_t sAddress,
128  const registercommandlist_t *pCommandList);
129 
130 /*! @brief The interface function to write ROM CI Data Payload.
131  * @details This function Writes ROM CI Payload Bytes by creating formatted Commands and writing over I2C to the
132  * Sensor.
133  * @param[in] pBus pointer to the CMSIS API compatible I2C bus object.
134  * @param[in] index the I2C device number.
135  * @param[in] sAddress slave address of the device on the bus.
136  * @param[in] pFlashBytes pointer to payload bytes of flash data.
137  * @param[in] numBytes the number of bytes of flash data to be written.
138  * @constraints This can be called only if Sensor is in ROM CI Mode.
139  * Application has to ensure that previous instances of these APIs have exited before invocation.
140  * @reeentrant No
141  * @return ::FXLC95000_I2C_FlashPayload() returns the status.
142  */
144  ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress, uint8_t *pFlashBytes, uint8_t numBytes);
145 
146 /*! @brief The interface function to initialize the sensor.
147  * @details This function initialize the sensor and sensor handle.
148  * @param[in] pSensorHandle handle to the sensor.
149  * @param[in] pBus pointer to the CMSIS API compatible I2C bus object.
150  * @param[in] index the I2C device number.
151  * @param[in] sAddress slave address of the device on the bus.
152  * @param[in] buildId FXLC95000 firmware buid number.
153  * @constraints This should be the first API to be called.
154  * Application has to ensure that previous instances of these APIs have exited before invocation.
155  * @reeentrant No
156  * @return ::FXLC95000_I2C_Initialize() returns the status .
157  */
159  ARM_DRIVER_I2C *pBus,
160  uint8_t index,
161  uint16_t sAddress,
162  uint16_t buildId);
163 
164 /*! @brief : The interface function to set the I2C Idle Task.
165  * @param[in] : fxlc95000_i2c_sensorhandle_t *pSensorHandle, handle to the sensor handle.
166  * @param[in] : registeridlefunction_t idleTask, function pointer to the function to execute on I2C Idle Time.
167  * @param[in] : void *userParam, the pointer to the user idle ftask parameters.
168  * @return void.
169  * @constraints This can be called any number of times only after FXLC95000_I2C_Initialize().
170  * Application has to ensure that previous instances of these APIs have exited before invocation.
171  * @reeentrant No
172  */
174  registeridlefunction_t idleTask,
175  void *userParam);
176 
177 /*! @brief The interface function to read the sensor data.
178  * @details This function read the sensor data out from the device and returns raw data in a byte stream.
179  * @param[in] pSensorHandle handle to the sensor.
180  * @param[in] pCommandList pointer to the command read list.
181  * @param[in] pReadList pointer to the list of device registers and values to read.
182  * @param[out] pBuffer buffer which holds raw sensor data.This buffer may be back to back databuffer based
183  * command read in the list.
184  * @constraints This can be called any number of times only after FXLC95000_I2C_Initialize().
185  * Application has to ensure that previous instances of these APIs have exited before invocation.
186  * @reeentrant No
187  * @return ::FXLC95000_I2C_CommandResponse() returns the status .
188  */
190  const registercommandlist_t *pCommandList,
191  const registerreadlist_t *pReadList,
192  uint8_t *pBuffer);
193 
194 /*! @brief The interface function to initialize the sensor.
195  * @details This function initializes the sensor and sensor handle.
196  * @param[in] pSensorHandle handle to the sensor.
197  * @param[in] pBus pointer to the CMSIS API compatible SPI bus object.
198  * @param[in] index the I2C device number.
199  * @param[in] pSlaveSelect slave select hndle of the device on the bus.
200  * @param[in] pReset reset handle of the device on the bus.
201  * @param[in] buildId FXLC95000 firmware buid number.
202  * @constraints This should be the first API to be called.
203  * Application has to ensure that previous instances of these APIs have exited before invocation.
204  * @reeentrant No
205  * @return ::FXLC95000_SPI_Initialize() returns the status .
206  */
208  ARM_DRIVER_SPI *pBus,
209  uint8_t index,
210  void *pSpiSelect,
211  void *pSlaveSelect,
212  void *pReset,
213  uint16_t buildId);
214 
215 /*! @brief : The interface function to set the SPI Idle Task.
216  * @param[in] : fxlc95000_spi_sensorhandle_t *pSensorHandle, handle to the sensor handle.
217  * @param[in] : registeridlefunction_t idleTask, function pointer to the function to execute on SPI Idle Time.
218  * @param[in] : void *userParam, the pointer to the user idle ftask parameters.
219  * @return void.
220  * @constraints This can be called any number of times only after FXLC95000_SPI_Initialize().
221  * Application has to ensure that previous instances of these APIs have exited before invocation.
222  * @reeentrant No
223  */
225  registeridlefunction_t idleTask,
226  void *userParam);
227 
228 /*! @brief The interface function to read the sensor data.
229  * @details This function read the sensor data out from the device and returns raw data in a byte stream.
230  * @param[in] pSensorHandle handle to the sensor.
231  * @param[in] pCommandList pointer to the command read list.
232  * @param[in] pReadList pointer to the list of device registers and values to read.
233  * @param[out] pBuffer buffer which holds raw sensor data.This buffer may be back to back databuffer based
234  * command read in the list.
235  * @constraints This can be called any number of times only after FXLC95000_SPI_Initialize().
236  * Application has to ensure that previous instances of these APIs have exited before invocation.
237  * @reeentrant No
238  * @return ::FXLC95000_SPI_CommandResponse() returns the status .
239  */
241  const registercommandlist_t *pCommandList,
242  const registerreadlist_t *pReadList,
243  uint8_t *pBuffer);
244 
245 /*! @brief The SPI Read Pre-Process function to generate Sensor specific SPI Message Header.
246  * @details This function prepares the SPI Read Command Header with register address and
247  * R/W bit encoded as the Sensor.
248  * @param[out] pCmdOut handle to the output buffer.
249  * @param[in] offset the address of the register to start reading from.
250  * @param[in] size number of bytes to read.
251  * @constraints None
252  * Application has to ensure that previous instances of these APIs have exited before invocation.
253  * @reeentrant No
254  * @return :: None.
255  */
256 void FXLC95000_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size);
257 
258 /*! @brief The SPI Write Pre-Process function to generate Sensor specific SPI Message Header.
259  * @details This function prepares the SPI Write Command Header with register address and
260  * R/W bit encoded as the Sensor.
261  * @param[out] pCmdOut handle to the output buffer.
262  * @param[in] offset the address of the register to start writing from.
263  * @param[in] size number of bytes to write.
264  * @constraints None
265  * Application has to ensure that previous instances of these APIs have exited before invocation.
266  * @reeentrant No
267  * @return :: None.
268  */
269 void FXLC95000_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer);
270 
271 #endif // FXLC95000_DRV_H_
uint32_t size
void FXLC95000_I2C_SetIdleTask(fxlc95000_i2c_sensorhandle_t *pSensorHandle, registeridlefunction_t idleTask, void *userParam)
: The interface function to set the I2C Idle Task.
This structure defines the device specific info required by register I/O.
Definition: sensor_drv.h:102
The sensor_io_spi.h file declares low-level interface functions for reading and writing sensor regist...
int32_t FXLC95000_SPI_CommandResponse(fxlc95000_spi_sensorhandle_t *pSensorHandle, const registercommandlist_t *pCommandList, const registerreadlist_t *pReadList, uint8_t *pBuffer)
The interface function to read the sensor data.
int32_t FXLC95000_I2C_CommandResponse(fxlc95000_i2c_sensorhandle_t *pSensorHandle, const registercommandlist_t *pCommandList, const registerreadlist_t *pReadList, uint8_t *pBuffer)
The interface function to read the sensor data.
int32_t FXLC95000_I2C_FlashCommands(ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress, const registercommandlist_t *pCommandList)
The interface function to write ROM CI Commands.
The register_io_spi.h file declares low-level interface functions for reading and writing sensor regi...
This structure defines the Block command List.
Definition: sensor_drv.h:87
This structure defines the fxlc95000 pedometer data buffer.
Definition: fxlc95000_drv.h:53
This structure defines the spi slave command format.
registerDeviceInfo_t deviceInfo
Definition: fxlc95000_drv.h:46
typedef int32_t(DATA_FORMAT_Append_t))(void *pData
The interface function to append the data on the formated stream.
int32_t FXLC95000_SPI_Initialize(fxlc95000_spi_sensorhandle_t *pSensorHandle, ARM_DRIVER_SPI *pBus, uint8_t index, void *pSpiSelect, void *pSlaveSelect, void *pReset, uint16_t buildId)
The interface function to initialize the sensor.
Definition: fxlc95000_drv.c:68
registerDeviceInfo_t deviceInfo
Definition: fxlc95000_drv.h:35
This defines the sensor specific information for I2C.
Definition: fxlc95000_drv.h:44
The register_io_i2c.h file declares low-level interface functions for reading and writing sensor regi...
void(* registeridlefunction_t)(void *userParam)
This is the register idle function type.
Definition: sensor_drv.h:97
void FXLC95000_SPI_SetIdleTask(fxlc95000_spi_sensorhandle_t *pSensorHandle, registeridlefunction_t idleTask, void *userParam)
: The interface function to set the SPI Idle Task.
int32_t FXLC95000_I2C_FlashPayload(ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress, uint8_t *pFlashBytes, uint8_t numBytes)
The interface function to write ROM CI Data Payload.
int32_t FXLC95000_I2C_CheckRomMode(ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress)
The interface function to check if the sensor is in ROM CI Mode.
int32_t FXLC95000_I2C_Initialize(fxlc95000_i2c_sensorhandle_t *pSensorHandle, ARM_DRIVER_I2C *pBus, uint8_t index, uint16_t sAddress, uint16_t buildId)
The interface function to initialize the sensor.
void FXLC95000_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: fxlc95000_drv.c:48
This structure defines the Read command List.
Definition: sensor_drv.h:78
This defines the sensor specific information for SPI.
Definition: fxlc95000_drv.h:33
The sensor_io_i2c.h file declares low-level interface functions for reading and writing sensor regist...
void FXLC95000_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
The SPI Read Pre-Process function to generate Sensor specific SPI Message Header. ...
Definition: fxlc95000_drv.c:31
spiSlaveSpecificParams_t slaveParams
Definition: fxlc95000_drv.h:38