forked from mfulz_github/qmk_firmware
Add new USB_Host_GetDescriptor() function. Alter the USB_Host_GetDeviceDescriptor() and USB_Host_GetDeviceStringDescriptor() convenience functions so that they wrap the new function.
This commit is contained in:
parent
e915d968a5
commit
3b99abb5fc
|
@ -13,7 +13,7 @@
|
|||
* - Added support for the new B series XMEGA devices
|
||||
* - Added support for version 2 of the Teensy boards (thanks to Christoph Redecker)
|
||||
* - 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:
|
||||
* - 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)
|
||||
|
|
|
@ -227,31 +227,16 @@ uint8_t USB_Host_GetDeviceConfiguration(uint8_t* const 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,
|
||||
void* const Buffer,
|
||||
const uint8_t BufferLength)
|
||||
{
|
||||
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,
|
||||
const uint8_t BufferLength)
|
||||
{
|
||||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
|
||||
.bRequest = REQ_GetDescriptor,
|
||||
.wValue = ((DTYPE_String << 8) | Index),
|
||||
.wValue = (((uint16_t)Type << 8) | Index),
|
||||
.wIndex = 0,
|
||||
.wLength = BufferLength,
|
||||
};
|
||||
|
|
|
@ -80,12 +80,12 @@
|
|||
{
|
||||
HOST_SENDCONTROL_Successful = 0, /**< No error occurred in the request transfer. */
|
||||
HOST_SENDCONTROL_DeviceDisconnected = 1, /**< The attached device was disconnected during the
|
||||
* request transfer.
|
||||
* request transfer.
|
||||
*/
|
||||
HOST_SENDCONTROL_PipeError = 2, /**< An error occurred in the pipe while sending the request. */
|
||||
HOST_SENDCONTROL_SetupStalled = 3, /**< The attached device stalled the request, usually
|
||||
* indicating that the request is unsupported on the device.
|
||||
*/
|
||||
* indicating that the request is unsupported on the device.
|
||||
*/
|
||||
HOST_SENDCONTROL_SoftwareTimeOut = 4, /**< The request or data transfer timed out. */
|
||||
};
|
||||
|
||||
|
@ -144,39 +144,24 @@
|
|||
*/
|
||||
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.
|
||||
* 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 descriptor of the
|
||||
* specified type and index.
|
||||
*
|
||||
* \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.
|
||||
* \param[in] Type Type of descriptor to retrieve, a value from the \ref USB_DescriptorTypes_t enum.
|
||||
* \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.
|
||||
* \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.
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
|
||||
*/
|
||||
uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,
|
||||
void* const Buffer,
|
||||
const uint8_t BufferLength) ATTR_NON_NULL_PTR_ARG(2);
|
||||
uint8_t USB_Host_GetDescriptor(const uint8_t Type,
|
||||
const uint8_t Index,
|
||||
void* const Buffer,
|
||||
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
|
||||
* retrieved feature status can then be examined by masking the retrieved value with the various
|
||||
|
@ -217,7 +202,7 @@
|
|||
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
|
||||
*/
|
||||
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
|
||||
|
@ -234,7 +219,49 @@
|
|||
*/
|
||||
uint8_t USB_Host_GetInterfaceAltSetting(const uint8_t InterfaceIndex,
|
||||
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: */
|
||||
#if !defined(__DOXYGEN__)
|
||||
/* Enums: */
|
||||
|
|
Loading…
Reference in New Issue