2 * Copyright © 2018 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
15 #ifndef _AO_ADXL375_H_
16 #define _AO_ADXL375_H_
18 #define AO_ADXL375_READ 0x80 /* read mode */
19 #define AO_ADXL375_MULTI_BYTE 0x40 /* multi-byte mode */
21 #define AO_ADXL375_DEVID 0x00
22 #define AO_ADXL375_DEVID_ID 0xe5
23 #define AO_ADXL375_THRESH_SHOCK 0x1d
24 #define AO_ADXL375_OFSX 0x1e
25 #define AO_ADXL375_OFSY 0x1f
26 #define AO_ADXL375_OFSZ 0x20
27 #define AO_ADXL375_DUR 0x21
28 #define AO_ADXL375_LATENT 0x22
29 #define AO_ADXL375_WINDOW 0x23
30 #define AO_ADXL375_THRESH_ACT 0x24
31 #define AO_ADXL375_THRESH_INACT 0x25
32 #define AO_ADXL375_TIME_INACT 0x26
33 #define AO_ADXL375_ACT_INACT_CTL 0x27
34 #define AO_ADXL375_SHOCK_AXES 0x2a
35 #define AO_ADXL375_ACT_SHOCK_STATUS 0x2b
36 #define AO_ADXL375_BW_RATE 0x2c
38 #define AO_ADXL375_BW_RATE_LOW_POWER 4
39 #define AO_ADXL375_BW_RATE_RATE 0
40 #define AO_ADXL375_BW_RATE_RATE_3200 0xf
41 #define AO_ADXL375_BW_RATE_RATE_1600 0xe
42 #define AO_ADXL375_BW_RATE_RATE_800 0xd
43 #define AO_ADXL375_BW_RATE_RATE_400 0xc
44 #define AO_ADXL375_BW_RATE_RATE_200 0xb
45 #define AO_ADXL375_BW_RATE_RATE_100 0xa
46 #define AO_ADXL375_BW_RATE_RATE_50 0x9
47 #define AO_ADXL375_BW_RATE_RATE_25 0x8
48 #define AO_ADXL375_BW_RATE_RATE_12_5 0x7
49 #define AO_ADXL375_BW_RATE_RATE_6_25 0x6
50 #define AO_ADXL375_BW_RATE_RATE_3_13 0x5
51 #define AO_ADXL375_BW_RATE_RATE_1_56 0x4
52 #define AO_ADXL375_BW_RATE_RATE_0_78 0x3
53 #define AO_ADXL375_BW_RATE_RATE_0_39 0x2
54 #define AO_ADXL375_BW_RATE_RATE_0_20 0x1
55 #define AO_ADXL375_BW_RATE_RATE_0_10 0x0
57 #define AO_ADXL375_POWER_CTL 0x2d
58 #define AO_ADXL375_POWER_CTL_LINK 5
59 #define AO_ADXL375_POWER_CTL_AUTO_SLEEP 4
60 #define AO_ADXL375_POWER_CTL_MEASURE 3
61 #define AO_ADXL375_POWER_CTL_SLEEP 2
62 #define AO_ADXL375_POWER_CTL_WAKEUP 0
63 #define AO_ADXL375_POWER_CTL_WAKEUP_8 0
64 #define AO_ADXL375_POWER_CTL_WAKEUP_4 1
65 #define AO_ADXL375_POWER_CTL_WAKEUP_2 2
66 #define AO_ADXL375_POWER_CTL_WAKEUP_1 3
68 #define AO_ADXL375_INT_ENABLE 0x2e
69 #define AO_ADXL375_INT_MAP 0x2f
70 #define AO_ADXL375_INT_SOURCE 0x30
71 #define AO_ADXL375_DATA_FORMAT 0x31
72 # define AO_ADXL375_DATA_FORMAT_FIXED 0x0b /* these bits must be set to 1 */
73 # define AO_ADXL375_DATA_FORMAT_SELF_TEST 7
74 # define AO_ADXL375_DATA_FORMAT_SPI 6
75 # define AO_ADXL375_DATA_FORMAT_SPI_3_WIRE 1
76 # define AO_ADXL375_DATA_FORMAT_SPI_4_WIRE 0
77 # define AO_ADXL375_DATA_FORMAT_INT_INVERT 5
78 # define AO_ADXL375_DATA_FORMAT_JUSTIFY 2
79 #define AO_ADXL375_DATAX0 0x32
80 #define AO_ADXL375_DATAX1 0x33
81 #define AO_ADXL375_DATAY0 0x34
82 #define AO_ADXL375_DATAY1 0x35
83 #define AO_ADXL375_DATAZ0 0x36
84 #define AO_ADXL375_DATAZ1 0x37
85 #define AO_ADXL375_FIFO_CTL 0x38
86 #define AO_ADXL375_FIFO_CTL_FIFO_MODE 6
87 #define AO_ADXL375_FIFO_CTL_FIFO_MODE_BYPASS 0
88 #define AO_ADXL375_FIFO_CTL_FIFO_MODE_FIFO 1
89 #define AO_ADXL375_FIFO_CTL_FIFO_MODE_STREAM 2
90 #define AO_ADXL375_FIFO_CTL_FIFO_MODE_TRIGGER 3
91 #define AO_ADXL375_FIFO_CTL_TRIGGER 5
92 #define AO_ADXL375_FIFO_CTL_SAMPLES 0
94 #define AO_ADXL375_FIFO_STATUS 0x39
96 #define ADXL375_ACCEL_FULLSCALE 200
98 struct ao_adxl375_sample {
104 extern struct ao_adxl375_sample ao_adxl375_current;
106 #define ao_adxl375_accel_to_sample(accel) ((accel_t) (accel) * (4095.0f / (ADXL375_ACCEL_FULLSCALE * GRAVITY)))
109 ao_adxl375_init(void);
111 #endif /* _AO_ADXL375_H_ */