aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Freeman <benjamin@snootlab.com>2019-02-14 12:40:04 +0100
committerKévin Redon <kredon@sysmocom.de>2019-02-14 12:48:56 +0100
commitf278032e9fc703f9409d85cc5feea4d24820870f (patch)
tree3688d028dbbb9bc6770add07be07ebe345239ed6
parent26037ab23bce97c08a64282ed62df76a4874f470 (diff)
fix USB transfer
this ASFv4 USB library change fixes USB transfer. two transfer-size issues existed: - on multi-packet transfer if the last packet was less than the USB transfer packet size, the packet would be received but not acknowledged - during normal transfer the packet size of a previous packet set the size of the current packet, ignoring the actual transfer size transfer with a combination of partial or full USB single packet, USB multi-packet, max transfer, and control endpoint sizes was successfully tested (in bytes): 4, 32, 64, 128, 129, 512, 516, 544, 576, 640, 641, 1024, 1028 Change-Id: Ic4e64168e865362e12e0b76386f964895b8b6c20
-rw-r--r--hpl/usb/hpl_usb.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/hpl/usb/hpl_usb.c b/hpl/usb/hpl_usb.c
index 6bf09ab..cc6cc41 100644
--- a/hpl/usb/hpl_usb.c
+++ b/hpl/usb/hpl_usb.c
@@ -1135,6 +1135,7 @@ static void _usb_d_dev_out_next(struct _usb_d_dev_ep *ept, bool isr)
/* Short packet. */
ept->flags.bits.need_zlp = 0;
ept->trans_count += last_trans;
+ _usbd_ep_set_out_trans(epn, 0, ept->size, 0);
} else {
/* Full packets. */
ept->trans_count += trans_size;
@@ -1154,9 +1155,6 @@ static void _usb_d_dev_out_next(struct _usb_d_dev_ep *ept, bool isr)
if (trans_next > ept->size) {
if (trans_next > USB_D_DEV_TRANS_MAX) {
trans_next = USB_D_DEV_TRANS_MAX;
- } else {
- /* Must expect multiple of ep size. */
- trans_next -= trans_next & size_mask;
}
} else if (trans_next < ept->size) {
/* Last un-aligned packet should be cached. */