diff options
| -rw-r--r-- | embassy-usb-synopsys-otg/src/lib.rs | 20 |
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 | ||
