tof_control/ltb_control/
ltb_temp.rs1use i2cdev::core::*;
2use i2cdev::linux::LinuxI2CDevice;
3
4use crate::constant::*;
5use crate::helper::ltb_type::{LTBTemp, LTBError};
6use crate::device::tmp112;
7
8impl LTBTemp {
9 pub fn new() -> Self {
10 match Self::read_temp() {
11 Ok(ltb_temp) => {
12 ltb_temp
13 }
14 Err(_) => {
15 Self {
16 trenz_temp: f32::MAX,
17 board_temp: f32::MAX,
18 }
19 }
20 }
21 }
22 pub fn read_temp() -> Result<LTBTemp, LTBError> {
23 let trenz_temp = Self::trenz_temp()?;
24 let board_temp = Self::board_temp()?;
25
26 Ok(
27 LTBTemp {
28 trenz_temp,
29 board_temp,
30 }
31 )
32 }
33 pub fn board_temp() -> Result<f32, LTBError> {
34 let board_tmp112 = tmp112::TMP112::new(I2C_BUS, LTB_TMP112_ADDRESS);
35 board_tmp112.config()?;
36 let board_temp = board_tmp112.read()?;
37
38 Ok(board_temp)
39 }
40 pub fn trenz_temp() -> Result<f32, LTBError> {
41 let mut dev = LinuxI2CDevice::new(&format!("/dev/i2c-{}", I2C_BUS), LTB_TRENZ_ADDRESS)?;
42 let trenz_temp_raw = dev.smbus_read_i2c_block_data(LTB_TRENZ_TEMP_OFFSET as u8, 2)?;
43 let trenz_temp_adc =
44 (((trenz_temp_raw[0] as u16) << 4) | ((trenz_temp_raw[1] as u16) >> 4)) & 0xFFF;
45 let trenz_temp = (((trenz_temp_adc & 4095) as f32 * 503.975) / 4096.0) - 273.15;
46
47 Ok(trenz_temp)
48 }
49}
50
51pub fn config_temp() -> Result<(), LTBError> {
52 let ltb_tmp112 = tmp112::TMP112::new(I2C_BUS, LTB_TMP112_ADDRESS);
53 ltb_tmp112.config()?;
54
55 Ok(())
56}