+
+       ErrorCode = Pipe_WaitUntilReady();
+
+       Pipe_Freeze();
+
+       return ErrorCode;
+}
+
+uint8_t PRNT_Host_SendData(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
+                           void* Buffer,
+                           const uint16_t Length)
+{
+       uint8_t ErrorCode;
+
+       if ((USB_HostState != HOST_STATE_Configured) || !(PRNTInterfaceInfo->State.IsActive))
+         return PIPE_RWSTREAM_DeviceDisconnected;
+
+       Pipe_SelectPipe(PRNTInterfaceInfo->Config.DataOUTPipeNumber);
+       Pipe_Unfreeze();
+
+       if ((ErrorCode = Pipe_Write_Stream_LE(Buffer, Length, NULL)) != PIPE_RWSTREAM_NoError)
+         return ErrorCode;
+
+       Pipe_ClearOUT();
+
+       ErrorCode = Pipe_WaitUntilReady();
+
+       Pipe_Freeze();
+
+       return ErrorCode;
+}
+
+uint16_t PRNT_Host_BytesReceived(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
+{
+       if ((USB_HostState != HOST_STATE_Configured) || !(PRNTInterfaceInfo->State.IsActive))
+         return 0;
+
+       Pipe_SelectPipe(PRNTInterfaceInfo->Config.DataINPipeNumber);
+       Pipe_Unfreeze();
+
+       if (Pipe_IsINReceived())
+       {
+               if (!(Pipe_BytesInPipe()))
+               {
+                       Pipe_ClearIN();
+                       Pipe_Freeze();
+                       return 0;
+               }
+               else
+               {
+                       Pipe_Freeze();
+                       return Pipe_BytesInPipe();
+               }
+       }
+       else
+       {
+               Pipe_Freeze();
+
+               return 0;
+       }
+}
+
+int16_t PRNT_Host_ReceiveByte(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
+{
+       if ((USB_HostState != HOST_STATE_Configured) || !(PRNTInterfaceInfo->State.IsActive))
+         return PIPE_RWSTREAM_DeviceDisconnected;
+
+       int16_t ReceivedByte = -1;
+
+       Pipe_SelectPipe(PRNTInterfaceInfo->Config.DataINPipeNumber);
+       Pipe_Unfreeze();
+
+       if (Pipe_IsINReceived())