uf_crsf/packets/
device_ping.rs1use crate::packets::{CrsfPacket, PacketType};
2use crate::CrsfParsingError;
3
4#[derive(Clone, Debug, PartialEq, Eq)]
6#[cfg_attr(feature = "defmt", derive(defmt::Format))]
7pub struct DevicePing {
8 pub dst_addr: u8,
9 pub src_addr: u8,
10}
11
12impl DevicePing {
13 pub fn new(dst_addr: u8, src_addr: u8) -> Result<Self, CrsfParsingError> {
14 Ok(Self { dst_addr, src_addr })
15 }
16}
17
18impl CrsfPacket for DevicePing {
19 const PACKET_TYPE: PacketType = PacketType::DevicePing;
20 const MIN_PAYLOAD_SIZE: usize = 2 * size_of::<u8>();
21
22 fn to_bytes(&self, buffer: &mut [u8]) -> Result<usize, CrsfParsingError> {
23 self.validate_buffer_size(buffer)?;
24 buffer[0] = self.dst_addr;
25 buffer[1] = self.src_addr;
26 Ok(Self::MIN_PAYLOAD_SIZE)
27 }
28
29 fn from_bytes(data: &[u8]) -> Result<Self, CrsfParsingError> {
30 Ok(Self {
31 dst_addr: data[0],
32 src_addr: data[1],
33 })
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_parameter_ping_to_bytes() {
43 let ping = DevicePing {
44 dst_addr: 0xEA,
45 src_addr: 0xEE,
46 };
47 let mut buffer = [0u8; 2];
48 let len = ping.to_bytes(&mut buffer).unwrap();
49 assert_eq!(len, 2);
50 assert_eq!(buffer, [0xEA, 0xEE]);
51 }
52
53 #[test]
54 fn test_parameter_ping_from_bytes() {
55 let data: [u8; 2] = [0xEA, 0xEE];
56 let ping = DevicePing::from_bytes(&data).unwrap();
57 assert_eq!(
58 ping,
59 DevicePing {
60 dst_addr: 0xEA,
61 src_addr: 0xEE
62 }
63 );
64 }
65
66 #[test]
67 fn test_parameter_ping_from_bytes_with_payload() {
68 let data: [u8; 5] = [0xEA, 0xEE, 3, 4, 5];
70 let ping = DevicePing::from_bytes(&data).unwrap();
71 assert_eq!(
72 ping,
73 DevicePing {
74 dst_addr: 0xEA,
75 src_addr: 0xEE
76 }
77 );
78 }
79 #[test]
80 fn test_parameter_ping_buffer_too_small() {
81 let ping = DevicePing {
82 dst_addr: 0xEA,
83 src_addr: 0xEE,
84 };
85 let mut buffer = [0u8; DevicePing::MIN_PAYLOAD_SIZE - 1];
86 let result = ping.to_bytes(&mut buffer);
87 assert_eq!(result, Err(CrsfParsingError::BufferOverflow));
88 }
89}