USB Library
USBDeferOUTDataStage Function
Syntax
void USBDeferOUTDataStage();
Preconditions

Before calling USBDeferOUTDataStage(), the firmware should first verify that the control transfer has a data stage, and that it is of type host-to-device (OUT).

Remarks

Section 9.2.6 of the official USB 2.0 specifications indicates that the USB device must be able to receive all bytes and complete the control transfer within a maximum of 5 seconds. 

If the firmware calls USBDeferOUTDataStage(), it must eventually call USBEP0Receive(), and then call USBCtrlEPAllowDataStage(). If it does not do this, the control transfer will never be able to complete. This will break the USB connection, as the host needs to be able to communicate over EP0, in order to perform basic tasks including enumeration. 

The firmware should never call both USBDeferINDataStage() and USBDeferOUTDataStage() during the same control transfer. These functions are mutually exclusive (a control transfer with data stage can never contain both IN and OUT data packets during the data stage).

MLA - USB Library Help Version : 2.16
http://www.microchip.com/mla