projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleanup and partially fix AVRISP-MKII project's TPI programming support.
[pub/USBasp.git]
/
LUFA
/
Drivers
/
USB
/
Class
/
Host
/
RNDIS.c
diff --git
a/LUFA/Drivers/USB/Class/Host/RNDIS.c
b/LUFA/Drivers/USB/Class/Host/RNDIS.c
index
46aeb98
..
fac569e
100644
(file)
--- a/
LUFA/Drivers/USB/Class/Host/RNDIS.c
+++ b/
LUFA/Drivers/USB/Class/Host/RNDIS.c
@@
-392,7
+392,7
@@
bool RNDIS_Host_IsPacketReceived(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfac
\r
Pipe_Unfreeze();
\r
\r
\r
Pipe_Unfreeze();
\r
\r
- PacketWaiting =
Pipe_IsINReceived(
);
\r
+ PacketWaiting =
(Pipe_IsINReceived() && Pipe_BytesInPipe()
);
\r
\r
Pipe_Freeze();
\r
\r
\r
Pipe_Freeze();
\r
\r
@@
-412,6
+412,9
@@
uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
\r
if (!(Pipe_IsReadWriteAllowed()))
\r
{
\r
\r
if (!(Pipe_IsReadWriteAllowed()))
\r
{
\r
+ if (Pipe_IsINReceived())
\r
+ Pipe_ClearIN();
\r
+
\r
*PacketLength = 0;
\r
Pipe_Freeze();
\r
return PIPE_RWSTREAM_NoError;
\r
*PacketLength = 0;
\r
Pipe_Freeze();
\r
return PIPE_RWSTREAM_NoError;
\r
@@
-419,11
+422,27
@@
uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
\r
RNDIS_Packet_Message_t DeviceMessage;
\r
\r
\r
RNDIS_Packet_Message_t DeviceMessage;
\r
\r
+ if (Pipe_BytesInPipe() < sizeof(RNDIS_Packet_Message_t))
\r
+ {
\r
+ printf("*SIZE YARG: %d*\r\n", Pipe_BytesInPipe());
\r
+ *PacketLength = 0;
\r
+ Pipe_ClearIN();
\r
+ return RNDIS_COMMAND_FAILED;
\r
+ }
\r
+
\r
if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t),
\r
NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
\r
{
\r
return ErrorCode;
\r
}
\r
if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t),
\r
NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
\r
{
\r
return ErrorCode;
\r
}
\r
+
\r
+ if (DeviceMessage.MessageType != REMOTE_NDIS_PACKET_MSG)
\r
+ {
\r
+ printf("****YARG****\r\n");
\r
+ *PacketLength = 0;
\r
+ Pipe_ClearIN();
\r
+ return RNDIS_COMMAND_FAILED;
\r
+ }
\r
\r
*PacketLength = (uint16_t)DeviceMessage.DataLength;
\r
\r
\r
*PacketLength = (uint16_t)DeviceMessage.DataLength;
\r
\r
@@
-431,7
+450,9
@@
uint8_t RNDIS_Host_ReadPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
NO_STREAM_CALLBACK);
\r
\r
Pipe_Read_Stream_LE(Buffer, *PacketLength, NO_STREAM_CALLBACK);
\r
NO_STREAM_CALLBACK);
\r
\r
Pipe_Read_Stream_LE(Buffer, *PacketLength, NO_STREAM_CALLBACK);
\r
- Pipe_ClearIN();
\r
+
\r
+ if (!(Pipe_BytesInPipe()))
\r
+ Pipe_ClearIN();
\r
\r
Pipe_Freeze();
\r
\r
\r
Pipe_Freeze();
\r
\r
@@
-455,21
+476,25
@@
uint8_t RNDIS_Host_SendPacket(USB_ClassInfo_RNDIS_Host_t* const RNDISInterfaceIn
Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber);
\r
}
\r
\r
Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber);
\r
}
\r
\r
- Pipe_Unfreeze();
\r
-
\r
RNDIS_Packet_Message_t DeviceMessage;
\r
RNDIS_Packet_Message_t DeviceMessage;
\r
-
\r
- DeviceMessage.MessageType = REMOTE_NDIS_PACKET_MSG;
\r
+
\r
+ memset(&DeviceMessage, 0, sizeof(RNDIS_Packet_Message_t));
\r
+ DeviceMessage.MessageType = REMOTE_NDIS_PACKET_MSG;
\r
DeviceMessage.MessageLength = (sizeof(RNDIS_Packet_Message_t) + PacketLength);
\r
DeviceMessage.MessageLength = (sizeof(RNDIS_Packet_Message_t) + PacketLength);
\r
- DeviceMessage.DataOffset = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t));
\r
- DeviceMessage.DataLength = PacketLength;
\r
+ DeviceMessage.DataOffset
= (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t));
\r
+ DeviceMessage.DataLength
= PacketLength;
\r
\r
\r
+ Pipe_Unfreeze();
\r
+
\r
if ((ErrorCode = Pipe_Write_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t),
\r
NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
\r
{
\r
if ((ErrorCode = Pipe_Write_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t),
\r
NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
\r
{
\r
+ if (RNDISInterfaceInfo->State.BidirectionalDataEndpoints)
\r
+ Pipe_SetPipeToken(PIPE_TOKEN_IN);
\r
+
\r
return ErrorCode;
\r
}
\r
return ErrorCode;
\r
}
\r
-
\r
+
\r
Pipe_Write_Stream_LE(Buffer, PacketLength, NO_STREAM_CALLBACK);
\r
Pipe_ClearOUT();
\r
\r
Pipe_Write_Stream_LE(Buffer, PacketLength, NO_STREAM_CALLBACK);
\r
Pipe_ClearOUT();
\r
\r