Skip to content

Commit 18ba92e

Browse files
committed
Try to read and send the requested data in chunks
1 parent 235084e commit 18ba92e

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

main.c

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -196,33 +196,39 @@ static void command_loop(void)
196196
uint32_t slen, rlen;
197197
readbytes_blocking(&slen, 3); // Read send length
198198
readbytes_blocking(&rlen, 3); // Read receive length
199-
slen &= 0x00FFFFFF; // Mask to zero out the upper 8 bits
200-
rlen &= 0x00FFFFFF; // Mask to zero out the upper 8 bitsgi
199+
slen &= 0x00FFFFFF; // Mask to use only the lower 24 bits
200+
rlen &= 0x00FFFFFF; // Mask to use only the lower 24 bits
201201

202202
uint8_t tx_buffer[MAX_BUFFER_SIZE]; // Buffer for transmit data
203203
uint8_t rx_buffer[MAX_BUFFER_SIZE]; // Buffer for receive data
204204

205+
// Handle error for oversized slen
206+
if (slen > MAX_BUFFER_SIZE) {
207+
sendbyte_blocking(S_NAK);
208+
break;
209+
}
210+
205211
// Read data to be sent (if slen > 0)
206212
if (slen > 0) {
207213
readbytes_blocking(tx_buffer, slen);
214+
cs_select(SPI_CS);
215+
spi_write_blocking(SPI_IF, tx_buffer, slen);
216+
cs_deselect(SPI_CS);
208217
}
209218

219+
// Send ACK after handling slen
210220
sendbyte_blocking(S_ACK);
211221

212-
if (slen > 0) {
213-
spi_write_blocking(SPI_IF, tx_buffer, slen);
214-
}
222+
// Handle rlen in chunks
223+
while (rlen > 0) {
224+
uint32_t chunk_size = (rlen < MAX_BUFFER_SIZE) ? rlen : MAX_BUFFER_SIZE;
215225

216-
// Perform SPI operation in chunks
217-
while(rlen > MAX_BUFFER_SIZE) {
218226
cs_select(SPI_CS);
219-
spi_read_blocking(SPI_IF, 0, rx_buffer, MAX_BUFFER_SIZE);
227+
spi_read_blocking(SPI_IF, 0, rx_buffer, chunk_size);
220228
cs_deselect(SPI_CS);
221229

222-
// Send ACK followed by received data
223-
sendbytes_blocking(rx_buffer, MAX_BUFFER_SIZE);
224-
225-
rlen -= MAX_BUFFER_SIZE;
230+
sendbytes_blocking(rx_buffer, chunk_size);
231+
rlen -= chunk_size;
226232
}
227233

228234
break;

0 commit comments

Comments
 (0)