diff options
| author | Ulf Lilleengen <[email protected]> | 2024-12-06 15:47:21 +0100 |
|---|---|---|
| committer | Ulf Lilleengen <[email protected]> | 2024-12-06 15:47:21 +0100 |
| commit | 1bb6e455bd8de70a6132dfea19811e7cbecba479 (patch) | |
| tree | 5d6b3c9bd89fc40295a4ee22696e840ac53ce3f6 | |
| parent | 25ac7a4dc88b636db7cf304c57c2e729dad3d560 (diff) | |
Keep track of raw fd used for net data
| -rw-r--r-- | embassy-net-nrf91/src/lib.rs | 24 |
1 files 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>( | |||
| 198 | cb, | 198 | cb, |
| 199 | requests: [const { None }; REQ_COUNT], | 199 | requests: [const { None }; REQ_COUNT], |
| 200 | next_req_serial: 0x12345678, | 200 | next_req_serial: 0x12345678, |
| 201 | net_fd: None, | ||
| 201 | 202 | ||
| 202 | rx_control_list: ptr::null_mut(), | 203 | rx_control_list: ptr::null_mut(), |
| 203 | rx_data_list: ptr::null_mut(), | 204 | rx_data_list: ptr::null_mut(), |
| @@ -305,6 +306,8 @@ struct StateInner { | |||
| 305 | requests: [Option<PendingRequest>; REQ_COUNT], | 306 | requests: [Option<PendingRequest>; REQ_COUNT], |
| 306 | next_req_serial: u32, | 307 | next_req_serial: u32, |
| 307 | 308 | ||
| 309 | net_fd: Option<u32>, | ||
| 310 | |||
| 308 | rx_control_list: *mut List, | 311 | rx_control_list: *mut List, |
| 309 | rx_data_list: *mut List, | 312 | rx_data_list: *mut List, |
| 310 | rx_seq_no: u16, | 313 | rx_seq_no: u16, |
| @@ -885,6 +888,8 @@ impl<'a> Control<'a> { | |||
| 885 | assert_eq!(status, 0); | 888 | assert_eq!(status, 0); |
| 886 | assert_eq!(msg.param_len, 16); | 889 | assert_eq!(msg.param_len, 16); |
| 887 | let fd = u32::from_le_bytes(msg.param[12..16].try_into().unwrap()); | 890 | let fd = u32::from_le_bytes(msg.param[12..16].try_into().unwrap()); |
| 891 | self.state.borrow_mut().net_fd.replace(fd); | ||
| 892 | |||
| 888 | trace!("got FD: {}", fd); | 893 | trace!("got FD: {}", fd); |
| 889 | fd | 894 | fd |
| 890 | } | 895 | } |
| @@ -924,16 +929,17 @@ impl<'a> Runner<'a> { | |||
| 924 | state.poll(&mut self.trace_writer, &mut self.ch); | 929 | state.poll(&mut self.trace_writer, &mut self.ch); |
| 925 | 930 | ||
| 926 | if let Poll::Ready(buf) = self.ch.poll_tx_buf(cx) { | 931 | if let Poll::Ready(buf) = self.ch.poll_tx_buf(cx) { |
| 927 | let fd = 128u32; // TODO unhardcode | 932 | if let Some(fd) = state.net_fd { |
| 928 | let mut msg: Message = unsafe { mem::zeroed() }; | 933 | let mut msg: Message = unsafe { mem::zeroed() }; |
| 929 | msg.channel = 2; // data | 934 | msg.channel = 2; // data |
| 930 | msg.id = 0x7006_0004; // IP send | 935 | msg.id = 0x7006_0004; // IP send |
| 931 | msg.param_len = 12; | 936 | msg.param_len = 12; |
| 932 | msg.param[4..8].copy_from_slice(&fd.to_le_bytes()); | 937 | msg.param[4..8].copy_from_slice(&fd.to_le_bytes()); |
| 933 | if let Err(e) = state.send_message(&mut msg, buf) { | 938 | if let Err(e) = state.send_message(&mut msg, buf) { |
| 934 | warn!("tx failed: {:?}", e); | 939 | warn!("tx failed: {:?}", e); |
| 940 | } | ||
| 941 | self.ch.tx_done(); | ||
| 935 | } | 942 | } |
| 936 | self.ch.tx_done(); | ||
| 937 | } | 943 | } |
| 938 | 944 | ||
| 939 | Poll::Pending | 945 | Poll::Pending |
