Put the files that contain the usb descriptors into the newly created usb_descriptors directory.

This commit is contained in:
László Monda
2016-09-26 18:54:16 +02:00
parent 77f956d5bb
commit 9e3d512e89
15 changed files with 2 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
#include "usb_api.h"
#include "usb_composite_device.h"
#include "usb_descriptor_mouse_report.h"
#include "usb_descriptor_generic_hid_report.h"
uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH] = {
// Configuration descriptor
USB_DESCRIPTOR_LENGTH_CONFIGURE,
USB_DESCRIPTOR_TYPE_CONFIGURE,
USB_SHORT_GET_LOW(USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH),
USB_SHORT_GET_HIGH(USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH),
USB_DEVICE_CONFIG_HID,
USB_COMPOSITE_CONFIGURATION_INDEX,
USB_STRING_DESCRIPTOR_NONE,
(USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_D7_MASK) |
(USB_DEVICE_CONFIG_SELF_POWER << USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_SELF_POWERED_SHIFT) |
(USB_DEVICE_CONFIG_REMOTE_WAKEUP << USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_REMOTE_WAKEUP_SHIFT),
USB_DEVICE_MAX_POWER,
// Generic HID interface descriptor
USB_DESCRIPTOR_LENGTH_INTERFACE,
USB_DESCRIPTOR_TYPE_INTERFACE,
USB_GENERIC_HID_INTERFACE_INDEX,
USB_INTERFACE_ALTERNATE_SETTING_NONE,
USB_GENERIC_HID_ENDPOINT_COUNT,
USB_CLASS_HID,
USB_HID_SUBCLASS_NONE,
USB_HID_PROTOCOL_NONE,
USB_STRING_DESCRIPTOR_NONE,
// Generic HID descriptor
USB_DESCRIPTOR_LENGTH_HID,
USB_DESCRIPTOR_TYPE_HID,
USB_SHORT_GET_LOW(USB_HID_VERSION),
USB_SHORT_GET_HIGH(USB_HID_VERSION),
USB_HID_COUNTRY_CODE_NOT_SUPPORTED,
USB_REPORT_DESCRIPTOR_COUNT_PER_HID_DEVICE,
USB_DESCRIPTOR_TYPE_HID_REPORT,
USB_SHORT_GET_LOW(USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH),
USB_SHORT_GET_HIGH(USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH),
// Generic HID IN endpoint descriptor
USB_DESCRIPTOR_LENGTH_ENDPOINT,
USB_DESCRIPTOR_TYPE_ENDPOINT,
USB_GENERIC_HID_ENDPOINT_IN_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_INTERRUPT,
USB_SHORT_GET_LOW(USB_GENERIC_HID_INTERRUPT_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(USB_GENERIC_HID_INTERRUPT_IN_PACKET_SIZE),
USB_GENERIC_HID_INTERRUPT_IN_INTERVAL,
// Generic HID OUT endpoint descriptor
USB_DESCRIPTOR_LENGTH_ENDPOINT,
USB_DESCRIPTOR_TYPE_ENDPOINT,
USB_GENERIC_HID_ENDPOINT_OUT_INDEX | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_INTERRUPT,
USB_SHORT_GET_LOW(USB_GENERIC_HID_INTERRUPT_OUT_PACKET_SIZE),
USB_SHORT_GET_HIGH(USB_GENERIC_HID_INTERRUPT_OUT_PACKET_SIZE),
USB_GENERIC_HID_INTERRUPT_IN_INTERVAL,
// Keyboard interface descriptor
USB_DESCRIPTOR_LENGTH_INTERFACE,
USB_DESCRIPTOR_TYPE_INTERFACE,
USB_KEYBOARD_INTERFACE_INDEX,
USB_INTERFACE_ALTERNATE_SETTING_NONE,
USB_KEYBOARD_ENDPOINT_COUNT,
USB_CLASS_HID,
USB_HID_SUBCLASS_BOOT,
USB_HID_PROTOCOL_KEYBOARD,
USB_STRING_DESCRIPTOR_NONE,
// Keyboard HID descriptor
USB_DESCRIPTOR_LENGTH_HID,
USB_DESCRIPTOR_TYPE_HID,
USB_SHORT_GET_LOW(USB_HID_VERSION),
USB_SHORT_GET_HIGH(USB_HID_VERSION),
USB_HID_COUNTRY_CODE_NOT_SUPPORTED,
USB_REPORT_DESCRIPTOR_COUNT_PER_HID_DEVICE,
USB_DESCRIPTOR_TYPE_HID_REPORT,
USB_SHORT_GET_LOW(USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
USB_SHORT_GET_HIGH(USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
// Keyboard endpoint descriptor
USB_DESCRIPTOR_LENGTH_ENDPOINT,
USB_DESCRIPTOR_TYPE_ENDPOINT,
USB_KEYBOARD_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_INTERRUPT,
USB_SHORT_GET_LOW(USB_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(USB_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
USB_KEYBOARD_INTERRUPT_IN_INTERVAL,
// Mouse interface descriptor
USB_DESCRIPTOR_LENGTH_INTERFACE,
USB_DESCRIPTOR_TYPE_INTERFACE,
USB_MOUSE_INTERFACE_INDEX,
USB_INTERFACE_ALTERNATE_SETTING_NONE,
USB_MOUSE_ENDPOINT_COUNT,
USB_CLASS_HID,
USB_HID_SUBCLASS_BOOT,
USB_HID_PROTOCOL_MOUSE,
USB_STRING_DESCRIPTOR_NONE,
// Mouse HID descriptor
USB_DESCRIPTOR_LENGTH_HID,
USB_DESCRIPTOR_TYPE_HID,
USB_SHORT_GET_LOW(USB_HID_VERSION),
USB_SHORT_GET_HIGH(USB_HID_VERSION),
USB_HID_COUNTRY_CODE_NOT_SUPPORTED,
USB_REPORT_DESCRIPTOR_COUNT_PER_HID_DEVICE,
USB_DESCRIPTOR_TYPE_HID_REPORT,
USB_SHORT_GET_LOW(USB_MOUSE_REPORT_DESCRIPTOR_LENGTH),
USB_SHORT_GET_HIGH(USB_MOUSE_REPORT_DESCRIPTOR_LENGTH),
// Mouse endpoint descriptor
USB_DESCRIPTOR_LENGTH_ENDPOINT,
USB_DESCRIPTOR_TYPE_ENDPOINT,
USB_MOUSE_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_INTERRUPT,
USB_SHORT_GET_LOW(USB_MOUSE_INTERRUPT_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(USB_MOUSE_INTERRUPT_IN_PACKET_SIZE),
USB_MOUSE_INTERRUPT_IN_INTERVAL,
};
usb_status_t USB_DeviceGetConfigurationDescriptor(
usb_device_handle handle, usb_device_get_configuration_descriptor_struct_t *configurationDescriptor)
{
if (USB_COMPOSITE_CONFIGURATION_INDEX > configurationDescriptor->configuration) {
configurationDescriptor->buffer = UsbConfigurationDescriptor;
configurationDescriptor->length = USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH;
return kStatus_USB_Success;
}
return kStatus_USB_InvalidRequest;
}

View File

@@ -0,0 +1,20 @@
#ifndef __USB_DESCRIPTOR_CONFIGURATION_H__
#define __USB_DESCRIPTOR_CONFIGURATION_H__
// Includes:
#include "usb_interface_keyboard.h"
#include "usb_interface_mouse.h"
#include "usb_interface_generic_hid.h"
// Macros:
#define USB_COMPOSITE_CONFIGURATION_INDEX 1
#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH 91
// Functions:
extern usb_status_t USB_DeviceGetConfigurationDescriptor(
usb_device_handle handle, usb_device_get_configuration_descriptor_struct_t *configurationDescriptor);
#endif

View File

@@ -0,0 +1,32 @@
#include "usb_api.h"
#include "usb_composite_device.h"
#include "usb_descriptor_strings.h"
uint8_t UsbDeviceDescriptor[USB_DESCRIPTOR_LENGTH_DEVICE] = {
USB_DESCRIPTOR_LENGTH_DEVICE,
USB_DESCRIPTOR_TYPE_DEVICE,
USB_SHORT_GET_LOW(USB_DEVICE_SPECIFICATION_VERSION),
USB_SHORT_GET_HIGH(USB_DEVICE_SPECIFICATION_VERSION),
USB_DEVICE_CLASS,
USB_DEVICE_SUBCLASS,
USB_DEVICE_PROTOCOL,
USB_CONTROL_MAX_PACKET_SIZE,
USB_SHORT_GET_LOW(USB_DEVICE_VENDOR_ID),
USB_SHORT_GET_HIGH(USB_DEVICE_VENDOR_ID),
USB_SHORT_GET_LOW(USB_DEVICE_PRODUCT_ID),
USB_SHORT_GET_HIGH(USB_DEVICE_PRODUCT_ID),
USB_SHORT_GET_LOW(USB_DEVICE_RELEASE_NUMBER),
USB_SHORT_GET_HIGH(USB_DEVICE_RELEASE_NUMBER),
USB_STRING_DESCRIPTOR_ID_MANUFACTURER,
USB_STRING_DESCRIPTOR_ID_PRODUCT,
USB_STRING_DESCRIPTOR_ID_SUPPORTED_LANGUAGES,
USB_DEVICE_CONFIGURATION_COUNT,
};
usb_status_t USB_DeviceGetDeviceDescriptor(
usb_device_handle handle, usb_device_get_device_descriptor_struct_t *deviceDescriptor)
{
deviceDescriptor->buffer = UsbDeviceDescriptor;
deviceDescriptor->length = USB_DESCRIPTOR_LENGTH_DEVICE;
return kStatus_USB_Success;
}

View File

@@ -0,0 +1,22 @@
#ifndef __USB_DESCRIPTOR_DEVICE_H__
#define __USB_DESCRIPTOR_DEVICE_H__
// Macros:
#define USB_DEVICE_VENDOR_ID 0x16D3 // TODO: Change this to 15D0 for the final prototype.
#define USB_DEVICE_PRODUCT_ID 0x05EA
#define USB_DEVICE_RELEASE_NUMBER 0x0101
#define USB_DEVICE_SPECIFICATION_VERSION 0x0200
#define USB_HID_VERSION 0x0110
#define USB_DEVICE_CONFIGURATION_COUNT 1
#define USB_REPORT_DESCRIPTOR_COUNT_PER_HID_DEVICE 1
#define USB_DEVICE_MAX_POWER 50 // Expressed in 2mA units
// Functions:
extern usb_status_t USB_DeviceGetDeviceDescriptor(
usb_device_handle handle, usb_device_get_device_descriptor_struct_t *deviceDescriptor);
#endif

View File

@@ -0,0 +1,27 @@
#include "usb_api.h"
#include "usb_interface_generic_hid.h"
#include "usb_descriptor_generic_hid_report.h"
uint8_t UsbGenericHidReportDescriptor[USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH] = {
HID_RI_USAGE_PAGE(8, USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_PAGE_INDEX),
HID_RI_USAGE(8, USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_COLLECTION),
HID_RI_COLLECTION(8, HID_RI_COLLECTION_APPLICATION),
// Input flowing from device to host
HID_RI_USAGE(8, USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_DATA_IN),
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0xFF),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_REPORT_COUNT(8, USB_GENERIC_HID_INTERRUPT_IN_PACKET_SIZE),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
// Output flowing from host to device
HID_RI_USAGE(8, USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_DATA_OUT),
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0xFF),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_REPORT_COUNT(8, USB_GENERIC_HID_INTERRUPT_OUT_PACKET_SIZE),
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
HID_RI_END_COLLECTION(0)
};

View File

@@ -0,0 +1,17 @@
#ifndef __USB_DESCRIPTOR_GENERIC_HID_REPORT_H__
#define __USB_DESCRIPTOR_GENERIC_HID_REPORT_H__
// Macros:
#define USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH 31
#define USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_PAGE_INDEX 0x80
#define USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_COLLECTION 0x81
#define USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_DATA_IN 0x82
#define USB_GENERIC_HID_REPORT_DESCRIPTOR_VENDOR_USAGE_DATA_OUT 0x83
// Variables:
extern uint8_t UsbGenericHidReportDescriptor[USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH];
#endif

View File

@@ -0,0 +1,34 @@
#include "usb_api.h"
#include "usb_descriptor_hid.h"
#include "usb_descriptor_mouse_report.h"
#include "usb_descriptor_generic_hid_report.h"
usb_status_t USB_DeviceGetHidDescriptor(
usb_device_handle handle, usb_device_get_hid_descriptor_struct_t *hidDescriptor)
{
return kStatus_USB_InvalidRequest;
}
usb_status_t USB_DeviceGetHidReportDescriptor(
usb_device_handle handle, usb_device_get_hid_report_descriptor_struct_t *hidReportDescriptor)
{
if (USB_MOUSE_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
hidReportDescriptor->buffer = UsbMouseReportDescriptor;
hidReportDescriptor->length = USB_MOUSE_REPORT_DESCRIPTOR_LENGTH;
} else if (USB_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
hidReportDescriptor->buffer = UsbKeyboardReportDescriptor;
hidReportDescriptor->length = USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH;
} else if (USB_GENERIC_HID_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
hidReportDescriptor->buffer = UsbGenericHidReportDescriptor;
hidReportDescriptor->length = USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH;
} else {
return kStatus_USB_InvalidRequest;
}
return kStatus_USB_Success;
}
usb_status_t USB_DeviceGetHidPhysicalDescriptor(
usb_device_handle handle, usb_device_get_hid_physical_descriptor_struct_t *hidPhysicalDescriptor)
{
return kStatus_USB_InvalidRequest;
}

View File

@@ -0,0 +1,21 @@
#ifndef __USB_DESCRIPTOR_HID_H__
#define __USB_DESCRIPTOR_HID_H__
// Includes:
#include "usb_interface_keyboard.h"
#include "usb_interface_mouse.h"
#include "usb_interface_generic_hid.h"
// Functions:
extern usb_status_t USB_DeviceGetHidDescriptor(
usb_device_handle handle, usb_device_get_hid_descriptor_struct_t *hidDescriptor);
extern usb_status_t USB_DeviceGetHidReportDescriptor(
usb_device_handle handle, usb_device_get_hid_report_descriptor_struct_t *hidReportDescriptor);
extern usb_status_t USB_DeviceGetHidPhysicalDescriptor(
usb_device_handle handle, usb_device_get_hid_physical_descriptor_struct_t *hidPhysicalDescriptor);
#endif

View File

@@ -0,0 +1,48 @@
#include "usb_api.h"
#include "usb_descriptor_keyboard_report.h"
uint8_t UsbKeyboardReportDescriptor[USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH] = {
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_GENERIC_DESKTOP),
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_KEYBOARD),
HID_RI_COLLECTION(8, HID_RI_COLLECTION_APPLICATION),
// Modifiers
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_KEY_CODES),
HID_RI_USAGE_MINIMUM(8, 0xE0),
HID_RI_USAGE_MAXIMUM(8, 0xE7),
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_REPORT_COUNT(8, 0x08),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
// Reserved for future use, always 0
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_INPUT(8, HID_IOF_CONSTANT),
// LED status
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_LEDS),
HID_RI_USAGE_MINIMUM(8, 0x01),
HID_RI_USAGE_MAXIMUM(8, 0x05),
HID_RI_REPORT_COUNT(8, 0x05),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
// LED status padding
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x03),
HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
// Scancodes
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0xFF),
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_KEY_CODES),
HID_RI_USAGE_MINIMUM(8, 0x00),
HID_RI_USAGE_MAXIMUM(8, 0xFF),
HID_RI_REPORT_COUNT(8, USB_KEYBOARD_MAX_KEYS),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
HID_RI_END_COLLECTION(0),
};

View File

@@ -0,0 +1,13 @@
#ifndef __USB_DESCRIPTOR_KEYBOARD_REPORT_H__
#define __USB_DESCRIPTOR_KEYBOARD_REPORT_H__
// Macros:
#define USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH 63
#define USB_KEYBOARD_MAX_KEYS 6
// Variables:
extern uint8_t UsbKeyboardReportDescriptor[USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH];
#endif

View File

@@ -0,0 +1,85 @@
#include "usb_api.h"
#include "usb_descriptor_mouse_report.h"
uint8_t UsbMouseReportDescriptor[USB_MOUSE_REPORT_DESCRIPTOR_LENGTH] = {
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_GENERIC_DESKTOP),
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_MOUSE),
HID_RI_COLLECTION(8, HID_RI_COLLECTION_APPLICATION),
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_POINTER),
HID_RI_COLLECTION(8, HID_RI_COLLECTION_PHYSICAL),
// Mouse buttons
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_BUTTONS),
HID_RI_USAGE_MINIMUM(8, 0x01),
HID_RI_USAGE_MAXIMUM(8, USB_MOUSE_REPORT_DESCRIPTOR_BUTTONS),
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_REPORT_COUNT(8, USB_MOUSE_REPORT_DESCRIPTOR_BUTTONS),
HID_RI_REPORT_SIZE(8, 0x01),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
// Mouse buttons padding
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, USB_MOUSE_REPORT_DESCRIPTOR_BUTTONS_PADDING),
HID_RI_INPUT(8, HID_IOF_CONSTANT),
// Mouse X and Y coordinates
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_GENERIC_DESKTOP),
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_X),
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_Y),
HID_RI_LOGICAL_MINIMUM(16, USB_MOUSE_REPORT_DESCRIPTOR_MIN_AXIS_VALUE),
HID_RI_LOGICAL_MAXIMUM(16, USB_MOUSE_REPORT_DESCRIPTOR_MAX_AXIS_VALUE),
HID_RI_PHYSICAL_MINIMUM(16, USB_MOUSE_REPORT_DESCRIPTOR_MIN_AXIS_PHYSICAL_VALUE),
HID_RI_PHYSICAL_MAXIMUM(16, USB_MOUSE_REPORT_DESCRIPTOR_MAX_AXIS_PHYSICAL_VALUE),
HID_RI_REPORT_COUNT(8, 0x02),
HID_RI_REPORT_SIZE(8, 16),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
HID_RI_COLLECTION(8, HID_RI_COLLECTION_LOGICAL),
// Vertical wheel resolution multiplier
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_RESOLUTION_MULTIPLIER),
HID_RI_LOGICAL_MINIMUM(8, 0x00),
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
HID_RI_PHYSICAL_MINIMUM(8, 0x01),
HID_RI_PHYSICAL_MAXIMUM(8, 0x04),
HID_RI_REPORT_SIZE(8, 0x02),
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_PUSH(0),
HID_RI_FEATURE(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
// Vertical wheel
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_WHEEL),
HID_RI_LOGICAL_MINIMUM(8, -127),
HID_RI_LOGICAL_MAXIMUM(8, 127),
HID_RI_PHYSICAL_MINIMUM(8, 0x00),
HID_RI_PHYSICAL_MAXIMUM(8, 0x00),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
HID_RI_END_COLLECTION(0),
HID_RI_COLLECTION(8, HID_RI_COLLECTION_LOGICAL),
// Horizontal wheel resolution multiplier
HID_RI_USAGE(8, HID_RI_USAGE_GENERIC_DESKTOP_RESOLUTION_MULTIPLIER),
HID_RI_POP(0),
HID_RI_FEATURE(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
// Padding
HID_RI_PHYSICAL_MINIMUM(8, 0x00),
HID_RI_PHYSICAL_MAXIMUM(8, 0x00),
HID_RI_REPORT_SIZE(8, 0x04),
HID_RI_FEATURE(8, HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
// Horizontal wheel
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_CONSUMER),
HID_RI_USAGE(16, HID_RI_USAGE_CONSUMER_AC_PAN),
HID_RI_LOGICAL_MINIMUM(8, -127),
HID_RI_LOGICAL_MAXIMUM(8, 127),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
HID_RI_END_COLLECTION(0),
HID_RI_END_COLLECTION(0),
HID_RI_END_COLLECTION(0)
};

View File

@@ -0,0 +1,22 @@
#ifndef __USB_DESCRIPTOR_MOUSE_REPORT_H__
#define __USB_DESCRIPTOR_MOUSE_REPORT_H__
// Macros:
#define USB_MOUSE_REPORT_DESCRIPTOR_LENGTH 121
#define USB_MOUSE_REPORT_DESCRIPTOR_MIN_AXIS_VALUE -4096
#define USB_MOUSE_REPORT_DESCRIPTOR_MAX_AXIS_VALUE 4096
#define USB_MOUSE_REPORT_DESCRIPTOR_MIN_AXIS_PHYSICAL_VALUE -4096
#define USB_MOUSE_REPORT_DESCRIPTOR_MAX_AXIS_PHYSICAL_VALUE 4096
#define USB_MOUSE_REPORT_DESCRIPTOR_BUTTONS 8
#define USB_MOUSE_REPORT_DESCRIPTOR_BUTTONS_PADDING ((USB_MOUSE_REPORT_DESCRIPTOR_BUTTONS % 8) \
? (8 - (USB_MOUSE_REPORT_DESCRIPTOR_BUTTONS % 8)) \
: 0)
// Variables:
extern uint8_t UsbMouseReportDescriptor[USB_MOUSE_REPORT_DESCRIPTOR_LENGTH];
#endif

View File

@@ -0,0 +1,101 @@
#include "usb_api.h"
#include "usb_descriptor_strings.h"
uint8_t UsbLanguageListStringDescriptor[USB_LANGUAGE_LIST_STRING_DESCRIPTOR_LENGTH] = {
sizeof(UsbLanguageListStringDescriptor),
USB_DESCRIPTOR_TYPE_STRING,
USB_SHORT_GET_LOW(USB_LANGUAGE_ID_UNITED_STATES),
USB_SHORT_GET_HIGH(USB_LANGUAGE_ID_UNITED_STATES)
};
uint8_t UsbManufacturerString[USB_MANUFACTURER_STRING_DESCRIPTOR_LENGTH] = {
sizeof(UsbManufacturerString),
USB_DESCRIPTOR_TYPE_STRING,
'U', 0x00U,
'l', 0x00U,
't', 0x00U,
'i', 0x00U,
'm', 0x00U,
'a', 0x00U,
't', 0x00U,
'e', 0x00U,
' ', 0x00U,
'G', 0x00U,
'a', 0x00U,
'd', 0x00U,
'g', 0x00U,
'e', 0x00U,
't', 0x00U,
' ', 0x00U,
'L', 0x00U,
'a', 0x00U,
'b', 0x00U,
'o', 0x00U,
'r', 0x00U,
'a', 0x00U,
't', 0x00U,
'o', 0x00U,
'r', 0x00U,
'i', 0x00U,
'e', 0x00U,
's', 0x00U,
};
uint8_t UsbProductString[USB_PRODUCT_STRING_DESCRIPTOR_LENGTH] = {
sizeof(UsbProductString),
USB_DESCRIPTOR_TYPE_STRING,
'U', 0x00U,
'l', 0x00U,
't', 0x00U,
'i', 0x00U,
'm', 0x00U,
'a', 0x00U,
't', 0x00U,
'e', 0x00U,
' ', 0x00U,
'H', 0x00U,
'a', 0x00U,
'c', 0x00U,
'k', 0x00U,
'i', 0x00U,
'n', 0x00U,
'g', 0x00U,
' ', 0x00U,
'K', 0x00U,
'e', 0x00U,
'y', 0x00U,
'b', 0x00U,
'o', 0x00U,
'a', 0x00U,
'r', 0x00U,
'd', 0x00U,
};
uint32_t UsbStringDescriptorLengths[USB_STRING_DESCRIPTOR_COUNT] = {
sizeof(UsbLanguageListStringDescriptor),
sizeof(UsbManufacturerString),
sizeof(UsbProductString),
};
uint8_t *UsbStringDescriptors[USB_STRING_DESCRIPTOR_COUNT] = {
UsbLanguageListStringDescriptor,
UsbManufacturerString,
UsbProductString,
};
usb_status_t USB_DeviceGetStringDescriptor(
usb_device_handle handle, usb_device_get_string_descriptor_struct_t *stringDescriptor)
{
if (stringDescriptor->stringIndex == 0) {
stringDescriptor->buffer = UsbLanguageListStringDescriptor;
stringDescriptor->length = sizeof(UsbLanguageListStringDescriptor);
} else if (stringDescriptor->languageId == USB_LANGUAGE_ID_UNITED_STATES &&
stringDescriptor->stringIndex < USB_STRING_DESCRIPTOR_COUNT)
{
stringDescriptor->buffer = UsbStringDescriptors[stringDescriptor->stringIndex];
stringDescriptor->length = UsbStringDescriptorLengths[stringDescriptor->stringIndex];
} else {
return kStatus_USB_InvalidRequest;
}
return kStatus_USB_Success;
}

View File

@@ -0,0 +1,21 @@
#ifndef __USB_DESCRIPTOR_STRINGS_H__
#define __USB_DESCRIPTOR_STRINGS_H__
// Macros:
#define USB_STRING_DESCRIPTOR_COUNT 3
#define USB_LANGUAGE_LIST_STRING_DESCRIPTOR_LENGTH 4
#define USB_MANUFACTURER_STRING_DESCRIPTOR_LENGTH 58
#define USB_PRODUCT_STRING_DESCRIPTOR_LENGTH 52
#define USB_STRING_DESCRIPTOR_ID_SUPPORTED_LANGUAGES 0
#define USB_STRING_DESCRIPTOR_ID_MANUFACTURER 1
#define USB_STRING_DESCRIPTOR_ID_PRODUCT 2
// Functions:
extern usb_status_t USB_DeviceGetStringDescriptor(
usb_device_handle handle, usb_device_get_string_descriptor_struct_t *stringDescriptor);
#endif