#![allow(clippy::unusual_byte_groupings)]
use crate::types::RawEventType;
#[inline]
pub fn get_event_type(word: u16) -> u8 {
((word >> 12) & 0xF) as u8
}
#[inline]
pub fn get_payload(word: u16) -> u16 {
word & 0x0FFF
}
#[inline]
pub fn addr_y_get_y(word: u16) -> u16 {
word & 0x07FF }
#[inline]
pub fn addr_y_get_system_type(word: u16) -> u8 {
((word >> 11) & 0x1) as u8
}
#[inline]
pub fn addr_x_get_x(word: u16) -> u16 {
word & 0x07FF }
#[inline]
pub fn addr_x_get_polarity(word: u16) -> u8 {
((word >> 11) & 0x1) as u8
}
#[inline]
pub fn vect_base_x_get_x(word: u16) -> u16 {
word & 0x07FF }
#[inline]
pub fn vect_base_x_get_polarity(word: u16) -> u8 {
((word >> 11) & 0x1) as u8
}
#[inline]
pub fn vect_12_get_valid(word: u16) -> u16 {
word & 0x0FFF }
#[inline]
pub fn vect_8_get_valid(word: u16) -> u8 {
(word & 0x00FF) as u8 }
#[inline]
pub fn time_get_value(word: u16) -> u16 {
word & 0x0FFF }
#[inline]
pub fn ext_trigger_get_id(word: u16) -> u8 {
((word >> 8) & 0x0F) as u8 }
#[inline]
pub fn ext_trigger_get_value(word: u16) -> u8 {
(word & 0x01) as u8 }
#[inline]
pub fn parse_event_type(word: u16) -> Option<RawEventType> {
RawEventType::from_u8(get_event_type(word))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_addr_y_parsing() {
let word: u16 = 0b0000_0_00111110100;
assert_eq!(addr_y_get_y(word), 500);
assert_eq!(addr_y_get_system_type(word), 0);
let word2: u16 = 0b0000_1_00001100100;
assert_eq!(addr_y_get_y(word2), 100);
assert_eq!(addr_y_get_system_type(word2), 1);
}
#[test]
fn test_addr_x_parsing() {
let word: u16 = 0b0010_1_00100101100;
assert_eq!(get_event_type(word), 0x2);
assert_eq!(addr_x_get_x(word), 300);
assert_eq!(addr_x_get_polarity(word), 1);
}
#[test]
fn test_vect_12_parsing() {
let word: u16 = 0b0100_101010101010;
assert_eq!(get_event_type(word), 0x4);
assert_eq!(vect_12_get_valid(word), 0b101010101010);
}
#[test]
fn test_time_parsing() {
let word: u16 = 0b1000_101010111100;
assert_eq!(get_event_type(word), 0x8);
assert_eq!(time_get_value(word), 0xABC);
}
#[test]
fn test_ext_trigger_parsing() {
let word: u16 = 0b1010_0010_0000000_1;
assert_eq!(get_event_type(word), 0xA);
assert_eq!(ext_trigger_get_id(word), 2);
assert_eq!(ext_trigger_get_value(word), 1);
}
}