aboutsummaryrefslogtreecommitdiff
path: root/embassy-net-esp-hosted/src/lib.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-06-21 18:13:19 +0200
committerDario Nieuwenhuis <[email protected]>2023-06-22 21:12:10 +0200
commitec2c095a76a0f55a031093e98a5283cff0daa576 (patch)
treeab4986ff6c3101c9a3d3860c728083b170eefa21 /embassy-net-esp-hosted/src/lib.rs
parent6c123596b7d48ee66ea93e8b1515e91231e9bced (diff)
esp-hosted: print events.
Diffstat (limited to 'embassy-net-esp-hosted/src/lib.rs')
-rw-r--r--embassy-net-esp-hosted/src/lib.rs36
1 files changed, 28 insertions, 8 deletions
diff --git a/embassy-net-esp-hosted/src/lib.rs b/embassy-net-esp-hosted/src/lib.rs
index 2cf05a7df..084009966 100644
--- a/embassy-net-esp-hosted/src/lib.rs
+++ b/embassy-net-esp-hosted/src/lib.rs
@@ -8,6 +8,7 @@ use embedded_hal::digital::{InputPin, OutputPin};
8use embedded_hal_async::digital::Wait; 8use embedded_hal_async::digital::Wait;
9use embedded_hal_async::spi::SpiDevice; 9use embedded_hal_async::spi::SpiDevice;
10use ioctl::IoctlState; 10use ioctl::IoctlState;
11use proto::CtrlMsg;
11 12
12use crate::ioctl::PendingIoctl; 13use crate::ioctl::PendingIoctl;
13 14
@@ -194,8 +195,6 @@ where
194 tx_buf[0..12].copy_from_slice(&header.to_bytes()); 195 tx_buf[0..12].copy_from_slice(&header.to_bytes());
195 header.checksum = checksum(&tx_buf[..26 + req_len]); 196 header.checksum = checksum(&tx_buf[..26 + req_len]);
196 tx_buf[0..12].copy_from_slice(&header.to_bytes()); 197 tx_buf[0..12].copy_from_slice(&header.to_bytes());
197
198 debug!("====== SENDING IOCTL");
199 } 198 }
200 Either3::Second(packet) => { 199 Either3::Second(packet) => {
201 tx_buf[12..][..packet.len()].copy_from_slice(packet); 200 tx_buf[12..][..packet.len()].copy_from_slice(packet);
@@ -270,25 +269,46 @@ where
270 }, 269 },
271 // serial 270 // serial
272 2 => { 271 2 => {
273 debug!("serial rx: {:02x}", payload); 272 trace!("serial rx: {:02x}", payload);
274 if payload.len() < 14 { 273 if payload.len() < 14 {
275 warn!("serial rx: too short"); 274 warn!("serial rx: too short");
276 return; 275 return;
277 } 276 }
278 if &payload[..12] != b"\x01\x08\x00ctrlResp\x02" { 277
279 warn!("serial rx: bad tlv"); 278 let isEvent = match &payload[..12] {
280 return; 279 b"\x01\x08\x00ctrlResp\x02" => false,
281 } 280 b"\x01\x08\x00ctrlEvnt\x02" => true,
281 _ => {
282 warn!("serial rx: bad tlv");
283 return;
284 }
285 };
286
282 let len = u16::from_le_bytes(payload[12..14].try_into().unwrap()) as usize; 287 let len = u16::from_le_bytes(payload[12..14].try_into().unwrap()) as usize;
283 if payload.len() < 14 + len { 288 if payload.len() < 14 + len {
284 warn!("serial rx: too short 2"); 289 warn!("serial rx: too short 2");
285 return; 290 return;
286 } 291 }
287 self.ioctl_state.ioctl_done(&payload[14..][..len]); 292 let data = &payload[14..][..len];
293
294 if isEvent {
295 self.handle_event(data);
296 } else {
297 self.ioctl_state.ioctl_done(data);
298 }
288 } 299 }
289 _ => warn!("unknown iftype {}", if_type_and_num), 300 _ => warn!("unknown iftype {}", if_type_and_num),
290 } 301 }
291 } 302 }
303
304 fn handle_event(&self, data: &[u8]) {
305 let Ok(event) = noproto::read::<CtrlMsg>(data) else {
306 warn!("failed to parse event");
307 return
308 };
309
310 debug!("event: {:?}", &event);
311 }
292} 312}
293 313
294fn checksum(buf: &[u8]) -> u16 { 314fn checksum(buf: &[u8]) -> u16 {