Extend incomplete RNDISHost demo -- can not enumerate a RNDIS device correctly and set the packet filter. No packets are received yet from the test device, need to investigate additional SET commands to see if any critical OIDs have been missed.
This commit is contained in:
		
							parent
							
								
									652042111c
								
							
						
					
					
						commit
						2626ecb261
					
				
					 5 changed files with 186 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -48,17 +48,6 @@ uint8_t RNDIS_SendEncapsulatedCommand(void* Buffer, uint16_t Length)
 | 
			
		|||
			.wIndex        = 0,
 | 
			
		||||
			.wLength       = Length,
 | 
			
		||||
		};
 | 
			
		||||
	
 | 
			
		||||
	printf("==== RNDIS CONTROL REQUEST ====\r\n");
 | 
			
		||||
	uint8_t* Data = Buffer;
 | 
			
		||||
	for (uint16_t i = 0; i < Length / 8; i++)
 | 
			
		||||
	{
 | 
			
		||||
		for (uint16_t j = 0; (j < 8) && i*8+j < Length; j++)
 | 
			
		||||
			printf("%02X ", *(Data++));
 | 
			
		||||
			
 | 
			
		||||
		printf("\r\n");
 | 
			
		||||
	}
 | 
			
		||||
	printf("==== ********************* ====\r\n");
 | 
			
		||||
 | 
			
		||||
	/* Select the control pipe for the request transfer */
 | 
			
		||||
	Pipe_SelectPipe(PIPE_CONTROLPIPE);
 | 
			
		||||
| 
						 | 
				
			
			@ -83,6 +72,32 @@ uint8_t RNDIS_GetEncapsulatedResponse(void* Buffer, uint16_t Length)
 | 
			
		|||
	return USB_Host_SendControlRequest(Buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t RNDIS_KeepAlive(void)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t ErrorCode;
 | 
			
		||||
 | 
			
		||||
	RNDIS_KeepAlive_Message_t  KeepAliveMessage;
 | 
			
		||||
	RNDIS_KeepAlive_Complete_t KeepAliveMessageResponse;
 | 
			
		||||
	
 | 
			
		||||
	KeepAliveMessage.MessageType     = REMOTE_NDIS_KEEPALIVE_MSG;
 | 
			
		||||
	KeepAliveMessage.MessageLength   = sizeof(RNDIS_KeepAlive_Message_t);
 | 
			
		||||
	KeepAliveMessage.RequestId       = RequestID++;
 | 
			
		||||
 | 
			
		||||
	if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&KeepAliveMessage,
 | 
			
		||||
	                                               sizeof(RNDIS_KeepAlive_Message_t))) != HOST_SENDCONTROL_Successful)
 | 
			
		||||
	{
 | 
			
		||||
		return ErrorCode;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&KeepAliveMessageResponse,
 | 
			
		||||
	                                               sizeof(RNDIS_KeepAlive_Complete_t))) != HOST_SENDCONTROL_Successful)
 | 
			
		||||
	{
 | 
			
		||||
		return ErrorCode;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return HOST_SENDCONTROL_Successful;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t RNDIS_InitializeDevice(uint16_t MaxPacketSize, RNDIS_Initialize_Complete_t* InitMessageResponse)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t ErrorCode;
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +146,8 @@ uint8_t RNDIS_SetRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
 | 
			
		|||
	SetMessageData.SetMessage.InformationBufferLength = Length;
 | 
			
		||||
	SetMessageData.SetMessage.InformationBufferOffset = 0;
 | 
			
		||||
	SetMessageData.SetMessage.DeviceVcHandle = 0;
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	memcpy(&SetMessageData.ContigiousBuffer, Buffer, Length);
 | 
			
		||||
 | 
			
		||||
	if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&SetMessageData,
 | 
			
		||||
	                                               SetMessageData.SetMessage.MessageLength)) != HOST_SENDCONTROL_Successful)
 | 
			
		||||
| 
						 | 
				
			
			@ -147,3 +163,57 @@ uint8_t RNDIS_SetRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
 | 
			
		|||
 | 
			
		||||
	return HOST_SENDCONTROL_Successful;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t ErrorCode;
 | 
			
		||||
 | 
			
		||||
	RNDIS_Query_Message_t  QueryMessage;
 | 
			
		||||
 | 
			
		||||
	struct
 | 
			
		||||
	{
 | 
			
		||||
		RNDIS_Query_Complete_t QueryMessageResponse;
 | 
			
		||||
		uint8_t              ContigiousBuffer[Length];
 | 
			
		||||
	} QueryMessageResponseData;
 | 
			
		||||
 | 
			
		||||
	QueryMessage.MessageType    = REMOTE_NDIS_QUERY_MSG;
 | 
			
		||||
	QueryMessage.MessageLength  = sizeof(RNDIS_Query_Message_t);
 | 
			
		||||
	QueryMessage.RequestId      = RequestID++;
 | 
			
		||||
			
 | 
			
		||||
	QueryMessage.Oid            = Oid;
 | 
			
		||||
	QueryMessage.InformationBufferLength = Length;
 | 
			
		||||
	QueryMessage.InformationBufferOffset = 0;
 | 
			
		||||
	QueryMessage.DeviceVcHandle = 0;
 | 
			
		||||
 | 
			
		||||
	if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&QueryMessage,
 | 
			
		||||
	                                               sizeof(RNDIS_Query_Message_t))) != HOST_SENDCONTROL_Successful)
 | 
			
		||||
	{
 | 
			
		||||
		return ErrorCode;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&QueryMessageResponseData,
 | 
			
		||||
	                                               sizeof(QueryMessageResponseData))) != HOST_SENDCONTROL_Successful)
 | 
			
		||||
	{
 | 
			
		||||
		return ErrorCode;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	memcpy(Buffer, &QueryMessageResponseData.ContigiousBuffer, Length);
 | 
			
		||||
 | 
			
		||||
	return HOST_SENDCONTROL_Successful;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t RNDIS_GetPacketSize(uint16_t* PacketSize)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t ErrorCode;
 | 
			
		||||
 | 
			
		||||
	RNDIS_Packet_Message_t DeviceMessage;
 | 
			
		||||
	
 | 
			
		||||
	if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t))) != PIPE_RWSTREAM_NoError)
 | 
			
		||||
	{
 | 
			
		||||
		return ErrorCode;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*PacketSize = (uint16_t)DeviceMessage.DataLength;
 | 
			
		||||
	
 | 
			
		||||
	return PIPE_RWSTREAM_NoError;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,6 +39,7 @@
 | 
			
		|||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <stdio.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +200,10 @@
 | 
			
		|||
		uint8_t RNDIS_SendEncapsulatedCommand(void* Buffer, uint16_t Length);
 | 
			
		||||
		uint8_t RNDIS_GetEncapsulatedResponse(void* Buffer, uint16_t Length);
 | 
			
		||||
 | 
			
		||||
		uint8_t RNDIS_KeepAlive(void);
 | 
			
		||||
		uint8_t RNDIS_InitializeDevice(uint16_t MaxPacketSize, RNDIS_Initialize_Complete_t* InitMessageResponse);
 | 
			
		||||
		uint8_t RNDIS_SetRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length);
 | 
			
		||||
		uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length);
 | 
			
		||||
		uint8_t RNDIS_GetPacketSize(uint16_t* PacketSize);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,5 +95,18 @@
 | 
			
		|||
		#define OID_802_3_RCV_ERROR_ALIGNMENT         0x01020101UL
 | 
			
		||||
		#define OID_802_3_XMIT_ONE_COLLISION          0x01020102UL
 | 
			
		||||
		#define OID_802_3_XMIT_MORE_COLLISIONS        0x01020103UL
 | 
			
		||||
		
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_DIRECTED            0x00000001UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_MULTICAST           0x00000002UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_ALL_MULTICAST       0x00000004UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_BROADCAST           0x00000008UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_SOURCE_ROUTING      0x00000010UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_PROMISCUOUS         0x00000020UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_SMT                 0x00000040UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_ALL_LOCAL           0x00000080UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_GROUP               0x00001000UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_ALL_FUNCTIONAL      0x00002000UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_FUNCTIONAL          0x00004000UL
 | 
			
		||||
		#define RNDIS_PACKET_TYPE_MAC_FRAME           0x00008000UL	
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue