Bevy+Ratutui powered Monitoring of Pico-Strike devices
1#![no_std]
2
3use alloc::{string::String, vec::Vec};
4
5extern crate alloc;
6
7#[derive(Debug, serde::Serialize, serde::Deserialize)]
8pub struct StrikerRequest {
9 pub request: Request,
10}
11
12#[derive(Debug, serde::Serialize, serde::Deserialize)]
13pub enum Request {
14 Ping,
15 DetectorInfo,
16 SetDetectorConfig {
17 blip_threshold: Option<u16>,
18 blip_size: Option<usize>,
19 },
20}
21
22#[derive(Debug, serde::Serialize, serde::Deserialize)]
23pub enum StrikerResponse {
24 Response(Response),
25 Update(Update),
26}
27
28#[derive(Debug, serde::Serialize, serde::Deserialize)]
29pub enum Response {
30 Pong,
31 DetectorInfo {
32 blip_threshold: u16,
33 blip_size: usize,
34 },
35 SetDetectorConfig {
36 success: bool,
37 message: Option<String>,
38 },
39}
40
41#[derive(Debug, serde::Serialize, serde::Deserialize)]
42pub enum Update {
43 Warning {
44 timestamp: i64,
45 level: u16,
46 },
47 Strike {
48 timestamp: i64,
49 peaks: Vec<(usize, u16)>,
50 samples: Vec<i16>,
51 average: u16,
52 },
53}
54
55pub fn send_response(response: StrikerResponse, buf: &mut [u8]) -> Result<&mut [u8], postcard::Error> {
56 postcard::to_slice(&response, buf)
57}
58
59pub fn receive_response(buf: &mut [u8]) -> Result<StrikerResponse, postcard::Error> {
60 postcard::from_bytes(buf)
61}
62
63pub fn send_request(request: StrikerRequest, buf: &mut [u8]) -> Result<&mut [u8], postcard::Error> {
64 postcard::to_slice(&request, buf)
65}
66
67pub fn receive_request(buf: &mut [u8]) -> Result<StrikerRequest, postcard::Error> {
68 postcard::from_bytes(buf)
69}