tof_control/pb_control/
pb_temp.rs

1use crate::constant::*;
2use crate::helper::pb_type::{PBTemp, PBError};
3use crate::device::{pca9548a, tmp1075};
4
5impl PBTemp {
6    pub fn new() -> Self {
7        match Self::read_temp() {
8            Ok(pb_temp) => {
9                pb_temp
10            }
11            Err(_) => {
12                Self {
13                    pds_temp: f32::MAX,
14                    pas_temp: f32::MAX,
15                    nas_temp: f32::MAX,
16                    shv_temp: f32::MAX,
17                }
18            }
19        }
20    }
21
22    pub fn read_temp() -> Result<PBTemp, PBError> {
23        let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, PB_PCA9548A_ADDRESS);
24        i2c_mux.select(PB_TMP1075_CHANNEL)?;
25
26        // Positive Degital Supply DC-DC Converter Temperature
27        let pds_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_PDS_TMP1075_ADDRESS);
28        pds_tmp1075.config()?;
29        let pds_temp = pds_tmp1075.read()?;
30
31        // Positive Analog Supply DC-DC Converter Temperature
32        let pas_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_PAS_TMP1075_ADDRESS);
33        pas_tmp1075.config()?;
34        let pas_temp = pas_tmp1075.read()?;
35
36        // Negative Analog Supply DC-DC Converter Temperature
37        let nas_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_NAS_TMP1075_ADDRESS);
38        nas_tmp1075.config()?;
39        let nas_temp = nas_tmp1075.read()?;
40
41        // SiPM High Voltage Supply DC-DC Converter Temperature
42        let shv_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_SHV_TMP1075_ADDRESS);
43        shv_tmp1075.config()?;
44        let shv_temp = shv_tmp1075.read()?;
45
46        i2c_mux.reset()?;
47
48        Ok(
49            PBTemp {
50                pds_temp,
51                pas_temp,
52                nas_temp,
53                shv_temp,
54            }
55        )
56
57    }
58}
59
60pub fn config_temp() -> Result<(), PBError> {
61    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, PB_PCA9548A_ADDRESS);
62    i2c_mux.select(PB_TMP1075_CHANNEL)?;
63
64    let pds_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_PDS_TMP1075_ADDRESS);
65    pds_tmp1075.config()?;
66
67    let pas_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_PAS_TMP1075_ADDRESS);
68    pas_tmp1075.config()?;
69
70    let nas_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_NAS_TMP1075_ADDRESS);
71    nas_tmp1075.config()?;
72
73    let shv_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_SHV_TMP1075_ADDRESS);
74    shv_tmp1075.config()?;
75
76    i2c_mux.reset()?;
77
78    Ok(())
79}
80
81pub fn read_pds_temp() -> Result<f32, PBError> {
82    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, PB_PCA9548A_ADDRESS);
83    i2c_mux.select(PB_TMP1075_CHANNEL)?;
84
85    let pds_tmp1075 = tmp1075::TMP1075::new(I2C_BUS, PB_PDS_TMP1075_ADDRESS);
86    pds_tmp1075.config()?;
87    let pds_temp = pds_tmp1075.read()?;
88
89    i2c_mux.reset()?;
90
91    Ok(pds_temp)
92}