Fix CDC blocking streams in Host mode locking up when the device is removed.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / HID.h
index a852f10..01174c5 100644 (file)
@@ -1,21 +1,21 @@
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
 \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting \r
+  documentation, and that the name of the author not be used in \r
+  advertising or publicity pertaining to distribution of the \r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
                                const struct\r
                                {\r
                                        uint8_t  DataINPipeNumber; /**< Pipe number of the HID interface's IN data pipe */\r
+                                       bool     DataINPipeDoubleBank; /** Indicates if the HID interface's IN data pipe should use double banking */\r
+\r
                                        uint8_t  DataOUTPipeNumber; /**< Pipe number of the HID interface's OUT data pipe */\r
+                                       bool     DataOUTPipeDoubleBank; /** Indicates if the HID interface's OUT data pipe should use double banking */\r
 \r
                                        uint8_t  HIDInterfaceProtocol; /**< HID interface protocol value to match against if a specific\r
                                                                        *   boot subclass protocol is required, either \ref HID_BOOT_MOUSE_PROTOCOL,\r
                                        bool SupportsBootProtocol; /**< Indicates if the current interface instance supports the HID Boot\r
                                                                    *   Protocol when enabled via \ref HID_Host_SetBootProtocol()\r
                                                                    */\r
-                                       bool DeviceUsesOUTPipe; /**< Indicates if the current interface instance uses a seperate OUT data pipe for\r
+                                       bool DeviceUsesOUTPipe; /**< Indicates if the current interface instance uses a separate OUT data pipe for\r
                                                                 *   OUT reports, or if OUT reports are sent via the control pipe instead.\r
                                                                 */\r
-                                       bool UsingBootProtocol; /**< Indicates that the interface is currently initialised in Boot Protocol mode */\r
+                                       bool UsingBootProtocol; /**< Indicates that the interface is currently initialized in Boot Protocol mode */\r
                                        uint16_t HIDReportSize; /**< Size in bytes of the HID report descriptor in the device */\r
                                        \r
                                        uint8_t LargestReportSize; /**< Largest report the device will send, in bytes */\r
                         *  \return A value from the \ref HIDHost_EnumerationFailure_ErrorCodes_t enum\r
                         */\r
                        uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo, uint16_t ConfigDescriptorSize,\r
-                                                       uint8_t* DeviceConfigDescriptor) ATTR_NON_NULL_PTR_ARG(1, 3);\r
+                                                       void* DeviceConfigDescriptor) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);\r
 \r
 \r
                        /** Receives a HID IN report from the attached HID device, when a report has been received on the HID IN Data pipe.\r
+                        *  \r
+                        *  \note The destination buffer should be large enough to accommodate the largest report that the attached device\r
+                        *        can generate.\r
                         *\r
                         *  \param[in,out] HIDInterfaceInfo  Pointer to a structure containing a HID Class host configuration and state\r
                         *  \param[in] Buffer  Buffer to store the received report into\r
                         *\r
                         *  \return An error code from the \ref Pipe_Stream_RW_ErrorCodes_t enum\r
                         */\r
-                       uint8_t HID_Host_ReceiveReport(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo, void* Buffer) ATTR_NON_NULL_PTR_ARG(1, 2);\r
+                       uint8_t HID_Host_ReceiveReport(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo, void* Buffer)\r
+                                                      ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);\r
 \r
                        #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)\r
-                       /** Received a HID IN report from the attached device, by the report ID.\r
+                       /** Receives a HID IN report from the attached device, by the report ID.\r
                         *\r
                         *  \note When the HID_HOST_BOOT_PROTOCOL_ONLY compile time token is defined, this method is unavailable.\r
                         *\r
                         *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum\r
                         */\r
                        uint8_t HID_Host_ReceiveReportByID(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo, const uint8_t ReportID,\r
-                                                          void* Buffer) ATTR_NON_NULL_PTR_ARG(13);\r
+                                                          void* Buffer) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);\r
                        #endif\r
                        \r
                        /** Sends an OUT report to the currently attached HID device, using the device's OUT pipe if available or the device's\r
                        #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)\r
                                                        const uint8_t ReportID,\r
                        #endif\r
-                                                       void* Buffer, const uint16_t ReportSize)\r
+                                                       void* Buffer, const uint16_t ReportSize) ATTR_NON_NULL_PTR_ARG(1)\r
                        #if !defined(HID_HOST_BOOT_PROTOCOL_ONLY)\r
-                                                       ATTR_NON_NULL_PTR_ARG(1, 3);\r
+                                                       ATTR_NON_NULL_PTR_ARG(3);\r
                        #else\r
-                                                       ATTR_NON_NULL_PTR_ARG(1, 2);\r
+                                                       ATTR_NON_NULL_PTR_ARG(2);\r
                        #endif\r
 \r
                        /** Determines if a HID IN report has been received from the attached device on the data IN pipe.\r