tof_control/rb_control/
rb_clk.rs1use crate::constant::*;
2
3use crate::device::{pca9548a, si5345b};
4use crate::helper::rb_type::RBError;
5
6pub fn configure_clk_synth() -> Result<(), RBError> {
7 let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
8 i2c_mux.select(RB_SI5345B_CHANNEL)?;
9
10 let si5345b = si5345b::SI5345B::new(I2C_BUS, RB_SI5345B_ADDRESS);
11 si5345b.configure_si5345b()?;
12
13 i2c_mux.reset()?;
14
15 Ok(())
16}
17
18pub fn program_nvm_clk_synth(verbose: bool) -> Result<(), RBError> {
19 let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
20 i2c_mux.select(RB_SI5345B_CHANNEL)?;
21
22 let si5345b = si5345b::SI5345B::new(I2C_BUS, RB_SI5345B_ADDRESS);
23
24 let available_nvm_bank = si5345b.read_available_nvm_bank()?;
26 match available_nvm_bank {
27 2 => {
28 if verbose {
29 println!("Number of User Banks Available to Burn: 2");
30 }
31 },
32 1 => {
33 if verbose {
34 println!("Number of User Banks Available to Burn: 1");
35 }
36 }
37 0 => {
38 println!("Number of User Banks Available to Burn: 0");
39 println!("Exiting the program...");
40 std::process::exit(1);
41 }
42 _ => {
43 println!("ACTIVE_NVM_BANK Error");
44 println!("Exiting the program...");
45 std::process::exit(1);
46 }
47 }
48
49 if verbose {
51 println!("Programming SI5345B NVM...");
52 }
53 si5345b.configure_nvm_si5345b()?;
54 if verbose {
55 println!("Done programming SI5345B NVM");
56 }
57
58 i2c_mux.reset()?;
59
60 if verbose {
61 println!("Complete programming SI5345B NVM!");
62 }
63
64 Ok(())
65}
66
67
68pub fn reset_clk_synth(rst_type: u8) -> Result<(), RBError> {
69 let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
70 i2c_mux.select(RB_SI5345B_CHANNEL)?;
71
72 let si5345b = si5345b::SI5345B::new(I2C_BUS, RB_SI5345B_ADDRESS);
73
74 match rst_type {
75 0 => {
76 si5345b.soft_reset_si5345b()?;
77 si5345b.configure_si5345b()?;
78 }
79 1 => {
80 si5345b.hard_reset_si5345b()?;
81 }
82 _ => {},
83 }
84
85 i2c_mux.reset()?;
86
87 Ok(())
88}