/*
LUFA Library
- Copyright (C) Dean Camera, 2014.
+ Copyright (C) Dean Camera, 2021.
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
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)))
- return false;
+ return RNDIS_ENUMERROR_PipeConfigurationFailed;
if (!(Pipe_ConfigurePipeTable(&RNDISInterfaceInfo->Config.NotificationPipe, 1)))
- return false;
+ return RNDIS_ENUMERROR_PipeConfigurationFailed;
RNDISInterfaceInfo->State.ControlInterfaceNumber = RNDISControlInterface->InterfaceNumber;
RNDISInterfaceInfo->State.IsActive = true;
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;
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);
+ 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);
+ if (ExpectedLength > BufferSize)
+ Pipe_Discard_Stream(ExpectedLength - BufferSize, NULL);
if (!(Pipe_BytesInPipe()))
Pipe_ClearIN();