1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
/// All possible errors in this crate
#[derive(Debug)]
pub enum Error<CommE, PinE> {
/// I²C / SPI communication error
Comm(CommE),
/// Chip-select pin error (SPI)
Pin(PinE),
/// Invalid input data provided
InvalidInputData,
}
/// All possible errors in this crate
#[derive(Debug)]
pub struct ModeChangeError<CommE, PinE, DEV> {
/// I²C / SPI communication error
pub error: Error<CommE, PinE>,
/// Original device without mode changed
pub dev: DEV,
}
/// Device operation modes
pub mod mode {
/// Magnetometer one-shot (single) mode
#[derive(Debug)]
pub struct MagOneShot;
/// Magnetometer continuous mode
#[derive(Debug)]
pub struct MagContinuous;
}
/// Measurement
#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub struct Measurement {
/// X-axis data.
pub x: i32,
/// Y-axis data.
pub y: i32,
/// Z-axis data.
pub z: i32,
}
/// Unscaled measurement
#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub struct UnscaledMeasurement {
/// X-axis data.
pub x: i16,
/// Y-axis data.
pub y: i16,
/// Z-axis data.
pub z: i16,
}
/// Accelerometer output data rate
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum AccelOutputDataRate {
/// 1 Hz (High-resolution/Normal/Low-power)
Hz1,
/// 10 Hz (High-resolution/Normal/Low-power)
Hz10,
/// 25 Hz (High-resolution/Normal/Low-power)
Hz25,
/// 50 Hz (High-resolution/Normal/Low-power)
Hz50,
/// 100 Hz (High-resolution/Normal/Low-power)
Hz100,
/// 200 Hz (High-resolution/Normal/Low-power)
Hz200,
/// 400 Hz (High-resolution/Normal/Low-power)
Hz400,
/// 1.344 kHz (High-resolution/Normal)
Khz1_344,
/// 1.620 kHz (Low-power)
Khz1_620LowPower,
/// 5.376 kHz (Low-power)
Khz5_376LowPower,
}
/// Accelerometer mode
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum AccelMode {
/// Power down
PowerDown,
/// Low power (8-bit)
LowPower,
/// Normal mode (10-bit)
Normal,
/// High resolution (12-bit)
HighResolution,
}
/// Accelerometer scaling factor
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum AccelScale {
/// Plus or minus 2g
G2,
/// Plus or minus 4g
G4,
/// Plus or minus 8g
G8,
/// Plus or minus 16g
G16,
}
/// Magnetometer output data rate
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MagOutputDataRate {
/// 10 Hz
Hz10,
/// 20 Hz
Hz20,
/// 50 Hz
Hz50,
/// 100 Hz
Hz100,
}
/// Data status
#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub struct Status {
/// X,Y,Z-axis data overrun
pub xyz_overrun: bool,
/// X-axis data overrun
pub x_overrun: bool,
/// Y-axis data overrun
pub y_overrun: bool,
/// Z-axis data overrun
pub z_overrun: bool,
/// X,Y,Z-axis new data ready
pub xyz_new_data: bool,
/// X-axis data new data ready
pub x_new_data: bool,
/// Y-axis data new data ready
pub y_new_data: bool,
/// Z-axis data new data ready
pub z_new_data: bool,
}