uint8_t Endpoint_Discard_Stream(uint16_t Length #if !defined(NO_STREAM_CALLBACKS) , uint8_t (* const Callback)(void) #endif ) { uint8_t ErrorCode; if ((ErrorCode = Endpoint_WaitUntilReady())) return ErrorCode; while (Length--) { if (!(Endpoint_ReadWriteAllowed())) { Endpoint_ClearCurrentBank(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) return ENDPOINT_RWSTREAM_ERROR_CallbackAborted; #endif if ((ErrorCode = Endpoint_WaitUntilReady())) return ErrorCode; } Endpoint_Discard_Byte(); } return ENDPOINT_RWSTREAM_ERROR_NoError; }
uint8_t Endpoint_Discard_Stream(uint16_t Length, uint16_t* const BytesProcessed) { uint8_t ErrorCode; uint16_t BytesInTransfer = 0; if ((ErrorCode = Endpoint_WaitUntilReady())) return ErrorCode; if (BytesProcessed != NULL) Length -= *BytesProcessed; while (Length) { if (!(Endpoint_IsReadWriteAllowed())) { Endpoint_ClearOUT(); if (BytesProcessed != NULL) { *BytesProcessed += BytesInTransfer; return ENDPOINT_RWSTREAM_IncompleteTransfer; } if ((ErrorCode = Endpoint_WaitUntilReady())) return ErrorCode; } else { Endpoint_Discard_Byte(); Length--; BytesInTransfer++; } } return ENDPOINT_RWSTREAM_NoError; }
uint8_t Endpoint_Discard_Stream(uint16_t Length #if !defined(NO_STREAM_CALLBACKS) , StreamCallbackPtr_t Callback #endif ) { uint8_t ErrorCode; if ((ErrorCode = Endpoint_WaitUntilReady())) return ErrorCode; #if defined(FAST_STREAM_TRANSFERS) uint8_t BytesRemToAlignment = (Endpoint_BytesInEndpoint() & 0x07); if (Length >= 8) { Length -= BytesRemToAlignment; switch (BytesRemToAlignment) { default: do { if (!(Endpoint_IsReadWriteAllowed())) { Endpoint_ClearOUT(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) return ENDPOINT_RWSTREAM_CallbackAborted; #endif if ((ErrorCode = Endpoint_WaitUntilReady())) return ErrorCode; } Length -= 8; Endpoint_Discard_Byte(); case 7: Endpoint_Discard_Byte(); case 6: Endpoint_Discard_Byte(); case 5: Endpoint_Discard_Byte(); case 4: Endpoint_Discard_Byte(); case 3: Endpoint_Discard_Byte(); case 2: Endpoint_Discard_Byte(); case 1: Endpoint_Discard_Byte(); } while (Length >= 8); } } #endif while (Length) { if (!(Endpoint_IsReadWriteAllowed())) { Endpoint_ClearOUT(); #if !defined(NO_STREAM_CALLBACKS) if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort)) return ENDPOINT_RWSTREAM_CallbackAborted; #endif if ((ErrorCode = Endpoint_WaitUntilReady())) return ErrorCode; } else { Endpoint_Discard_Byte(); Length--; } } return ENDPOINT_RWSTREAM_NoError; }