From 032393ae43693010d2937bf9bd3c4ff98018ffd9 Mon Sep 17 00:00:00 2001 From: patacongo Date: Sat, 25 Oct 2008 14:40:01 +0000 Subject: [PATCH] Fix to handle requests larger than maxpacket git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1076 42af7a65-404d-4744-a932-0658087f49c3 --- arch/arm/src/dm320/dm320_usbdev.c | 9 ++++++--- arch/arm/src/lpc214x/lpc214x_usbdev.c | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/arch/arm/src/dm320/dm320_usbdev.c b/arch/arm/src/dm320/dm320_usbdev.c index 1411a44120..46cbb654ac 100644 --- a/arch/arm/src/dm320/dm320_usbdev.c +++ b/arch/arm/src/dm320/dm320_usbdev.c @@ -970,15 +970,18 @@ static int dm320_wrrequest(struct dm320_ep_s *privep) * bytes to send. */ + privep->txnullpkt = 0; if (bytesleft > privep->ep.maxpacket) { nbytes = privep->ep.maxpacket; - privep->txnullpkt = 0; } else { nbytes = bytesleft; - privep->txnullpkt = (bytesleft == privep->ep.maxpacket); + if ((privreq->req.flags & USBDEV_REQFLAGS_NULLPKT) != 0) + { + privep->txnullpkt = (bytesleft == privep->ep.maxpacket); + } } /* Send the largest number of bytes that we can in this packet */ @@ -1000,7 +1003,7 @@ static int dm320_wrrequest(struct dm320_ep_s *privep) * then we are finished with the transfer */ - if (bytesleft <= 0 || !privep->txnullpkt) + if (bytesleft <= 0 && !privep->txnullpkt) { usbtrace(TRACE_COMPLETE(privep->epphy), privreq->req.xfrd); privep->txnullpkt = 0; diff --git a/arch/arm/src/lpc214x/lpc214x_usbdev.c b/arch/arm/src/lpc214x/lpc214x_usbdev.c index de0a5ec0cf..cb220cc1bb 100644 --- a/arch/arm/src/lpc214x/lpc214x_usbdev.c +++ b/arch/arm/src/lpc214x/lpc214x_usbdev.c @@ -1062,15 +1062,18 @@ static int lpc214x_wrrequest(struct lpc214x_ep_s *privep) * bytes to send. */ + privep->txnullpkt = 0; if (bytesleft > privep->ep.maxpacket) { nbytes = privep->ep.maxpacket; - privep->txnullpkt = 0; } else { nbytes = bytesleft; - privep->txnullpkt = (bytesleft == privep->ep.maxpacket); + if ((privreq->req.flags & USBDEV_REQFLAGS_NULLPKT) != 0) + { + privep->txnullpkt = (bytesleft == privep->ep.maxpacket); + } } /* Send the largest number of bytes that we can in this packet */ @@ -1087,7 +1090,7 @@ static int lpc214x_wrrequest(struct lpc214x_ep_s *privep) * then we are finished with the transfer */ - if (bytesleft <= 0 || !privep->txnullpkt) + if (bytesleft <= 0 && !privep->txnullpkt) { usbtrace(TRACE_COMPLETE(privep->epphy), privreq->req.xfrd); privep->txnullpkt = 0;