Skip to content

Commit b2ca65f

Browse files
committed
fix: Address Copilot code review feedback
- Fix channel protocol by calling send().await before send_done() - Handle resize() errors explicitly instead of ignoring with .ok() - Fix incorrect error message 'SBustype ACK' -> 'OSpiOp ACK' - Replace try_into().unwrap() with direct 'as u16' cast for USB buffer size Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
1 parent c6d9c39 commit b2ca65f

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

bluepill-prog/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ async fn main(spawner: Spawner) {
133133
let serprog_class = {
134134
static STATE: StaticCell<State> = StaticCell::new();
135135
let state = STATE.init(State::new());
136-
CdcAcmClass::new(&mut builder, state, USB_BUFFER_SIZE.try_into().unwrap())
136+
CdcAcmClass::new(&mut builder, state, USB_BUFFER_SIZE as u16)
137137
};
138138

139139
let usb = builder.build();

picoprog/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ async fn main(spawner: Spawner) {
107107
let uart_class = {
108108
static STATE: StaticCell<State> = StaticCell::new();
109109
let state = STATE.init(State::new());
110-
CdcAcmClass::new(&mut builder, state, USB_BUFFER_SIZE.try_into().unwrap())
110+
CdcAcmClass::new(&mut builder, state, USB_BUFFER_SIZE as u16)
111111
};
112112

113113
let serprog_class = {
114114
static STATE: StaticCell<State> = StaticCell::new();
115115
let state = STATE.init(State::new());
116-
CdcAcmClass::new(&mut builder, state, USB_BUFFER_SIZE.try_into().unwrap())
116+
CdcAcmClass::new(&mut builder, state, USB_BUFFER_SIZE as u16)
117117
};
118118

119119
let usb = builder.build();

serprog/src/lib.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,14 +217,17 @@ async fn ospiop_usb_task<T: Transport<TRANSFER_SIZE>, const TRANSFER_SIZE: usize
217217
// First block - already contains header + initial data, send as-is
218218
let mut data_to_read = sdata_size;
219219
let first_block_data_size = data_to_read.min(TRANSFER_SIZE - 6);
220+
// Acquire the pre-populated buffer per channel protocol, but do not modify it.
221+
let _ = sender.send().await;
220222
sender.send_done();
221223
data_to_read -= first_block_data_size;
222224

223225
while data_to_read > 0 {
224226
let read_size = data_to_read.min(TRANSFER_SIZE);
225227
let buf = sender.send().await;
226228
buf.clear();
227-
buf.resize(read_size, 0).ok();
229+
buf.resize(read_size, 0)
230+
.map_err(|_| SerprogError::TransportRead("Error resizing OSpiOp read buffer"))?;
228231
transport
229232
.read(buf.as_mut_slice())
230233
.await
@@ -235,7 +238,7 @@ async fn ospiop_usb_task<T: Transport<TRANSFER_SIZE>, const TRANSFER_SIZE: usize
235238
transport
236239
.write(&[S_ACK])
237240
.await
238-
.map_err(|_| SerprogError::TransportWrite("Error writing SBustype ACK"))?;
241+
.map_err(|_| SerprogError::TransportWrite("Error writing OSpiOp ACK"))?;
239242

240243
let mut data_to_send = rdata_size;
241244
while data_to_send > 0 {
@@ -289,7 +292,8 @@ async fn ospiop_spi_task<SPI: SpiBus<u8>, CS: OutputPin, const TRANSFER_SIZE: us
289292
let buf = sender.send().await;
290293
buf.clear();
291294
let read_size = data_to_read.min(TRANSFER_SIZE);
292-
buf.resize(read_size, 0).ok();
295+
buf.resize(read_size, 0)
296+
.map_err(|_| SerprogError::SpiTransfer("Error resizing OSpiOp SPI read buffer"))?;
293297
spi.read(buf.as_mut_slice())
294298
.await
295299
.map_err(|_| SerprogError::SpiTransfer("Error reading OSpiOp data"))?;
@@ -444,7 +448,9 @@ where
444448

445449
// Read directly into the first channel buffer
446450
let mut usb_rx_spi_tx_buf = [const { Vec::<u8, TRANSFER_SIZE>::new() }; 4];
447-
usb_rx_spi_tx_buf[0].resize(TRANSFER_SIZE, 0).ok();
451+
usb_rx_spi_tx_buf[0]
452+
.resize(TRANSFER_SIZE, 0)
453+
.map_err(|_| SerprogError::TransportRead("Error resizing OSpiOp buffer"))?;
448454
self.transport
449455
.read(usb_rx_spi_tx_buf[0].as_mut_slice())
450456
.await

0 commit comments

Comments
 (0)