Document CDC Host class driver functions and enums.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / RNDIS.c
index 7b51b2a..13d82a5 100644 (file)
   this software.\r
 */\r
 \r
-#define  INCLUDE_FROM_RNDIS_CLASS_C\r
+#include "../../HighLevel/USBMode.h"\r
+#if defined(USB_CAN_BE_DEVICE)\r
+\r
+#define  INCLUDE_FROM_RNDIS_CLASS_DEVICE_C\r
 #include "RNDIS.h"\r
 \r
 static const uint32_t PROGMEM AdapterSupportedOIDList[]  =\r
@@ -62,12 +65,12 @@ static const uint32_t PROGMEM AdapterSupportedOIDList[]  =
                OID_802_3_XMIT_MORE_COLLISIONS,\r
        };\r
 \r
-void USB_RNDIS_ProcessControlPacket(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
+void RNDIS_Device_ProcessControlRequest(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)\r
 {\r
        if (!(Endpoint_IsSETUPReceived()))\r
          return;\r
          \r
-       if (USB_ControlRequest.wIndex != RNDISInterfaceInfo->ControlInterfaceNumber)\r
+       if (USB_ControlRequest.wIndex != RNDISInterfaceInfo->Config.ControlInterfaceNumber)\r
          return;\r
 \r
        switch (USB_ControlRequest.bRequest)\r
@@ -77,10 +80,10 @@ void USB_RNDIS_ProcessControlPacket(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)
                        {\r
                                Endpoint_ClearSETUP();\r
 \r
-                               Endpoint_Read_Control_Stream_LE(RNDISInterfaceInfo->RNDISMessageBuffer, USB_ControlRequest.wLength);\r
+                               Endpoint_Read_Control_Stream_LE(RNDISInterfaceInfo->State.RNDISMessageBuffer, USB_ControlRequest.wLength);\r
                                Endpoint_ClearIN();\r
 \r
-                               USB_RNDIS_ProcessRNDISControlMessage(RNDISInterfaceInfo);\r
+                               RNDIS_Device_ProcessRNDISControlMessage(RNDISInterfaceInfo);\r
                        }\r
                        \r
                        break;\r
@@ -89,15 +92,15 @@ void USB_RNDIS_ProcessControlPacket(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)
                        {\r
                                Endpoint_ClearSETUP();\r
 \r
-                               RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
+                               RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
 \r
                                if (!(MessageHeader->MessageLength))\r
                                {\r
-                                       RNDISInterfaceInfo->RNDISMessageBuffer[0] = 0;\r
+                                       RNDISInterfaceInfo->State.RNDISMessageBuffer[0] = 0;\r
                                        MessageHeader->MessageLength = 1;\r
                                }\r
 \r
-                               Endpoint_Write_Control_Stream_LE(RNDISInterfaceInfo->RNDISMessageBuffer, MessageHeader->MessageLength);                         \r
+                               Endpoint_Write_Control_Stream_LE(RNDISInterfaceInfo->State.RNDISMessageBuffer, MessageHeader->MessageLength);                           \r
                                Endpoint_ClearOUT();\r
 \r
                                MessageHeader->MessageLength = 0;\r
@@ -107,24 +110,26 @@ void USB_RNDIS_ProcessControlPacket(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)
        }\r
 }\r
 \r
-bool USB_RNDIS_ConfigureEndpoints(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
+bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)\r
 {\r
-       if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->DataINEndpointNumber, EP_TYPE_BULK,\r
-                                                                ENDPOINT_DIR_IN, RNDISInterfaceInfo->DataINEndpointSize,\r
+       memset(&RNDISInterfaceInfo->State, 0x00, sizeof(RNDISInterfaceInfo->State));\r
+\r
+       if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,\r
+                                                                ENDPOINT_DIR_IN, RNDISInterfaceInfo->Config.DataINEndpointSize,\r
                                                                 ENDPOINT_BANK_SINGLE)))\r
        {\r
                return false;\r
        }\r
 \r
-       if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->DataOUTEndpointNumber, EP_TYPE_BULK,\r
-                                        ENDPOINT_DIR_OUT, RNDISInterfaceInfo->DataOUTEndpointSize,\r
+       if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_BULK,\r
+                                        ENDPOINT_DIR_OUT, RNDISInterfaceInfo->Config.DataOUTEndpointSize,\r
                                         ENDPOINT_BANK_SINGLE)))\r
        {\r
                return false;\r
        }\r
 \r
-       if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->NotificationEndpointNumber, EP_TYPE_INTERRUPT,\r
-                                        ENDPOINT_DIR_IN, RNDISInterfaceInfo->NotificationEndpointSize,\r
+       if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->Config.NotificationEndpointNumber, EP_TYPE_INTERRUPT,\r
+                                        ENDPOINT_DIR_IN, RNDISInterfaceInfo->Config.NotificationEndpointSize,\r
                                         ENDPOINT_BANK_SINGLE)))\r
        {\r
                return false;\r
@@ -133,16 +138,16 @@ bool USB_RNDIS_ConfigureEndpoints(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)
        return true;\r
 }\r
 \r
-void USB_RNDIS_USBTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
+void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)\r
 {\r
-       if (!(USB_IsConnected))\r
+       if (USB_DeviceState != DEVICE_STATE_Configured)\r
          return;\r
 \r
-       RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
+       RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
 \r
-       Endpoint_SelectEndpoint(RNDISInterfaceInfo->NotificationEndpointNumber);\r
+       Endpoint_SelectEndpoint(RNDISInterfaceInfo->Config.NotificationEndpointNumber);\r
 \r
-       if (Endpoint_IsINReady() && RNDISInterfaceInfo->ResponseReady)\r
+       if (Endpoint_IsINReady() && RNDISInterfaceInfo->State.ResponseReady)\r
        {\r
                USB_Request_Header_t Notification = (USB_Request_Header_t)\r
                        {\r
@@ -157,18 +162,18 @@ void USB_RNDIS_USBTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)
 \r
                Endpoint_ClearIN();\r
 \r
-               RNDISInterfaceInfo->ResponseReady = false;\r
+               RNDISInterfaceInfo->State.ResponseReady = false;\r
        }\r
        \r
-       if ((RNDISInterfaceInfo->CurrRNDISState == RNDIS_Data_Initialized) && !(MessageHeader->MessageLength))\r
+       if ((RNDISInterfaceInfo->State.CurrRNDISState == RNDIS_Data_Initialized) && !(MessageHeader->MessageLength))\r
        {\r
-               RNDIS_PACKET_MSG_t RNDISPacketHeader;\r
+               RNDIS_Packet_Message_t RNDISPacketHeader;\r
 \r
-               Endpoint_SelectEndpoint(RNDISInterfaceInfo->DataOUTEndpointNumber);\r
+               Endpoint_SelectEndpoint(RNDISInterfaceInfo->Config.DataOUTEndpointNumber);\r
 \r
-               if (Endpoint_IsOUTReceived() && !(RNDISInterfaceInfo->FrameIN.FrameInBuffer))\r
+               if (Endpoint_IsOUTReceived() && !(RNDISInterfaceInfo->State.FrameIN.FrameInBuffer))\r
                {\r
-                       Endpoint_Read_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_PACKET_MSG_t), NO_STREAM_CALLBACK);\r
+                       Endpoint_Read_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_Packet_Message_t), NO_STREAM_CALLBACK);\r
 \r
                        if (RNDISPacketHeader.DataLength > ETHERNET_FRAME_SIZE_MAX)\r
                        {\r
@@ -176,52 +181,54 @@ void USB_RNDIS_USBTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)
                                return;\r
                        }\r
                        \r
-                       Endpoint_Read_Stream_LE(RNDISInterfaceInfo->FrameIN.FrameData, RNDISPacketHeader.DataLength, NO_STREAM_CALLBACK);\r
+                       Endpoint_Read_Stream_LE(RNDISInterfaceInfo->State.FrameIN.FrameData, RNDISPacketHeader.DataLength, NO_STREAM_CALLBACK);\r
 \r
                        Endpoint_ClearOUT();\r
                        \r
-                       RNDISInterfaceInfo->FrameIN.FrameLength = RNDISPacketHeader.DataLength;\r
+                       RNDISInterfaceInfo->State.FrameIN.FrameLength = RNDISPacketHeader.DataLength;\r
 \r
-                       RNDISInterfaceInfo->FrameIN.FrameInBuffer = true;\r
+                       RNDISInterfaceInfo->State.FrameIN.FrameInBuffer = true;\r
                }\r
                \r
-               Endpoint_SelectEndpoint(RNDISInterfaceInfo->DataINEndpointNumber);\r
+               Endpoint_SelectEndpoint(RNDISInterfaceInfo->Config.DataINEndpointNumber);\r
                \r
-               if (Endpoint_IsINReady() && RNDISInterfaceInfo->FrameOUT.FrameInBuffer)\r
+               if (Endpoint_IsINReady() && RNDISInterfaceInfo->State.FrameOUT.FrameInBuffer)\r
                {\r
-                       memset(&RNDISPacketHeader, 0, sizeof(RNDIS_PACKET_MSG_t));\r
+                       memset(&RNDISPacketHeader, 0, sizeof(RNDIS_Packet_Message_t));\r
 \r
                        RNDISPacketHeader.MessageType   = REMOTE_NDIS_PACKET_MSG;\r
-                       RNDISPacketHeader.MessageLength = (sizeof(RNDIS_PACKET_MSG_t) + RNDISInterfaceInfo->FrameOUT.FrameLength);\r
-                       RNDISPacketHeader.DataOffset    = (sizeof(RNDIS_PACKET_MSG_t) - sizeof(RNDIS_Message_Header_t));\r
-                       RNDISPacketHeader.DataLength    = RNDISInterfaceInfo->FrameOUT.FrameLength;\r
+                       RNDISPacketHeader.MessageLength = (sizeof(RNDIS_Packet_Message_t) + RNDISInterfaceInfo->State.FrameOUT.FrameLength);\r
+                       RNDISPacketHeader.DataOffset    = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t));\r
+                       RNDISPacketHeader.DataLength    = RNDISInterfaceInfo->State.FrameOUT.FrameLength;\r
 \r
-                       Endpoint_Write_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_PACKET_MSG_t), NO_STREAM_CALLBACK);\r
-                       Endpoint_Write_Stream_LE(RNDISInterfaceInfo->FrameOUT.FrameData, RNDISPacketHeader.DataLength, NO_STREAM_CALLBACK);\r
+                       Endpoint_Write_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_Packet_Message_t), NO_STREAM_CALLBACK);\r
+                       Endpoint_Write_Stream_LE(RNDISInterfaceInfo->State.FrameOUT.FrameData, RNDISPacketHeader.DataLength, NO_STREAM_CALLBACK);\r
                        Endpoint_ClearIN();\r
                        \r
-                       RNDISInterfaceInfo->FrameOUT.FrameInBuffer = false;\r
+                       RNDISInterfaceInfo->State.FrameOUT.FrameInBuffer = false;\r
                }\r
        }\r
 }                                                      \r
 \r
-void USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
+void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo)\r
 {\r
        /* Note: Only a single buffer is used for both the received message and its response to save SRAM. Because of\r
                 this, response bytes should be filled in order so that they do not clobber unread data in the buffer. */\r
 \r
-       RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
+       RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
 \r
        switch (MessageHeader->MessageType)\r
        {\r
                case REMOTE_NDIS_INITIALIZE_MSG:\r
-                       RNDISInterfaceInfo->ResponseReady = true;\r
+                       RNDISInterfaceInfo->State.ResponseReady = true;\r
                        \r
-                       RNDIS_INITIALIZE_MSG_t*   INITIALIZE_Message  = (RNDIS_INITIALIZE_MSG_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
-                       RNDIS_INITIALIZE_CMPLT_t* INITIALIZE_Response = (RNDIS_INITIALIZE_CMPLT_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
+                       RNDIS_Initialize_Message_t*  INITIALIZE_Message  =\r
+                                      (RNDIS_Initialize_Message_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
+                       RNDIS_Initialize_Complete_t* INITIALIZE_Response =\r
+                                      (RNDIS_Initialize_Complete_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
                        \r
                        INITIALIZE_Response->MessageType           = REMOTE_NDIS_INITIALIZE_CMPLT;\r
-                       INITIALIZE_Response->MessageLength         = sizeof(RNDIS_INITIALIZE_CMPLT_t);\r
+                       INITIALIZE_Response->MessageLength         = sizeof(RNDIS_Initialize_Complete_t);\r
                        INITIALIZE_Response->RequestId             = INITIALIZE_Message->RequestId;\r
                        INITIALIZE_Response->Status                = REMOTE_NDIS_STATUS_SUCCESS;\r
                        \r
@@ -230,44 +237,44 @@ void USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceI
                        INITIALIZE_Response->DeviceFlags           = REMOTE_NDIS_DF_CONNECTIONLESS;\r
                        INITIALIZE_Response->Medium                = REMOTE_NDIS_MEDIUM_802_3;\r
                        INITIALIZE_Response->MaxPacketsPerTransfer = 1;\r
-                       INITIALIZE_Response->MaxTransferSize       = (sizeof(RNDIS_PACKET_MSG_t) + ETHERNET_FRAME_SIZE_MAX);\r
+                       INITIALIZE_Response->MaxTransferSize       = (sizeof(RNDIS_Packet_Message_t) + ETHERNET_FRAME_SIZE_MAX);\r
                        INITIALIZE_Response->PacketAlignmentFactor = 0;\r
                        INITIALIZE_Response->AFListOffset          = 0;\r
                        INITIALIZE_Response->AFListSize            = 0;\r
                        \r
-                       RNDISInterfaceInfo->CurrRNDISState = RNDIS_Initialized;\r
+                       RNDISInterfaceInfo->State.CurrRNDISState = RNDIS_Initialized;\r
                \r
                        break;\r
                case REMOTE_NDIS_HALT_MSG:\r
-                       RNDISInterfaceInfo->ResponseReady = false;\r
+                       RNDISInterfaceInfo->State.ResponseReady = false;\r
                        MessageHeader->MessageLength = 0;\r
 \r
-                       RNDISInterfaceInfo->CurrRNDISState = RNDIS_Uninitialized;\r
+                       RNDISInterfaceInfo->State.CurrRNDISState = RNDIS_Uninitialized;\r
 \r
                        break;\r
                case REMOTE_NDIS_QUERY_MSG:\r
-                       RNDISInterfaceInfo->ResponseReady = true;\r
+                       RNDISInterfaceInfo->State.ResponseReady = true;\r
                                                \r
-                       RNDIS_QUERY_MSG_t*   QUERY_Message  = (RNDIS_QUERY_MSG_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
-                       RNDIS_QUERY_CMPLT_t* QUERY_Response = (RNDIS_QUERY_CMPLT_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
-                       uint32_t             Query_Oid      = QUERY_Message->Oid;\r
+                       RNDIS_Query_Message_t*  QUERY_Message  = (RNDIS_Query_Message_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
+                       RNDIS_Query_Complete_t* QUERY_Response = (RNDIS_Query_Complete_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
+                       uint32_t                Query_Oid      = QUERY_Message->Oid;\r
                                                \r
-                       void*     QueryData                 = &RNDISInterfaceInfo->RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
+                       void*     QueryData                 = &RNDISInterfaceInfo->State.RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
                                                                                                      QUERY_Message->InformationBufferOffset];\r
-                       void*     ResponseData              = &RNDISInterfaceInfo->RNDISMessageBuffer[sizeof(RNDIS_QUERY_CMPLT_t)];             \r
+                       void*     ResponseData              = &RNDISInterfaceInfo->State.RNDISMessageBuffer[sizeof(RNDIS_Query_Complete_t)];            \r
                        uint16_t  ResponseSize;\r
 \r
                        QUERY_Response->MessageType         = REMOTE_NDIS_QUERY_CMPLT;\r
-                       QUERY_Response->MessageLength       = sizeof(RNDIS_QUERY_CMPLT_t);\r
+                       QUERY_Response->MessageLength       = sizeof(RNDIS_Query_Complete_t);\r
                                                \r
-                       if (USB_RNDIS_ProcessNDISQuery(RNDISInterfaceInfo, Query_Oid, QueryData, QUERY_Message->InformationBufferLength,\r
-                                                      ResponseData, &ResponseSize))\r
+                       if (RNDIS_Device_ProcessNDISQuery(RNDISInterfaceInfo, Query_Oid, QueryData, QUERY_Message->InformationBufferLength,\r
+                                                         ResponseData, &ResponseSize))\r
                        {\r
                                QUERY_Response->Status                  = REMOTE_NDIS_STATUS_SUCCESS;\r
                                QUERY_Response->MessageLength          += ResponseSize;\r
                                                        \r
                                QUERY_Response->InformationBufferLength = ResponseSize;\r
-                               QUERY_Response->InformationBufferOffset = (sizeof(RNDIS_QUERY_CMPLT_t) - sizeof(RNDIS_Message_Header_t));\r
+                               QUERY_Response->InformationBufferOffset = (sizeof(RNDIS_Query_Complete_t) - sizeof(RNDIS_Message_Header_t));\r
                        }\r
                        else\r
                        {                               \r
@@ -279,44 +286,46 @@ void USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceI
                        \r
                        break;\r
                case REMOTE_NDIS_SET_MSG:\r
-                       RNDISInterfaceInfo->ResponseReady = true;\r
+                       RNDISInterfaceInfo->State.ResponseReady = true;\r
                        \r
-                       RNDIS_SET_MSG_t*   SET_Message  = (RNDIS_SET_MSG_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
-                       RNDIS_SET_CMPLT_t* SET_Response = (RNDIS_SET_CMPLT_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
-                       uint32_t           SET_Oid      = SET_Message->Oid;\r
+                       RNDIS_Set_Message_t*  SET_Message  = (RNDIS_Set_Message_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
+                       RNDIS_Set_Complete_t* SET_Response = (RNDIS_Set_Complete_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
+                       uint32_t              SET_Oid      = SET_Message->Oid;\r
 \r
                        SET_Response->MessageType       = REMOTE_NDIS_SET_CMPLT;\r
-                       SET_Response->MessageLength     = sizeof(RNDIS_SET_CMPLT_t);\r
+                       SET_Response->MessageLength     = sizeof(RNDIS_Set_Complete_t);\r
                        SET_Response->RequestId         = SET_Message->RequestId;\r
 \r
-                       void* SetData                   = &RNDISInterfaceInfo->RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
+                       void* SetData                   = &RNDISInterfaceInfo->State.RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
                                                                                                  SET_Message->InformationBufferOffset];\r
                                                \r
-                       if (USB_RNDIS_ProcessNDISSet(RNDISInterfaceInfo, SET_Oid, SetData, SET_Message->InformationBufferLength))\r
+                       if (RNDIS_Device_ProcessNDISSet(RNDISInterfaceInfo, SET_Oid, SetData, SET_Message->InformationBufferLength))\r
                          SET_Response->Status        = REMOTE_NDIS_STATUS_SUCCESS;\r
                        else\r
                          SET_Response->Status        = REMOTE_NDIS_STATUS_NOT_SUPPORTED;\r
 \r
                        break;\r
                case REMOTE_NDIS_RESET_MSG:\r
-                       RNDISInterfaceInfo->ResponseReady = true;\r
+                       RNDISInterfaceInfo->State.ResponseReady = true;\r
                        \r
-                       RNDIS_RESET_CMPLT_t* RESET_Response = (RNDIS_RESET_CMPLT_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
+                       RNDIS_Reset_Complete_t* RESET_Response = (RNDIS_Reset_Complete_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
 \r
                        RESET_Response->MessageType         = REMOTE_NDIS_RESET_CMPLT;\r
-                       RESET_Response->MessageLength       = sizeof(RNDIS_RESET_CMPLT_t);\r
+                       RESET_Response->MessageLength       = sizeof(RNDIS_Reset_Complete_t);\r
                        RESET_Response->Status              = REMOTE_NDIS_STATUS_SUCCESS;\r
                        RESET_Response->AddressingReset     = 0;\r
 \r
                        break;\r
                case REMOTE_NDIS_KEEPALIVE_MSG:\r
-                       RNDISInterfaceInfo->ResponseReady = true;\r
+                       RNDISInterfaceInfo->State.ResponseReady = true;\r
                        \r
-                       RNDIS_KEEPALIVE_MSG_t*   KEEPALIVE_Message  = (RNDIS_KEEPALIVE_MSG_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
-                       RNDIS_KEEPALIVE_CMPLT_t* KEEPALIVE_Response = (RNDIS_KEEPALIVE_CMPLT_t*)&RNDISInterfaceInfo->RNDISMessageBuffer;\r
+                       RNDIS_KeepAlive_Message_t*  KEEPALIVE_Message  =\r
+                                       (RNDIS_KeepAlive_Message_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
+                       RNDIS_KeepAlive_Complete_t* KEEPALIVE_Response =\r
+                                       (RNDIS_KeepAlive_Complete_t*)&RNDISInterfaceInfo->State.RNDISMessageBuffer;\r
 \r
                        KEEPALIVE_Response->MessageType     = REMOTE_NDIS_KEEPALIVE_CMPLT;\r
-                       KEEPALIVE_Response->MessageLength   = sizeof(RNDIS_KEEPALIVE_CMPLT_t);\r
+                       KEEPALIVE_Response->MessageLength   = sizeof(RNDIS_KeepAlive_Complete_t);\r
                        KEEPALIVE_Response->RequestId       = KEEPALIVE_Message->RequestId;\r
                        KEEPALIVE_Response->Status          = REMOTE_NDIS_STATUS_SUCCESS;\r
                        \r
@@ -324,9 +333,9 @@ void USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceI
        }\r
 }\r
 \r
-static bool USB_RNDIS_ProcessNDISQuery(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo,\r
-                                       uint32_t OId, void* QueryData, uint16_t QuerySize,\r
-                                       void* ResponseData, uint16_t* ResponseSize)\r
+static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo,\r
+                                          const uint32_t OId, void* const QueryData, const uint16_t QuerySize,\r
+                                          void* ResponseData, uint16_t* const ResponseSize)\r
 {\r
        switch (OId)\r
        {\r
@@ -372,9 +381,9 @@ static bool USB_RNDIS_ProcessNDISQuery(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo
                        \r
                        return true;\r
                case OID_GEN_VENDOR_DESCRIPTION:\r
-                       *ResponseSize = (strlen(RNDISInterfaceInfo->AdapterVendorDescription) + 1);\r
+                       *ResponseSize = (strlen(RNDISInterfaceInfo->Config.AdapterVendorDescription) + 1);\r
                        \r
-                       memcpy(ResponseData, RNDISInterfaceInfo->AdapterVendorDescription, *ResponseSize);\r
+                       memcpy(ResponseData, RNDISInterfaceInfo->Config.AdapterVendorDescription, *ResponseSize);\r
                        \r
                        return true;\r
                case OID_GEN_MEDIA_CONNECT_STATUS:\r
@@ -394,7 +403,7 @@ static bool USB_RNDIS_ProcessNDISQuery(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo
                case OID_802_3_CURRENT_ADDRESS:\r
                        *ResponseSize = sizeof(MAC_Address_t);\r
                        \r
-                       memcpy(ResponseData, &RNDISInterfaceInfo->AdapterMACAddress, sizeof(MAC_Address_t));\r
+                       memcpy(ResponseData, &RNDISInterfaceInfo->Config.AdapterMACAddress, sizeof(MAC_Address_t));\r
 \r
                        return true;\r
                case OID_802_3_MAXIMUM_LIST_SIZE:\r
@@ -407,7 +416,7 @@ static bool USB_RNDIS_ProcessNDISQuery(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo
                case OID_GEN_CURRENT_PACKET_FILTER:\r
                        *ResponseSize = sizeof(uint32_t);\r
                        \r
-                       *((uint32_t*)ResponseData) = RNDISInterfaceInfo->CurrPacketFilter;\r
+                       *((uint32_t*)ResponseData) = RNDISInterfaceInfo->State.CurrPacketFilter;\r
                \r
                        return true;                    \r
                case OID_GEN_XMIT_OK:\r
@@ -436,13 +445,14 @@ static bool USB_RNDIS_ProcessNDISQuery(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo
        }\r
 }\r
 \r
-static bool USB_RNDIS_ProcessNDISSet(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo, uint32_t OId, void* SetData, uint16_t SetSize)\r
+static bool RNDIS_Device_ProcessNDISSet(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, const uint32_t OId, void* SetData,\r
+                                        const uint16_t SetSize)\r
 {\r
        switch (OId)\r
        {\r
                case OID_GEN_CURRENT_PACKET_FILTER:\r
-                       RNDISInterfaceInfo->CurrPacketFilter = *((uint32_t*)SetData);\r
-                       RNDISInterfaceInfo->CurrRNDISState = ((RNDISInterfaceInfo->CurrPacketFilter) ?\r
+                       RNDISInterfaceInfo->State.CurrPacketFilter = *((uint32_t*)SetData);\r
+                       RNDISInterfaceInfo->State.CurrRNDISState = ((RNDISInterfaceInfo->State.CurrPacketFilter) ?\r
                                                              RNDIS_Data_Initialized : RNDIS_Data_Initialized);\r
                        \r
                        return true;\r
@@ -454,3 +464,5 @@ static bool USB_RNDIS_ProcessNDISSet(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo,
                        return false;\r
        }\r
 }\r
+\r
+#endif\r