projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix issue with CDC device demos causing broken communications when the device tries...
[pub/USBasp.git]
/
Demos
/
Device
/
LowLevel
/
CDC
/
CDC.c
diff --git
a/Demos/Device/LowLevel/CDC/CDC.c
b/Demos/Device/LowLevel/CDC/CDC.c
index
8a992c7
..
73b486c
100644
(file)
--- a/
Demos/Device/LowLevel/CDC/CDC.c
+++ b/
Demos/Device/LowLevel/CDC/CDC.c
@@
-49,6
+49,12
@@
CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,
.CharFormat = OneStopBit,
\r
.ParityType = Parity_None,
\r
.DataBits = 8 };
\r
.CharFormat = OneStopBit,
\r
.ParityType = Parity_None,
\r
.DataBits = 8 };
\r
+
\r
+/** Indicates if the host has set the device line encoding. Until the line encoding is set by the host, the device should
\r
+ * not attempt to send any bytes.
\r
+ */
\r
+bool LineEncodingSet = false;
\r
+
\r
\r
#if 0
\r
/* NOTE: Here you can set up a standard stream using the created virtual serial port, so that the standard stream functions in
\r
\r
#if 0
\r
/* NOTE: Here you can set up a standard stream using the created virtual serial port, so that the standard stream functions in
\r
@@
-59,6
+65,9
@@
static int CDC_putchar(char c, FILE *stream)
{
\r
Endpoint_SelectEndpoint(CDC_TX_EPNUM);
\r
\r
{
\r
Endpoint_SelectEndpoint(CDC_TX_EPNUM);
\r
\r
+ if (!(LineEncodingSet))
\r
+ return -1;
\r
+
\r
while (!(Endpoint_IsReadWriteAllowed()))
\r
{
\r
if (USB_DeviceState != DEVICE_STATE_Configured)
\r
while (!(Endpoint_IsReadWriteAllowed()))
\r
{
\r
if (USB_DeviceState != DEVICE_STATE_Configured)
\r
@@
-74,7
+83,10
@@
static int CDC_putchar(char c, FILE *stream)
static int CDC_getchar(FILE *stream)
\r
{
\r
int c;
\r
static int CDC_getchar(FILE *stream)
\r
{
\r
int c;
\r
-
\r
+
\r
+ if (!(LineEncodingSet))
\r
+ return -1;
\r
+
\r
Endpoint_SelectEndpoint(CDC_RX_EPNUM);
\r
\r
for (;;)
\r
Endpoint_SelectEndpoint(CDC_RX_EPNUM);
\r
\r
for (;;)
\r
@@
-216,6
+228,9
@@
void EVENT_USB_UnhandledControlPacket(void)
\r
/* Read the line coding data in from the host into the global struct */
\r
Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));
\r
\r
/* Read the line coding data in from the host into the global struct */
\r
Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));
\r
+
\r
+ /* Indicate that the line encoding has been set, and the device may now send data */
\r
+ LineEncodingSet = true;
\r
\r
/* Finalize the stream transfer to clear the last packet from the host */
\r
Endpoint_ClearIN();
\r
\r
/* Finalize the stream transfer to clear the last packet from the host */
\r
Endpoint_ClearIN();
\r
@@
-299,7
+314,7
@@
void CDC_Task(void)
{
\r
ActionSent = false;
\r
}
\r
{
\r
ActionSent = false;
\r
}
\r
- else if (
ActionSent == false
)
\r
+ else if (
(ActionSent == false) && LineEncodingSet
)
\r
{
\r
ActionSent = true;
\r
\r
{
\r
ActionSent = true;
\r
\r