Add another HID interface using the consumer HID class for media keys. Resolves #32.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include "usb_api.h"
|
||||
#include "usb_descriptor_keyboard_report.h"
|
||||
#include "usb_descriptor_basic_keyboard_report.h"
|
||||
|
||||
uint8_t UsbKeyboardReportDescriptor[USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH] = {
|
||||
uint8_t UsbBasicKeyboardReportDescriptor[USB_BASIC_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),
|
||||
@@ -40,7 +40,7 @@ uint8_t UsbKeyboardReportDescriptor[USB_KEYBOARD_REPORT_DESCRIPTOR_LENGTH] = {
|
||||
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_COUNT(8, USB_BASIC_KEYBOARD_MAX_KEYS),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef __USB_DESCRIPTOR_BASIC_KEYBOARD_REPORT_H__
|
||||
#define __USB_DESCRIPTOR_BASIC_KEYBOARD_REPORT_H__
|
||||
|
||||
// Macros:
|
||||
|
||||
#define USB_BASIC_KEYBOARD_REPORT_DESCRIPTOR_LENGTH 63
|
||||
#define USB_BASIC_KEYBOARD_MAX_KEYS 6
|
||||
|
||||
// Variables:
|
||||
|
||||
extern uint8_t UsbBasicKeyboardReportDescriptor[USB_BASIC_KEYBOARD_REPORT_DESCRIPTOR_LENGTH];
|
||||
|
||||
#endif
|
||||
@@ -63,19 +63,19 @@ uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH] =
|
||||
USB_SHORT_GET_HIGH(USB_GENERIC_HID_INTERRUPT_OUT_PACKET_SIZE),
|
||||
USB_GENERIC_HID_INTERRUPT_IN_INTERVAL,
|
||||
|
||||
// Keyboard interface descriptor
|
||||
// Basic keyboard interface descriptor
|
||||
|
||||
USB_DESCRIPTOR_LENGTH_INTERFACE,
|
||||
USB_DESCRIPTOR_TYPE_INTERFACE,
|
||||
USB_KEYBOARD_INTERFACE_INDEX,
|
||||
USB_BASIC_KEYBOARD_INTERFACE_INDEX,
|
||||
USB_INTERFACE_ALTERNATE_SETTING_NONE,
|
||||
USB_KEYBOARD_ENDPOINT_COUNT,
|
||||
USB_BASIC_KEYBOARD_ENDPOINT_COUNT,
|
||||
USB_CLASS_HID,
|
||||
USB_HID_SUBCLASS_BOOT,
|
||||
USB_HID_PROTOCOL_KEYBOARD,
|
||||
USB_STRING_DESCRIPTOR_NONE,
|
||||
|
||||
// Keyboard HID descriptor
|
||||
// Basic keyboard HID descriptor
|
||||
|
||||
USB_DESCRIPTOR_LENGTH_HID,
|
||||
USB_DESCRIPTOR_TYPE_HID,
|
||||
@@ -84,18 +84,18 @@ uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH] =
|
||||
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),
|
||||
USB_SHORT_GET_LOW(USB_BASIC_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
|
||||
USB_SHORT_GET_HIGH(USB_BASIC_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
|
||||
|
||||
// Keyboard endpoint descriptor
|
||||
// Basic keyboard endpoint descriptor
|
||||
|
||||
USB_DESCRIPTOR_LENGTH_ENDPOINT,
|
||||
USB_DESCRIPTOR_TYPE_ENDPOINT,
|
||||
USB_KEYBOARD_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
|
||||
USB_BASIC_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,
|
||||
USB_SHORT_GET_LOW(USB_BASIC_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
|
||||
USB_SHORT_GET_HIGH(USB_BASIC_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
|
||||
USB_BASIC_KEYBOARD_INTERRUPT_IN_INTERVAL,
|
||||
|
||||
// Mouse interface descriptor
|
||||
|
||||
@@ -130,6 +130,42 @@ uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH] =
|
||||
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,
|
||||
|
||||
// Media keyboard interface descriptor
|
||||
|
||||
USB_DESCRIPTOR_LENGTH_INTERFACE,
|
||||
USB_DESCRIPTOR_TYPE_INTERFACE,
|
||||
USB_MEDIA_KEYBOARD_INTERFACE_INDEX,
|
||||
USB_INTERFACE_ALTERNATE_SETTING_NONE,
|
||||
USB_MEDIA_KEYBOARD_ENDPOINT_COUNT,
|
||||
USB_CLASS_HID,
|
||||
// USB_HID_SUBCLASS_NONE, ////
|
||||
// USB_HID_PROTOCOL_NONE, ////
|
||||
USB_HID_SUBCLASS_BOOT,
|
||||
USB_HID_PROTOCOL_KEYBOARD,
|
||||
USB_STRING_DESCRIPTOR_NONE,
|
||||
|
||||
// Media 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_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
|
||||
USB_SHORT_GET_HIGH(USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
|
||||
|
||||
// Media keyboard endpoint descriptor
|
||||
|
||||
USB_DESCRIPTOR_LENGTH_ENDPOINT,
|
||||
USB_DESCRIPTOR_TYPE_ENDPOINT,
|
||||
USB_MEDIA_KEYBOARD_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
|
||||
USB_ENDPOINT_INTERRUPT,
|
||||
USB_SHORT_GET_LOW(USB_MEDIA_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
|
||||
USB_SHORT_GET_HIGH(USB_MEDIA_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
|
||||
USB_MEDIA_KEYBOARD_INTERRUPT_IN_INTERVAL,
|
||||
};
|
||||
|
||||
usb_status_t USB_DeviceGetConfigurationDescriptor(
|
||||
|
||||
@@ -3,14 +3,15 @@
|
||||
|
||||
// Includes:
|
||||
|
||||
#include "usb_interfaces/usb_interface_keyboard.h"
|
||||
#include "usb_interfaces/usb_interface_basic_keyboard.h"
|
||||
#include "usb_interfaces/usb_interface_media_keyboard.h"
|
||||
#include "usb_interfaces/usb_interface_mouse.h"
|
||||
#include "usb_interfaces/usb_interface_generic_hid.h"
|
||||
|
||||
// Macros:
|
||||
|
||||
#define USB_COMPOSITE_CONFIGURATION_INDEX 1
|
||||
#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH 91
|
||||
#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH 116
|
||||
|
||||
// Functions:
|
||||
|
||||
|
||||
@@ -15,9 +15,12 @@ usb_status_t USB_DeviceGetHidReportDescriptor(
|
||||
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_BASIC_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
|
||||
hidReportDescriptor->buffer = UsbBasicKeyboardReportDescriptor;
|
||||
hidReportDescriptor->length = USB_BASIC_KEYBOARD_REPORT_DESCRIPTOR_LENGTH;
|
||||
} else if (USB_MEDIA_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
|
||||
hidReportDescriptor->buffer = UsbMediaKeyboardReportDescriptor;
|
||||
hidReportDescriptor->length = USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH;
|
||||
} else if (USB_GENERIC_HID_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
|
||||
hidReportDescriptor->buffer = UsbGenericHidReportDescriptor;
|
||||
hidReportDescriptor->length = USB_GENERIC_HID_REPORT_DESCRIPTOR_LENGTH;
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
|
||||
// Includes:
|
||||
|
||||
#include "usb_interfaces/usb_interface_keyboard.h"
|
||||
#include "usb_interfaces/usb_interface_basic_keyboard.h"
|
||||
#include "usb_interfaces/usb_interface_media_keyboard.h"
|
||||
#include "usb_interfaces/usb_interface_mouse.h"
|
||||
#include "usb_interfaces/usb_interface_generic_hid.h"
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#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
|
||||
@@ -0,0 +1,37 @@
|
||||
#include "usb_api.h"
|
||||
#include "usb_descriptor_media_keyboard_report.h"
|
||||
|
||||
uint8_t UsbMediaKeyboardReportDescriptor[USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH] = {
|
||||
// Consumer Control (Sound/Media keys)
|
||||
0x05, 0x0C, // usage page (consumer device)
|
||||
0x09, 0x01, // usage -- consumer control
|
||||
0xA1, 0x01, // collection (application)
|
||||
// 4 Media Keys
|
||||
0x15, 0x00, // logical minimum
|
||||
0x26, 0xFF, 0x03, // logical maximum (3ff)
|
||||
0x19, 0x00, // usage minimum (0)
|
||||
0x2A, 0xFF, 0x03, // usage maximum (3ff)
|
||||
0x95, 0x04, // report count (4)
|
||||
0x75, 0x10, // report size (16)
|
||||
0x81, 0x00, // input
|
||||
0xC0 // end collection
|
||||
};
|
||||
|
||||
/*
|
||||
uint8_t UsbMediaKeyboardReportDescriptor[USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH] = {
|
||||
HID_RI_USAGE_PAGE(8, HID_RI_USAGE_PAGE_CONSUMER),
|
||||
HID_RI_USAGE(8, 0x01),
|
||||
HID_RI_COLLECTION(8, HID_RI_COLLECTION_APPLICATION),
|
||||
// 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_MEDIA_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),
|
||||
};
|
||||
*/
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef __USB_DESCRIPTOR_MEDIA_KEYBOARD_REPORT_H__
|
||||
#define __USB_DESCRIPTOR_MEDIA_KEYBOARD_REPORT_H__
|
||||
|
||||
// Macros:
|
||||
|
||||
#define USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH 23
|
||||
#define USB_MEDIA_KEYBOARD_MAX_KEYS 4
|
||||
|
||||
// Variables:
|
||||
|
||||
extern uint8_t UsbMediaKeyboardReportDescriptor[USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH];
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user