Fix PIC32 USB double buffer toggle
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4492 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
68a84f92b3
commit
ea932c224a
@ -2259,31 +2259,17 @@ static void pic32mx_ep0incomplete(struct pic32mx_usbdev_s *priv)
|
||||
{
|
||||
struct pic32mx_ep_s *ep0 = &priv->eplist[EP0];
|
||||
volatile struct usbotg_bdtentry_s *bdtlast;
|
||||
volatile struct usbotg_bdtentry_s *bdtnext;
|
||||
int ret;
|
||||
|
||||
/* Get the last and the next IN BDT */
|
||||
/* Get the last BDT and make sure that we own it. */
|
||||
|
||||
bdtlast = ep0->bdtin;
|
||||
if (bdtlast == &g_bdt[EP0_IN_EVEN])
|
||||
{
|
||||
bdtnext = &g_bdt[EP0_IN_ODD];
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUGASSERT(bdtlast == &g_bdt[EP0_IN_ODD]);
|
||||
bdtnext = &g_bdt[EP0_IN_EVEN];
|
||||
}
|
||||
|
||||
/* Make sure that we own the last BDT. */
|
||||
|
||||
bdtlast->status = 0;
|
||||
bdtlast->addr = 0;
|
||||
|
||||
/* Save the next BDT as the current BDT */
|
||||
|
||||
ep0->bdtin = bdtnext;
|
||||
|
||||
/* Are we processing the completion of one packet of an outgoing request
|
||||
* from the class driver?
|
||||
*/
|
||||
@ -2292,6 +2278,9 @@ static void pic32mx_ep0incomplete(struct pic32mx_usbdev_s *priv)
|
||||
{
|
||||
/* An outgoing EP0 transfer has completed. Update the byte count and
|
||||
* check for the completion of the transfer.
|
||||
*
|
||||
* NOTE: pic32mx_wrcomplete() will toggle bdtin to the other buffer so
|
||||
* we do not need to that for this case.
|
||||
*/
|
||||
|
||||
pic32mx_wrcomplete(priv, &priv->eplist[EP0]);
|
||||
@ -2318,6 +2307,18 @@ static void pic32mx_ep0incomplete(struct pic32mx_usbdev_s *priv)
|
||||
|
||||
else if (priv->ctrlstate == CTRLSTATE_WAITSETUP)
|
||||
{
|
||||
/* Get the next IN BDT */
|
||||
|
||||
if (bdtlast == &g_bdt[EP0_IN_EVEN])
|
||||
{
|
||||
ep0->bdtin = &g_bdt[EP0_IN_ODD];
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUGASSERT(bdtlast == &g_bdt[EP0_IN_ODD]);
|
||||
ep0->bdtin = &g_bdt[EP0_IN_EVEN];
|
||||
}
|
||||
|
||||
/* Look at the saved SETUP command. Was it a SET ADDRESS request?
|
||||
* If so, then now is the time to set the address.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user