tof_control/rb_control/
rb_reset.rs

1use std::thread;
2use std::time::Duration;
3
4use crate::constant::*;
5use crate::memory::{read_control_reg, write_control_reg};
6use crate::helper::rb_type::RBError;
7use crate::rb_control::{rb_temp, rb_vcp, rb_ph, rb_mag, rb_dac, rb_gpioe, rb_clk};
8
9pub fn reset() -> Result<(), RBError> {
10    reset_gpioe()?;
11    reset_clk_synth()?;
12    reset_dac()?;
13
14    thread::sleep(Duration::from_millis(500));
15    reset_daq()?;
16
17    reset_sensor()?;
18
19    Ok(())
20}
21
22fn reset_gpioe() -> Result<(), RBError> {
23    rb_gpioe::reset_gpioe()?;
24    rb_gpioe::initialize_gpioe()?;
25    rb_gpioe::rf_input_select_gpioe(2)?;
26    rb_gpioe::enable_si5345b_gpioe()?;
27
28    Ok(())
29}
30
31fn reset_clk_synth() -> Result<(), RBError> {
32    rb_clk::reset_clk_synth(0)?;
33
34    Ok(())
35}
36
37fn reset_dac() -> Result<(), RBError> {
38    rb_dac::set_dac()?;
39
40    Ok(())
41}
42
43fn reset_daq() -> Result<(), RBError> {
44    // Disable DAQ Fragment
45    disable_daq_fragment()?;
46    // Enable Spike Clean
47    enable_spike_clean()?;
48    // Enable 1-8 Channels
49    enable_8_channels()?;
50    // Enable 9th Channel
51    enable_9th_channel()?;
52    // Start DRS Chip
53    start_drs()?;
54
55    Ok(())
56}
57fn disable_daq_fragment() -> Result<(), RBError> {
58    let value = read_control_reg(DAQ_FRAGMENT_EN)?;
59    if (value & 0x01) == 0x01 {
60        write_control_reg(DAQ_FRAGMENT_EN, 0x00)?;
61    }
62
63    Ok(())
64} 
65fn enable_spike_clean() -> Result<(), RBError> {
66    let mut value = read_control_reg(EN_SPIKE_REMOVAL)?;
67    value = value | 0x400000;
68    if ((value >> 22) & 0x01) != 0x01 {
69        write_control_reg(EN_SPIKE_REMOVAL, value)?;
70    }
71
72    Ok(())
73}
74fn enable_8_channels() -> Result<(), RBError> {
75    let mut value = read_control_reg(READOUT_MASK)?;
76    value = value | 0x1FF;
77    if (value & 0x1FF) != 0x1FF {
78        write_control_reg(READOUT_MASK, value)?;
79    }
80
81    Ok(())
82}
83fn enable_9th_channel() -> Result<(), RBError> {
84    let mut value = read_control_reg(READOUT_MASK)?;
85    value = value | 0x3FF;
86    if ((value >> 9) & 0x01) != 0x01 {
87        write_control_reg(READOUT_MASK, value)?;
88    }
89
90    Ok(())
91}
92fn start_drs() -> Result<(), RBError> {
93    write_control_reg(START, 0x01)?;
94
95    Ok(())
96}
97
98fn reset_sensor() -> Result<(), RBError> {
99    // Configure Temp Sensors (TMP112)
100    rb_temp::config_temp()?;
101    // Configure VCP Sensors (INA226 and INA200)
102    rb_vcp::config_vcp()?;
103    // Configure PH Sensor (BME280)
104    rb_ph::config_ph()?;
105    // Configure Magnetic Sensor (LIS3MDLTR)
106    rb_mag::config_mag()?;
107
108    Ok(())
109}