Commit 3b99abb5 authored by Dean Camera's avatar Dean Camera

Add new USB_Host_GetDescriptor() function. Alter the...

Add new USB_Host_GetDescriptor() function. Alter the USB_Host_GetDeviceDescriptor() and USB_Host_GetDeviceStringDescriptor() convenience functions so that they wrap the new function.
parent e915d968
...@@ -13,7 +13,7 @@ ...@@ -13,7 +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 * - Added new USB_Host_GetDescriptor(), 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)
......
...@@ -227,23 +227,8 @@ uint8_t USB_Host_GetDeviceConfiguration(uint8_t* const ConfigNumber) ...@@ -227,23 +227,8 @@ uint8_t USB_Host_GetDeviceConfiguration(uint8_t* const ConfigNumber)
return USB_Host_SendControlRequest(ConfigNumber); return USB_Host_SendControlRequest(ConfigNumber);
} }
uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr) uint8_t USB_Host_GetDescriptor(const uint8_t Type,
{ const uint8_t Index,
USB_ControlRequest = (USB_Request_Header_t)
{
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
.bRequest = REQ_GetDescriptor,
.wValue = (DTYPE_Device << 8),
.wIndex = 0,
.wLength = sizeof(USB_Descriptor_Device_t),
};
Pipe_SelectPipe(PIPE_CONTROLPIPE);
return USB_Host_SendControlRequest(DeviceDescriptorPtr);
}
uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,
void* const Buffer, void* const Buffer,
const uint8_t BufferLength) const uint8_t BufferLength)
{ {
...@@ -251,7 +236,7 @@ uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index, ...@@ -251,7 +236,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 = (((uint16_t)Type << 8) | Index),
.wIndex = 0, .wIndex = 0,
.wLength = BufferLength, .wLength = BufferLength,
}; };
......
...@@ -144,39 +144,24 @@ ...@@ -144,39 +144,24 @@
*/ */
uint8_t USB_Host_GetDeviceConfiguration(uint8_t* const ConfigNumber) ATTR_NON_NULL_PTR_ARG(1); 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 descriptor of the
* This can be used to easily retrieve information about the device such as its VID, PID and power * specified type and index.
* requirements.
* *
* \note After this routine returns, the control pipe will be selected. * \note After this routine returns, the control pipe will be selected.
* *
* \ingroup Group_PipeControlReq * \ingroup Group_PipeControlReq
* *
* \param[out] DeviceDescriptorPtr Pointer to the destination device descriptor structure where * \param[in] Type Type of descriptor to retrieve, a value from the \ref USB_DescriptorTypes_t enum.
* the read data is to be stored. * \param[in] Index Index of the descriptor to retrieve.
* * \param[out] Buffer Pointer to the destination buffer where the retrieved string descriptor is to be stored.
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
*/
uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr) ATTR_NON_NULL_PTR_ARG(1);
/** 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.
*
* \ingroup Group_PipeControlReq
*
* \param[in] Index Index of the string index to retrieve.
* \param[out] Buffer Pointer to the destination buffer where the retrieved string descriptor is
* to be stored.
* \param[in] BufferLength Maximum size of the string descriptor which can be stored into the buffer. * \param[in] BufferLength Maximum size of the string descriptor which can be stored into the buffer.
* *
* \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_GetDeviceStringDescriptor(const uint8_t Index, uint8_t USB_Host_GetDescriptor(const uint8_t Type,
const uint8_t Index,
void* const Buffer, void* const Buffer,
const uint8_t BufferLength) ATTR_NON_NULL_PTR_ARG(2); const uint8_t BufferLength) ATTR_NON_NULL_PTR_ARG(3);
/** Retrieves the current feature status of the attached device, via a GET STATUS standard request. The /** 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 * retrieved feature status can then be examined by masking the retrieved value with the various
...@@ -235,6 +220,48 @@ ...@@ -235,6 +220,48 @@
uint8_t USB_Host_GetInterfaceAltSetting(const uint8_t InterfaceIndex, uint8_t USB_Host_GetInterfaceAltSetting(const uint8_t InterfaceIndex,
uint8_t* const AltSetting) ATTR_NON_NULL_PTR_ARG(2); uint8_t* const AltSetting) ATTR_NON_NULL_PTR_ARG(2);
/* Inline Functions: */
/** 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. This is a convenience wrapper for \ref USB_Host_GetDescriptor().
*
* \note After this routine returns, the control pipe will be selected.
*
* \ingroup Group_PipeControlReq
*
* \param[out] DeviceDescriptorPtr Pointer to the destination device descriptor structure where
* the read data is to be stored.
*
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
*/
static inline uint8_t USB_Host_GetDeviceDescriptor(USB_Descriptor_Device_t* const DeviceDescriptorPtr)
{
return USB_Host_GetDescriptor(DTYPE_Device, 0, DeviceDescriptorPtr, sizeof(USB_Descriptor_Device_t));
}
/** 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. This is a convenience
* wrapper for \ref USB_Host_GetDescriptor().
*
* \note After this routine returns, the control pipe will be selected.
*
* \ingroup Group_PipeControlReq
*
* \param[in] Index Index of the string descriptor to retrieve.
* \param[out] Buffer Pointer to the destination buffer where the retrieved string descriptor is
* to be stored.
* \param[in] BufferLength Maximum size of the string descriptor which can be stored into the buffer.
*
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
*/
static inline uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,
void* const Buffer,
const uint8_t BufferLength)
{
return USB_Host_GetDescriptor(DTYPE_String, Index, Buffer, BufferLength);
}
/* 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