scan_uio_buffers/
scan_uio_buffers.rs1extern crate liftof_rb;
2
3use std::{thread, time};
4use indicatif::{ProgressBar,
5 ProgressStyle};
6use tof_dataclasses::events::RBEvent;
7use tof_dataclasses::serialization::Serialization;
8
9use liftof_rb::control::*;
10use liftof_rb::memory::RamBuffer;
11use liftof_rb::memory::RegisterError;
12use liftof_rb::memory::map_physical_mem_read;
13#[macro_use] extern crate log;
14
15pub fn get_bytestream(addr_space : &str,
17 addr : u32,
18 len : usize) -> Result<Vec::<u8>, RegisterError> {
19
20 let blobsize = RBEvent::SIZE;
21 let vec_size = blobsize*len;
22 let mut bytestream = Vec::<u8>::with_capacity(vec_size);
25
26 let sz = std::mem::size_of::<u8>();
27 let m = match map_physical_mem_read(addr_space, addr, vec_size * sz) {
28 Ok(m) => m,
29 Err(err) => {
30 println!("Failed to mmap! {:?}", err);
31 return Err(RegisterError::MMapFail);
32 }
33 };
34 let p = m.as_ptr() as *const u8;
35 (0..vec_size).for_each(|x| unsafe {
36 let value = std::ptr::read_volatile(p.offset(x as isize));
37 bytestream.push(value); });
41 Ok(bytestream)
42}
43
44pub fn setup_progress_bar(msg : String, size : u64, format_string : String) -> ProgressBar {
46 let bar = ProgressBar::new(size).with_style(
47 ProgressStyle::with_template(&format_string)
48 .unwrap()
49 .progress_chars("##-"));
50 bar.set_message(msg);
52 bar
66}
67
68
69
70
71fn main() {
72 let two_seconds = time::Duration::from_millis(2000);
75 let one_milli = time::Duration::from_millis(1);
76
77 let buf_a = RamBuffer::A;
91 let buf_b = RamBuffer::B;
92 reset_dma().unwrap();
93 thread::sleep(one_milli);
94 let buf_a_start = get_blob_buffer_occ(&buf_a).unwrap();
95 let buf_b_start = get_blob_buffer_occ(&buf_b).unwrap();
96 info!("We got start values for the blob buffers at {buf_a_start} and {buf_b_start}");
97 println!("getting rate estimate..");
107 thread::sleep(two_seconds);
108 let rate = get_trigger_rate().unwrap();
109 println!("Running at a trigger rate of {rate} Hz");
110 match enable_trigger() {
132 Ok(_) => (),
133 Err(err) => error!("Can not enable triggers, Error {err}")
134 }
135 let mut dma_min = std::u32::MAX;
136 let mut dma_max = 0u32;
137
138 let mut buff_a_min_occ : u32 = 4294967295;
139 let mut buff_b_min_occ : u32 = 4294967295;
140 let mut buff_a_max_occ : u32 = 0;
141 let mut buff_b_max_occ : u32 = 0;
142 let mut buff_a_occ : u32;
143 let mut buff_b_occ : u32;
144 let buff_a = RamBuffer::A;
145 let buff_b = RamBuffer::B;
146 let mut n_iter = 0;
147 loop {
148 n_iter += 1;
149 buff_a_occ = get_blob_buffer_occ(&buff_a).unwrap();
159 buff_b_occ = get_blob_buffer_occ(&buff_b).unwrap();
160 let dma_ptr = get_dma_pointer().unwrap();
161 if buff_a_occ > buff_a_max_occ {
163 buff_a_max_occ = buff_a_occ;
164 }
165 if buff_a_occ < buff_a_min_occ {
166 buff_a_min_occ = buff_a_occ;
167 }
168 if buff_b_occ > buff_b_max_occ {
169 buff_b_max_occ = buff_b_occ;
170 }
171 if buff_b_occ < buff_b_min_occ {
172 buff_b_min_occ = buff_b_occ;
173 }
174 if dma_ptr > dma_max {
175 dma_max = dma_ptr;
176 }
177 if dma_ptr < dma_min {
178 dma_min = dma_ptr;
179 }
180 if n_iter % 100000 == 0 {
182 println!("New MAX A occ {buff_a_max_occ}");
183 println!("New MIN A occ {buff_a_min_occ}");
184 println!("New MAX B occ {buff_b_max_occ}");
185 println!("New MIN B occ {buff_b_min_occ}");
186 println!("New MAX dma ptr {dma_max}");
187 println!("New MIN dma ptr {dma_min}");
188 println!("Estmated A buff size {}", buff_a_max_occ - buff_a_min_occ);
189 println!("Estmated B buff size {}", buff_b_max_occ - buff_b_min_occ);
190 println!("----- N iterations {n_iter}");
191 }
192 }
193}