tof_control/pb_control/
pb_temp.rs1use 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 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 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 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 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}