Skip to main content

FrameCallback

Trait FrameCallback 

Source
pub trait FrameCallback: Send + Sync {
    // Required method
    fn on_frame_received(&self, frame: &PiperFrame);

    // Provided method
    fn on_frame_sent(&self, frame: &PiperFrame) { ... }
}
Expand description

帧回调 Trait

定义 CAN 帧回调接口,用于在接收到帧时执行自定义逻辑。

§性能要求

  • 非阻塞: 实现必须在 <1μs 内完成
  • 无锁: 禁止使用 Mutex、I/O、分配等阻塞操作
  • Channel 模式: 推荐使用 crossbeam::channel::Sender 异步处理

§示例

use piper_driver::hooks::FrameCallback;
use piper_protocol::PiperFrame;
use crossbeam_channel::{Sender, bounded};

struct MyCallback {
    sender: Sender<PiperFrame>,
}

impl FrameCallback for MyCallback {
    fn on_frame_received(&self, frame: &PiperFrame) {
        // ✅ 使用 try_send,非阻塞
        let _ = self.sender.try_send(*frame);
    }
}

Required Methods§

Source

fn on_frame_received(&self, frame: &PiperFrame)

当接收到 CAN 帧时调用

§性能要求
  • 必须在 <1μs 内完成
  • 禁止阻塞操作(Mutex、I/O、分配)
  • 推荐使用 try_send 而非 send
§参数
  • frame: 接收到的 CAN 帧

Provided Methods§

Source

fn on_frame_sent(&self, frame: &PiperFrame)

当发送 CAN 帧成功后调用(可选)

§时机

仅在 tx.send() 成功后触发,确保记录的是实际到达总线的帧。 避免记录“幽灵帧“(发送失败的帧)。

§默认实现

默认为空操作,仅需在需要录制 TX 帧时实现。

Implementors§