* 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);
{
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;
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
*/
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: */
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
*/\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
* - 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
* - 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