tof_control/rb_control/
rb_temp.rs1use crate::constant::*;
2use crate::memory::read_control_reg;
3use crate::helper::rb_type::{RBTemp, RBError};
4use crate::device::{bme280, lis3mdltr, pca9548a, tmp112};
5
6impl RBTemp {
7 pub fn new() -> Self {
8 match Self::read_temp() {
9 Ok(rb_temp) => {
10 rb_temp
11 }
12 Err(_) => {
13 Self {
14 zynq_temp: f32::MAX,
15 drs_temp: f32::MAX,
16 clk_temp: f32::MAX,
17 adc_temp: f32::MAX,
18 bme280_temp: f32::MAX,
19 lis3mdltr_temp: f32::MAX,
20 }
21 }
22 }
23
24 }
25 pub fn read_temp() -> Result<RBTemp, RBError> {
26 let zynq_temp_adc = read_control_reg(RB_TEMP)?;
27 let zynq_temp = (((zynq_temp_adc & 4095) as f32 * 503.975) / 4096.0) - 273.15;
28
29 let i2c_mux_1 = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_1);
30 let i2c_mux_2 = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
31
32 i2c_mux_1.select(RB_DRS_TMP112_CHANNEL)?;
33 let drs_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_DRS_TMP112_ADDRESS);
34 drs_tmp112.config()?;
35 let drs_temp = drs_tmp112.read()?;
36
37 i2c_mux_1.select(RB_LIS3MDLTR_CHANNEL)?;
38 let lis3mdltr = lis3mdltr::LIS3MDLTR::new(I2C_BUS, RB_LIS3MDLTR_ADDRESS);
39 lis3mdltr.configure()?;
40 let lis3mdltr_temp = lis3mdltr.read_temp()?;
41
42 i2c_mux_1.select(RB_BME280_CHANNEL)?;
43 let bme280 = bme280::BME280::new(I2C_BUS, RB_BME280_ADDRESS);
44 bme280.configure()?;
45 let bme280_temp = bme280.read_all()?[0];
46
47 i2c_mux_2.select(RB_CLK_TMP112_CHANNEL)?;
48 let clk_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_CLK_TMP112_ADDRESS);
49 clk_tmp112.config()?;
50 let clk_temp = clk_tmp112.read()?;
51
52 i2c_mux_2.select(RB_ADC_TMP112_CHANNEL)?;
53 let adc_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_ADC_TMP112_ADDRESS);
54 adc_tmp112.config()?;
55 let adc_temp = adc_tmp112.read()?;
56
57 i2c_mux_1.reset()?;
58 i2c_mux_2.reset()?;
59
60 Ok(
61 RBTemp {
62 zynq_temp,
63 drs_temp,
64 clk_temp,
65 adc_temp,
66 bme280_temp,
67 lis3mdltr_temp,
68 }
69 )
70 }
71 pub fn read_drs_temp() -> Result<f32, RBError> {
72 let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_1);
73 i2c_mux.select(RB_DRS_TMP112_CHANNEL)?;
74 let drs_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_DRS_TMP112_ADDRESS);
75 drs_tmp112.config()?;
76 let drs_temp = drs_tmp112.read()?;
77
78 i2c_mux.reset()?;
79
80 Ok(drs_temp)
81 }
82}
83
84pub fn config_temp() -> Result<(), RBError> {
85 let i2c_mux_1 = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_1);
86 let i2c_mux_2 = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
87
88 i2c_mux_1.select(RB_DRS_TMP112_CHANNEL)?;
89 let drs_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_DRS_TMP112_ADDRESS);
90 drs_tmp112.config()?;
91
92 i2c_mux_2.select(RB_CLK_TMP112_CHANNEL)?;
93 let clk_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_CLK_TMP112_ADDRESS);
94 clk_tmp112.config()?;
95
96 i2c_mux_2.select(RB_ADC_TMP112_CHANNEL)?;
97 let adc_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_ADC_TMP112_ADDRESS);
98 adc_tmp112.config()?;
99
100 i2c_mux_1.reset()?;
101 i2c_mux_2.reset()?;
102
103 Ok(())
104}
105
106pub fn read_drs_temp_raw() -> Result<u16, RBError> {
107 let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_1);
108 i2c_mux.select(RB_DRS_TMP112_CHANNEL)?;
109 let drs_tmp112 = tmp112::TMP112::new(I2C_BUS, RB_DRS_TMP112_ADDRESS);
110 drs_tmp112.config()?;
111 let drs_temp_raw = drs_tmp112.read_raw()?;
112
113 i2c_mux.reset()?;
114
115 Ok(drs_temp_raw)
116}
117
118pub fn to_json() -> Result<String, RBError> {
119 let rb_temp = RBTemp::new();
120 let rb_temp_json = serde_json::to_string(&rb_temp)?;
121
122 Ok(rb_temp_json)
123}