.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
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
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
\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
ActionSent = false;\r
}\r
- else if (ActionSent == false)\r
+ else if ((ActionSent == false) && LineEncodingSet)\r
{\r
ActionSent = true;\r
\r
\r
void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, char* const Data, const uint16_t Length)\r
{\r
- if (USB_DeviceState != DEVICE_STATE_Configured)\r
+ if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))\r
return;\r
-\r
+ \r
Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber);\r
Endpoint_Write_Stream_LE(Data, Length, NO_STREAM_CALLBACK);\r
}\r
\r
void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data)\r
{\r
- if (USB_DeviceState != DEVICE_STATE_Configured)\r
+ if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))\r
return;\r
\r
Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber);\r
* internal control\r
* - Interrupts are no longer disabled during the processing of Control Requests on the default endpoint while in device mode\r
* - AudioOutput demos now always output to board LEDs, regardless of output mode (removed AUDIO_OUT_LEDS project option)\r
+ * - Removed SINGLE_DEVICE_CONFIGURATION compile time option in favour of the new FIXED_NUM_CONFIGURATIONS option so that the exact number\r
+ * of device configurations can be defined statically\r
*\r
* <b>Fixed:</b>\r
* - Changed bootloaders to use FLASHEND rather than the existence of RAMPZ to determine if far FLASH pointers are needed to fix\r