projects
/
pub
/
lufa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Correct MCU/Board relationship
[pub/lufa.git]
/
LUFA
/
Drivers
/
USB
/
Class
/
Host
/
RNDISClassHost.c
diff --git
a/LUFA/Drivers/USB/Class/Host/RNDISClassHost.c
b/LUFA/Drivers/USB/Class/Host/RNDISClassHost.c
index
9072d3a
..
3981d7a
100644
(file)
--- a/
LUFA/Drivers/USB/Class/Host/RNDISClassHost.c
+++ b/
LUFA/Drivers/USB/Class/Host/RNDISClassHost.c
@@
-1,13
+1,13
@@
/*
LUFA Library
/*
LUFA Library
- Copyright (C) Dean Camera, 20
14
.
+ Copyright (C) Dean Camera, 20
21
.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
- Copyright 20
14
Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 20
21
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();