use super::its_readout_frame::{
its_readout_frame_data_view::its_readout_frame_data_view,
its_readout_frame_view::its_readout_frame_view,
};
use crate::util::*;
#[inline]
pub fn generate_view<T: RDH, const CAP: usize>(
view: ViewCommands,
cdp_array: &CdpArray<T, CAP>,
) -> Result<(), Box<dyn error::Error>> {
let disable_styled_view = Cfg::global().disable_styled_views();
match view {
ViewCommands::Rdh => super::rdh_view::rdh_view(cdp_array, disable_styled_view)?,
ViewCommands::ItsReadoutFrames => its_readout_frame_view(cdp_array, disable_styled_view)?,
ViewCommands::ItsReadoutFramesData => {
its_readout_frame_data_view(cdp_array, disable_styled_view)?
}
}
Ok(())
}
const PHT_BIT_MASK: u32 = 0b1_0000;
const SOC_BIT_MASK: u32 = 0b10_0000_0000;
const SOT_BIT_MASK: u32 = 0b1000_0000;
const HB_BIT_MASK: u32 = 0b10;
pub fn rdh_trigger_type_as_string<T: RDH>(rdh: &T) -> Box<str> {
let trigger_type = rdh.trigger_type();
trigger_type_string_from_int(trigger_type)
}
pub fn rdh_detector_field_lane_status_as_string<T: RDH>(rdh: &T) -> Box<str> {
let detector_field = rdh.rdh3().detector_field;
let lane_status_description = if det_field_util::lane_fatal(detector_field) {
String::from("Fatal ")
} else if det_field_util::lane_error(detector_field) {
String::from("Error ")
} else if det_field_util::lane_warning(detector_field) {
String::from("Warning")
} else if det_field_util::lane_missing_data(detector_field) {
String::from("Missing")
} else {
String::from("- ")
};
lane_status_description.into_boxed_str()
}
pub fn trigger_type_string_from_int(trigger_type: u32) -> Box<str> {
let trigger_type_string = if trigger_type & SOC_BIT_MASK != 0 {
String::from("SOC ")
} else if trigger_type & SOT_BIT_MASK != 0 {
String::from("SOT ")
} else if trigger_type & HB_BIT_MASK != 0 {
String::from("HB ")
} else if trigger_type & PHT_BIT_MASK != 0 {
String::from("PhT ")
} else {
String::from("Other")
};
trigger_type_string.into_boxed_str()
}
#[inline]
pub fn calc_current_word_mem_pos(word_idx: usize, data_format: u8, rdh_mem_pos: u64) -> u64 {
let gbt_word_padding: u64 = if data_format == 0 {
6
} else {
0
};
let gbt_word_memory_size_bytes: u64 = 10 + gbt_word_padding;
let relative_mem_pos = word_idx as u64 * gbt_word_memory_size_bytes;
relative_mem_pos + rdh_mem_pos + 64
}
pub fn format_word_slice(word_slice: &[u8]) -> String {
format!(
"[{:02X} {:02X} {:02X} {:02X} {:02X} {:02X} {:02X} {:02X} {:02X} {:02X}]",
word_slice[0],
word_slice[1],
word_slice[2],
word_slice[3],
word_slice[4],
word_slice[5],
word_slice[6],
word_slice[7],
word_slice[8],
word_slice[9],
)
}