altos/telefireone-v1.0: Track ao_led_init API change
[fw/altos] / src / drivers / ao_adxl375.h
1 /*
2  * Copyright © 2018 Keith Packard <keithp@keithp.com>
3  *
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.
8  *
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.
13  */
14
15 #ifndef _AO_ADXL375_H_
16 #define _AO_ADXL375_H_
17
18 #define AO_ADXL375_READ                 0x80    /* read mode */
19 #define AO_ADXL375_MULTI_BYTE           0x40    /* multi-byte mode */
20
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
37
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
56
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
67
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             0
76 # define  AO_ADXL375_DATA_FORMAT_SPI_4_WIRE             1
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
93
94 #define AO_ADXL375_FIFO_STATUS          0x39
95
96 struct ao_adxl375_sample {
97         int16_t x;
98         int16_t y;
99         int16_t z;
100 };
101
102 extern struct ao_adxl375_sample ao_adxl375_current;
103
104 void
105 ao_adxl375_init(void);
106
107 #endif /* _AO_ADXL375_H_ */