From 1bb6e455bd8de70a6132dfea19811e7cbecba479 Mon Sep 17 00:00:00 2001 From: Ulf Lilleengen Date: Fri, 6 Dec 2024 15:47:21 +0100 Subject: [PATCH] Keep track of raw fd used for net data --- embassy-net-nrf91/src/lib.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/embassy-net-nrf91/src/lib.rs b/embassy-net-nrf91/src/lib.rs index d8878f147..3abe2c766 100644 --- a/embassy-net-nrf91/src/lib.rs +++ b/embassy-net-nrf91/src/lib.rs @@ -198,6 +198,7 @@ async fn new_internal<'a>( cb, requests: [const { None }; REQ_COUNT], next_req_serial: 0x12345678, + net_fd: None, rx_control_list: ptr::null_mut(), rx_data_list: ptr::null_mut(), @@ -305,6 +306,8 @@ struct StateInner { requests: [Option; REQ_COUNT], next_req_serial: u32, + net_fd: Option, + rx_control_list: *mut List, rx_data_list: *mut List, rx_seq_no: u16, @@ -885,6 +888,8 @@ impl<'a> Control<'a> { assert_eq!(status, 0); assert_eq!(msg.param_len, 16); let fd = u32::from_le_bytes(msg.param[12..16].try_into().unwrap()); + self.state.borrow_mut().net_fd.replace(fd); + trace!("got FD: {}", fd); fd } @@ -924,16 +929,17 @@ impl<'a> Runner<'a> { state.poll(&mut self.trace_writer, &mut self.ch); if let Poll::Ready(buf) = self.ch.poll_tx_buf(cx) { - let fd = 128u32; // TODO unhardcode - let mut msg: Message = unsafe { mem::zeroed() }; - msg.channel = 2; // data - msg.id = 0x7006_0004; // IP send - msg.param_len = 12; - msg.param[4..8].copy_from_slice(&fd.to_le_bytes()); - if let Err(e) = state.send_message(&mut msg, buf) { - warn!("tx failed: {:?}", e); + if let Some(fd) = state.net_fd { + let mut msg: Message = unsafe { mem::zeroed() }; + msg.channel = 2; // data + msg.id = 0x7006_0004; // IP send + msg.param_len = 12; + msg.param[4..8].copy_from_slice(&fd.to_le_bytes()); + if let Err(e) = state.send_message(&mut msg, buf) { + warn!("tx failed: {:?}", e); + } + self.ch.tx_done(); } - self.ch.tx_done(); } Poll::Pending