.wIndex = 0,\r
.wLength = Length,\r
};\r
- \r
- printf("==== RNDIS CONTROL REQUEST ====\r\n");\r
- uint8_t* Data = Buffer;\r
- for (uint16_t i = 0; i < Length / 8; i++)\r
- {\r
- for (uint16_t j = 0; (j < 8) && i*8+j < Length; j++)\r
- printf("%02X ", *(Data++));\r
- \r
- printf("\r\n");\r
- }\r
- printf("==== ********************* ====\r\n");\r
\r
/* Select the control pipe for the request transfer */\r
Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
return USB_Host_SendControlRequest(Buffer);\r
}\r
\r
+uint8_t RNDIS_KeepAlive(void)\r
+{\r
+ uint8_t ErrorCode;\r
+\r
+ RNDIS_KeepAlive_Message_t KeepAliveMessage;\r
+ RNDIS_KeepAlive_Complete_t KeepAliveMessageResponse;\r
+ \r
+ KeepAliveMessage.MessageType = REMOTE_NDIS_KEEPALIVE_MSG;\r
+ KeepAliveMessage.MessageLength = sizeof(RNDIS_KeepAlive_Message_t);\r
+ KeepAliveMessage.RequestId = RequestID++;\r
+\r
+ if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&KeepAliveMessage,\r
+ sizeof(RNDIS_KeepAlive_Message_t))) != HOST_SENDCONTROL_Successful)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+ \r
+ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&KeepAliveMessageResponse,\r
+ sizeof(RNDIS_KeepAlive_Complete_t))) != HOST_SENDCONTROL_Successful)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+ \r
+ return HOST_SENDCONTROL_Successful;\r
+}\r
+\r
uint8_t RNDIS_InitializeDevice(uint16_t MaxPacketSize, RNDIS_Initialize_Complete_t* InitMessageResponse)\r
{\r
uint8_t ErrorCode;\r
SetMessageData.SetMessage.InformationBufferLength = Length;\r
SetMessageData.SetMessage.InformationBufferOffset = 0;\r
SetMessageData.SetMessage.DeviceVcHandle = 0;\r
-\r
+ \r
+ memcpy(&SetMessageData.ContigiousBuffer, Buffer, Length);\r
\r
if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&SetMessageData,\r
SetMessageData.SetMessage.MessageLength)) != HOST_SENDCONTROL_Successful)\r
\r
return HOST_SENDCONTROL_Successful;\r
}\r
+\r
+uint8_t RNDIS_QueryRNDISProperty(uint32_t Oid, void* Buffer, uint16_t Length)\r
+{\r
+ uint8_t ErrorCode;\r
+\r
+ RNDIS_Query_Message_t QueryMessage;\r
+\r
+ struct\r
+ {\r
+ RNDIS_Query_Complete_t QueryMessageResponse;\r
+ uint8_t ContigiousBuffer[Length];\r
+ } QueryMessageResponseData;\r
+\r
+ QueryMessage.MessageType = REMOTE_NDIS_QUERY_MSG;\r
+ QueryMessage.MessageLength = sizeof(RNDIS_Query_Message_t);\r
+ QueryMessage.RequestId = RequestID++;\r
+ \r
+ QueryMessage.Oid = Oid;\r
+ QueryMessage.InformationBufferLength = Length;\r
+ QueryMessage.InformationBufferOffset = 0;\r
+ QueryMessage.DeviceVcHandle = 0;\r
+\r
+ if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&QueryMessage,\r
+ sizeof(RNDIS_Query_Message_t))) != HOST_SENDCONTROL_Successful)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+ \r
+ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&QueryMessageResponseData,\r
+ sizeof(QueryMessageResponseData))) != HOST_SENDCONTROL_Successful)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+\r
+ memcpy(Buffer, &QueryMessageResponseData.ContigiousBuffer, Length);\r
+\r
+ return HOST_SENDCONTROL_Successful;\r
+}\r
+\r
+uint8_t RNDIS_GetPacketSize(uint16_t* PacketSize)\r
+{\r
+ uint8_t ErrorCode;\r
+\r
+ RNDIS_Packet_Message_t DeviceMessage;\r
+ \r
+ if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t))) != PIPE_RWSTREAM_NoError)\r
+ {\r
+ return ErrorCode;\r
+ }\r
+\r
+ *PacketSize = (uint16_t)DeviceMessage.DataLength;\r
+ \r
+ return PIPE_RWSTREAM_NoError;\r
+}\r