From cc9b190919abbc567cd179b31afeef565efb1f17 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Fri, 27 May 2011 07:33:58 +0000 Subject: Add new USB_Host_SetInterfaceAltSetting() convenience function. --- LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c | 17 +++++++++++++++++ LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h | 13 +++++++++++++ LUFA/Drivers/USB/Core/UC3/Host_UC3.c | 17 +++++++++++++++++ LUFA/Drivers/USB/Core/UC3/Host_UC3.h | 13 +++++++++++++ 4 files changed, 60 insertions(+) (limited to 'LUFA/Drivers/USB/Core') diff --git a/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c index 6c45265d7..d18e023c7 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c +++ b/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c @@ -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 diff --git a/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h index 836c83b67..58d980442 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h +++ b/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h @@ -330,6 +330,19 @@ */ 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: */ diff --git a/LUFA/Drivers/USB/Core/UC3/Host_UC3.c b/LUFA/Drivers/USB/Core/UC3/Host_UC3.c index 88a7df5c4..02cb1e68e 100644 --- a/LUFA/Drivers/USB/Core/UC3/Host_UC3.c +++ b/LUFA/Drivers/USB/Core/UC3/Host_UC3.c @@ -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 diff --git a/LUFA/Drivers/USB/Core/UC3/Host_UC3.h b/LUFA/Drivers/USB/Core/UC3/Host_UC3.h index 6040eb32b..c5dfe76fd 100644 --- a/LUFA/Drivers/USB/Core/UC3/Host_UC3.h +++ b/LUFA/Drivers/USB/Core/UC3/Host_UC3.h @@ -331,6 +331,19 @@ */ 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: */ -- cgit v1.2.3