Correct MCU/Board relationship
[pub/lufa.git] / LUFA / Drivers / USB / Class / Host / RNDISClassHost.c
index 9072d3a..3981d7a 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2014.
+     Copyright (C) Dean Camera, 2021.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2021  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -114,13 +114,13 @@ uint8_t RNDIS_Host_ConfigurePipes(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfa
        RNDISInterfaceInfo->Config.NotificationPipe.Type = EP_TYPE_INTERRUPT;
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.DataINPipe, 1)))
        RNDISInterfaceInfo->Config.NotificationPipe.Type = EP_TYPE_INTERRUPT;
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.DataINPipe, 1)))
-         return false;
+         return RNDIS_ENUMERROR_PipeConfigurationFailed;
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.DataOUTPipe, 1)))
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.DataOUTPipe, 1)))
-         return false;
+         return RNDIS_ENUMERROR_PipeConfigurationFailed;
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.NotificationPipe, 1)))
 
        if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.NotificationPipe, 1)))
-         return false;
+         return RNDIS_ENUMERROR_PipeConfigurationFailed;
 
        RNDISInterfaceInfo->State.ControlInterfaceNumber = RNDISControlInterface->InterfaceNumber;
        RNDISInterfaceInfo->State.IsActive = true;
 
        RNDISInterfaceInfo->State.ControlInterfaceNumber = RNDISControlInterface->InterfaceNumber;
        RNDISInterfaceInfo->State.IsActive = true;
@@ -394,6 +394,7 @@ bool RNDIS_Host_IsPacketReceived(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfac
 
 uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceInfo,
                               void* Buffer,
 
 uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceInfo,
                               void* Buffer,
+                              const uint16_t BufferSize,
                               uint16_t* const PacketLength)
 {
        uint8_t ErrorCode;
                               uint16_t* const PacketLength)
 {
        uint8_t ErrorCode;
@@ -422,13 +423,20 @@ uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
                return ErrorCode;
        }
 
                return ErrorCode;
        }
 
-       *PacketLength = (uint16_t)le32_to_cpu(DeviceMessage.DataLength);
-
        Pipe_Discard_Stream(le32_to_cpu(DeviceMessage.DataOffset) -
                            (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)),
                            NULL);
 
        Pipe_Discard_Stream(le32_to_cpu(DeviceMessage.DataOffset) -
                            (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)),
                            NULL);
 
+       const size_t ExpectedLength = (uint16_t)le32_to_cpu(DeviceMessage.DataLength);
+
+       if (ExpectedLength > BufferSize)
+               *PacketLength = BufferSize;
+       else
+               *PacketLength = ExpectedLength;
+
        Pipe_Read_Stream_LE(Buffer, *PacketLength, NULL);
        Pipe_Read_Stream_LE(Buffer, *PacketLength, NULL);
+       if (ExpectedLength > BufferSize)
+               Pipe_Discard_Stream(ExpectedLength - BufferSize, NULL);
 
        if (!(Pipe_BytesInPipe()))
          Pipe_ClearIN();
 
        if (!(Pipe_BytesInPipe()))
          Pipe_ClearIN();