blob: 81a5795b58ee09ef325a98f05e2286129991bd7e (
plain)
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
|
//! Functions for all devices specific to each operating mode
use ic;
fn convert_measurement<IC>(register_data: u16) -> i16
where
IC: ic::Resolution
{
let value = register_data;
if IC::BITS == ic::ResolutionBits::_12 {
let is_negative = (value & 0b1000_0000_0000_0000) != 0;
if is_negative {
let value = 0b1111_0000_0000_0000 | (value >> 4);
value as i16
}
else {
(value >> 4) as i16
}
}
else {
value as i16
}
}
mod oneshot;
mod continuous;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn convert_12_bits() {
assert_eq!( 0, convert_measurement::<ic::Ads1013>(0));
assert_eq!( 2047, convert_measurement::<ic::Ads1013>(0x7FFF));
assert_eq!(-2048, convert_measurement::<ic::Ads1013>(0x8000));
assert_eq!( -1, convert_measurement::<ic::Ads1013>(0xFFFF));
}
#[test]
fn convert_16_bits() {
assert_eq!( 0, convert_measurement::<ic::Ads1113>(0));
assert_eq!( 32767, convert_measurement::<ic::Ads1113>(0x7FFF));
assert_eq!(-32768, convert_measurement::<ic::Ads1113>(0x8000));
assert_eq!( -1, convert_measurement::<ic::Ads1113>(0xFFFF));
}
}
|