lis2dw12/reg.rs
1#![allow(non_upper_case_globals)]
2
3#[cfg(feature = "out_f32")]
4use num_derive::FromPrimitive;
5
6/// Register mapping
7#[allow(dead_code)]
8#[allow(non_camel_case_types)]
9#[allow(clippy::upper_case_acronyms)]
10#[derive(Copy, Clone)]
11pub enum Register {
12 OUT_T_L = 0x0D, // Temp sensor output
13 OUT_T_H = 0x0E, // Temp sensor output
14 WHO_AM_I = 0x0F, // Who am I ID
15 CTRL1 = 0x20, // Control
16 CTRL2 = 0x21, // Control
17 CTRL3 = 0x22, // Control
18 CTRL4_INT1_PAD_CTRL = 0x23, // Control
19 CTRL5_INT2_PAD_CTRL = 0x24, // Control
20 CTRL6 = 0x25, // Control
21 OUT_T = 0x26, // Temp sensor output
22 STATUS = 0x27, // Status data
23 OUT_X_L = 0x28, // Output
24 OUT_X_H = 0x29, // Output
25 OUT_Y_L = 0x2A, // Output
26 OUT_Y_H = 0x2B, // Output
27 OUT_Z_L = 0x2C, // Output
28 OUT_Z_H = 0x2D, // Output
29 FIFO_CTRL = 0x2E, // FIFO control
30 FIFO_SAMPLES = 0x2F, // Unread samples stored in FIFO
31 TAP_THS_X = 0x30, // Tap thresholds
32 TAP_THS_Y = 0x31, // Tap thresholds
33 TAP_THS_Z = 0x32, // Tap thresholds
34 INT_DUR = 0x33, // Interrupt duration
35 WAKE_UP_THS = 0x34, // Tap/double-tap selection, inactivity enable, wakeup threshold
36 WAKE_UP_DUR = 0x35, // Wakeup duration
37 FREE_FALL = 0x36, // Free-fall configuration
38 STATUS_DUP = 0x37, // Status
39 WAKE_UP_SRC = 0x38, // Wakeup source
40 TAP_SRC = 0x39, // Tap source
41 SIXD_SRC = 0x3A, // 6D source
42 ALL_INT_SRC = 0x3B, // All interrupt source
43 X_OFS_USR = 0x3C, // Offset data for wakeup
44 Y_OFS_USR = 0x3D, // Offset data for wakeup
45 Z_OFS_USR = 0x3E, // Offset data for wakeup
46 CTRL7 = 0x3F, // Control
47}
48
49impl Register {
50 pub fn addr(self) -> u8 {
51 self as u8
52 }
53}
54#[derive(Copy, Clone)]
55#[cfg_attr(feature = "out_f32", derive(FromPrimitive))]
56pub enum OutputDataRate {
57 PowerDown = 0x00, // power down (default)
58 Hp12Hz5Lp1Hz6 = 0x01, // High-Performance 12.5Hz / Low-Power 1.6 Hz
59 Hp12Hz5Lp12Hz5 = 0x02, // High-Performance 12.5 Hz / Low-Power mode 12.5 Hz
60 Hp25HzLp25Hz = 0x03, // High-Performance 25 Hz / Low-Power 25 Hz
61 Hp50HzLp50Hz = 0x04, // High-Performance 50 Hz / Low-Power 50 Hz
62 Hp100HzLp100Hz = 0x05, // High-Performance 100 Hz / Low-Power mode 100 Hz
63 Hp200HzLp200Hz = 0x06, // High-Performance 200 Hz / Low-Power mode 200 Hz
64 Hp400HzLp200Hz = 0x07, // High-Performance 400 Hz / Low-Power mode 200 Hz
65 Hp800HzLp200Hz = 0x08, // High-Performance 800 Hz / Low-Power mode 200 Hz
66 Hp1600HzLp200Hz = 0x09, // High-Performance 1600 Hz / Low-Power mode 200 Hz
67}
68
69#[derive(Copy, Clone, PartialEq, Eq)]
70pub enum OperatingMode {
71 LowPower = 0x00, // Low-Power Mode (12/14-bit resolution)
72 HighPerformance = 0x01, // High-Performance Mode (14-bit resolution) (ignore LowPowerMode setting)
73 SingleOnDemand = 0x02, // Single data conversion on demand mode (12/14-bit resolution)
74}
75
76#[derive(Copy, Clone)]
77pub enum LowPowerMode {
78 Mode1 = 0x00, // Low-Power Mode 1 (12-bit resolution)
79 Mode2 = 0x01, // Low-Power Mode 2 (14-bit resolution)
80 Mode3 = 0x02, // Low-Power Mode 3 (14-bit resolution)
81 Mode4 = 0x03, // Low-Power Mode 4 (14-bit resolution)
82}
83
84#[derive(Copy, Clone)]
85pub enum FullScaleSelection {
86 PlusMinus2G = 0x00, // default
87 PlusMinus4G = 0x01,
88 PlusMinus8G = 0x02,
89 PlusMinus16G = 0x03,
90}
91
92/// WHO_AM_I device identification register
93pub const DEVICE_ID: u8 = 0b0100_0100; // 0x44 or 68 (decimal)