63 lines
1.4 KiB
Rust
63 lines
1.4 KiB
Rust
use anyhow::Result;
|
|
use async_trait::async_trait;
|
|
use serde::Serialize;
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
pub struct TestFrame {
|
|
pub header: [u8; 2],
|
|
pub cmd: u8,
|
|
pub length: usize,
|
|
pub payload: Vec<u8>,
|
|
pub checksum: u8,
|
|
pub dts_ms: u64,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
pub struct TactileAFrameMetaData {
|
|
pub header: [u8; 2],
|
|
pub payload_len: usize,
|
|
pub device_addr: u8,
|
|
pub extend_code: u8,
|
|
pub func_code: u8,
|
|
pub start_addr: u32,
|
|
pub except_data_len: usize,
|
|
// pub status: u8,
|
|
// pub payload_data: Vec<u8>,
|
|
pub checksum: u8,
|
|
// pub dts_ms: u64,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
pub struct TactileAReqFrame {
|
|
pub meta: TactileAFrameMetaData,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
pub struct TactileARepFrame {
|
|
pub meta: TactileAFrameMetaData,
|
|
pub status: TactileAFrameStatusCode,
|
|
pub payload: Vec<u8>,
|
|
pub dts_ms: u64,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
pub enum TactileAFrameStatusCode {
|
|
Success,
|
|
Failure,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
pub enum TactileAFrame {
|
|
Req(TactileAReqFrame),
|
|
Rep(TactileARepFrame),
|
|
}
|
|
|
|
// TODO: filter
|
|
// pub trait FrameFilter<F> {
|
|
// fn apply(&self)
|
|
// }
|
|
|
|
#[async_trait]
|
|
pub trait FrameHandler<F, T>: Send {
|
|
async fn on_frame(&mut self, frame: &F) -> Result<Option<Vec<T>>>;
|
|
}
|