Add system keyboard interface and add sleep, power and wake keys.

This commit is contained in:
László Monda
2017-03-06 01:58:02 +01:00
parent c7f101b67f
commit 62a3f6b3a4
14 changed files with 277 additions and 13 deletions

View File

@@ -139,10 +139,8 @@ uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH] =
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_HID_SUBCLASS_NONE,
USB_HID_PROTOCOL_NONE,
USB_STRING_DESCRIPTOR_NONE,
// Media keyboard HID descriptor
@@ -166,6 +164,40 @@ uint8_t UsbConfigurationDescriptor[USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH] =
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,
// System keyboard interface descriptor
USB_DESCRIPTOR_LENGTH_INTERFACE,
USB_DESCRIPTOR_TYPE_INTERFACE,
USB_SYSTEM_KEYBOARD_INTERFACE_INDEX,
USB_INTERFACE_ALTERNATE_SETTING_NONE,
USB_SYSTEM_KEYBOARD_ENDPOINT_COUNT,
USB_CLASS_HID,
USB_HID_SUBCLASS_NONE,
USB_HID_PROTOCOL_NONE,
USB_STRING_DESCRIPTOR_NONE,
// System 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_SYSTEM_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
USB_SHORT_GET_HIGH(USB_SYSTEM_KEYBOARD_REPORT_DESCRIPTOR_LENGTH),
// System keyboard endpoint descriptor
USB_DESCRIPTOR_LENGTH_ENDPOINT,
USB_DESCRIPTOR_TYPE_ENDPOINT,
USB_SYSTEM_KEYBOARD_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_INTERRUPT,
USB_SHORT_GET_LOW(USB_SYSTEM_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(USB_SYSTEM_KEYBOARD_INTERRUPT_IN_PACKET_SIZE),
USB_SYSTEM_KEYBOARD_INTERRUPT_IN_INTERVAL,
};
usb_status_t USB_DeviceGetConfigurationDescriptor(

View File

@@ -5,13 +5,14 @@
#include "usb_interfaces/usb_interface_basic_keyboard.h"
#include "usb_interfaces/usb_interface_media_keyboard.h"
#include "usb_interfaces/usb_interface_system_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 116
#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH 141
// Functions:

View File

@@ -21,6 +21,9 @@ usb_status_t USB_DeviceGetHidReportDescriptor(
} else if (USB_MEDIA_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
hidReportDescriptor->buffer = UsbMediaKeyboardReportDescriptor;
hidReportDescriptor->length = USB_MEDIA_KEYBOARD_REPORT_DESCRIPTOR_LENGTH;
} else if (USB_SYSTEM_KEYBOARD_INTERFACE_INDEX == hidReportDescriptor->interfaceNumber) {
hidReportDescriptor->buffer = UsbSystemKeyboardReportDescriptor;
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;

View File

@@ -5,6 +5,7 @@
#include "usb_interfaces/usb_interface_basic_keyboard.h"
#include "usb_interfaces/usb_interface_media_keyboard.h"
#include "usb_interfaces/usb_interface_system_keyboard.h"
#include "usb_interfaces/usb_interface_mouse.h"
#include "usb_interfaces/usb_interface_generic_hid.h"

View File

@@ -0,0 +1,38 @@
#include "usb_api.h"
#include "usb_descriptor_system_keyboard_report.h"
uint8_t UsbSystemKeyboardReportDescriptor[USB_SYSTEM_KEYBOARD_REPORT_DESCRIPTOR_LENGTH] = {
//TODO limit to system keys only?
// System Control (Power Down, Sleep, Wakeup, ...)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x80, // USAGE (System Control)
0xa1, 0x01, // COLLECTION (Application)
// 1 system key
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x19, 0x00, // USAGE_MINIMUM (Undefined)
0x29, 0xff, // USAGE_MAXIMUM (System Menu Down)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x00, // INPUT (Data,Ary,Abs)
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),
};
*/

View File

@@ -0,0 +1,13 @@
#ifndef __USB_DESCRIPTOR_SYSTEM_KEYBOARD_REPORT_H__
#define __USB_DESCRIPTOR_SYSTEM_KEYBOARD_REPORT_H__
// Macros:
#define USB_SYSTEM_KEYBOARD_REPORT_DESCRIPTOR_LENGTH 22
#define USB_SYSTEM_KEYBOARD_MAX_KEYS 1
// Variables:
extern uint8_t UsbSystemKeyboardReportDescriptor[USB_SYSTEM_KEYBOARD_REPORT_DESCRIPTOR_LENGTH];
#endif