I've found that this works. Any reason not to do this?
//Use this to cancel any outgoing USB transfers on a given pipe
uint8_t WinUsbClearSendPipe( uint_8 controller_ID, uint_8 ep_num)
{
uint8_t status = USB_DCI_Cancel_Transfer(controller_ID, ep_num, USB_SEND);
//Attempt to cancel transfer and update the consumer pointer
if(status == USB_OK)
{
uint8_t index = USB_Map_Ep_To_Struct_Index(controller_ID, ep_num);
g_winusb_endpoint_data.ep[index].bin_consumer++;
}
return status;
}