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
This commit is contained in:
parent
a672cb4258
commit
84acbd6ae7
@ -970,15 +970,18 @@ static int dm320_wrrequest(struct dm320_ep_s *privep)
|
|||||||
* bytes to send.
|
* bytes to send.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
privep->txnullpkt = 0;
|
||||||
if (bytesleft > privep->ep.maxpacket)
|
if (bytesleft > privep->ep.maxpacket)
|
||||||
{
|
{
|
||||||
nbytes = privep->ep.maxpacket;
|
nbytes = privep->ep.maxpacket;
|
||||||
privep->txnullpkt = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nbytes = bytesleft;
|
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 */
|
/* 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
|
* 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);
|
usbtrace(TRACE_COMPLETE(privep->epphy), privreq->req.xfrd);
|
||||||
privep->txnullpkt = 0;
|
privep->txnullpkt = 0;
|
||||||
|
@ -1062,15 +1062,18 @@ static int lpc214x_wrrequest(struct lpc214x_ep_s *privep)
|
|||||||
* bytes to send.
|
* bytes to send.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
privep->txnullpkt = 0;
|
||||||
if (bytesleft > privep->ep.maxpacket)
|
if (bytesleft > privep->ep.maxpacket)
|
||||||
{
|
{
|
||||||
nbytes = privep->ep.maxpacket;
|
nbytes = privep->ep.maxpacket;
|
||||||
privep->txnullpkt = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nbytes = bytesleft;
|
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 */
|
/* 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
|
* 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);
|
usbtrace(TRACE_COMPLETE(privep->epphy), privreq->req.xfrd);
|
||||||
privep->txnullpkt = 0;
|
privep->txnullpkt = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user