Fix USB_DeviceGetHidDescriptor

This commit is contained in:
Eric Tang
2018-06-28 16:39:41 -07:00
parent 1bd8c7dca8
commit c1dc4be8c8
2 changed files with 46 additions and 1 deletions

View File

@@ -14,6 +14,10 @@
#define USB_COMPOSITE_CONFIGURATION_INDEX 1
#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH 141
// Variables:
extern uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH];
// Functions:
usb_status_t USB_DeviceGetConfigurationDescriptor(

View File

@@ -2,11 +2,52 @@
#include "usb_descriptor_hid.h"
#include "usb_descriptor_mouse_report.h"
#include "usb_descriptor_generic_hid_report.h"
#include "usb_descriptor_configuration.h"
#define USB_GENERIC_HID_DESCRIPTOR_INDEX \
(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_DESCRIPTOR_LENGTH_INTERFACE)
#define USB_BASIC_KEYBOARD_HID_DESCRIPTOR_INDEX \
(USB_GENERIC_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \
2 * USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE)
#define USB_MEDIA_KEYBOARD_HID_DESCRIPTOR_INDEX \
(USB_BASIC_KEYBOARD_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \
USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE)
#define USB_SYSTEM_KEYBOARD_HID_DESCRIPTOR_INDEX \
(USB_MEDIA_KEYBOARD_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \
USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE)
#define USB_MOUSE_HID_DESCRIPTOR_INDEX \
(USB_SYSTEM_KEYBOARD_HID_DESCRIPTOR_INDEX + USB_DESCRIPTOR_LENGTH_HID + \
USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_INTERFACE)
usb_status_t USB_DeviceGetHidDescriptor(
usb_device_handle handle, usb_device_get_hid_descriptor_struct_t *hidDescriptor)
{
return kStatus_USB_InvalidRequest;
hidDescriptor->length = USB_DESCRIPTOR_LENGTH_HID;
switch (hidDescriptor->interfaceNumber) {
case USB_GENERIC_HID_INTERFACE_INDEX:
hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_GENERIC_HID_DESCRIPTOR_INDEX];
break;
case USB_BASIC_KEYBOARD_INTERFACE_INDEX:
hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_BASIC_KEYBOARD_HID_DESCRIPTOR_INDEX];
break;
case USB_MEDIA_KEYBOARD_INTERFACE_INDEX:
hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_MEDIA_KEYBOARD_HID_DESCRIPTOR_INDEX];
break;
case USB_SYSTEM_KEYBOARD_INTERFACE_INDEX:
hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_SYSTEM_KEYBOARD_HID_DESCRIPTOR_INDEX];
break;
case USB_MOUSE_INTERFACE_INDEX:
hidDescriptor->buffer = &UsbConfigurationDescriptor[USB_MOUSE_HID_DESCRIPTOR_INDEX];
break;
default:
return kStatus_USB_InvalidRequest;
}
return kStatus_USB_Success;
}
usb_status_t USB_DeviceGetHidReportDescriptor(