forked from mfulz_github/qmk_firmware
Added CDC_Host_Flush() function to the CDC Host Class driver to flush sent data to the attached device.
This commit is contained in:
parent
b7f6a65c25
commit
1b2cd16976
|
@ -111,6 +111,8 @@ int main(void)
|
||||||
/* Echo received bytes from the attached device through the USART */
|
/* Echo received bytes from the attached device through the USART */
|
||||||
while (CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface))
|
while (CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface))
|
||||||
putchar(CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface));
|
putchar(CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface));
|
||||||
|
|
||||||
|
CDC_Host_Flush(&VirtualSerial_CDC_Interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -374,6 +374,48 @@ uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
|
||||||
return ReceivedByte;
|
return ReceivedByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t CDC_Host_Flush(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
|
||||||
|
{
|
||||||
|
if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
|
||||||
|
return PIPE_READYWAIT_DeviceDisconnected;
|
||||||
|
|
||||||
|
uint8_t ErrorCode;
|
||||||
|
|
||||||
|
if (CDCInterfaceInfo->State.BidirectionalDataEndpoints)
|
||||||
|
{
|
||||||
|
Pipe_SelectPipe(CDCInterfaceInfo->Config.DataINPipeNumber);
|
||||||
|
Pipe_SetPipeToken(PIPE_TOKEN_OUT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Pipe_SelectPipe(CDCInterfaceInfo->Config.DataOUTPipeNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
|
if (!(Pipe_BytesInPipe()))
|
||||||
|
return PIPE_READYWAIT_NoError;
|
||||||
|
|
||||||
|
bool BankFull = !(Pipe_IsReadWriteAllowed());
|
||||||
|
|
||||||
|
Pipe_ClearOUT();
|
||||||
|
|
||||||
|
if (BankFull)
|
||||||
|
{
|
||||||
|
if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
|
||||||
|
return ErrorCode;
|
||||||
|
|
||||||
|
Pipe_ClearOUT();
|
||||||
|
}
|
||||||
|
|
||||||
|
Pipe_Freeze();
|
||||||
|
|
||||||
|
if (CDCInterfaceInfo->State.BidirectionalDataEndpoints)
|
||||||
|
Pipe_SetPipeToken(PIPE_TOKEN_IN);
|
||||||
|
|
||||||
|
return PIPE_READYWAIT_NoError;
|
||||||
|
}
|
||||||
|
|
||||||
void CDC_Host_CreateStream(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, FILE* Stream)
|
void CDC_Host_CreateStream(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, FILE* Stream)
|
||||||
{
|
{
|
||||||
*Stream = (FILE)FDEV_SETUP_STREAM(CDC_Host_putchar, CDC_Host_getchar, _FDEV_SETUP_RW);
|
*Stream = (FILE)FDEV_SETUP_STREAM(CDC_Host_putchar, CDC_Host_getchar, _FDEV_SETUP_RW);
|
||||||
|
|
|
@ -214,6 +214,14 @@
|
||||||
*/
|
*/
|
||||||
uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
|
/** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
|
||||||
|
*
|
||||||
|
* \param[in,out] CDCInterfaceInfo Pointer to a structure containing a CDC Class host configuration and state
|
||||||
|
*
|
||||||
|
* \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum
|
||||||
|
*/
|
||||||
|
uint8_t CDC_Host_Flush(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
/** Creates a standard characer stream for the given CDC Device instance so that it can be used with all the regular
|
/** Creates a standard characer stream for the given CDC Device instance so that it can be used with all the regular
|
||||||
* functions in the avr-libc <stdio.h> library that accept a FILE stream as a destination (e.g. fprintf). The created
|
* functions in the avr-libc <stdio.h> library that accept a FILE stream as a destination (e.g. fprintf). The created
|
||||||
* stream is bidirectional and can be used for both input and output functions.
|
* stream is bidirectional and can be used for both input and output functions.
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
/* Includes: */
|
/* Includes: */
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
#include "../../../Common/Common.h"
|
#include "../../../Common/Common.h"
|
||||||
#include "USBMode.h"
|
#include "USBMode.h"
|
||||||
|
|
|
@ -12,9 +12,10 @@
|
||||||
* - Added activity LED indicators to the AVRISP project to indicate when the device is busy processing a command
|
* - Added activity LED indicators to the AVRISP project to indicate when the device is busy processing a command
|
||||||
* - The USB target family and allowable USB mode tokens are now public and documented (USB_CAN_BE_*, USB_SERIES_*_AVR)
|
* - The USB target family and allowable USB mode tokens are now public and documented (USB_CAN_BE_*, USB_SERIES_*_AVR)
|
||||||
* - Added new XPLAIN USB to Serial Bridge project (thanks to John Steggall)
|
* - Added new XPLAIN USB to Serial Bridge project (thanks to John Steggall)
|
||||||
* - Added new RNDISHost Host LowLevel demo
|
* - Added new RNDIS Ethernet Host LowLevel demo
|
||||||
* - Added new RNDIS Ethernet Host Class Driver
|
* - Added new RNDIS Ethernet Host Class Driver
|
||||||
* - Added new RNDISEthernet Host ClassDriver demo
|
* - Added new RNDIS Ethernet Host ClassDriver demo
|
||||||
|
* - Added CDC_Host_Flush() function to the CDC Host Class driver to flush sent data to the attached device
|
||||||
*
|
*
|
||||||
* <b>Changed:</b>
|
* <b>Changed:</b>
|
||||||
* - Removed code in the Keyboard demos to send zeroed reports between two reports with differing numbers of keycodes
|
* - Removed code in the Keyboard demos to send zeroed reports between two reports with differing numbers of keycodes
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
* Note that this design currently has several limitations:
|
* Note that this design currently has several limitations:
|
||||||
* - Minimum target clock speed of 500KHz due to hardware SPI used
|
* - Minimum target clock speed of 500KHz due to hardware SPI used
|
||||||
* - No reversed/shorted target connector detection and notification
|
* - No reversed/shorted target connector detection and notification
|
||||||
|
* - PDI programming is not supported for XMEGA targets
|
||||||
*
|
*
|
||||||
* On AVR models with an ADC converter, ACC should be tied to 5V (e.g. VBUS) and the VTARGET_ADC_CHANNEL token should be
|
* On AVR models with an ADC converter, ACC should be tied to 5V (e.g. VBUS) and the VTARGET_ADC_CHANNEL token should be
|
||||||
* set to an appropriate ADC channel number in the project makefile for VTARGET detection to operate correctly. On models
|
* set to an appropriate ADC channel number in the project makefile for VTARGET detection to operate correctly. On models
|
||||||
|
|
Loading…
Reference in New Issue