Sens'it SDK  v2.0.0
fxos8700.h
Go to the documentation of this file.
1 /*!******************************************************************
2  * \file fxos8700.h
3  * \brief Acceleromter & Magnetometer
4  * \author Sens'it Team
5  * \copyright Copyright (c) 2018 Sigfox, All Rights Reserved.
6  *
7  * This file provide sample code to use Light sensor (ref: FXOS8700CQ).<BR>
8  * If you want to use other functionalities of the sensor, please refer
9  * to the datasheet:
10  * https://www.nxp.com/docs/en/data-sheet/FXOS8700CQ.pdf
11  *******************************************************************/
12 
13 
14 /*!******************************************************************
15  * \defgroup FXOS8700_REG FXOS8700 Registers
16  * \brief Address of FXOS8700 registers
17  *
18  * @{
19  *******************************************************************/
20 #define FXOS8700_STATUS 0x00
22 #define FXOS8700_OUT_X_MSB 0x01
23 #define FXOS8700_OUT_X_LSB 0x02
24 #define FXOS8700_OUT_Y_MSB 0x03
25 #define FXOS8700_OUT_Y_LSB 0x04
26 #define FXOS8700_OUT_Z_MSB 0x05
27 #define FXOS8700_OUT_Z_LSB 0x06
29 #define FXOS8700_F_SETUP 0x09
30 #define FXOS8700_TRIG_CFG 0x0A
31 #define FXOS8700_SYSMOD 0x0B
32 #define FXOS8700_INT_SOURCE 0x0C
33 #define FXOS8700_WHO_AM_I 0x0D
34 #define FXOS8700_XYZ_DATA_CFG 0x0E
35 #define FXOS8700_HP_FILTER_CUTOFF 0x0F
37 #define FXOS8700_PL_STATUS 0x10
38 #define FXOS8700_PL_CFG 0x11
39 #define FXOS8700_PL_COUNT 0x12
40 #define FXOS8700_PL_BF_ZCOMP 0x13
41 #define FXOS8700_PL_THS_REG 0x14
43 #define FXOS8700_A_FFMT_CFG 0x15
44 #define FXOS8700_A_FFMT_SRC 0x16
45 #define FXOS8700_A_FFMT_THS 0x17
46 #define FXOS8700_A_FFMT_COUNT 0x18
48 #define FXOS8700_TRANSIENT_CFG 0x1D
49 #define FXOS8700_TRANSIENT_SRC 0x1E
50 #define FXOS8700_TRANSIENT_THS 0x1F
51 #define FXOS8700_TRANSIENT_COUNT 0x20
53 #define FXOS8700_PULSE_CFG 0x21
54 #define FXOS8700_PULSE_SRC 0x22
55 #define FXOS8700_PULSE_THSX 0x23
56 #define FXOS8700_PULSE_THSY 0x24
57 #define FXOS8700_PULSE_THSZ 0x25
58 #define FXOS8700_PULSE_TMLT 0x26
59 #define FXOS8700_PULSE_LTCY 0x27
60 #define FXOS8700_PULSE_WIND 0x28
62 #define FXOS8700_ASLP_COUNT 0x29
64 #define FXOS8700_CTRL_REG1 0x2A
65 #define FXOS8700_CTRL_REG2 0x2B
66 #define FXOS8700_CTRL_REG3 0x2C
67 #define FXOS8700_CTRL_REG4 0x2D
68 #define FXOS8700_CTRL_REG5 0x2E
70 #define FXOS8700_OFF_X 0x2F
71 #define FXOS8700_OFF_Y 0x30
72 #define FXOS8700_OFF_Z 0x31
74 #define FXOS8700_M_DR_STATUS 0x32
75 #define FXOS8700_M_OUT_X_MSB 0x33
76 #define FXOS8700_M_OUT_X_LSB 0x34
77 #define FXOS8700_M_OUT_Y_MSB 0x35
78 #define FXOS8700_M_OUT_Y_LSB 0x36
79 #define FXOS8700_M_OUT_Z_MSB 0x37
80 #define FXOS8700_M_OUT_Z_LSB 0x38
82 #define FXOS8700_CMP_X_MSB 0x39
83 #define FXOS8700_CMP_X_LSB 0x3A
84 #define FXOS8700_CMP_Y_MSB 0x3B
85 #define FXOS8700_CMP_Y_LSB 0x3C
86 #define FXOS8700_CMP_Z_MSB 0x3D
87 #define FXOS8700_CMP_Z_LSB 0x3E
89 #define FXOS8700_M_OFF_X_MSB 0x3F
90 #define FXOS8700_M_OFF_X_LSB 0x40
91 #define FXOS8700_M_OFF_Y_MSB 0x41
92 #define FXOS8700_M_OFF_Y_LSB 0x42
93 #define FXOS8700_M_OFF_Z_MSB 0x43
94 #define FXOS8700_M_OFF_Z_LSB 0x44
96 #define FXOS8700_MAX_X_MSB 0x45
97 #define FXOS8700_MAX_X_LSB 0x46
98 #define FXOS8700_MAX_Y_MSB 0x47
99 #define FXOS8700_MAX_Y_LSB 0x48
100 #define FXOS8700_MAX_Z_MSB 0x49
101 #define FXOS8700_MAX_Z_LSB 0x4A
102 #define FXOS8700_MIN_X_MSB 0x4B
103 #define FXOS8700_MIN_X_LSB 0x4C
104 #define FXOS8700_MIN_Y_MSB 0x4D
105 #define FXOS8700_MIN_Y_LSB 0x4E
106 #define FXOS8700_MIN_Z_MSB 0x4F
107 #define FXOS8700_MIN_Z_LSB 0x50
109 #define FXOS8700_TEMP 0x51
111 #define FXOS8700_M_THS_CFG 0x52
112 #define FXOS8700_M_THS_SRC 0x53
113 #define FXOS8700_M_THS_X_MSB 0x54
114 #define FXOS8700_M_THS_X_LSB 0x55
115 #define FXOS8700_M_THS_Y_MSB 0x56
116 #define FXOS8700_M_THS_Y_LSB 0x57
117 #define FXOS8700_M_THS_Z_MSB 0x58
118 #define FXOS8700_M_THS_Z_LSB 0x59
119 #define FXOS8700_M_THS_COUNT 0x5A
121 #define FXOS8700_M_CTRL_REG1 0x5B
122 #define FXOS8700_M_CTRL_REG2 0x5C
123 #define FXOS8700_M_CTRL_REG3 0x5D
124 #define FXOS8700_M_INT_SRC 0x5E
126 #define FXOS8700_A_VECM_CFG 0x5F
127 #define FXOS8700_A_VECM_THS_MSB 0x60
128 #define FXOS8700_A_VECM_THS_LSB 0x61
129 #define FXOS8700_A_VECM_CNT 0x62
130 #define FXOS8700_A_VECM_INITX_MSB 0x63
131 #define FXOS8700_A_VECM_INITX_LSB 0x64
132 #define FXOS8700_A_VECM_INITY_MSB 0x65
133 #define FXOS8700_A_VECM_INITY_LSB 0x66
134 #define FXOS8700_A_VECM_INITZ_MSB 0x67
135 #define FXOS8700_A_VECM_INITZ_LSB 0x68
137 #define FXOS8700_M_VECM_CFG 0x69
138 #define FXOS8700_M_VECM_THS_MSB 0x6A
139 #define FXOS8700_M_VECM_THS_LSB 0x6B
140 #define FXOS8700_M_VECM_CNT 0x6C
141 #define FXOS8700_M_VECM_INITX_MSB 0x6D
142 #define FXOS8700_M_VECM_INITX_LSB 0x6E
143 #define FXOS8700_M_VECM_INITY_MSB 0x6F
144 #define FXOS8700_M_VECM_INITY_LSB 0x70
145 #define FXOS8700_M_VECM_INITZ_MSB 0x71
146 #define FXOS8700_M_VECM_INITZ_LSB 0x72
148 #define FXOS8700_A_FFMT_THS_X_MSB 0x73
149 #define FXOS8700_A_FFMT_THS_X_LSB 0x74
150 #define FXOS8700_A_FFMT_THS_Y_MSB 0x75
151 #define FXOS8700_A_FFMT_THS_Y_LSB 0x76
152 #define FXOS8700_A_FFMT_THS_Z_MSB 0x77
153 #define FXOS8700_A_FFMT_THS_Z_LSB 0x78
157 /*!******************************************************************
158  * \defgroup FXOS8700_ERR_CODES FXOS8700 Error Codes
159  * \brief Error code definitions for FXOS8700
160  *
161  * @{
162  *******************************************************************/
163 #define FXOS8700_ERR_NONE 0x00
165 #define FXOS8700_ERR_I2C 0x50
166 #define FXOS8700_ERR_ID 0x51
167 #define FXOS8700_ERR_RANGE 0x51
171 /*!******************************************************************
172  * \enum fxos8700_range_e
173  * \brief Setting for accelerometer range.
174  *******************************************************************/
175 typedef enum {
179  FXOS8700_RANGE_LAST
181 
182 
183 /*!******************************************************************
184  * \struct fxos8700_data_s
185  * \brief Data structure for acceleration & magnetic data.
186  *
187  * For acceleration convert values in g with the LSB resolution of
188  * the configured acceleration range.
189  *******************************************************************/
190 typedef struct {
191  s16 x;
192  s16 y;
193  s16 z;
195 
196 
197 /*!******************************************************************
198  * \defgroup FXOS8700_API FXOS8700 APIs
199  * \brief Accelerometer sample code functions
200  *
201  * @{
202  *******************************************************************/
203 
204 /*!******************************************************************
205  * \fn error_t FXOS8700_init(void)
206  * \brief Reset accelerometer & Check part ID.
207  *
208  * \retval FXOS8700_ERR_NONE: No error
209  * \retval FXOS8700_ERR_I2C: Error on I2C communication
210  * \retval FXOS8700_ERR_ID: Bad ID value
211  *******************************************************************/
212 error_t FXOS8700_init(void);
213 
214 /*!******************************************************************
215  * \fn error_t FXOS8700_reset(void)
216  * \brief Reset accelerometer registers seting.
217  *
218  * \warning When reseting accelerometer, you may have the error:
219  * \link SENSIT_ERR_I2C_TIMEOUT \endlink. You can ignore it.
220  *
221  * \retval FXOS8700_ERR_NONE: No error
222  * \retval FXOS8700_ERR_I2C: Error on I2C communication
223  *******************************************************************/
224 error_t FXOS8700_reset(void);
225 
226 /*!******************************************************************
227  * \fn error_t FXOS8700_set_standby_mode(void)
228  * \brief Put accelerometer in stand-by mode & Disable interrupt.
229  *
230  * \retval FXOS8700_ERR_NONE: No error
231  * \retval FXOS8700_ERR_I2C: Error on I2C communication
232  *******************************************************************/
234 
235 /*!******************************************************************
236  * \fn error_t FXOS8700_set_transient_mode(fxos8700_range_e range, u8 threshold, u8 count)
237  * \brief Put accelerometer in transient mode.
238  *
239  * \param[in] range Acceleration measurement range
240  * \param[in] threshold Acceleration threshold, resolution depend of range
241  * \param[in] count Number of event to trigger an interrupt
242  *
243  * \retval FXOS8700_ERR_NONE: No error
244  * \retval FXOS8700_ERR_I2C: Error on I2C communication
245  * \retval FXOS8700_ERR_RANGE: Invalid range value
246  *******************************************************************/
248  u8 threshold,
249  u8 count);
250 
251 /*!******************************************************************
252  * \fn error_t FXOS8700_clear_transient_interrupt(bool* flag)
253  * \brief Read transient mode interrupt register.
254  *
255  * \param[out] flag TRUE if a transient event has been triggered, otherwise FALSE
256  *
257  * \retval FXOS8700_ERR_NONE: No error
258  * \retval FXOS8700_ERR_I2C: Error on I2C communication
259  *******************************************************************/
261 
262 /*!******************************************************************
263  * \fn error_t FXOS8700_read_acceleration(fxos8700_data_s* acc)
264  * \brief Read acceleration data.
265  *
266  * \param[out] acc Acceleration of the 3-axis
267  *
268  * \retval FXOS8700_ERR_NONE: No error
269  * \retval FXOS8700_ERR_I2C: Error on I2C communication
270  *******************************************************************/
272 
Definition: fxos8700.h:176
error_t FXOS8700_read_acceleration(fxos8700_data_s *acc)
Read acceleration data.
Definition: fxos8700.h:178
signed short s16
Definition: sensit_types.h:16
error_t FXOS8700_set_standby_mode(void)
Put accelerometer in stand-by mode & Disable interrupt.
s16 y
Definition: fxos8700.h:192
error_t FXOS8700_init(void)
Reset accelerometer & Check part ID.
error_t FXOS8700_set_transient_mode(fxos8700_range_e range, u8 threshold, u8 count)
Put accelerometer in transient mode.
unsigned char error_t
Definition: sensit_types.h:23
Definition: fxos8700.h:177
error_t FXOS8700_reset(void)
Reset accelerometer registers seting.
unsigned char u8
Definition: sensit_types.h:11
fxos8700_range_e
Setting for accelerometer range.
Definition: fxos8700.h:175
error_t FXOS8700_clear_transient_interrupt(bool *flag)
Read transient mode interrupt register.
s16 x
Definition: fxos8700.h:191
s16 z
Definition: fxos8700.h:193
Data structure for acceleration & magnetic data.
Definition: fxos8700.h:190