aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-11-30 02:20:26 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-11-30 02:20:26 +0000
commit1b2cd16976207c21bbdfbd15852b0afa92c0f516 (patch)
tree8e29d5c4e1b680790b358331e26d68e4ed3c4b10 /LUFA
parentb7f6a65c258cafc3111d77502b491f223b886a33 (diff)
downloadlufa-1b2cd16976207c21bbdfbd15852b0afa92c0f516.tar.gz
lufa-1b2cd16976207c21bbdfbd15852b0afa92c0f516.tar.bz2
lufa-1b2cd16976207c21bbdfbd15852b0afa92c0f516.zip
Added CDC_Host_Flush() function to the CDC Host Class driver to flush sent data to the attached device.
Diffstat (limited to 'LUFA')
-rw-r--r--LUFA/Drivers/USB/Class/Host/CDC.c42
-rw-r--r--LUFA/Drivers/USB/Class/Host/CDC.h8
-rw-r--r--LUFA/Drivers/USB/HighLevel/StdDescriptors.h1
-rw-r--r--LUFA/ManPages/ChangeLog.txt5
4 files changed, 54 insertions, 2 deletions
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c
index 20fa65988..ebd332c97 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.c
+++ b/LUFA/Drivers/USB/Class/Host/CDC.c
@@ -374,6 +374,48 @@ uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
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)
{
*Stream = (FILE)FDEV_SETUP_STREAM(CDC_Host_putchar, CDC_Host_getchar, _FDEV_SETUP_RW);
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.h b/LUFA/Drivers/USB/Class/Host/CDC.h
index 03b31d0ed..1873f5599 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.h
+++ b/LUFA/Drivers/USB/Class/Host/CDC.h
@@ -214,6 +214,14 @@
*/
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
* 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.
diff --git a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
index 19ca8aa69..286294424 100644
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
@@ -43,6 +43,7 @@
/* Includes: */
#include <avr/pgmspace.h>
#include <stdbool.h>
+ #include <stddef.h>
#include "../../../Common/Common.h"
#include "USBMode.h"
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 4b37995af..05c74deca 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -12,9 +12,10 @@
* - 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)
* - 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 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>
* - Removed code in the Keyboard demos to send zeroed reports between two reports with differing numbers of keycodes