Commit e915d968 authored by Dean Camera's avatar Dean Camera

Added new USB_Host_GetDeviceConfiguration() and USB_Host_GetInterfaceAltSetting() functions.

parent 7f8dbb49
...@@ -112,15 +112,15 @@ ...@@ -112,15 +112,15 @@
* identical name (in which case the weak reference is discarded at link time). * identical name (in which case the weak reference is discarded at link time).
*/ */
#define ATTR_WEAK __attribute__ ((weak)) #define ATTR_WEAK __attribute__ ((weak))
/** Forces the compiler to not automatically zero the given global variable on startup, so that the
* current RAM contents is retained. Under most conditions this value will be random due to the
* behaviour of volatile memory once power is removed, but may be used in some specific circumstances,
* like the passing of values back after a system watchdog reset.
*/
#define ATTR_NO_INIT __attribute__ ((section (".noinit")))
#endif #endif
/** Forces the compiler to not automatically zero the given global variable on startup, so that the
* current RAM contents is retained. Under most conditions this value will be random due to the
* behaviour of volatile memory once power is removed, but may be used in some specific circumstances,
* like the passing of values back after a system watchdog reset.
*/
#define ATTR_NO_INIT __attribute__ ((section (".noinit")))
/** Places the function in one of the initialization sections, which execute before the main function /** Places the function in one of the initialization sections, which execute before the main function
* of the application. Refer to the avr-libc manual for more information on the initialization sections. * of the application. Refer to the avr-libc manual for more information on the initialization sections.
* *
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
* - Added support for the new B series XMEGA devices * - Added support for the new B series XMEGA devices
* - Added support for version 2 of the Teensy boards (thanks to Christoph Redecker) * - Added support for version 2 of the Teensy boards (thanks to Christoph Redecker)
* - Added new Android Accessory Host class driver * - Added new Android Accessory Host class driver
* - Added new USB_Host_GetDeviceConfiguration() and USB_Host_GetInterfaceAltSetting() functions
* - Library Applications: * - Library Applications:
* - Added User Application APIs to the CDC and DFU class bootloaders * - Added User Application APIs to the CDC and DFU class bootloaders
* - Added INVERTED_ISP_MISO compile time option to the AVRISP-MKII clone project (thanks to Chuck Rohs) * - Added INVERTED_ISP_MISO compile time option to the AVRISP-MKII clone project (thanks to Chuck Rohs)
......
...@@ -24,8 +24,6 @@ ...@@ -24,8 +24,6 @@
* -# Abstract out Mass Storage byte send/receive to prevent low level API use in projects * -# Abstract out Mass Storage byte send/receive to prevent low level API use in projects
* -# Consider switch from endpoint numbers to full endpoint addresses to ease future architecture expansion * -# Consider switch from endpoint numbers to full endpoint addresses to ease future architecture expansion
* -# Fix HID report parser usage support for array types * -# Fix HID report parser usage support for array types
* -# Add additional standard request helper functions to host mode
* -# Add Dataflash_SendCommand()
* -# Make HOST_DEVICE_SETTLE_DELAY_MS a global variable that can be changed * -# Make HOST_DEVICE_SETTLE_DELAY_MS a global variable that can be changed
* -# Add MANDATORY_EVENT_FUNCTIONS compile time option * -# Add MANDATORY_EVENT_FUNCTIONS compile time option
* -# Add watchdog support to the library and apps/bootloaders * -# Add watchdog support to the library and apps/bootloaders
...@@ -40,7 +38,6 @@ ...@@ -40,7 +38,6 @@
* -# Add class driver support for Test and Measurement class * -# Add class driver support for Test and Measurement class
* -# Add class driver support for EEM class * -# Add class driver support for EEM class
* -# Add class driver support for ECM class * -# Add class driver support for ECM class
* -# Add class driver support for the Android Accessory Host class
* -# Port all demos to multiple architectures * -# Port all demos to multiple architectures
* - Ports * - Ports
* -# Finish USB XMEGA port * -# Finish USB XMEGA port
......
...@@ -211,6 +211,22 @@ uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber) ...@@ -211,6 +211,22 @@ uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber)
return ErrorCode; return ErrorCode;
} }
uint8_t USB_Host_GetDeviceConfiguration(uint8_t* const ConfigNumber)
{
USB_ControlRequest = (USB_Request_Header_t)
{
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
.bRequest = REQ_GetConfiguration,
.wValue = 0,
.wIndex = 0,
.wLength = sizeof(uint8_t),
};
Pipe_SelectPipe(PIPE_CONTROLPIPE);
return USB_Host_SendControlRequest(ConfigNumber);
}
uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr) uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr)
{ {
USB_ControlRequest = (USB_Request_Header_t) USB_ControlRequest = (USB_Request_Header_t)
...@@ -235,7 +251,7 @@ uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index, ...@@ -235,7 +251,7 @@ uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,
{ {
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE), .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
.bRequest = REQ_GetDescriptor, .bRequest = REQ_GetDescriptor,
.wValue = (DTYPE_String << 8) | Index, .wValue = ((DTYPE_String << 8) | Index),
.wIndex = 0, .wIndex = 0,
.wLength = BufferLength, .wLength = BufferLength,
}; };
...@@ -294,5 +310,22 @@ uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceIndex, ...@@ -294,5 +310,22 @@ uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceIndex,
return USB_Host_SendControlRequest(NULL); return USB_Host_SendControlRequest(NULL);
} }
uint8_t USB_Host_GetInterfaceAltSetting(const uint8_t InterfaceIndex,
uint8_t* const AltSetting)
{
USB_ControlRequest = (USB_Request_Header_t)
{
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE),
.bRequest = REQ_GetInterface,
.wValue = 0,
.wIndex = InterfaceIndex,
.wLength = sizeof(uint8_t),
};
Pipe_SelectPipe(PIPE_CONTROLPIPE);
return USB_Host_SendControlRequest(AltSetting);
}
#endif #endif
...@@ -130,6 +130,19 @@ ...@@ -130,6 +130,19 @@
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result. * \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
*/ */
uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber); uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber);
/** Sends a GET CONFIGURATION standard request to the attached device, to retrieve the currently selected
* device configuration index.
*
* \note After this routine returns, the control pipe will be selected.
*
* \ingroup Group_PipeControlReq
*
* \param[out] ConfigNumber Pointer to a location where the retrieved configuration index should be stored.
*
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
*/
uint8_t USB_Host_GetDeviceConfiguration(uint8_t* const ConfigNumber) ATTR_NON_NULL_PTR_ARG(1);
/** Sends a GET DESCRIPTOR standard request to the attached device, requesting the device descriptor. /** 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 * This can be used to easily retrieve information about the device such as its VID, PID and power
...@@ -206,6 +219,22 @@ ...@@ -206,6 +219,22 @@
uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceIndex, uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceIndex,
const uint8_t AltSetting); const uint8_t AltSetting);
/** Retrieves the current alternative setting for the specified interface, via a GET INTERFACE standard request to
* the attached device.
*
* \note After this routine returns, the control pipe will be selected.
*
* \ingroup Group_PipeControlReq
*
* \param[in] InterfaceIndex Index of the interface whose alternative setting is to be altered.
* \param[out] AltSetting Pointer to a location where the retrieved alternative setting value should be stored.
*
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
*/
uint8_t USB_Host_GetInterfaceAltSetting(const uint8_t InterfaceIndex,
uint8_t* const AltSetting) ATTR_NON_NULL_PTR_ARG(2);
/* Private Interface - For use in library only: */ /* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
/* Enums: */ /* Enums: */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment