tof_control/rb_control/
rb_init.rs

1use gethostname::gethostname;
2
3use crate::constant::*;
4use crate::helper::rb_type::RBError;
5use crate::memory::{read_control_reg, write_control_reg};
6use crate::rb_control::{rb_temp, rb_vcp, rb_ph, rb_mag, rb_dac};
7
8pub fn initialize() -> Result<(), RBError> {    
9    // Initialize DAC Chip
10    initialize_dac()?;
11    // Set RB ID
12    set_board_id()?;
13    // Initialize DAQ Registers
14    initialize_daq()?;
15    // Initialize I2C Sensors
16    initialize_sensor()?;
17
18    Ok(())
19}
20
21fn initialize_dac() -> Result<(), RBError> {
22    rb_dac::set_dac()?;
23
24    Ok(())
25}
26
27fn set_board_id() -> Result<(), RBError> {
28    let hostname = gethostname().into_string()?;
29    let board_id = hostname.replace("tof-rb", "").parse::<u32>()?;
30
31    write_control_reg(BOARD_ID, board_id)?;
32
33    Ok(())
34}
35
36fn initialize_daq() -> Result<(), RBError> {
37    // Disable DAQ Fragment
38    disable_daq_fragment()?;
39
40    // Enable Spike Clean
41    enable_spike_clean()?;
42
43    // Enable 1-8 Channels
44    enable_8_channels()?;
45
46    // Enable 9th Channel
47    enable_9th_channel()?;
48
49    // Start DRS Chip
50    start_drs()?;
51
52    Ok(())
53}
54
55fn disable_daq_fragment() -> Result<(), RBError> {
56    let value = read_control_reg(DAQ_FRAGMENT_EN)?;
57    if (value & 0x01) == 0x01 {
58        write_control_reg(DAQ_FRAGMENT_EN, 0x00)?;
59    }
60
61    Ok(())
62} 
63
64fn enable_spike_clean() -> Result<(), RBError> {
65    let mut value = read_control_reg(EN_SPIKE_REMOVAL)?;
66    value = value | 0x400000;
67    if ((value >> 22) & 0x01) != 0x01 {
68        write_control_reg(EN_SPIKE_REMOVAL, value)?;
69    }
70
71    Ok(())
72}
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}
83
84fn enable_9th_channel() -> Result<(), RBError> {
85    let mut value = read_control_reg(READOUT_MASK)?;
86    value = value | 0x3FF;
87    if ((value >> 9) & 0x01) != 0x01 {
88        write_control_reg(READOUT_MASK, value)?;
89    }
90
91    Ok(())
92}
93
94fn start_drs() -> Result<(), RBError> {
95    write_control_reg(START, 0x01)?;
96
97    Ok(())
98}
99
100fn initialize_sensor() -> Result<(), RBError> {
101    // Configure Temp Sensors (TMP112)
102    rb_temp::config_temp()?;
103    // Configure VCP Sensors (INA226 and INA200)
104    rb_vcp::config_vcp()?;
105    // Configure PH Sensor (BME280)
106    rb_ph::config_ph()?;
107    // Configure Magnetic Sensor (LIS3MDLTR)
108    rb_mag::config_mag()?;
109
110    Ok(())
111}