diff options
| author | Jack Humbert <jack.humb@gmail.com> | 2017-07-07 11:55:23 -0400 |
|---|---|---|
| committer | Jack Humbert <jack.humb@gmail.com> | 2017-07-07 11:55:23 -0400 |
| commit | 8655d4f4948b2deef7844503c8d690f23ac1a062 (patch) | |
| tree | b2c6effc9d6cd5b5b43933a1e53b8bf17e9e82cf /lib/lufa/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h | |
| parent | 1896c76a2928c96f9ab7947bec2ef8dd37623cff (diff) | |
| parent | 60b30c036397cb5627fa374bb930794b225daa29 (diff) | |
| download | qmk_firmware-8655d4f4948b2deef7844503c8d690f23ac1a062.tar.gz qmk_firmware-8655d4f4948b2deef7844503c8d690f23ac1a062.zip | |
Merge commit '60b30c036397cb5627fa374bb930794b225daa29' as 'lib/lufa'
Diffstat (limited to 'lib/lufa/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h')
| -rw-r--r-- | lib/lufa/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/lib/lufa/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h b/lib/lufa/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h new file mode 100644 index 000000000..761bc2790 --- /dev/null +++ b/lib/lufa/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h | |||
| @@ -0,0 +1,207 @@ | |||
| 1 | /* | ||
| 2 | LUFA Library | ||
| 3 | Copyright (C) Dean Camera, 2017. | ||
| 4 | |||
| 5 | dean [at] fourwalledcubicle [dot] com | ||
| 6 | www.lufa-lib.org | ||
| 7 | */ | ||
| 8 | |||
| 9 | /* | ||
| 10 | Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||
| 11 | |||
| 12 | Permission to use, copy, modify, distribute, and sell this | ||
| 13 | software and its documentation for any purpose is hereby granted | ||
| 14 | without fee, provided that the above copyright notice appear in | ||
| 15 | all copies and that both that the copyright notice and this | ||
| 16 | permission notice and warranty disclaimer appear in supporting | ||
| 17 | documentation, and that the name of the author not be used in | ||
| 18 | advertising or publicity pertaining to distribution of the | ||
| 19 | software without specific, written prior permission. | ||
| 20 | |||
| 21 | The author disclaims all warranties with regard to this | ||
| 22 | software, including all implied warranties of merchantability | ||
| 23 | and fitness. In no event shall the author be liable for any | ||
| 24 | special, indirect or consequential damages or any damages | ||
| 25 | whatsoever resulting from loss of use, data or profits, whether | ||
| 26 | in an action of contract, negligence or other tortious action, | ||
| 27 | arising out of or in connection with the use or performance of | ||
| 28 | this software. | ||
| 29 | */ | ||
| 30 | |||
| 31 | /** \file | ||
| 32 | * \brief Device mode driver for the library USB RNDIS Class driver. | ||
| 33 | * | ||
| 34 | * Device mode driver for the library USB RNDIS Class driver. | ||
| 35 | * | ||
| 36 | * \note This file should not be included directly. It is automatically included as needed by the USB module driver | ||
| 37 | * dispatch header located in LUFA/Drivers/USB.h. | ||
| 38 | */ | ||
| 39 | |||
| 40 | /** \ingroup Group_USBClassRNDIS | ||
| 41 | * \defgroup Group_USBClassRNDISDevice RNDIS Class Device Mode Driver | ||
| 42 | * | ||
| 43 | * \section Sec_USBClassRNDISDevice_Dependencies Module Source Dependencies | ||
| 44 | * The following files must be built with any user project that uses this module: | ||
| 45 | * - LUFA/Drivers/USB/Class/Device/RNDISClassDevice.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i> | ||
| 46 | * | ||
| 47 | * \section Sec_USBClassRNDISDevice_ModDescription Module Description | ||
| 48 | * Device Mode USB Class driver framework interface, for the RNDIS USB Class driver. | ||
| 49 | * | ||
| 50 | * @{ | ||
| 51 | */ | ||
| 52 | |||
| 53 | #ifndef _RNDIS_CLASS_DEVICE_H_ | ||
| 54 | #define _RNDIS_CLASS_DEVICE_H_ | ||
| 55 | |||
| 56 | /* Includes: */ | ||
| 57 | #include "../../USB.h" | ||
| 58 | #include "../Common/RNDISClassCommon.h" | ||
| 59 | |||
| 60 | /* Enable C linkage for C++ Compilers: */ | ||
| 61 | #if defined(__cplusplus) | ||
| 62 | extern "C" { | ||
| 63 | #endif | ||
| 64 | |||
| 65 | /* Preprocessor Checks: */ | ||
| 66 | #if !defined(__INCLUDE_FROM_RNDIS_DRIVER) | ||
| 67 | #error Do not include this file directly. Include LUFA/Drivers/USB.h instead. | ||
| 68 | #endif | ||
| 69 | |||
| 70 | /* Public Interface - May be used in end-application: */ | ||
| 71 | /* Type Defines: */ | ||
| 72 | /** \brief RNDIS Class Device Mode Configuration and State Structure. | ||
| 73 | * | ||
| 74 | * Class state structure. An instance of this structure should be made for each RNDIS interface | ||
| 75 | * within the user application, and passed to each of the RNDIS class driver functions as the | ||
| 76 | * \c RNDISInterfaceInfo parameter. This stores each RNDIS interface's configuration and state information. | ||
| 77 | */ | ||
| 78 | typedef struct | ||
| 79 | { | ||
| 80 | struct | ||
| 81 | { | ||
| 82 | uint8_t ControlInterfaceNumber; /**< Interface number of the RNDIS control interface within the device. */ | ||
| 83 | |||
| 84 | USB_Endpoint_Table_t DataINEndpoint; /**< Data IN endpoint configuration table. */ | ||
| 85 | USB_Endpoint_Table_t DataOUTEndpoint; /**< Data OUT endpoint configuration table. */ | ||
| 86 | USB_Endpoint_Table_t NotificationEndpoint; /**< Notification IN Endpoint configuration table. */ | ||
| 87 | |||
| 88 | char* AdapterVendorDescription; /**< String description of the adapter vendor. */ | ||
| 89 | MAC_Address_t AdapterMACAddress; /**< MAC address of the adapter. */ | ||
| 90 | |||
| 91 | uint8_t* MessageBuffer; /**< Buffer where RNDIS messages can be stored by the internal driver. This | ||
| 92 | * should be at least 132 bytes in length for minimal functionality. */ | ||
| 93 | uint16_t MessageBufferLength; /**< Length in bytes of the \ref MessageBuffer RNDIS buffer. */ | ||
| 94 | } Config; /**< Config data for the USB class interface within the device. All elements in this section | ||
| 95 | * <b>must</b> be set or the interface will fail to enumerate and operate correctly. | ||
| 96 | */ | ||
| 97 | struct | ||
| 98 | { | ||
| 99 | bool ResponseReady; /**< Internal flag indicating if a RNDIS message is waiting to be returned to the host. */ | ||
| 100 | uint8_t CurrRNDISState; /**< Current RNDIS state of the adapter, a value from the \ref RNDIS_States_t enum. */ | ||
| 101 | uint32_t CurrPacketFilter; /**< Current packet filter mode, used internally by the class driver. */ | ||
| 102 | } State; /**< State data for the USB class interface within the device. All elements in this section | ||
| 103 | * are reset to their defaults when the interface is enumerated. | ||
| 104 | */ | ||
| 105 | } USB_ClassInfo_RNDIS_Device_t; | ||
| 106 | |||
| 107 | /* Function Prototypes: */ | ||
| 108 | /** Configures the endpoints of a given RNDIS interface, ready for use. This should be linked to the library | ||
| 109 | * \ref EVENT_USB_Device_ConfigurationChanged() event so that the endpoints are configured when the configuration | ||
| 110 | * containing the given RNDIS interface is selected. | ||
| 111 | * | ||
| 112 | * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing a RNDIS Class configuration and state. | ||
| 113 | * | ||
| 114 | * \return Boolean \c true if the endpoints were successfully configured, \c false otherwise. | ||
| 115 | */ | ||
| 116 | bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); | ||
| 117 | |||
| 118 | /** Processes incoming control requests from the host, that are directed to the given RNDIS class interface. This should be | ||
| 119 | * linked to the library \ref EVENT_USB_Device_ControlRequest() event. | ||
| 120 | * | ||
| 121 | * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing a RNDIS Class configuration and state. | ||
| 122 | */ | ||
| 123 | void RNDIS_Device_ProcessControlRequest(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); | ||
| 124 | |||
| 125 | /** General management task for a given RNDIS class interface, required for the correct operation of the interface. This should | ||
| 126 | * be called frequently in the main program loop, before the master USB management task \ref USB_USBTask(). | ||
| 127 | * | ||
| 128 | * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing a RNDIS Class configuration and state. | ||
| 129 | */ | ||
| 130 | void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); | ||
| 131 | |||
| 132 | /** Determines if a packet is currently waiting for the device to read in and process. | ||
| 133 | * | ||
| 134 | * \pre This function must only be called when the Device state machine is in the \ref DEVICE_STATE_Configured state or the | ||
| 135 | * call will fail. | ||
| 136 | * | ||
| 137 | * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing an RNDIS Class configuration and state. | ||
| 138 | * | ||
| 139 | * \return Boolean \c true if a packet is waiting to be read in by the host, \c false otherwise. | ||
| 140 | */ | ||
| 141 | bool RNDIS_Device_IsPacketReceived(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); | ||
| 142 | |||
| 143 | /** Retrieves the next pending packet from the device, discarding the remainder of the RNDIS packet header to leave | ||
| 144 | * only the packet contents for processing by the device in the nominated buffer. | ||
| 145 | * | ||
| 146 | * \pre This function must only be called when the Device state machine is in the \ref DEVICE_STATE_Configured state or the | ||
| 147 | * call will fail. | ||
| 148 | * | ||
| 149 | * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing an RNDIS Class configuration and state. | ||
| 150 | * \param[out] Buffer Pointer to a buffer where the packer data is to be written to. | ||
| 151 | * \param[out] PacketLength Pointer to where the length in bytes of the read packet is to be stored. | ||
| 152 | * | ||
| 153 | * \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum. | ||
| 154 | */ | ||
| 155 | uint8_t RNDIS_Device_ReadPacket(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, | ||
| 156 | void* Buffer, | ||
| 157 | uint16_t* const PacketLength) ATTR_NON_NULL_PTR_ARG(1); | ||
| 158 | |||
| 159 | /** Sends the given packet to the attached RNDIS device, after adding a RNDIS packet message header. | ||
| 160 | * | ||
| 161 | * \pre This function must only be called when the Device state machine is in the \ref DEVICE_STATE_Configured state or the | ||
| 162 | * call will fail. | ||
| 163 | * | ||
| 164 | * \param[in,out] RNDISInterfaceInfo Pointer to a structure containing an RNDIS Class configuration and state. | ||
| 165 | * \param[in] Buffer Pointer to a buffer where the packer data is to be read from. | ||
| 166 | * \param[in] PacketLength Length in bytes of the packet to send. | ||
| 167 | * | ||
| 168 | * \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum. | ||
| 169 | */ | ||
| 170 | uint8_t RNDIS_Device_SendPacket(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, | ||
| 171 | void* Buffer, | ||
| 172 | const uint16_t PacketLength) ATTR_NON_NULL_PTR_ARG(1); | ||
| 173 | |||
| 174 | /* Private Interface - For use in library only: */ | ||
| 175 | #if !defined(__DOXYGEN__) | ||
| 176 | /* Macros: */ | ||
| 177 | #define RNDIS_DEVICE_MIN_MESSAGE_BUFFER_LENGTH sizeof(AdapterSupportedOIDList) + sizeof(RNDIS_Query_Complete_t) | ||
| 178 | |||
| 179 | /* Function Prototypes: */ | ||
| 180 | #if defined(__INCLUDE_FROM_RNDIS_DEVICE_C) | ||
| 181 | static void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo) | ||
| 182 | ATTR_NON_NULL_PTR_ARG(1); | ||
| 183 | static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, | ||
| 184 | const uint32_t OId, | ||
| 185 | void* const QueryData, | ||
| 186 | const uint16_t QuerySize, | ||
| 187 | void* ResponseData, | ||
| 188 | uint16_t* const ResponseSize) ATTR_NON_NULL_PTR_ARG(1) | ||
| 189 | ATTR_NON_NULL_PTR_ARG(5) ATTR_NON_NULL_PTR_ARG(6); | ||
| 190 | static bool RNDIS_Device_ProcessNDISSet(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, | ||
| 191 | const uint32_t OId, | ||
| 192 | const void* SetData, | ||
| 193 | const uint16_t SetSize) ATTR_NON_NULL_PTR_ARG(1) | ||
| 194 | ATTR_NON_NULL_PTR_ARG(3); | ||
| 195 | #endif | ||
| 196 | |||
| 197 | #endif | ||
| 198 | |||
| 199 | /* Disable C linkage for C++ Compilers: */ | ||
| 200 | #if defined(__cplusplus) | ||
| 201 | } | ||
| 202 | #endif | ||
| 203 | |||
| 204 | #endif | ||
| 205 | |||
| 206 | /** @} */ | ||
| 207 | |||
