- /** RNDIS request to issue a host-to-device NDIS command */\r
- #define REQ_SendEncapsulatedCommand 0x00\r
-\r
- /** RNDIS request to issue a device-to-host NDIS response */\r
- #define REQ_GetEncapsulatedResponse 0x01\r
- \r
- #define RNDIS_MESSAGE_BUFFER_SIZE 128\r
-\r
- #define ETHERNET_FRAME_SIZE_MAX 1500\r
- \r
- #define NOTIF_ResponseAvailable 1\r
- \r
- /* Enums: */\r
- /** Enum for the possible NDIS adapter states. */\r
- enum RNDIS_States_t\r
- {\r
- RNDIS_Uninitialized = 0, /**< Adapter currently uninitialized */\r
- RNDIS_Initialized = 1, /**< Adapter currently initialized but not ready for data transfers */\r
- RNDIS_Data_Initialized = 2, /**< Adapter currently initialized and ready for data transfers */\r
- };\r
-\r
- /** Enum for the NDIS hardware states */\r
- enum NDIS_Hardware_Status_t\r
- {\r
- NdisHardwareStatusReady, /**< Hardware Ready to accept commands from the host */\r
- NdisHardwareStatusInitializing, /**< Hardware busy initializing */\r
- NdisHardwareStatusReset, /**< Hardware reset */\r
- NdisHardwareStatusClosing, /**< Hardware currently closing */\r
- NdisHardwareStatusNotReady /**< Hardware not ready to accept commands from the host */\r
- };\r
- \r
- /* Type Defines: */\r
- /** Type define for a physical MAC address of a device on a network */\r
- typedef struct\r
- {\r
- uint8_t Octets[6]; /**< Individual bytes of a MAC address */\r
- } MAC_Address_t;\r
-\r
- /** Type define for a RNDIS message header, sent before RNDIS messages */\r
- typedef struct\r
- {\r
- uint32_t MessageType; /**< RNDIS message type, a REMOTE_NDIS_*_MSG constant */\r
- uint32_t MessageLength; /**< Total length of the RNDIS message, in bytes */\r
- } RNDIS_Message_Header_t;\r
-\r
- /** Type define for an Ethernet frame buffer. */\r
- typedef struct\r
- {\r
- uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents */\r
- uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer */\r
- bool FrameInBuffer; /**< Indicates if a frame is currently stored in the buffer */\r
- } Ethernet_Frame_Info_t;\r
-\r
- /** Type define for a RNDIS packet message, used to encapsulate Ethernet packets sent to and from the adapter */\r
- typedef struct\r
- {\r
- uint32_t MessageType;\r
- uint32_t MessageLength;\r
- uint32_t DataOffset;\r
- uint32_t DataLength;\r
- uint32_t OOBDataOffset;\r
- uint32_t OOBDataLength;\r
- uint32_t NumOOBDataElements;\r
- uint32_t PerPacketInfoOffset;\r
- uint32_t PerPacketInfoLength;\r
- uint32_t VcHandle;\r
- uint32_t Reserved;\r
- } RNDIS_PACKET_MSG_t;\r
-\r
- typedef struct\r
- {\r
- uint8_t ControlInterfaceNumber; /**< Interface number of the CDC control interface within the device */\r
-\r
- uint8_t DataINEndpointNumber; /**< Endpoint number of the CDC interface's IN data endpoint */\r
- uint16_t DataINEndpointSize; /**< Size in bytes of the CDC interface's IN data endpoint */\r
-\r
- uint8_t DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */\r
- uint16_t DataOUTEndpointSize; /**< Size in bytes of the CDC interface's OUT data endpoint */\r
-\r
- uint8_t NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */\r
- uint16_t NotificationEndpointSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */\r
- \r
- char* AdapterVendorDescription;\r
- MAC_Address_t AdapterMACAddress;\r
-\r
- uint8_t RNDISMessageBuffer[RNDIS_MESSAGE_BUFFER_SIZE];\r
- bool ResponseReady;\r
- uint8_t CurrRNDISState;\r
- uint32_t CurrPacketFilter;\r
- Ethernet_Frame_Info_t FrameIN;\r
- Ethernet_Frame_Info_t FrameOUT;\r
- } USB_ClassInfo_RNDIS_t;\r
- \r
- /** Type define for a RNDIS Initialize command message */\r
- typedef struct\r
- {\r
- uint32_t MessageType;\r
- uint32_t MessageLength;\r
- uint32_t RequestId;\r
- \r
- uint32_t MajorVersion;\r
- uint32_t MinorVersion;\r
- uint32_t MaxTransferSize;\r
- } RNDIS_INITIALIZE_MSG_t;\r
- \r
- /** Type define for a RNDIS Initialize complete response message */\r
- typedef struct\r
- {\r
- uint32_t MessageType;\r
- uint32_t MessageLength;\r
- uint32_t RequestId;\r
- uint32_t Status;\r
+ /* Function Prototypes: */\r
+ /** Configures the endpoints of a given RNDIS interface, ready for use. This should be linked to the library\r
+ * \ref EVENT_USB_Device_ConfigurationChanged() event so that the endpoints are configured when the configuration\r
+ * containing the given HID interface is selected.\r
+ *\r
+ * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing a RNDIS Class configuration and state\r
+ *\r
+ * \return Boolean true if the endpoints were successfully configured, false otherwise\r
+ */\r
+ bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+ /** Processes incoming control requests from the host, that are directed to the given RNDIS class interface. This should be\r
+ * linked to the library \ref EVENT_USB_Device_UnhandledControlRequest() event.\r
+ *\r
+ * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing a RNDIS Class configuration and state\r
+ */ \r
+ void RNDIS_Device_ProcessControlRequest(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r