stm32f7/h7/l4 OTG host: Adam porters fix for STM32 FS/HS probably should be applied to STM32 F7, H7, and L4 OTG host which are very similar.
This commit is contained in:
parent
5b4516d291
commit
726ea3c8a9
@ -2200,6 +2200,7 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
|
|||||||
size_t xfrlen;
|
size_t xfrlen;
|
||||||
ssize_t xfrd;
|
ssize_t xfrd;
|
||||||
int ret;
|
int ret;
|
||||||
|
bool zlp;
|
||||||
|
|
||||||
/* Loop until the transfer completes (i.e., buflen is decremented to zero)
|
/* Loop until the transfer completes (i.e., buflen is decremented to zero)
|
||||||
* or a fatal error occurs (any error other than a simple NAK)
|
* or a fatal error occurs (any error other than a simple NAK)
|
||||||
@ -2208,8 +2209,9 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
|
|||||||
chan = &priv->chan[chidx];
|
chan = &priv->chan[chidx];
|
||||||
start = clock_systimer();
|
start = clock_systimer();
|
||||||
xfrd = 0;
|
xfrd = 0;
|
||||||
|
zlp = (buflen == 0);
|
||||||
|
|
||||||
while (buflen > 0)
|
while (buflen > 0 || zlp)
|
||||||
{
|
{
|
||||||
/* Transfer one packet at a time. The hardware is capable of queueing
|
/* Transfer one packet at a time. The hardware is capable of queueing
|
||||||
* multiple OUT packets, but I just haven't figured out how to handle
|
* multiple OUT packets, but I just haven't figured out how to handle
|
||||||
@ -2286,6 +2288,7 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
|
|||||||
buffer += xfrlen;
|
buffer += xfrlen;
|
||||||
buflen -= xfrlen;
|
buflen -= xfrlen;
|
||||||
xfrd += chan->xfrd;
|
xfrd += chan->xfrd;
|
||||||
|
zlp = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2205,6 +2205,7 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
|
|||||||
size_t xfrlen;
|
size_t xfrlen;
|
||||||
ssize_t xfrd;
|
ssize_t xfrd;
|
||||||
int ret;
|
int ret;
|
||||||
|
bool zlp;
|
||||||
|
|
||||||
/* Loop until the transfer completes (i.e., buflen is decremented to zero)
|
/* Loop until the transfer completes (i.e., buflen is decremented to zero)
|
||||||
* or a fatal error occurs (any error other than a simple NAK)
|
* or a fatal error occurs (any error other than a simple NAK)
|
||||||
@ -2213,8 +2214,9 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
|
|||||||
chan = &priv->chan[chidx];
|
chan = &priv->chan[chidx];
|
||||||
start = clock_systimer();
|
start = clock_systimer();
|
||||||
xfrd = 0;
|
xfrd = 0;
|
||||||
|
zlp = (buflen == 0);
|
||||||
|
|
||||||
while (buflen > 0)
|
while (buflen > 0 || zlp)
|
||||||
{
|
{
|
||||||
/* Transfer one packet at a time. The hardware is capable of queueing
|
/* Transfer one packet at a time. The hardware is capable of queueing
|
||||||
* multiple OUT packets, but I just haven't figured out how to handle
|
* multiple OUT packets, but I just haven't figured out how to handle
|
||||||
@ -2291,6 +2293,7 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
|
|||||||
buffer += xfrlen;
|
buffer += xfrlen;
|
||||||
buflen -= xfrlen;
|
buflen -= xfrlen;
|
||||||
xfrd += chan->xfrd;
|
xfrd += chan->xfrd;
|
||||||
|
zlp = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2205,6 +2205,7 @@ static ssize_t stm32l4_out_transfer(FAR struct stm32l4_usbhost_s *priv,
|
|||||||
size_t xfrlen;
|
size_t xfrlen;
|
||||||
ssize_t xfrd;
|
ssize_t xfrd;
|
||||||
int ret;
|
int ret;
|
||||||
|
bool zlp;
|
||||||
|
|
||||||
/* Loop until the transfer completes (i.e., buflen is decremented to zero)
|
/* Loop until the transfer completes (i.e., buflen is decremented to zero)
|
||||||
* or a fatal error occurs (any error other than a simple NAK)
|
* or a fatal error occurs (any error other than a simple NAK)
|
||||||
@ -2213,8 +2214,9 @@ static ssize_t stm32l4_out_transfer(FAR struct stm32l4_usbhost_s *priv,
|
|||||||
chan = &priv->chan[chidx];
|
chan = &priv->chan[chidx];
|
||||||
start = clock_systimer();
|
start = clock_systimer();
|
||||||
xfrd = 0;
|
xfrd = 0;
|
||||||
|
zlp = (buflen == 0);
|
||||||
|
|
||||||
while (buflen > 0)
|
while (buflen > 0 || zlp)
|
||||||
{
|
{
|
||||||
/* Transfer one packet at a time. The hardware is capable of queueing
|
/* Transfer one packet at a time. The hardware is capable of queueing
|
||||||
* multiple OUT packets, but I just haven't figured out how to handle
|
* multiple OUT packets, but I just haven't figured out how to handle
|
||||||
@ -2291,6 +2293,7 @@ static ssize_t stm32l4_out_transfer(FAR struct stm32l4_usbhost_s *priv,
|
|||||||
buffer += xfrlen;
|
buffer += xfrlen;
|
||||||
buflen -= xfrlen;
|
buflen -= xfrlen;
|
||||||
xfrd += chan->xfrd;
|
xfrd += chan->xfrd;
|
||||||
|
zlp = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user