Put the files that contain the usb descriptors into the newly created usb_descriptors directory.
This commit is contained in:
144
right/src/usb_descriptors/usb_descriptor_configuration.c
Normal file
144
right/src/usb_descriptors/usb_descriptor_configuration.c
Normal 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;
|
||||
}
|
||||
20
right/src/usb_descriptors/usb_descriptor_configuration.h
Normal file
20
right/src/usb_descriptors/usb_descriptor_configuration.h
Normal 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
|
||||
32
right/src/usb_descriptors/usb_descriptor_device.c
Normal file
32
right/src/usb_descriptors/usb_descriptor_device.c
Normal 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;
|
||||
}
|
||||
22
right/src/usb_descriptors/usb_descriptor_device.h
Normal file
22
right/src/usb_descriptors/usb_descriptor_device.h
Normal 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
|
||||
@@ -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)
|
||||
};
|
||||
@@ -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
|
||||
34
right/src/usb_descriptors/usb_descriptor_hid.c
Normal file
34
right/src/usb_descriptors/usb_descriptor_hid.c
Normal 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;
|
||||
}
|
||||
21
right/src/usb_descriptors/usb_descriptor_hid.h
Normal file
21
right/src/usb_descriptors/usb_descriptor_hid.h
Normal 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
|
||||
48
right/src/usb_descriptors/usb_descriptor_keyboard_report.c
Normal file
48
right/src/usb_descriptors/usb_descriptor_keyboard_report.c
Normal 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),
|
||||
};
|
||||
13
right/src/usb_descriptors/usb_descriptor_keyboard_report.h
Normal file
13
right/src/usb_descriptors/usb_descriptor_keyboard_report.h
Normal 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
|
||||
85
right/src/usb_descriptors/usb_descriptor_mouse_report.c
Normal file
85
right/src/usb_descriptors/usb_descriptor_mouse_report.c
Normal 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)
|
||||
};
|
||||
22
right/src/usb_descriptors/usb_descriptor_mouse_report.h
Normal file
22
right/src/usb_descriptors/usb_descriptor_mouse_report.h
Normal 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
|
||||
101
right/src/usb_descriptors/usb_descriptor_strings.c
Normal file
101
right/src/usb_descriptors/usb_descriptor_strings.c
Normal 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;
|
||||
}
|
||||
21
right/src/usb_descriptors/usb_descriptor_strings.h
Normal file
21
right/src/usb_descriptors/usb_descriptor_strings.h
Normal 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
|
||||
Reference in New Issue
Block a user