#![no_std] use alloc::{string::String, vec::Vec}; extern crate alloc; #[derive(Debug, serde::Serialize, serde::Deserialize)] pub struct StrikerRequest { pub request: Request, } #[derive(Debug, serde::Serialize, serde::Deserialize)] pub enum Request { Ping, DetectorInfo, SetDetectorConfig { blip_threshold: Option, blip_size: Option, }, } #[derive(Debug, serde::Serialize, serde::Deserialize)] pub enum StrikerResponse { Response(Response), Update(Update), } #[derive(Debug, serde::Serialize, serde::Deserialize)] pub enum Response { Pong, DetectorInfo { blip_threshold: u16, blip_size: usize, }, SetDetectorConfig { success: bool, message: Option, }, } #[derive(Debug, serde::Serialize, serde::Deserialize)] pub enum Update { Warning { timestamp: i64, level: u16, }, Strike { timestamp: i64, peaks: Vec<(usize, u16)>, samples: Vec, average: u16, }, } pub fn send_response(response: StrikerResponse, buf: &mut [u8]) -> Result<&mut [u8], postcard::Error> { postcard::to_slice(&response, buf) } pub fn receive_response(buf: &mut [u8]) -> Result { postcard::from_bytes(buf) } pub fn send_request(request: StrikerRequest, buf: &mut [u8]) -> Result<&mut [u8], postcard::Error> { postcard::to_slice(&request, buf) } pub fn receive_request(buf: &mut [u8]) -> Result { postcard::from_bytes(buf) }