aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Johnston <[email protected]>2025-08-11 15:18:31 +0800
committerDario Nieuwenhuis <[email protected]>2025-09-05 16:35:54 +0200
commitbc448985d50827bd5c6211739563817795f925ab (patch)
tree3146772687b2d45b28043d386c8f7d59ef65222b
parent4ac4452c16e1b75bcf70814a9530b7724cc16e7d (diff)
otg: Simplify chunks_exact for tx
The last chunk doesn't need to be created first, instead borrow the iterator so it can be used later for the remainder.
-rw-r--r--embassy-usb-synopsys-otg/src/lib.rs20
1 files changed, 8 insertions, 12 deletions
diff --git a/embassy-usb-synopsys-otg/src/lib.rs b/embassy-usb-synopsys-otg/src/lib.rs
index 9d74c046d..b226bc8af 100644
--- a/embassy-usb-synopsys-otg/src/lib.rs
+++ b/embassy-usb-synopsys-otg/src/lib.rs
@@ -1229,23 +1229,19 @@ impl<'d> embassy_usb_driver::EndpointIn for Endpoint<'d, In> {
1229 }); 1229 });
1230 1230
1231 // Write data to FIFO 1231 // Write data to FIFO
1232 let chunks = buf.chunks_exact(4);
1233 // Stash the last partial chunk
1234 let rem = chunks.remainder();
1235 let last_chunk = (!rem.is_empty()).then(|| {
1236 let mut tmp = [0u8; 4];
1237 tmp[0..rem.len()].copy_from_slice(rem);
1238 u32::from_ne_bytes(tmp)
1239 });
1240
1241 let fifo = self.regs.fifo(index); 1232 let fifo = self.regs.fifo(index);
1242 for chunk in chunks { 1233 let mut chunks = buf.chunks_exact(4);
1234 for chunk in &mut chunks {
1243 let val = u32::from_ne_bytes(chunk.try_into().unwrap()); 1235 let val = u32::from_ne_bytes(chunk.try_into().unwrap());
1244 fifo.write_value(regs::Fifo(val)); 1236 fifo.write_value(regs::Fifo(val));
1245 } 1237 }
1246 // Write any last chunk 1238 // Write any last chunk
1247 if let Some(val) = last_chunk { 1239 let rem = chunks.remainder();
1248 fifo.write_value(regs::Fifo(val)); 1240 if !rem.is_empty() {
1241 let mut tmp = [0u8; 4];
1242 tmp[0..rem.len()].copy_from_slice(rem);
1243 let tmp = u32::from_ne_bytes(tmp);
1244 fifo.write_value(regs::Fifo(tmp));
1249 } 1245 }
1250 }); 1246 });
1251 1247