From afe6ae14023c7040befe73e49d00077d3425c564 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 14 Jun 2009 15:55:13 +0000 Subject: Add host mode USB Class driver stubs, add beginnings of a CDC host class driver. Split out common defines/types from class drivers into a seperate common class driver directory. Make central USB Class driver dispatch headers, used for both device and host modes. --- LUFA/Drivers/USB/Class/Device/RNDIS.h | 241 ++-------------------------------- 1 file changed, 9 insertions(+), 232 deletions(-) (limited to 'LUFA/Drivers/USB/Class/Device/RNDIS.h') diff --git a/LUFA/Drivers/USB/Class/Device/RNDIS.h b/LUFA/Drivers/USB/Class/Device/RNDIS.h index d0d66f89c..896266e45 100644 --- a/LUFA/Drivers/USB/Class/Device/RNDIS.h +++ b/LUFA/Drivers/USB/Class/Device/RNDIS.h @@ -28,255 +28,32 @@ this software. */ -/** \ingroup Group_USBDeviceClassDrivers - * @defgroup Group_USBClassRNDISDevice RNDIS Device Class Driver - LUFA/Drivers/Class/Device/RNDIS.h - * - * \section Sec_Dependencies Module Source Dependencies - * The following files must be built with any user project that uses this module: - * - LUFA/Drivers/USB/Class/Device/RNDIS.c +/** \ingroup Group_USBClassRNDIS + * @defgroup Group_USBClassRNDISDevice RNDIS Class Device Mode Driver * * \section Module Description - * Functions, macros, variables, enums and types related to the management of USB RNDIS Ethernet - * interfaces within a USB device. + * Device Mode USB Class driver framework interface, for the RNDIS USB Class driver. * * @{ */ -#ifndef _RNDIS_CLASS_H_ -#define _RNDIS_CLASS_H_ +#ifndef _RNDIS_CLASS_DEVICE_H_ +#define _RNDIS_CLASS_DEVICE_H_ /* Includes: */ - #include - #include "../../USB.h" + #include "../Common/RNDIS.h" #include "RNDISConstants.h" + #include + /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) extern "C" { #endif - /* Macros: */ - /** Implemented RNDIS Version Major */ - #define REMOTE_NDIS_VERSION_MAJOR 0x01 - - /** Implemented RNDIS Version Minor */ - #define REMOTE_NDIS_VERSION_MINOR 0x00 - - /** RNDIS request to issue a host-to-device NDIS command */ - #define REQ_SendEncapsulatedCommand 0x00 - - /** RNDIS request to issue a device-to-host NDIS response */ - #define REQ_GetEncapsulatedResponse 0x01 - - /** Maximum size in bytes of a RNDIS control message which can be sent or received */ - #define RNDIS_MESSAGE_BUFFER_SIZE 128 - - /** Maximum size in bytes of an Ethernet frame which can be sent or received */ - #define ETHERNET_FRAME_SIZE_MAX 1500 - - /** Notification request value for a RNDIS Response Available notification */ - #define NOTIF_ResponseAvailable 1 - - /* Enums: */ - /** Enum for the possible NDIS adapter states. */ - enum RNDIS_States_t - { - RNDIS_Uninitialized = 0, /**< Adapter currently uninitialized */ - RNDIS_Initialized = 1, /**< Adapter currently initialized but not ready for data transfers */ - RNDIS_Data_Initialized = 2, /**< Adapter currently initialized and ready for data transfers */ - }; - - /** Enum for the NDIS hardware states */ - enum NDIS_Hardware_Status_t - { - NDIS_HardwareStatus_Ready, /**< Hardware Ready to accept commands from the host */ - NDIS_HardwareStatus_Initializing, /**< Hardware busy initializing */ - NDIS_HardwareStatus_Reset, /**< Hardware reset */ - NDIS_HardwareStatus_Closing, /**< Hardware currently closing */ - NDIS_HardwareStatus_NotReady /**< Hardware not ready to accept commands from the host */ - }; - - /* Type Defines: */ - /** Type define for a physical MAC address of a device on a network */ - typedef struct - { - uint8_t Octets[6]; /**< Individual bytes of a MAC address */ - } MAC_Address_t; - - /** Type define for a RNDIS message header, sent before RNDIS messages */ - typedef struct - { - uint32_t MessageType; /**< RNDIS message type, a REMOTE_NDIS_*_MSG constant */ - uint32_t MessageLength; /**< Total length of the RNDIS message, in bytes */ - } RNDIS_Message_Header_t; - - /** Type define for an Ethernet frame buffer. */ - typedef struct - { - uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents */ - uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer */ - bool FrameInBuffer; /**< Indicates if a frame is currently stored in the buffer */ - } Ethernet_Frame_Info_t; - - /** Type define for a RNDIS packet message, used to encapsulate Ethernet packets sent to and from the adapter */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t DataOffset; - uint32_t DataLength; - uint32_t OOBDataOffset; - uint32_t OOBDataLength; - uint32_t NumOOBDataElements; - uint32_t PerPacketInfoOffset; - uint32_t PerPacketInfoLength; - uint32_t VcHandle; - uint32_t Reserved; - } RNDIS_PACKET_MSG_t; - - /** Type define for a RNDIS Initialize command message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - - uint32_t MajorVersion; - uint32_t MinorVersion; - uint32_t MaxTransferSize; - } RNDIS_INITIALIZE_MSG_t; - - /** Type define for a RNDIS Initialize complete response message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - uint32_t Status; - - uint32_t MajorVersion; - uint32_t MinorVersion; - uint32_t DeviceFlags; - uint32_t Medium; - uint32_t MaxPacketsPerTransfer; - uint32_t MaxTransferSize; - uint32_t PacketAlignmentFactor; - uint32_t AFListOffset; - uint32_t AFListSize; - } RNDIS_INITIALIZE_CMPLT_t; - - /** Type define for a RNDIS Keepalive command message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - } RNDIS_KEEPALIVE_MSG_t; - - /** Type define for a RNDIS Keepalive complete message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - uint32_t Status; - } RNDIS_KEEPALIVE_CMPLT_t; - - /** Type define for a RNDIS Reset complete message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t Status; - - uint32_t AddressingReset; - } RNDIS_RESET_CMPLT_t; - - /** Type define for a RNDIS Set command message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - - uint32_t Oid; - uint32_t InformationBufferLength; - uint32_t InformationBufferOffset; - uint32_t DeviceVcHandle; - } RNDIS_SET_MSG_t; - - /** Type define for a RNDIS Set complete response message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - uint32_t Status; - } RNDIS_SET_CMPLT_t; - - /** Type define for a RNDIS Query command message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - - uint32_t Oid; - uint32_t InformationBufferLength; - uint32_t InformationBufferOffset; - uint32_t DeviceVcHandle; - } RNDIS_QUERY_MSG_t; - - /** Type define for a RNDIS Query complete response message */ - typedef struct - { - uint32_t MessageType; - uint32_t MessageLength; - uint32_t RequestId; - uint32_t Status; - - uint32_t InformationBufferLength; - uint32_t InformationBufferOffset; - } RNDIS_QUERY_CMPLT_t; - - /** Class state structure. An instance of this structure should be made for each RNDIS interface - * within the user application, and passed to each of the RNDIS class driver functions as the - * RNDISInterfaceInfo parameter. The contents of this structure should be set to their correct - * values when used, or ommitted to force the library to use default values. - */ - typedef struct - { - uint8_t ControlInterfaceNumber; /**< Interface number of the CDC control interface within the device */ - - uint8_t DataINEndpointNumber; /**< Endpoint number of the CDC interface's IN data endpoint */ - uint16_t DataINEndpointSize; /**< Size in bytes of the CDC interface's IN data endpoint */ - - uint8_t DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */ - uint16_t DataOUTEndpointSize; /**< Size in bytes of the CDC interface's OUT data endpoint */ - - uint8_t NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */ - uint16_t NotificationEndpointSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */ - - char* AdapterVendorDescription; /**< String description of the adapter vendor */ - MAC_Address_t AdapterMACAddress; /**< MAC address of the adapter */ - - uint8_t RNDISMessageBuffer[RNDIS_MESSAGE_BUFFER_SIZE]; /**< Buffer to hold RNDIS messages to and from the host, - * managed by the class driver - */ - bool ResponseReady; /**< Internal flag indicating if a RNDIS message is waiting to be returned to the host */ - uint8_t CurrRNDISState; /**< Current RNDIS state of the adapter, a value from the RNDIS_States_t enum */ - uint32_t CurrPacketFilter; /**< Current packet filter mode, used internally by the class driver */ - Ethernet_Frame_Info_t FrameIN; /**< Structure holding the last received Ethernet frame from the host, for user - * processing - */ - Ethernet_Frame_Info_t FrameOUT; /**< Structure holding the next Ethernet frame to send to the host, populated by the - * user application - */ - } USB_ClassInfo_RNDIS_t; - /* Function Prototypes: */ - #if defined(INCLUDE_FROM_RNDIS_CLASS_C) + #if defined(INCLUDE_FROM_RNDIS_CLASS_DEVICE_C) static void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo); static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo, uint32_t OId, void* QueryData, uint16_t QuerySize, -- cgit v1.2.3