Просмотр исходного кода

Included size check for ISO buffers

Nicholas R Dinsmore 5 лет назад
Родитель
Сommit
27f4b6f5a4
1 измененных файлов с 11 добавлено и 3 удалено
  1. 11 3
      src/portable/raspberrypi/rp2040/rp2040_usb.c

+ 11 - 3
src/portable/raspberrypi/rp2040/rp2040_usb.c

@@ -156,13 +156,12 @@ void _hw_endpoint_xfer_start(struct hw_endpoint *ep, uint8_t *buffer, uint16_t t
     // FIXME: What if low speed
     if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS)
     {
-        ep->transfer_size = total_len; //There is an assumption that the max buffer size of 1023 or 1024 was checked before this
+        ep->transfer_size = total_len > ep->wMaxPacketSize ? ep->wMaxPacketSize : total_len; 
     }
     else
     {
         ep->transfer_size = total_len > 64 ? 64 : total_len;
     }
-    ep->transfer_size = total_len > 64 ? 64 : total_len;
     ep->active = true;
     ep->user_buf = buffer;
     // Recalculate if this is the last buffer
@@ -240,7 +239,16 @@ bool _hw_endpoint_xfer_continue(struct hw_endpoint *ep)
 
     // Now we have synced our state with the hardware. Is there more data to transfer?
     uint remaining_bytes = ep->total_len - ep->len;
-    ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes;
+    // ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes;
+
+    if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS)
+    {
+        ep->transfer_size = remaining_bytes > ep->wMaxPacketSize ? ep->wMaxPacketSize : remaining_bytes;
+    }
+    else
+    {
+        ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes;
+    }
     _hw_endpoint_update_last_buf(ep);
 
     // Can happen because of programmer error so check for it