diff --git a/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h b/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h index 2caacaa00b..fd42c50226 100644 --- a/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h +++ b/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h @@ -183,7 +183,7 @@ /* Switch /SS to input mode after configuration to allow for forced mode changes */ DDRB &= ~(1 << 0); - SPCR = ((1 << SPE) | SPIOptions); + SPCR = ((1 << SPE) | SPIOptions); } /** Turns off the SPI driver, disabling and returning used hardware to their default configuration. */ diff --git a/LUFA/Drivers/USB/Core/HostStandardReq.c b/LUFA/Drivers/USB/Core/HostStandardReq.c index 8304c2c286..12ccd91e32 100644 --- a/LUFA/Drivers/USB/Core/HostStandardReq.c +++ b/LUFA/Drivers/USB/Core/HostStandardReq.c @@ -238,6 +238,22 @@ uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index, return USB_Host_SendControlRequest(Buffer); } +uint8_t USB_Host_GetDeviceStatus(uint8_t* const FeatureStatus) +{ + USB_ControlRequest = (USB_Request_Header_t) + { + .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE), + .bRequest = REQ_GetFeature, + .wValue = 0, + .wIndex = 0, + .wLength = 0, + }; + + Pipe_SelectPipe(PIPE_CONTROLPIPE); + + return USB_Host_SendControlRequest(FeatureStatus); +} + uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointAddress) { USB_ControlRequest = (USB_Request_Header_t) diff --git a/LUFA/Drivers/USB/Core/HostStandardReq.h b/LUFA/Drivers/USB/Core/HostStandardReq.h index 3358d27749..caa42e322d 100644 --- a/LUFA/Drivers/USB/Core/HostStandardReq.h +++ b/LUFA/Drivers/USB/Core/HostStandardReq.h @@ -104,9 +104,7 @@ */ uint8_t USB_Host_SendControlRequest(void* const BufferPtr); - /** Convenience function. This routine sends a SET CONFIGURATION standard request to the attached - * device, with the given configuration index. This can be used to easily set the device - * configuration without creating and sending the request manually. + /** Sends a SET CONFIGURATION standard request to the attached device, with the given configuration index. * * This routine will automatically update the \ref USB_HostState and \ref USB_Host_ConfigurationNumber * state variables according to the given function parameters and the result of the request. @@ -121,9 +119,9 @@ */ uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber); - /** Convenience function. This routine sends a GET DESCRIPTOR standard request to the attached - * device, requesting the device descriptor. This can be used to easily retrieve information - * about the device such as its VID, PID and power requirements. + /** Sends a GET DESCRIPTOR standard request to the attached device, requesting the device descriptor. + * This can be used to easily retrieve information about the device such as its VID, PID and power + * requirements. * * \note After this routine returns, the control pipe will be selected. * @@ -136,10 +134,9 @@ */ uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr); - /** Convenience function. This routine sends a GET DESCRIPTOR standard request to the attached - * device, requesting the string descriptor of the specified index. This can be used to easily - * retrieve string descriptors from the device by index, after the index is obtained from the - * Device or Configuration descriptors. + /** Sends a GET DESCRIPTOR standard request to the attached device, requesting the string descriptor + * of the specified index. This can be used to easily retrieve string descriptors from the device by + * index, after the index is obtained from the Device or Configuration descriptors. * * \note After this routine returns, the control pipe will be selected. * @@ -156,6 +153,20 @@ void* const Buffer, const uint8_t BufferLength); + /** Retrieves the current feature status of the attached device, via a GET STATUS standard request. The + * retrieved feature status can then be examined by masking the retrieved value with the various + * FEATURE_* masks for bus/self power information and remote wakeup support. + * + * \note After this routine returns, the control pipe will be selected. + * + * \ingroup Group_PipeControlReq + * + * \param[out] FeatureStatus Location where the retrieved feature status should be stored. + * + * \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result. + */ + uint8_t USB_Host_GetDeviceStatus(uint8_t* const FeatureStatus); + /** Clears a stall condition on the given pipe, via a CLEAR FEATURE standard request to the attached device. * * \note After this routine returns, the control pipe will be selected. diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index de27e010f9..829ca44f47 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -18,13 +18,14 @@ * - Added support for the Audio class GET STATUS request in the Audio Device Class driver so that it is correctly ACKed when sent by the host * - Added new EVENT_Audio_Device_StreamStartStop() event to the Audio Device Class driver to detect stream start/stop events * - Added board driver support for the Busware TUL board - * - Added new Host mode Audio Class driver - * - Added new SPI_GetCurrentMode() function to the SPI peripheral driver * - Added board hardware driver support for the EVK1100 board * - Added board hardware driver support for the EVK1104 board + * - Added new Host mode Audio Class driver + * - Added new SPI_GetCurrentMode() function to the SPI peripheral driver + * - Added RingBuffer_GetFreeCount() function to the Ring Buffer driver * - Added new HID_Host_SetIdlePeriod() function to the HID Host Class driver * - Added new USB_Host_ConfigurationNumber global variable to indicate the selected configuration in an attached device - * - Added RingBuffer_GetFreeCount() function to the Ring Buffer driver + * - Added new USB_Host_GetDeviceStatus() function to the host standard request function set * - Library Applications: * - Added RNDIS device mode to the Webserver project * - Added new incomplete AndroidAccessoryHost Host LowLevel demo @@ -46,7 +47,8 @@ * - Renamed global state variables that are specific to a certain USB mode to clearly indicate which mode the variable relates to, * by changing the USB_* prefix to USB_Device_* or USB_Host_* * - Removed the HOST_STATE_WaitForDeviceRemoval and HOST_STATE_Suspended host state machine states, as these are no longer required - * - Altered the USB_Host_SetDeviceConfiguration() function to update the new USB_Host_ConfigurationNumber global as required + * - Altered the USB_Host_SetDeviceConfiguration() function to update the global Host state machine state and the new + * USB_Host_ConfigurationNumber global as required * - Library Applications: * - Modified the Low Level and Class Driver AudioInput and AudioOutput demos to support multiple audio sample rates * - Updated all host mode demos and projects to use the EVENT_USB_Host_DeviceEnumerationComplete() event callback for device configuration