Add new USB_Host_SetInterfaceAltSetting() convenience function.
authorDean Camera <dean@fourwalledcubicle.com>
Fri, 27 May 2011 07:33:58 +0000 (07:33 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Fri, 27 May 2011 07:33:58 +0000 (07:33 +0000)
Demos/Host/LowLevel/PrinterHost/PrinterHost.c
LUFA/Drivers/USB/Class/Host/Printer.c
LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c
LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h
LUFA/Drivers/USB/Core/UC3/Host_UC3.c
LUFA/Drivers/USB/Core/UC3/Host_UC3.h
LUFA/ManPages/ChangeLog.txt

index 045ecd9..6265eee 100644 (file)
@@ -177,16 +177,7 @@ void USB_Printer_Host(void)
                         * request to switch to the interface alternate setting with the Bidirectional protocol */
                        if (PrinterAltSetting)
                        {
-                               USB_ControlRequest = (USB_Request_Header_t)
-                                       {
-                                               .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE),
-                                               .bRequest      = REQ_SetInterface,
-                                               .wValue        = PrinterAltSetting,
-                                               .wIndex        = PrinterInterfaceNumber,
-                                               .wLength       = 0,
-                                       };
-
-                               if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
+                               if ((ErrorCode = USB_Host_SetInterfaceAltSetting(PrinterInterfaceNumber, PrinterAltSetting)) != HOST_SENDCONTROL_Successful)
                                {
                                        printf_P(PSTR(ESC_FG_RED "Control Error (Set Interface).\r\n"
                                                                 " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
index 278df2e..290393a 100644 (file)
@@ -181,19 +181,11 @@ uint8_t PRNT_Host_SetBidirectionalMode(USB_ClassInfo_PRNT_Host_t* const PRNTInte
        {
                uint8_t ErrorCode;
 
-               USB_ControlRequest = (USB_Request_Header_t)
-                       {
-                               .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE),
-                               .bRequest      = REQ_SetInterface,
-                               .wValue        = PRNTInterfaceInfo->State.AlternateSetting,
-                               .wIndex        = PRNTInterfaceInfo->State.InterfaceNumber,
-                               .wLength       = 0,
-                       };
-
-               Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
-               if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
-                 return ErrorCode;
+               if ((ErrorCode = USB_Host_SetInterfaceAltSetting(PRNTInterfaceInfo->State.InterfaceNumber,
+                                                                PRNTInterfaceInfo->State.AlternateSetting)) != HOST_SENDCONTROL_Successful)
+               {
+                       return ErrorCode;
+               }
        }
 
        return HOST_SENDCONTROL_Successful;
index 6c45265..d18e023 100644 (file)
@@ -351,5 +351,22 @@ uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointNum)
        return USB_Host_SendControlRequest(NULL);
 }
 
+uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceNum,
+                                        const uint8_t AltSetting)
+{
+       USB_ControlRequest = (USB_Request_Header_t)
+               {
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE),
+                       .bRequest      = REQ_SetInterface,
+                       .wValue        = AltSetting,
+                       .wIndex        = InterfaceNum,
+                       .wLength       = 0,
+               };
+
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+       return USB_Host_SendControlRequest(NULL);
+}
+
 #endif
 
index 836c83b..58d9804 100644 (file)
                         */
                        uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointIndex);
 
+                       /** Selects a given alternative setting for the specfied interface, via a SET INTERFACE standard request to
+                        *  the attached device.
+                        *
+                        *  \note After this routine returns, the control pipe will be selected.
+                        *
+                        *  \param[in] InterfaceIndex  Index of the interface whose alternative setting is to be altered.
+                        *  \param[in] AltSetting      Index of the interface's alternative setting which is to be selected.
+                        *
+                        *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
+                        */
+                       uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceNum,
+                                                                                                       const uint8_t AltSetting);
+
        /* Private Interface - For use in library only: */
        #if !defined(__DOXYGEN__)
                /* Macros: */
index 88a7df5..02cb1e6 100644 (file)
@@ -351,5 +351,22 @@ uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointNum)
        return USB_Host_SendControlRequest(NULL);\r
 }\r
 \r
+uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceNum,\r
+                                        const uint8_t AltSetting)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE),\r
+                       .bRequest      = REQ_SetInterface,\r
+                       .wValue        = AltSetting,\r
+                       .wIndex        = InterfaceNum,\r
+                       .wLength       = 0,\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
+       return USB_Host_SendControlRequest(NULL);\r
+}\r
+\r
 #endif\r
 \r
index 6040eb3..c5dfe76 100644 (file)
                         */\r
                        uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointIndex);\r
 \r
+                       /** Selects a given alternative setting for the specfied interface, via a SET INTERFACE standard request to\r
+                        *  the attached device.\r
+                        *\r
+                        *  \note After this routine returns, the control pipe will be selected.\r
+                        *\r
+                        *  \param[in] InterfaceIndex  Index of the interface whose alternative setting is to be altered.\r
+                        *  \param[in] AltSetting      Index of the interface's alternative setting which is to be selected.\r
+                        *\r
+                        *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.\r
+                        */\r
+                       uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceNum,\r
+                                                                                                       const uint8_t AltSetting);\r
+\r
        /* Private Interface - For use in library only: */\r
        #if !defined(__DOXYGEN__)\r
                /* Macros: */\r
index 1ba3d37..f619983 100644 (file)
@@ -11,7 +11,7 @@
   *  - Core:
   *   - Added USE_LUFA_CONFIG_HEADER compile time option to include a LUFAConfig.h header in the user director for LUFA configuration
   *     tokens as an alternative to tokens defined in the project makefile
-  *   - Added new RNDIS Device Classs Driver packet send and receive functions
+  *   - Added new USB_Host_SetInterfaceAltSetting() convenience function for the selection of an interface's alternative setting
   *  - Library Applications:
   *   - Added new MediaControl project
   *   - Added new incomplete AndroidAccessoryHost Host LowLevel demo
@@ -50,6 +50,7 @@
   *   - Internal restructuring for eventual multiple architecture ports
   *   - Added AVR32 UC3 architecture port (currently incomplete/experimental)
   *   - Added new architecture independant functions to enable, disable, save and restore the Global Interrupt Enable flags
+  *   - Added new RNDIS Device Classs Driver packet send and receive functions
   *  - Library Applications:
   *   - Added ability to write protect Mass Storage disk write operations from the host OS
   *   - Added new MIDIToneGenerator project