+void CDC_Host_USBTask(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)\r
+{\r
+       if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))\r
+         return;\r
+       \r
+       Pipe_SelectPipe(CDCInterfaceInfo->Config.NotificationPipeNumber);       \r
+       Pipe_Unfreeze();\r
+\r
+       if (Pipe_IsINReceived())\r
+       {\r
+               USB_Request_Header_t Notification;\r
+               Pipe_Read_Stream_LE(&Notification, sizeof(USB_Request_Header_t), NO_STREAM_CALLBACK);\r
+               \r
+               if ((Notification.bRequest      == NOTIF_SerialState) &&\r
+                   (Notification.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)))\r
+               {\r
+                       Pipe_Read_Stream_LE(&CDCInterfaceInfo->State.ControlLineStates.DeviceToHost,\r
+                                           sizeof(CDCInterfaceInfo->State.ControlLineStates.DeviceToHost),\r
+                                           NO_STREAM_CALLBACK);\r
+                       \r
+               }\r
+\r
+               Pipe_ClearIN();\r
+\r
+               EVENT_CDC_Host_ControLineStateChanged(CDCInterfaceInfo);\r
+       }\r
+       \r
+       Pipe_Freeze();\r
+}\r
+\r
+uint8_t CDC_Host_SetLineEncoding(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+       {\r
+               .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),\r
+               .bRequest      = REQ_SetLineEncoding,\r
+               .wValue        = 0,\r
+               .wIndex        = CDCInterfaceInfo->State.ControlInterfaceNumber,\r
+               .wLength       = sizeof(CDCInterfaceInfo->State.LineEncoding),\r
+       };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+       \r
+       return USB_Host_SendControlRequest(&CDCInterfaceInfo->State.LineEncoding);\r
+}\r
+\r
+uint8_t CDC_Host_SendControlLineStateChange(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+       {\r
+               .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),\r
+               .bRequest      = REQ_SetControlLineState,\r
+               .wValue        = CDCInterfaceInfo->State.ControlLineStates.HostToDevice,\r
+               .wIndex        = CDCInterfaceInfo->State.ControlInterfaceNumber,\r
+               .wLength       = 0,\r
+       };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+       \r
+       return USB_Host_SendControlRequest(NULL);\r
+}\r
+\r
+uint8_t CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, char* Data, const uint16_t Length)\r
+{\r
+       if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))\r
+         return PIPE_READYWAIT_NoError;\r
+\r
+       uint8_t ErrorCode;\r
+\r
+       Pipe_SelectPipe(CDCInterfaceInfo->Config.DataOUTPipeNumber);    \r
+       Pipe_Unfreeze();\r
+       ErrorCode = Pipe_Write_Stream_LE(Data, Length, NO_STREAM_CALLBACK);\r
+       Pipe_Freeze();\r
+       \r
+       return ErrorCode;\r
+}\r
+\r
+uint8_t CDC_Host_SendByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo, const uint8_t Data)\r