use std::sync::OnceLock;
pub const DIRECTION_TX: u8 = 0;
pub const DIRECTION_RX: u8 = 1;
#[derive(Debug, Clone)]
pub struct CaptureEvent<'a> {
pub direction: u8,
pub channel: u8,
pub address: &'a [u8; 5],
pub serial: &'a str,
pub data: &'a [u8],
}
pub type CaptureCallback = Box<dyn Fn(CaptureEvent<'_>) + Send + Sync>;
static CAPTURE_CALLBACK: OnceLock<CaptureCallback> = OnceLock::new();
pub fn set_callback(callback: CaptureCallback) {
let _ = CAPTURE_CALLBACK.set(callback);
}
pub(crate) fn capture_packet(direction: u8, channel: u8, address: &[u8; 5], serial: &str, data: &[u8]) {
if let Some(callback) = CAPTURE_CALLBACK.get() {
callback(CaptureEvent {
direction,
channel,
address,
serial,
data,
});
}
}