use super::super::frame::EthernetFlags;
#[allow(unused_imports)]
use super::*;
use crate::bus_logging::timestamp_to_seconds;
use alloc::vec::Vec;
#[derive(Clone)]
pub(crate) struct RawEthFrame {
pub(crate) timestamp_s: f64,
pub(crate) data: Vec<u8>,
pub(crate) flags: EthernetFlags,
}
impl RawEthFrame {
pub(crate) fn new(timestamp_us: u64, data: Vec<u8>, flags: EthernetFlags) -> Self {
Self {
timestamp_s: timestamp_to_seconds(timestamp_us),
data,
flags,
}
}
pub(crate) fn frame_size(&self) -> FrameSize {
FrameSize::from_length(self.data.len())
}
pub(crate) fn to_frame_bytes(&self, max_size: usize) -> Vec<u8> {
let header_size = 3;
let total_size = header_size + max_size;
let mut bytes = Vec::with_capacity(total_size);
bytes.push(self.flags.to_byte());
let frame_len = self.data.len() as u16;
bytes.extend_from_slice(&frame_len.to_le_bytes());
let copy_len = self.data.len().min(max_size);
bytes.extend_from_slice(&self.data[..copy_len]);
bytes.resize(total_size, 0);
bytes
}
}