mirror of
https://github.com/polhenarejos/pico-keys-sdk
synced 2026-05-11 09:48:24 +02:00
Fix writing large usb buffers.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
@@ -46,14 +46,15 @@ void usb_set_timeout_counter(uint32_t v) {
|
|||||||
|
|
||||||
uint32_t usb_write_offset(uint16_t len, uint16_t offset) {
|
uint32_t usb_write_offset(uint16_t len, uint16_t offset) {
|
||||||
uint8_t pkt_max = 64;
|
uint8_t pkt_max = 64;
|
||||||
|
int w = 0;
|
||||||
if (len > sizeof(tx_buffer))
|
if (len > sizeof(tx_buffer))
|
||||||
len = sizeof(tx_buffer);
|
len = sizeof(tx_buffer);
|
||||||
w_len = len;
|
w_len = len;
|
||||||
tx_r_offset = offset;
|
tx_r_offset = offset;
|
||||||
driver_write(tx_buffer+offset, MIN(len, pkt_max));
|
w = driver_write(tx_buffer+offset, MIN(len, pkt_max));
|
||||||
w_len -= MIN(len, pkt_max);
|
w_len -= w;
|
||||||
tx_r_offset += MIN(len, pkt_max);
|
tx_r_offset += w;
|
||||||
return MIN(w_len, pkt_max);
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t usb_rx(const uint8_t *buffer, size_t len) {
|
size_t usb_rx(const uint8_t *buffer, size_t len) {
|
||||||
@@ -69,12 +70,13 @@ size_t usb_rx(const uint8_t *buffer, size_t len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32_t usb_write_flush() {
|
uint32_t usb_write_flush() {
|
||||||
if (w_len > 0) {
|
int w = 0;
|
||||||
driver_write(tx_buffer+tx_r_offset, MIN(w_len, 64));
|
if (w_len > 0 && tud_vendor_write_available() > 0) {
|
||||||
tx_r_offset += MIN(w_len, 64);
|
w = driver_write(tx_buffer+tx_r_offset, MIN(w_len, 64));
|
||||||
w_len -= MIN(w_len, 64);
|
tx_r_offset += w;
|
||||||
|
w_len -= w;
|
||||||
}
|
}
|
||||||
return w_len;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t usb_write(uint16_t len) {
|
uint32_t usb_write(uint16_t len) {
|
||||||
|
|||||||
Reference in New Issue
Block a user