capsules_extra/
lsm303xx.rs1#![allow(non_camel_case_types)]
9
10use enum_primitive::cast::FromPrimitive;
11use enum_primitive::enum_from_primitive;
12
13use kernel::utilities::registers::register_bitfields;
14
15pub const ACCELEROMETER_BASE_ADDRESS: u8 = 0x19;
16pub const MAGNETOMETER_BASE_ADDRESS: u8 = 0x1e;
17
18enum_from_primitive! {
20 #[derive(Clone, Copy, PartialEq)]
21 pub enum Lsm303AccelDataRate {
22 Off = 0,
23 DataRate1Hz = 1,
24 DataRate10Hz = 2,
25 DataRate25Hz = 3,
26 DataRate50Hz = 4,
27 DataRate100Hz = 5,
28 DataRate200Hz = 6,
29 DataRate400Hz = 7,
30 LowPower1620Hz = 8,
31 Normal1344LowPower5376Hz = 9,
32 }
33}
34
35enum_from_primitive! {
37 #[derive(Clone, Copy, PartialEq)]
38 pub enum Lsm303MagnetoDataRate {
39 DataRate0_75Hz = 0,
40 DataRate1_5Hz = 1,
41 DataRate3_0Hz = 2,
42 DataRate7_5Hz = 3,
43 DataRate15_0Hz = 4,
44 DataRate30_0Hz = 5,
45 DataRate75_0Hz = 6,
46 DataRate220_0Hz = 7,
47 }
48}
49
50enum_from_primitive! {
51 #[derive(Clone, Copy, PartialEq)]
52 pub enum Lsm303Scale {
53 Scale2G = 0,
54 Scale4G = 1,
55 Scale8G = 2,
56 Scale16G = 3
57 }
58}
59
60pub(crate) const SCALE_FACTOR: [u8; 4] = [2, 4, 8, 16];
62
63enum_from_primitive! {
65 #[derive(Clone, Copy, PartialEq)]
66 pub enum Lsm303Range {
67 Range1G = 0,
68 Range1_3G = 1,
69 Range1_9G = 2,
70 Range2_5G = 3,
71 Range4_0G = 4,
72 Range4_7G = 5,
73 Range5_6G = 7,
74 Range8_1 = 8,
75 }
76}
77
78pub(crate) const RANGE_FACTOR_X_Y: [i16; 8] = [
80 1000, 1100, 855, 670, 450, 400, 330, 230,
82];
83
84pub(crate) const RANGE_FACTOR_Z: [i16; 8] = [
86 1000, 980, 760, 600, 400, 355, 295, 205,
88];
89
90register_bitfields![u8,
91 pub (crate) CTRL_REG1 [
92 ODR OFFSET(4) NUMBITS(4) [],
94 LPEN OFFSET(3) NUMBITS(1) [],
96 ZEN OFFSET(2) NUMBITS(1) [],
98 YEN OFFSET(1) NUMBITS(1) [],
100 XEN OFFSET(0) NUMBITS(1) []
102 ],
103 pub (crate) CTRL_REG4 [
104 BDU OFFSET(7) NUMBITS(2) [],
106 BLE OFFSET(6) NUMBITS(1) [],
108 FS OFFSET(4) NUMBITS(2) [],
110 HR OFFSET(3) NUMBITS(1) [],
112 SIM OFFSET(0) NUMBITS(1) []
114 ]
115];
116
117enum_from_primitive! {
118 pub enum AccelerometerRegisters {
119 CTRL_REG1 = 0x20,
120 CTRL_REG4 = 0x23,
121 OUT_X_L_A = 0x28,
122 OUT_X_H_A = 0x29,
123 OUT_Y_L_A = 0x2A,
124 OUT_Y_H_A = 0x2B,
125 OUT_Z_L_A = 0x2C,
126 OUT_Z_H_A = 0x2D,
127 }
128}