Contiki 3.x
lis3dh.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014, Eistec AB.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the copyright holder nor the names of its contributors
14  * may be used to endorse or promote products derived from this software
15  * without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  *
29  * This file is part of the Mulle platform port of the Contiki operating system.
30  *
31  */
32 
33 /**
34  * \file
35  * Interface of LIS3DH SPI driver used in the Mulle platform.
36  *
37  * \author
38  * Joakim Gebart <joakim.gebart@eistec.se>
39  */
40 
41 #ifndef LIS3DH_H_
42 #define LIS3DH_H_
43 
44 #include <stdint.h>
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
50 /**
51  * The WHO_AM_I register should contain this value in order to correctly
52  * identify the chip.
53  */
54 #define LIS3DH_WHO_AM_I_RESPONSE (0b00110011)
55 
56 /**
57  * All LIS3DH hardware registers are enumerated here.
58  */
59 typedef enum {
60  STATUS_AUX = 0x07,
61  OUT_AUX_ADC1_L = 0x08,
62  OUT_AUX_ADC1_H = 0x09,
63  OUT_AUX_ADC2_L = 0x0A,
64  OUT_AUX_ADC2_H = 0x0B,
65  OUT_AUX_ADC3_L = 0x0C,
66  OUT_AUX_ADC3_H = 0x0D,
67  INT_COUNTER_REG = 0x0E,
68  WHO_AM_I = 0x0F,
69  TEMP_CFG_REG = 0x1F,
70  CTRL_REG1 = 0x20,
71  CTRL_REG2 = 0x21,
72  CTRL_REG3 = 0x22,
73  CTRL_REG4 = 0x23,
74  CTRL_REG5 = 0x24,
75  CTRL_REG6 = 0x25,
76  REFERENCE = 0x26,
77  STATUS_REG = 0x27,
78  OUT_X_L = 0x28,
79  OUT_X_H = 0x29,
80  OUT_Y_L = 0x2A,
81  OUT_Y_H = 0x2B,
82  OUT_Z_L = 0x2C,
83  OUT_Z_H = 0x2D,
84  FIFO_CTRL_REG = 0x2E,
85  FIFO_SRC_REG = 0x2F,
86  INT1_CFG = 0x30,
87  INT1_SOURCE = 0x31,
88  INT1_THS = 0x32,
89  INT1_DURATION = 0x33,
90  CLICK_CFG = 0x38,
91  CLICK_SRC = 0x39,
92  CLICK_THS = 0x3A,
93  TIME_LIMIT = 0x3B,
94  TIME_LATENCY = 0x3C,
95  TIME_WINDOW = 0x3D,
97 
98 /*
99  * Bit offsets within the individual registers
100  * source: LIS3DH datasheet
101  */
102 
103 /**
104  * ADC enable. Default value: 0
105  * (0: ADC disabled; 1: ADC enabled)
106  */
107 #define LIS3DH_TEMP_CFG_REG_ADC_PD_MASK (1 << 7)
108 /**
109  * Temperature sensor (T) enable. Default value: 0
110  * (0: T disabled; 1: T enabled)
111  */
112 #define LIS3DH_TEMP_CFG_REG_TEMP_EN_MASK (1 << 6)
113 
114 /**
115  * Data rate selection. Default value: 00
116  * (0000: Power down; Others: Refer to Table 25, “Data rate configuration”)
117  */
118 #define LIS3DH_CTRL_REG1_ODR_SHIFT (4)
119 #define LIS3DH_CTRL_REG1_ODR3_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 3))
120 #define LIS3DH_CTRL_REG1_ODR2_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 2))
121 #define LIS3DH_CTRL_REG1_ODR1_MASK (1 << (LIS3DH_CTRL_REG1_ODR_SHIFT + 1))
122 #define LIS3DH_CTRL_REG1_ODR0_MASK (1 << LIS3DH_CTRL_REG1_ODR_SHIFT)
123 
124 #define LIS3DH_CTRL_REG1_ODR_MASK (LIS3DH_CTRL_REG1_ODR3_MASK | \
125  LIS3DH_CTRL_REG1_ODR2_MASK | \
126  LIS3DH_CTRL_REG1_ODR1_MASK | \
127  LIS3DH_CTRL_REG1_ODR0_MASK)
128 
129 /*
130  * Convenience macros for power modes
131  */
132 #define LIS3DH_CTRL_REG1_ODR_POWERDOWN (0)
133 #define LIS3DH_CTRL_REG1_ODR_1HZ (LIS3DH_CTRL_REG1_ODR0_MASK)
134 #define LIS3DH_CTRL_REG1_ODR_10HZ (LIS3DH_CTRL_REG1_ODR1_MASK)
135 #define LIS3DH_CTRL_REG1_ODR_25HZ (LIS3DH_CTRL_REG1_ODR1_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
136 #define LIS3DH_CTRL_REG1_ODR_50HZ (LIS3DH_CTRL_REG1_ODR2_MASK)
137 #define LIS3DH_CTRL_REG1_ODR_100HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
138 #define LIS3DH_CTRL_REG1_ODR_200HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR1_MASK)
139 #define LIS3DH_CTRL_REG1_ODR_400HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR1_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
140 #define LIS3DH_CTRL_REG1_ODR_400HZ (LIS3DH_CTRL_REG1_ODR2_MASK | LIS3DH_CTRL_REG1_ODR1_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
141 #define LIS3DH_CTRL_REG1_ODR_LP1600HZ (LIS3DH_CTRL_REG1_ODR3_MASK)
142 #define LIS3DH_CTRL_REG1_ODR_LP5000HZ (LIS3DH_CTRL_REG1_ODR3_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
143 #define LIS3DH_CTRL_REG1_ODR_NP1250HZ (LIS3DH_CTRL_REG1_ODR3_MASK | LIS3DH_CTRL_REG1_ODR0_MASK)
144 
145 /**
146  * Allowed values for the Output Data Rate of the sensor.
147  * Use these when calling lis3dh_set_odr(odr).
148  */
149 typedef enum {
150  ODR_POWERDOWN = 0x00,
151  ODR_1Hz = 0x01,
152  ODR_10Hz = 0x02,
153  ODR_25Hz = 0x03,
154  ODR_50Hz = 0x04,
155  ODR_100Hz = 0x05,
156  ODR_200Hz = 0x06,
157  ODR_400Hz = 0x07,
158  ODR_LP1600Hz = 0x08,
159  ODR_NP1250Hz_LP5000HZ = 0x09
160 } lis3dh_odr_t;
161 
162 /**
163  * Low power mode enable. Default value: 0
164  * (0: normal mode, 1: low power mode)
165  */
166 #define LIS3DH_CTRL_REG1_LPEN_MASK (1 << 3)
167 
168 #define LIS3DH_CTRL_REG1_ZEN_SHIFT (2)
169 /**
170  * Z axis enable. Default value: 1
171  * (0: Z axis disabled; 1: Z axis enabled)
172  */
173 #define LIS3DH_CTRL_REG1_ZEN_MASK (1 << LIS3DH_CTRL_REG1_ZEN_SHIFT)
174 
175 #define LIS3DH_CTRL_REG1_YEN_SHIFT (1)
176 /**
177  * Y axis enable. Default value: 1
178  * (0: Y axis disabled; 1: Y axis enabled)
179  */
180 #define LIS3DH_CTRL_REG1_YEN_MASK (1 << LIS3DH_CTRL_REG1_YEN_SHIFT)
181 
182 #define LIS3DH_CTRL_REG1_XEN_SHIFT (0)
183 /**
184  * X axis enable. Default value: 1
185  * (0: X axis disabled; 1: X axis enabled)
186  */
187 #define LIS3DH_CTRL_REG1_XEN_MASK (1 << LIS3DH_CTRL_REG1_XEN_SHIFT)
188 
189 #define LIS3DH_CTRL_REG1_XYZEN_SHIFT (0)
190 #define LIS3DH_CTRL_REG1_XYZEN_MASK (LIS3DH_CTRL_REG1_XEN_MASK | \
191  LIS3DH_CTRL_REG1_YEN_MASK | LIS3DH_CTRL_REG1_ZEN_MASK)
192 
193 #define LIS3DH_AXES_X (LIS3DH_CTRL_REG1_XEN_MASK)
194 #define LIS3DH_AXES_Y (LIS3DH_CTRL_REG1_YEN_MASK)
195 #define LIS3DH_AXES_Z (LIS3DH_CTRL_REG1_ZEN_MASK)
196 /**
197  * Convenience macro for enabling all axes.
198  */
199 #define LIS3DH_AXES_XYZ (LIS3DH_CTRL_REG1_XYZEN_MASK)
200 
201 /**
202  * High pass filter mode selection. Default value: 00
203  * Refer to Table 29, "High pass filter mode configuration"
204  */
205 #define LIS3DH_CTRL_REG2_HPM1_MASK (1 << 7)
206 #define LIS3DH_CTRL_REG2_HPM0_MASK (1 << 6)
207 
208 /**
209  * High pass filter cut off frequency selection
210  */
211 #define LIS3DH_CTRL_REG2_HPCF2_MASK (1 << 5)
212 #define LIS3DH_CTRL_REG2_HPCF1_MASK (1 << 4)
213 
214 /**
215  * Filtered data selection. Default value: 0
216  * (0: internal filter bypassed; 1: data from internal filter sent to output register and FIFO)
217  */
218 #define LIS3DH_CTRL_REG2_FDS_MASK (1 << 3)
219 
220 /**
221  * High pass filter enabled for CLICK function.
222  * (0: filter bypassed; 1: filter enabled)
223  */
224 #define LIS3DH_CTRL_REG2_HPCLICK_MASK (1 << 2)
225 
226 /**
227  * High pass filter enabled for AOI function on interrupt 2,
228  * (0: filter bypassed; 1: filter enabled)
229  */
230 #define LIS3DH_CTRL_REG2_HPIS2_MASK (1 << 1)
231 #define LIS3DH_CTRL_REG2_HPIS1_MASK (1 << 0)
232 
233 /**
234  * CLICK interrupt on INT1. Default value 0.
235  * (0: Disable; 1: Enable)
236  */
237 #define LIS3DH_CTRL_REG3_I1_CLICK_MASK (1 << 7)
238 
239 /**
240  * AOI1 interrupt on INT1. Default value 0.
241  * (0: Disable; 1: Enable)
242  */
243 #define LIS3DH_CTRL_REG3_I1_AOI1_MASK (1 << 6)
244 /**
245  * AOI2 interrupt on INT1. Default value 0.
246  * (0: Disable; 1: Enable)
247  */
248 #define LIS3DH_CTRL_REG3_I1_AOI2_MASK (1 << 5)
249 /**
250  * DRDY1 interrupt on INT1. Default value 0.
251  * (0: Disable; 1: Enable)
252  */
253 #define LIS3DH_CTRL_REG3_I1_DRDY1_MASK (1 << 4)
254 /**
255  * DRDY2 interrupt on INT1. Default value 0.
256  * (0: Disable; 1: Enable)
257  */
258 #define LIS3DH_CTRL_REG3_I1_DRDY2_MASK (1 << 3)
259 /**
260  * FIFO Watermark interrupt on INT1. Default value 0.
261  * (0: Disable; 1: Enable)
262  */
263 #define LIS3DH_CTRL_REG3_I1_WTM_MASK (1 << 2)
264 /**
265  * FIFO Overrun interrupt on INT1. Default value 0.
266  * (0: Disable; 1: Enable)
267  */
268 #define LIS3DH_CTRL_REG3_I1_OVERRUN_MASK (1 << 1)
269 
270 /**
271  * Block data update. Default value: 0
272  * (0: continuous update; 1: output registers not updated until MSB and LSB
273  * reading)
274  */
275 #define LIS3DH_CTRL_REG4_BDU_MASK (1 << 7)
276 #define LIS3DH_CTRL_REG4_BDU_ENABLE (LIS3DH_CTRL_REG4_BDU_MASK)
277 #define LIS3DH_CTRL_REG4_BDU_DISABLE (0)
278 
279 /**
280  * Big/little endian data selection. Default value 0.
281  * (0: Data LSB @ lower address; 1: Data MSB @ lower address)
282  */
283 #define LIS3DH_CTRL_REG4_BLE_MASK (1 << 6)
284 
285 #define LIS3DH_CTRL_REG4_BLE_LITTLE_ENDIAN (0)
286 #define LIS3DH_CTRL_REG4_BLE_BIG_ENDIAN (LIS3DH_CTRL_REG4_BLE_MASK)
287 
288 /**
289  * Full scale selection. default value: 00
290  * (00: +/- 2G; 01: +/- 4G; 10: +/- 8G; 11: +/- 16G)
291  */
292 #define LIS3DH_CTRL_REG4_FS1_MASK (1 << 5)
293 #define LIS3DH_CTRL_REG4_FS0_MASK (1 << 4)
294 #define LIS3DH_CTRL_REG4_FS_MASK (LIS3DH_CTRL_REG4_FS1_MASK | LIS3DH_CTRL_REG4_FS0_MASK)
295 
296 #define LIS3DH_CTRL_REG4_FS_2G (0)
297 #define LIS3DH_CTRL_REG4_FS_4G (LIS3DH_CTRL_REG4_FS0_MASK)
298 #define LIS3DH_CTRL_REG4_FS_8G (LIS3DH_CTRL_REG4_FS1_MASK)
299 #define LIS3DH_CTRL_REG4_FS_16G (LIS3DH_CTRL_REG4_FS1_MASK | LIS3DH_CTRL_REG4_FS0_MASK)
300 
301 /**
302  * Scale parameters, use these names when calling lis3dh_set_scale(scale).
303  */
304 typedef enum {
305  SCALE_2G = 2,
306  SCALE_4G = 4,
307  SCALE_8G = 8,
308  SCALE_16G = 16,
310 
311 /**
312  * High resolution output mode: Default value: 0
313  * (0: High resolution disable; 1: High resolution Enable)
314  */
315 #define LIS3DH_CTRL_REG4_HR_MASK (1 << 3)
316 
317 /**
318  * Self test enable. Default value: 00
319  * (00: Self test disabled; Other: See Table 34)
320  */
321 #define LIS3DH_CTRL_REG4_ST1_MASK (1 << 2)
322 #define LIS3DH_CTRL_REG4_ST0_MASK (1 << 1)
323 
324 /**
325  * SPI serial interface mode selection. Default value: 0
326  * (0: 4-wire interface; 1: 3-wire interface).
327  */
328 #define LIS3DH_CTRL_REG4_SIM_MASK (1 << 0)
329 
330 /**
331  * Reboot memory content. Default value: 0
332  * (0: normal mode; 1: reboot memory content)
333  */
334 #define LIS3DH_CTRL_REG5_REBOOT_MASK (1 << 7)
335 
336 /**
337  * FIFO enable. Default value: 0
338  * (0: FIFO disable; 1: FIFO Enable)
339  */
340 #define LIS3DH_CTRL_REG5_FIFO_EN_MASK (1 << 6)
341 
342 /**
343  * Latch interrupt request on INT1_SRC register, with INT1_SRC register
344  * cleared by reading INT1_SRC itself. Default value: 0.
345  * (0: interrupt request not latched; 1: interrupt request latched)
346  */
347 #define LIS3DH_CTRL_REG5_LIR_I1_MASK (1 << 3)
348 
349 /**
350  * 4D enable: 4D detection is enabled on INT1 when 6D bit on INT1_CFG is set to 1.
351  */
352 #define LIS3DH_CTRL_REG5_D4D_I1_MASK (1 << 2)
353 
354 /**
355  * X, Y and Z axis data overrun. Default value: 0
356  * (0: no overrun has occurred; 1: a new set of data has overwritten the previous ones)
357  */
358 #define LIS3DH_STATUS_REG_ZYXOR_MASK (1 << 7)
359 
360 /**
361  * Z axis data overrun. Default value: 0
362  * (0: no overrun has occurred;
363  * 1: a new data for the Z-axis has overwritten the previous one)
364  */
365 #define LIS3DH_STATUS_REG_ZOR_MASK (1 << 6)
366 
367 /**
368  * Y axis data overrun. Default value: 0
369  * (0: no overrun has occurred;
370  * 1: a new data for the Y-axis has overwritten the previous one)
371  */
372 #define LIS3DH_STATUS_REG_YOR_MASK (1 << 5)
373 
374 /**
375  * X axis data overrun. Default value: 0
376  * (0: no overrun has occurred;
377  * 1: a new data for the X-axis has overwritten the previous one)
378  */
379 #define LIS3DH_STATUS_REG_XOR_MASK (1 << 4)
380 
381 /**
382  * X, Y and Z axis new data available. Default value: 0
383  * (0: a new set of data is not yet available; 1: a new set of data is available)
384  */
385 #define LIS3DH_STATUS_REG_ZYXDA_MASK (1 << 3)
386 
387 /**
388  * Z axis new data available. Default value: 0
389  * (0: a new data for the Z-axis is not yet available;
390  * 1: a new data for the Z-axis is available)
391  */
392 #define LIS3DH_STATUS_REG_ZDA_MASK (1 << 2)
393 
394 /**
395  * Y axis new data available. Default value: 0
396  * (0: a new data for the Y-axis is not yet available;
397  * 1: a new data for the Y-axis is available)
398  */
399 #define LIS3DH_STATUS_REG_YDA_MASK (1 << 1)
400 
401 /**
402  * X axis new data available. Default value: 0
403  * (0: a new data for the X-axis is not yet available;
404  * 1: a new data for the X-axis is available)
405  */
406 #define LIS3DH_STATUS_REG_XDA_MASK (1 << 0)
407 
408 #define LIS3DH_FIFO_CTRL_REG_FM_SHIFT (6)
409 #define LIS3DH_FIFO_CTRL_REG_FM1_MASK (1 << 7)
410 #define LIS3DH_FIFO_CTRL_REG_FM0_MASK (1 << 6)
411 #define LIS3DH_FIFO_CTRL_REG_FM_MASK (LIS3DH_FIFO_CTRL_REG_FM1_MASK | \
412  LIS3DH_FIFO_CTRL_REG_FM0_MASK)
413 
414 #define LIS3DH_FIFO_CTRL_REG_TR_MASK (1 << 5)
415 #define LIS3DH_FIFO_CTRL_REG_FTH4_MASK (1 << 4)
416 #define LIS3DH_FIFO_CTRL_REG_FTH3_MASK (1 << 3)
417 #define LIS3DH_FIFO_CTRL_REG_FTH2_MASK (1 << 2)
418 #define LIS3DH_FIFO_CTRL_REG_FTH1_MASK (1 << 1)
419 #define LIS3DH_FIFO_CTRL_REG_FTH0_MASK (1 << 0)
420 #define LIS3DH_FIFO_CTRL_REG_FTH_SHIFT (0)
421 #define LIS3DH_FIFO_CTRL_REG_FTH_MASK \
422  (LIS3DH_FIFO_CTRL_REG_FTH0_MASK | \
423  LIS3DH_FIFO_CTRL_REG_FTH1_MASK | \
424  LIS3DH_FIFO_CTRL_REG_FTH2_MASK | \
425  LIS3DH_FIFO_CTRL_REG_FTH3_MASK | \
426  LIS3DH_FIFO_CTRL_REG_FTH4_MASK)
427 
428 /**
429  * Allowed FIFO modes.
430  * Used when calling lis3dh_set_fifo_mode(mode).
431  */
432 typedef enum {
433  FIFO_MODE_BYPASS = 0x00,
434  FIFO_MODE_FIFO = 0x01,
435  FIFO_MODE_STREAM = 0x02,
436  FIFO_MODE_STREAM_TO_FIFO = 0x03
438 
439 #define LIS3DH_FIFO_SRC_REG_WTM_MASK (1 << 7)
440 #define LIS3DH_FIFO_SRC_REG_OVRN_FIFO_MASK (1 << 6)
441 #define LIS3DH_FIFO_SRC_REG_EMPTY_MASK (1 << 5)
442 #define LIS3DH_FIFO_SRC_REG_FSS4_MASK (1 << 4)
443 #define LIS3DH_FIFO_SRC_REG_FSS3_MASK (1 << 3)
444 #define LIS3DH_FIFO_SRC_REG_FSS2_MASK (1 << 2)
445 #define LIS3DH_FIFO_SRC_REG_FSS1_MASK (1 << 1)
446 #define LIS3DH_FIFO_SRC_REG_FSS0_MASK (1 << 0)
447 #define LIS3DH_FIFO_SRC_REG_FSS_SHIFT (0)
448 #define LIS3DH_FIFO_SRC_REG_FSS_MASK \
449  (LIS3DH_FIFO_SRC_REG_FSS0_MASK | \
450  LIS3DH_FIFO_SRC_REG_FSS1_MASK | \
451  LIS3DH_FIFO_SRC_REG_FSS2_MASK | \
452  LIS3DH_FIFO_SRC_REG_FSS3_MASK | \
453  LIS3DH_FIFO_SRC_REG_FSS4_MASK)
454 
455 #define LIS3DH_SPI_WRITE_MASK (0 << 7)
456 /**
457  * The READ bit must be set when reading
458  */
459 #define LIS3DH_SPI_READ_MASK (1 << 7)
460 /**
461  * Multi byte transfers must assert this bit when writing the address.
462  */
463 #define LIS3DH_SPI_MULTI_MASK (1 << 6)
464 /**
465  * Opposite of LIS3DH_SPI_MULTI_MASK.
466  */
467 #define LIS3DH_SPI_SINGLE_MASK (0 << 6)
468 /**
469  * Mask of the address bits in the address byte during transfers.
470  */
471 #define LIS3DH_SPI_ADDRESS_MASK (0x3F)
472 
473 /**
474  * Length of X, Y, Z data in bytes.
475  */
476 #define LIS3DH_ACC_DATA_SIZE (2)
477 
478 /* Platform-independent functions, implemented in lis3dh.c */
479 void lis3dh_set_bits(const lis3dh_reg_addr_t addr, const uint8_t bitmask);
480 void lis3dh_clear_bits(const lis3dh_reg_addr_t addr, const uint8_t bitmask);
481 int16_t lis3dh_read_xaxis();
482 int16_t lis3dh_read_yaxis();
483 int16_t lis3dh_read_zaxis();
484 void lis3dh_read_xyz(int16_t *buffer);
485 int16_t lis3dh_read_aux_adc1();
486 int16_t lis3dh_read_aux_adc2();
487 int16_t lis3dh_read_aux_adc3();
488 void lis3dh_set_aux_adc(const uint8_t enable, const uint8_t temperature);
489 void lis3dh_set_axes(const uint8_t axes);
491 void lis3dh_set_fifo(const uint8_t enable);
492 void lis3dh_set_odr(const lis3dh_odr_t odr);
493 void lis3dh_set_scale(const lis3dh_scale_t scale);
494 void lis3dh_init();
495 
496 /*
497  * Platform specific functions, should be implemented in lis3dh-arch.c for each
498  * supported platform
499  */
500 void lis3dh_write_byte(const lis3dh_reg_addr_t addr, const uint8_t value);
501 uint8_t lis3dh_read_byte(const lis3dh_reg_addr_t addr);
502 int16_t lis3dh_read_int16(const lis3dh_reg_addr_t lsb_addr);
503 void lis3dh_memcpy_from_device(const lis3dh_reg_addr_t start_address,
504  uint8_t *buffer, uint8_t count);
505 void lis3dh_memcpy_to_device(const lis3dh_reg_addr_t start_address,
506  const uint8_t *buffer, uint8_t count);
507 void lis3dh_arch_init();
508 
509 #ifdef __cplusplus
510 } /* extern "C" */
511 #endif
512 
513 #endif /* LIS3DH_H_ */
int16_t lis3dh_read_aux_adc3()
Get one reading from the third channel of the auxiliary ADC.
Definition: lis3dh.c:157
void lis3dh_set_fifo(const uint8_t enable)
Enable/disable the FIFO.
Definition: lis3dh.c:207
lis3dh_reg_addr_t
All LIS3DH hardware registers are enumerated here.
Definition: lis3dh.h:59
int16_t lis3dh_read_int16(const lis3dh_reg_addr_t lsb_addr)
Read a 16-bit integer from the LIS3DH.
Definition: lis3dh-arch.c:127
lis3dh_fifo_mode_t
Allowed FIFO modes.
Definition: lis3dh.h:432
void lis3dh_set_fifo_mode(const lis3dh_fifo_mode_t mode)
Set the FIFO mode.
Definition: lis3dh.c:196
void lis3dh_memcpy_from_device(const lis3dh_reg_addr_t start_address, uint8_t *buffer, uint8_t count)
Read multiple bytes from the LIS3DH.
Definition: lis3dh-arch.c:160
void lis3dh_memcpy_to_device(const lis3dh_reg_addr_t start_address, const uint8_t *buffer, uint8_t count)
Write multiple bytes to the LIS3DH.
Definition: lis3dh-arch.c:197
lis3dh_scale_t
Scale parameters, use these names when calling lis3dh_set_scale(scale).
Definition: lis3dh.h:304
int16_t lis3dh_read_yaxis()
Get one Y-axis reading from the accelerometer.
Definition: lis3dh.c:103
void lis3dh_arch_init()
Perform the platform specific part of the initialization process of the LIS3DH.
Definition: lis3dh-arch.c:231
void lis3dh_set_scale(const lis3dh_scale_t scale)
Set the full scale range of the sensor.
Definition: lis3dh.c:231
int16_t lis3dh_read_aux_adc2()
Get one reading from the second channel of the auxiliary ADC.
Definition: lis3dh.c:144
void lis3dh_read_xyz(int16_t *buffer)
Read all three axes in a single transaction.
Definition: lis3dh.c:123
int16_t lis3dh_read_zaxis()
Get one Z-axis reading from the accelerometer.
Definition: lis3dh.c:113
lis3dh_odr_t
Allowed values for the Output Data Rate of the sensor.
Definition: lis3dh.h:149
void lis3dh_set_axes(const uint8_t axes)
Enable/disable accelerometer axes.
Definition: lis3dh.c:186
void lis3dh_init()
Initialize a LIS3DH accelerometer.
Definition: lis3dh.c:261
void lis3dh_set_odr(const lis3dh_odr_t odr)
Set the output data rate of the sensor.
Definition: lis3dh.c:218
void lis3dh_set_bits(const lis3dh_reg_addr_t addr, const uint8_t mask)
Set bits of an 8-bit register on the LIS3DH.
Definition: lis3dh.c:49
void lis3dh_write_byte(const lis3dh_reg_addr_t addr, const uint8_t value)
Write a single byte to the LIS3DH.
Definition: lis3dh-arch.c:95
void lis3dh_clear_bits(const lis3dh_reg_addr_t addr, const uint8_t mask)
Clear bits of an 8-bit register on the LIS3DH.
Definition: lis3dh.c:61
void lis3dh_set_aux_adc(const uint8_t enable, const uint8_t temperature)
Turn on/off power to the auxiliary ADC in LIS3DH.
Definition: lis3dh.c:172
int16_t lis3dh_read_xaxis()
Get one X-axis reading from the accelerometer.
Definition: lis3dh.c:93
uint8_t lis3dh_read_byte(const lis3dh_reg_addr_t addr)
Read a single byte from the LIS3DH.
Definition: lis3dh-arch.c:109
int16_t lis3dh_read_aux_adc1()
Get one reading from the first channel of the auxiliary ADC.
Definition: lis3dh.c:134