summaryrefslogtreecommitdiff
path: root/tmk_core/protocol/lufa
diff options
context:
space:
mode:
authorfredizzimo <fsundvik@gmail.com>2018-02-08 22:07:46 +0200
committerJack Humbert <jack.humb@gmail.com>2018-02-08 15:07:46 -0500
commit53ff8a31b61952d9675558149d927f7942071df9 (patch)
treea57b9e6f7d6494c9ef903f886a660dd43f4e5044 /tmk_core/protocol/lufa
parent63c16f4b632a2a82a775f51a3ad0cc690cca1fc9 (diff)
downloadqmk_firmware-53ff8a31b61952d9675558149d927f7942071df9.tar.gz
qmk_firmware-53ff8a31b61952d9675558149d927f7942071df9.zip
Merge ChibiOS and LUFA descriptor support (#2362)
* Move lufa descriptor to protocol/usb_descriptor * Try to compile usb_descriptor on ChibiOS * Add lufa_utils for ChibiOS Lufa USB descriptors for ChibiOS * More lufa_util compatibility fixes * First compiling version of shared USB descriptor * Send the usb descriptors * Fix the CONSOLE output on ChibiOS * Add errors for unsupported interfaces * Enable support for vitual serial port USB descriptors * Implement virtual serial port for ChibiOS * Cleanup the lufa_utils Use the default lufa header files * Add raw hid support for ChibiOS This is completely untested * Enable midi compilation on ChibiOS * Move midi functionality out of lufa.c * Don't register sysex callback when not needed * ChibiOS compilation fixes * Update ChibiOS submodule * Fix the Midi USB descriptor It didn't work properly when both Midi and Virtual serial port was enabled. * Add MIDI support for ChibiOS * Fix USB descriptor strings on ChibiOS * Use serial usb driver for raw hid * Generalize the ChibiOS stream like drivers This makes the initialization much more simple and eliminates a lot of the code duplication. * Convert console output to chibios stream driver * Fixes for ChibiOS update * Update the ChibiOS contrib submodule To include the usb data toggle synchronization fixes * Fix duplicate reset enumeration on ChibiOS * Add missing include * Add number of endpoints check for ChibiOS * Enable serial USB driver on all keyboards * Add missing includes when API is enabled withot midi * Add another missing inlcude
Diffstat (limited to 'tmk_core/protocol/lufa')
-rw-r--r--tmk_core/protocol/lufa/descriptor.c1003
-rw-r--r--tmk_core/protocol/lufa/descriptor.h275
-rw-r--r--tmk_core/protocol/lufa/lufa.c338
-rw-r--r--tmk_core/protocol/lufa/lufa.h10
4 files changed, 30 insertions, 1596 deletions
diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c
deleted file mode 100644
index bfa91f2551..0000000000
--- a/tmk_core/protocol/lufa/descriptor.c
+++ /dev/null
@@ -1,1003 +0,0 @@
-/*
- * Copyright 2012 Jun Wako <wakojun@gmail.com>
- * This file is based on:
- * LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse
- * LUFA-120219/Demos/Device/Lowlevel/GenericHID
- */
-
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
- Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-#include "util.h"
-#include "report.h"
-#include "descriptor.h"
-
-#ifndef USB_MAX_POWER_CONSUMPTION
-#define USB_MAX_POWER_CONSUMPTION 500
-#endif
-
-/*******************************************************************************
- * HID Report Descriptors
- ******************************************************************************/
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
-{
- HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
- HID_RI_USAGE(8, 0x06), /* Keyboard */
- HID_RI_COLLECTION(8, 0x01), /* Application */
- HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */
- HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */
- HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, 0x08),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
-
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_CONSTANT), /* reserved */
-
- HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */
- HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */
- HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */
- 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),
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x03),
- HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
-
- HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */
- HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */
- HID_RI_USAGE_MAXIMUM(8, 0xFF), /* Keyboard Application */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, 0x06),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
- HID_RI_END_COLLECTION(0),
-};
-
-#ifdef MOUSE_ENABLE
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
-{
- HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
- HID_RI_USAGE(8, 0x02), /* Mouse */
- HID_RI_COLLECTION(8, 0x01), /* Application */
- HID_RI_USAGE(8, 0x01), /* Pointer */
- HID_RI_COLLECTION(8, 0x00), /* Physical */
-
- HID_RI_USAGE_PAGE(8, 0x09), /* Button */
- HID_RI_USAGE_MINIMUM(8, 0x01), /* Button 1 */
- HID_RI_USAGE_MAXIMUM(8, 0x05), /* Button 5 */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, 0x05),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x03),
- HID_RI_INPUT(8, HID_IOF_CONSTANT),
-
- HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
- HID_RI_USAGE(8, 0x30), /* Usage X */
- HID_RI_USAGE(8, 0x31), /* Usage Y */
- HID_RI_LOGICAL_MINIMUM(8, -127),
- HID_RI_LOGICAL_MAXIMUM(8, 127),
- HID_RI_REPORT_COUNT(8, 0x02),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
-
- HID_RI_USAGE(8, 0x38), /* Wheel */
- HID_RI_LOGICAL_MINIMUM(8, -127),
- HID_RI_LOGICAL_MAXIMUM(8, 127),
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
-
- HID_RI_USAGE_PAGE(8, 0x0C), /* Consumer */
- HID_RI_USAGE(16, 0x0238), /* AC Pan (Horizontal wheel) */
- HID_RI_LOGICAL_MINIMUM(8, -127),
- HID_RI_LOGICAL_MAXIMUM(8, 127),
- HID_RI_REPORT_COUNT(8, 0x01),
- 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),
-};
-#endif
-
-#ifdef EXTRAKEY_ENABLE
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =
-{
- HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
- HID_RI_USAGE(8, 0x80), /* System Control */
- HID_RI_COLLECTION(8, 0x01), /* Application */
- HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
- HID_RI_LOGICAL_MINIMUM(16, 0x0001),
- HID_RI_LOGICAL_MAXIMUM(16, 0x0003),
- HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */
- HID_RI_USAGE_MAXIMUM(16, 0x0083), /* System Wake Up */
- HID_RI_REPORT_SIZE(8, 16),
- HID_RI_REPORT_COUNT(8, 1),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
- HID_RI_END_COLLECTION(0),
-
- HID_RI_USAGE_PAGE(8, 0x0C), /* Consumer */
- HID_RI_USAGE(8, 0x01), /* Consumer Control */
- HID_RI_COLLECTION(8, 0x01), /* Application */
- HID_RI_REPORT_ID(8, REPORT_ID_CONSUMER),
- HID_RI_LOGICAL_MINIMUM(16, 0x0001),
- HID_RI_LOGICAL_MAXIMUM(16, 0x029C),
- HID_RI_USAGE_MINIMUM(16, 0x0001), /* +10 */
- HID_RI_USAGE_MAXIMUM(16, 0x029C), /* AC Distribute Vertically */
- HID_RI_REPORT_SIZE(8, 16),
- HID_RI_REPORT_COUNT(8, 1),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
- HID_RI_END_COLLECTION(0),
-};
-#endif
-
-#ifdef RAW_ENABLE
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] =
-{
- HID_RI_USAGE_PAGE(16, 0xFF60), /* Vendor Page 0xFF60 */
- HID_RI_USAGE(8, 0x61), /* Vendor Usage 0x61 */
- HID_RI_COLLECTION(8, 0x01), /* Application */
- HID_RI_USAGE(8, 0x62), /* Vendor Usage 0x62 */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_RI_USAGE(8, 0x63), /* Vendor Usage 0x63 */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
- HID_RI_END_COLLECTION(0),
-};
-#endif
-
-#ifdef CONSOLE_ENABLE
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] =
-{
- HID_RI_USAGE_PAGE(16, 0xFF31), /* Vendor Page(PJRC Teensy compatible) */
- HID_RI_USAGE(8, 0x74), /* Vendor Usage(PJRC Teensy compatible) */
- HID_RI_COLLECTION(8, 0x01), /* Application */
- HID_RI_USAGE(8, 0x75), /* Vendor Usage 0x75 */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_RI_USAGE(8, 0x76), /* Vendor Usage 0x76 */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
- HID_RI_END_COLLECTION(0),
-};
-#endif
-
-#ifdef NKRO_ENABLE
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM NKROReport[] =
-{
- HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
- HID_RI_USAGE(8, 0x06), /* Keyboard */
- HID_RI_COLLECTION(8, 0x01), /* Application */
- HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */
- HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */
- HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, 0x08),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
-
- HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */
- HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */
- HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */
- 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),
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x03),
- HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
-
- HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */
- HID_RI_USAGE_MINIMUM(8, 0x00), /* Keyboard 0 */
- HID_RI_USAGE_MAXIMUM(8, (NKRO_EPSIZE-1)*8-1), /* Keyboard Right GUI */
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, (NKRO_EPSIZE-1)*8),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_RI_END_COLLECTION(0),
-};
-#endif
-
-/*******************************************************************************
- * Device Descriptors
- ******************************************************************************/
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
- .USBSpecification = VERSION_BCD(1,1,0),
-#if VIRTSER_ENABLE
- .Class = USB_CSCP_IADDeviceClass,
- .SubClass = USB_CSCP_IADDeviceSubclass,
- .Protocol = USB_CSCP_IADDeviceProtocol,
-#else
- .Class = USB_CSCP_NoDeviceClass,
- .SubClass = USB_CSCP_NoDeviceSubclass,
- .Protocol = USB_CSCP_NoDeviceProtocol,
-#endif
-
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
-
- /* specified in config.h */
- .VendorID = VENDOR_ID,
- .ProductID = PRODUCT_ID,
- .ReleaseNumber = DEVICE_VER,
-
- .ManufacturerStrIndex = 0x01,
- .ProductStrIndex = 0x02,
- .SerialNumStrIndex = 0x03,
-
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/*******************************************************************************
- * Configuration Descriptors
- ******************************************************************************/
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
- .Config =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
- .TotalInterfaces = TOTAL_INTERFACES,
-
- .ConfigurationNumber = 1,
- .ConfigurationStrIndex = NO_DESCRIPTOR,
-
- .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_REMOTEWAKEUP),
-
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(USB_MAX_POWER_CONSUMPTION)
- },
-
- /*
- * Keyboard
- */
- .Keyboard_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = KEYBOARD_INTERFACE,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 1,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_BootSubclass,
- .Protocol = HID_CSCP_KeyboardBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Keyboard_HID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(1,1,1),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(KeyboardReport)
- },
-
- .Keyboard_INEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = KEYBOARD_EPSIZE,
- .PollingIntervalMS = 0x0A
- },
-
- /*
- * Mouse
- */
-#ifdef MOUSE_ENABLE
- .Mouse_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = MOUSE_INTERFACE,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 1,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_BootSubclass,
- .Protocol = HID_CSCP_MouseBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Mouse_HID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(1,1,1),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(MouseReport)
- },
-
- .Mouse_INEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = MOUSE_EPSIZE,
- .PollingIntervalMS = 0x0A
- },
-#endif
-
- /*
- * Extra
- */
-#ifdef EXTRAKEY_ENABLE
- .Extrakey_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = EXTRAKEY_INTERFACE,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 1,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_NonBootSubclass,
- .Protocol = HID_CSCP_NonBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Extrakey_HID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(1,1,1),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(ExtrakeyReport)
- },
-
- .Extrakey_INEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | EXTRAKEY_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = EXTRAKEY_EPSIZE,
- .PollingIntervalMS = 0x0A
- },
-#endif
-
- /*
- * Raw
- */
- #ifdef RAW_ENABLE
- .Raw_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = RAW_INTERFACE,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 2,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_NonBootSubclass,
- .Protocol = HID_CSCP_NonBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Raw_HID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(1,1,1),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(RawReport)
- },
-
- .Raw_INEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | RAW_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = RAW_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .Raw_OUTEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = RAW_EPSIZE,
- .PollingIntervalMS = 0x01
- },
- #endif
-
- /*
- * Console
- */
-#ifdef CONSOLE_ENABLE
- .Console_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = CONSOLE_INTERFACE,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 2,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_NonBootSubclass,
- .Protocol = HID_CSCP_NonBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Console_HID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(1,1,1),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(ConsoleReport)
- },
-
- .Console_INEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CONSOLE_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CONSOLE_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .Console_OUTEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | CONSOLE_OUT_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CONSOLE_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-#endif
-
- /*
- * NKRO
- */
-#ifdef NKRO_ENABLE
- .NKRO_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = NKRO_INTERFACE,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 1,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_NonBootSubclass,
- .Protocol = HID_CSCP_NonBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .NKRO_HID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(1,1,1),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(NKROReport)
- },
-
- .NKRO_INEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | NKRO_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = NKRO_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-#endif
-
-#ifdef MIDI_ENABLE
- .Audio_ControlInterface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = AC_INTERFACE,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 0,
-
- .Class = AUDIO_CSCP_AudioClass,
- .SubClass = AUDIO_CSCP_ControlSubclass,
- .Protocol = AUDIO_CSCP_ControlProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Audio_ControlInterface_SPC =
- {
- .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_Header,
-
- .ACSpecification = VERSION_BCD(1,0,0),
- .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t),
-
- .InCollection = 1,
- .InterfaceNumber = AS_INTERFACE,
- },
-
- .Audio_StreamInterface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = AS_INTERFACE,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = AUDIO_CSCP_AudioClass,
- .SubClass = AUDIO_CSCP_MIDIStreamingSubclass,
- .Protocol = AUDIO_CSCP_StreamingProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Audio_StreamInterface_SPC =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_General,
-
- .AudioSpecification = VERSION_BCD(1,0,0),
-
- .TotalLength = (sizeof(USB_Descriptor_Configuration_t) -
- offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC))
- },
-
- .MIDI_In_Jack_Emb =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
- .JackType = MIDI_JACKTYPE_Embedded,
- .JackID = 0x01,
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_In_Jack_Ext =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
- .JackType = MIDI_JACKTYPE_External,
- .JackID = 0x02,
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_Out_Jack_Emb =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
- .JackType = MIDI_JACKTYPE_Embedded,
- .JackID = 0x03,
-
- .NumberOfPins = 1,
- .SourceJackID = {0x02},
- .SourcePinID = {0x01},
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_Out_Jack_Ext =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
- .JackType = MIDI_JACKTYPE_External,
- .JackID = 0x04,
-
- .NumberOfPins = 1,
- .SourceJackID = {0x01},
- .SourcePinID = {0x01},
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_In_Jack_Endpoint =
- {
- .Endpoint =
- {
- .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = MIDI_STREAM_OUT_EPADDR,
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = MIDI_STREAM_EPSIZE,
- .PollingIntervalMS = 0x05
- },
-
- .Refresh = 0,
- .SyncEndpointNumber = 0
- },
-
- .MIDI_In_Jack_Endpoint_SPC =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
- .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
-
- .TotalEmbeddedJacks = 0x01,
- .AssociatedJackID = {0x01}
- },
-
- .MIDI_Out_Jack_Endpoint =
- {
- .Endpoint =
- {
- .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = MIDI_STREAM_IN_EPADDR,
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = MIDI_STREAM_EPSIZE,
- .PollingIntervalMS = 0x05
- },
-
- .Refresh = 0,
- .SyncEndpointNumber = 0
- },
-
- .MIDI_Out_Jack_Endpoint_SPC =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
- .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
-
- .TotalEmbeddedJacks = 0x01,
- .AssociatedJackID = {0x03}
- },
-#endif
-
-#ifdef VIRTSER_ENABLE
- .CDC_Interface_Association =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
-
- .FirstInterfaceIndex = CCI_INTERFACE,
- .TotalInterfaces = 2,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .IADStrIndex = NO_DESCRIPTOR,
- },
-
- .CDC_CCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = CCI_INTERFACE,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 1,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC_Functional_Header =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
- .Subtype = 0x00,
-
- .CDCSpecification = VERSION_BCD(1,1,0),
- },
-
- .CDC_Functional_ACM =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
- .Subtype = 0x02,
-
- .Capabilities = 0x02,
- },
-
- .CDC_Functional_Union =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
- .Subtype = 0x06,
-
- .MasterInterfaceNumber = CCI_INTERFACE,
- .SlaveInterfaceNumber = CDI_INTERFACE,
- },
-
- .CDC_NotificationEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = CDC_NOTIFICATION_EPADDR,
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,
- .PollingIntervalMS = 0xFF
- },
-
- .CDC_DCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = CDI_INTERFACE,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = CDC_CSCP_CDCDataClass,
- .SubClass = CDC_CSCP_NoDataSubclass,
- .Protocol = CDC_CSCP_NoDataProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC_DataOutEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = CDC_OUT_EPADDR,
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_EPSIZE,
- .PollingIntervalMS = 0x05
- },
-
- .CDC_DataInEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = CDC_IN_EPADDR,
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_EPSIZE,
- .PollingIntervalMS = 0x05
- },
-#endif
-};
-
-
-/*******************************************************************************
- * String Descriptors
- ******************************************************************************/
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
- .UnicodeString = {LANGUAGE_ID_ENG}
-};
-
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
- /* subtract 1 for null terminator */
- .Header = {.Size = USB_STRING_LEN(sizeof(STR(MANUFACTURER))-1), .Type = DTYPE_String},
-
- .UnicodeString = LSTR(MANUFACTURER)
-};
-
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
- /* subtract 1 for null terminator */
- .Header = {.Size = USB_STRING_LEN(sizeof(STR(PRODUCT))-1), .Type = DTYPE_String},
-
- .UnicodeString = LSTR(PRODUCT)
-};
-
-#ifndef SERIAL_NUMBER
- #define SERIAL_NUMBER 0
-#endif
-
-const USB_Descriptor_String_t PROGMEM SerialNumberString =
-{
- /* subtract 1 for null terminator */
- .Header = {.Size = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER))-1), .Type = DTYPE_String},
-
- .UnicodeString = LSTR(SERIAL_NUMBER)
-};
-
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- * documentation) by the application code so that the address and size of a requested descriptor can be given
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- * USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint16_t wIndex,
- const void** const DescriptorAddress)
-{
- const uint8_t DescriptorType = (wValue >> 8);
- const uint8_t DescriptorIndex = (wValue & 0xFF);
-
- const void* Address = NULL;
- uint16_t Size = NO_DESCRIPTOR;
-
- switch (DescriptorType)
- {
- case DTYPE_Device:
- Address = &DeviceDescriptor;
- Size = sizeof(USB_Descriptor_Device_t);
- break;
- case DTYPE_Configuration:
- Address = &ConfigurationDescriptor;
- Size = sizeof(USB_Descriptor_Configuration_t);
- break;
- case DTYPE_String:
- switch (DescriptorIndex )
- {
- case 0x00:
- Address = &LanguageString;
- Size = pgm_read_byte(&LanguageString.Header.Size);
- break;
- case 0x01:
- Address = &ManufacturerString;
- Size = pgm_read_byte(&ManufacturerString.Header.Size);
- break;
- case 0x02:
- Address = &ProductString;
- Size = pgm_read_byte(&ProductString.Header.Size);
- break;
- case 0x03:
- Address = &SerialNumberString;
- Size = pgm_read_byte(&SerialNumberString.Header.Size);
- break;
- }
- break;
- case HID_DTYPE_HID:
- switch (wIndex) {
- case KEYBOARD_INTERFACE:
- Address = &ConfigurationDescriptor.Keyboard_HID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- break;
-#ifdef MOUSE_ENABLE
- case MOUSE_INTERFACE:
- Address = &ConfigurationDescriptor.Mouse_HID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- break;
-#endif
-#ifdef EXTRAKEY_ENABLE
- case EXTRAKEY_INTERFACE:
- Address = &ConfigurationDescriptor.Extrakey_HID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- break;
-#endif
-#ifdef RAW_ENABLE
- case RAW_INTERFACE:
- Address = &ConfigurationDescriptor.Raw_HID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- break;
-#endif
-#ifdef CONSOLE_ENABLE
- case CONSOLE_INTERFACE:
- Address = &ConfigurationDescriptor.Console_HID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- break;
-#endif
-#ifdef NKRO_ENABLE
- case NKRO_INTERFACE:
- Address = &ConfigurationDescriptor.NKRO_HID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- break;
-#endif
- }
- break;
- case HID_DTYPE_Report:
- switch (wIndex) {
- case KEYBOARD_INTERFACE:
- Address = &KeyboardReport;
- Size = sizeof(KeyboardReport);
- break;
-#ifdef MOUSE_ENABLE
- case MOUSE_INTERFACE:
- Address = &MouseReport;
- Size = sizeof(MouseReport);
- break;
-#endif
-#ifdef EXTRAKEY_ENABLE
- case EXTRAKEY_INTERFACE:
- Address = &ExtrakeyReport;
- Size = sizeof(ExtrakeyReport);
- break;
-#endif
-#ifdef RAW_ENABLE
- case RAW_INTERFACE:
- Address = &RawReport;
- Size = sizeof(RawReport);
- break;
-#endif
-#ifdef CONSOLE_ENABLE
- case CONSOLE_INTERFACE:
- Address = &ConsoleReport;
- Size = sizeof(ConsoleReport);
- break;
-#endif
-#ifdef NKRO_ENABLE
- case NKRO_INTERFACE:
- Address = &NKROReport;
- Size = sizeof(NKROReport);
- break;
-#endif
- }
- break;
- }
-
- *DescriptorAddress = Address;
- return Size;
-}
diff --git a/tmk_core/protocol/lufa/descriptor.h b/tmk_core/protocol/lufa/descriptor.h
deleted file mode 100644
index 61c42c9dfc..0000000000
--- a/tmk_core/protocol/lufa/descriptor.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
- * This file is based on:
- * LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse
- * LUFA-120219/Demos/Device/Lowlevel/GenericHID
- */
-
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
- Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-#include <LUFA/Drivers/USB/USB.h>
-#include <avr/pgmspace.h>
-
-
-typedef struct
-{
- USB_Descriptor_Configuration_Header_t Config;
-
- // Keyboard HID Interface
- USB_Descriptor_Interface_t Keyboard_Interface;
- USB_HID_Descriptor_HID_t Keyboard_HID;
- USB_Descriptor_Endpoint_t Keyboard_INEndpoint;
-
-#ifdef MOUSE_ENABLE
- // Mouse HID Interface
- USB_Descriptor_Interface_t Mouse_Interface;
- USB_HID_Descriptor_HID_t Mouse_HID;
- USB_Descriptor_Endpoint_t Mouse_INEndpoint;
-#endif
-
-#ifdef EXTRAKEY_ENABLE
- // Extrakey HID Interface
- USB_Descriptor_Interface_t Extrakey_Interface;
- USB_HID_Descriptor_HID_t Extrakey_HID;
- USB_Descriptor_Endpoint_t Extrakey_INEndpoint;
-#endif
-
-#ifdef RAW_ENABLE
- // Raw HID Interface
- USB_Descriptor_Interface_t Raw_Interface;
- USB_HID_Descriptor_HID_t Raw_HID;
- USB_Descriptor_Endpoint_t Raw_INEndpoint;
- USB_Descriptor_Endpoint_t Raw_OUTEndpoint;
-#endif
-
-#ifdef CONSOLE_ENABLE
- // Console HID Interface
- USB_Descriptor_Interface_t Console_Interface;
- USB_HID_Descriptor_HID_t Console_HID;
- USB_Descriptor_Endpoint_t Console_INEndpoint;
- USB_Descriptor_Endpoint_t Console_OUTEndpoint;
-#endif
-
-#ifdef NKRO_ENABLE
- // NKRO HID Interface
- USB_Descriptor_Interface_t NKRO_Interface;
- USB_HID_Descriptor_HID_t NKRO_HID;
- USB_Descriptor_Endpoint_t NKRO_INEndpoint;
-#endif
-
-#ifdef MIDI_ENABLE
- // MIDI Audio Control Interface
- USB_Descriptor_Interface_t Audio_ControlInterface;
- USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC;
-
- // MIDI Audio Streaming Interface
- USB_Descriptor_Interface_t Audio_StreamInterface;
- USB_MIDI_Descriptor_AudioInterface_AS_t Audio_StreamInterface_SPC;
- USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Emb;
- USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Ext;
- USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Emb;
- USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Ext;
- USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint;
- USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC;
- USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;
- USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC;
-#endif
-
-#ifdef VIRTSER_ENABLE
- USB_Descriptor_Interface_Association_t CDC_Interface_Association;
-
- // CDC Control Interface
- USB_Descriptor_Interface_t CDC_CCI_Interface;
- USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header;
- USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM;
- USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union;
- USB_Descriptor_Endpoint_t CDC_NotificationEndpoint;
-
- // CDC Data Interface
- USB_Descriptor_Interface_t CDC_DCI_Interface;
- USB_Descriptor_Endpoint_t CDC_DataOutEndpoint;
- USB_Descriptor_Endpoint_t CDC_DataInEndpoint;
-#endif
-} USB_Descriptor_Configuration_t;
-
-
-/* index of interface */
-#define KEYBOARD_INTERFACE 0
-
-// It is important that the Raw HID interface is at a constant
-// interface number, to support Linux/OSX platforms and chrome.hid
-// If Raw HID is enabled, let it be always 1.
-#ifdef RAW_ENABLE
-# define RAW_INTERFACE (KEYBOARD_INTERFACE + 1)
-#else
-# define RAW_INTERFACE KEYBOARD_INTERFACE
-#endif
-
-#ifdef MOUSE_ENABLE
-# define MOUSE_INTERFACE (RAW_INTERFACE + 1)
-#else
-# define MOUSE_INTERFACE RAW_INTERFACE
-#endif
-
-#ifdef EXTRAKEY_ENABLE
-# define EXTRAKEY_INTERFACE (MOUSE_INTERFACE + 1)
-#else
-# define EXTRAKEY_INTERFACE MOUSE_INTERFACE
-#endif
-
-#ifdef CONSOLE_ENABLE
-# define CONSOLE_INTERFACE (EXTRAKEY_INTERFACE + 1)
-#else
-# define CONSOLE_INTERFACE EXTRAKEY_INTERFACE
-#endif
-
-#ifdef NKRO_ENABLE
-# define NKRO_INTERFACE (CONSOLE_INTERFACE + 1)
-#else
-# define NKRO_INTERFACE CONSOLE_INTERFACE
-#endif
-
-#ifdef MIDI_ENABLE
-# define AC_INTERFACE (NKRO_INTERFACE + 1)
-# define AS_INTERFACE (NKRO_INTERFACE + 2)
-#else
-# define AS_INTERFACE NKRO_INTERFACE
-#endif
-
-#ifdef VIRTSER_ENABLE
-# define CCI_INTERFACE (AS_INTERFACE + 1)
-# define CDI_INTERFACE (AS_INTERFACE + 2)
-#else
-# define CDI_INTERFACE AS_INTERFACE
-#endif
-
-/* nubmer of interfaces */
-#define TOTAL_INTERFACES (CDI_INTERFACE + 1)
-
-
-// Endopoint number and size
-#define KEYBOARD_IN_EPNUM 1
-
-#ifdef MOUSE_ENABLE
-# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1)
-#else
-# define MOUSE_IN_EPNUM KEYBOARD_IN_EPNUM
-#endif
-
-#ifdef EXTRAKEY_ENABLE
-# define EXTRAKEY_IN_EPNUM (MOUSE_IN_EPNUM + 1)
-#else
-# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM
-#endif
-
-#ifdef RAW_ENABLE
-# define RAW_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1)
-# define RAW_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2)
-#else
-# define RAW_OUT_EPNUM EXTRAKEY_IN_EPNUM
-#endif
-
-#ifdef CONSOLE_ENABLE
-# define CONSOLE_IN_EPNUM (RAW_OUT_EPNUM + 1)
-//# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 2)
-# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 1)
-#else
-# define CONSOLE_OUT_EPNUM RAW_OUT_EPNUM
-#endif
-
-#ifdef NKRO_ENABLE
-# define NKRO_IN_EPNUM (CONSOLE_OUT_EPNUM + 1)
-#else
-# define NKRO_IN_EPNUM CONSOLE_OUT_EPNUM
-#endif
-
-#ifdef MIDI_ENABLE
-# define MIDI_STREAM_IN_EPNUM (NKRO_IN_EPNUM + 1)
-// # define MIDI_STREAM_OUT_EPNUM (NKRO_IN_EPNUM + 1)
-# define MIDI_STREAM_OUT_EPNUM (NKRO_IN_EPNUM + 2)
-# define MIDI_STREAM_IN_EPADDR (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM)
-# define MIDI_STREAM_OUT_EPADDR (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM)
-#else
-# define MIDI_STREAM_OUT_EPNUM NKRO_IN_EPNUM
-#endif
-
-#ifdef VIRTSER_ENABLE
-# define CDC_NOTIFICATION_EPNUM (MIDI_STREAM_OUT_EPNUM + 1)
-# define CDC_IN_EPNUM (MIDI_STREAM_OUT_EPNUM + 2)
-# define CDC_OUT_EPNUM (MIDI_STREAM_OUT_EPNUM + 3)
-# define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM)
-# define CDC_IN_EPADDR (ENDPOINT_DIR_IN | CDC_IN_EPNUM)
-# define CDC_OUT_EPADDR (ENDPOINT_DIR_OUT | CDC_OUT_EPNUM)
-#else
-# define CDC_OUT_EPNUM MIDI_STREAM_OUT_EPNUM
-#endif
-
-#if (defined(__AVR_ATmega32U2__) && CDC_OUT_EPNUM > 4) || \
- (defined(__AVR_ATmega32U4__) && CDC_OUT_EPNUM > 6)
-# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL)"
-#endif
-
-#define KEYBOARD_EPSIZE 8
-#define MOUSE_EPSIZE 8
-#define EXTRAKEY_EPSIZE 8
-#define RAW_EPSIZE 32
-#define CONSOLE_EPSIZE 32
-#define NKRO_EPSIZE 32
-#define MIDI_STREAM_EPSIZE 64
-#define CDC_NOTIFICATION_EPSIZE 8
-#define CDC_EPSIZE 16
-
-
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint16_t wIndex,
- const void** const DescriptorAddress)
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-
-/* new API */
-#if LUFA_VERSION_INTEGER < 0x140302
- #undef VERSION_BCD
- #define VERSION_BCD(Major, Minor, Revision) \
- CPU_TO_LE16( ((Major & 0xFF) << 8) | \
- ((Minor & 0x0F) << 4) | \
- (Revision & 0x0F) )
-#endif
-
-#endif
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index e3f8724e81..a1cab98a66 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -49,7 +49,7 @@
#endif
#include "suspend.h"
-#include "descriptor.h"
+#include "usb_descriptor.h"
#include "lufa.h"
#include "quantum.h"
#include <util/atomic.h>
@@ -83,7 +83,7 @@
#endif
#ifdef MIDI_ENABLE
- #include "sysex_tools.h"
+ #include "qmk_midi.h"
#endif
#ifdef RAW_ENABLE
@@ -97,12 +97,6 @@ static uint8_t keyboard_led_stats = 0;
static report_keyboard_t keyboard_report_sent;
-#ifdef MIDI_ENABLE
-static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2);
-static void usb_get_midi(MidiDevice * device);
-static void midi_usb_init(MidiDevice * device);
-#endif
-
/* Host driver */
static uint8_t keyboard_leds(void);
static void send_keyboard(report_keyboard_t *report);
@@ -115,48 +109,8 @@ host_driver_t lufa_driver = {
send_mouse,
send_system,
send_consumer,
-#ifdef MIDI_ENABLE
- usb_send_func,
- usb_get_midi,
- midi_usb_init
-#endif
-};
-
-/*******************************************************************************
- * MIDI
- ******************************************************************************/
-
-#ifdef MIDI_ENABLE
-USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface =
-{
- .Config =
- {
- .StreamingInterfaceNumber = AS_INTERFACE,
- .DataINEndpoint =
- {
- .Address = MIDI_STREAM_IN_EPADDR,
- .Size = MIDI_STREAM_EPSIZE,
- .Banks = 1,
- },
- .DataOUTEndpoint =
- {
- .Address = MIDI_STREAM_OUT_EPADDR,
- .Size = MIDI_STREAM_EPSIZE,
- .Banks = 1,
- },
- },
};
-#define SYSEX_START_OR_CONT 0x40
-#define SYSEX_ENDS_IN_1 0x50
-#define SYSEX_ENDS_IN_2 0x60
-#define SYSEX_ENDS_IN_3 0x70
-
-#define SYS_COMMON_1 0x50
-#define SYS_COMMON_2 0x20
-#define SYS_COMMON_3 0x30
-#endif
-
#ifdef VIRTSER_ENABLE
USB_ClassInfo_CDC_Device_t cdc_device =
{
@@ -853,170 +807,32 @@ int8_t sendchar(uint8_t c)
******************************************************************************/
#ifdef MIDI_ENABLE
-static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) {
- MIDI_EventPacket_t event;
- event.Data1 = byte0;
- event.Data2 = byte1;
- event.Data3 = byte2;
-
- uint8_t cable = 0;
-
-// Endpoint_SelectEndpoint(MIDI_STREAM_IN_EPNUM);
-
- //if the length is undefined we assume it is a SYSEX message
- if (midi_packet_length(byte0) == UNDEFINED) {
- switch(cnt) {
- case 3:
- if (byte2 == SYSEX_END)
- event.Event = MIDI_EVENT(cable, SYSEX_ENDS_IN_3);
- else
- event.Event = MIDI_EVENT(cable, SYSEX_START_OR_CONT);
- break;
- case 2:
- if (byte1 == SYSEX_END)
- event.Event = MIDI_EVENT(cable, SYSEX_ENDS_IN_2);
- else
- event.Event = MIDI_EVENT(cable, SYSEX_START_OR_CONT);
- break;
- case 1:
- if (byte0 == SYSEX_END)
- event.Event = MIDI_EVENT(cable, SYSEX_ENDS_IN_1);
- else
- event.Event = MIDI_EVENT(cable, SYSEX_START_OR_CONT);
- break;
- default:
- return; //invalid cnt
- }
- } else {
- //deal with 'system common' messages
- //TODO are there any more?
- switch(byte0 & 0xF0){
- case MIDI_SONGPOSITION:
- event.Event = MIDI_EVENT(cable, SYS_COMMON_3);
- break;
- case MIDI_SONGSELECT:
- case MIDI_TC_QUARTERFRAME:
- event.Event = MIDI_EVENT(cable, SYS_COMMON_2);
- break;
- default:
- event.Event = MIDI_EVENT(cable, byte0);
- break;
- }
- }
-
-// Endpoint_Write_Stream_LE(&event, sizeof(event), NULL);
-// Endpoint_ClearIN();
-
- MIDI_Device_SendEventPacket(&USB_MIDI_Interface, &event);
- MIDI_Device_Flush(&USB_MIDI_Interface);
- MIDI_Device_USBTask(&USB_MIDI_Interface);
- USB_USBTask();
-}
-
-static void usb_get_midi(MidiDevice * device) {
- MIDI_EventPacket_t event;
- while (MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, &event)) {
-
- midi_packet_length_t length = midi_packet_length(event.Data1);
- uint8_t input[3];
- input[0] = event.Data1;
- input[1] = event.Data2;
- input[2] = event.Data3;
- if (length == UNDEFINED) {
- //sysex
- if (event.Event == MIDI_EVENT(0, SYSEX_START_OR_CONT) || event.Event == MIDI_EVENT(0, SYSEX_ENDS_IN_3)) {
- length = 3;
- } else if (event.Event == MIDI_EVENT(0, SYSEX_ENDS_IN_2)) {
- length = 2;
- } else if(event.Event == MIDI_EVENT(0, SYSEX_ENDS_IN_1)) {
- length = 1;
- } else {
- //XXX what to do?
- }
- }
-
- //pass the data to the device input function
- if (length != UNDEFINED)
- midi_device_input(device, length, input);
- }
- MIDI_Device_USBTask(&USB_MIDI_Interface);
- USB_USBTask();
-}
-
-static void midi_usb_init(MidiDevice * device){
- midi_device_init(device);
- midi_device_set_send_func(device, usb_send_func);
- midi_device_set_pre_input_process_func(device, usb_get_midi);
-
- // SetupHardware();
- sei();
-}
-
-void MIDI_Task(void)
+USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface =
{
-
- /* Device must be connected and configured for the task to run */
- dprint("in MIDI_TASK\n");
- if (USB_DeviceState != DEVICE_STATE_Configured)
- return;
- dprint("continuing in MIDI_TASK\n");
-
- Endpoint_SelectEndpoint(MIDI_STREAM_IN_EPADDR);
-
- if (Endpoint_IsINReady())
+ .Config =
+ {
+ .StreamingInterfaceNumber = AS_INTERFACE,
+ .DataINEndpoint =
{
-
- dprint("Endpoint is ready\n");
-
- uint8_t MIDICommand = 0;
- uint8_t MIDIPitch;
-
- /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */
- uint8_t Channel = MIDI_CHANNEL(1);
-
- MIDICommand = MIDI_COMMAND_NOTE_ON;
- MIDIPitch = 0x3E;
-
- /* Check if a MIDI command is to be sent */
- if (MIDICommand)
- {
- dprint("Command exists\n");
- MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t)
- {
- .Event = MIDI_EVENT(0, MIDICommand),
-
- .Data1 = MIDICommand | Channel,
- .Data2 = MIDIPitch,
- .Data3 = MIDI_STANDARD_VELOCITY,
- };
-
- /* Write the MIDI event packet to the endpoint */
- Endpoint_Write_Stream_LE(&MIDIEvent, sizeof(MIDIEvent), NULL);
-
- /* Send the data in the endpoint to the host */
- Endpoint_ClearIN();
- }
- }
-
-
- /* Select the MIDI OUT stream */
- Endpoint_SelectEndpoint(MIDI_STREAM_OUT_EPADDR);
-
- /* Check if a MIDI command has been received */
- if (Endpoint_IsOUTReceived())
+ .Address = MIDI_STREAM_IN_EPADDR,
+ .Size = MIDI_STREAM_EPSIZE,
+ .Banks = 1,
+ },
+ .DataOUTEndpoint =
{
- MIDI_EventPacket_t MIDIEvent;
+ .Address = MIDI_STREAM_OUT_EPADDR,
+ .Size = MIDI_STREAM_EPSIZE,
+ .Banks = 1,
+ },
+ },
+};
- /* Read the MIDI event packet from the endpoint */
- Endpoint_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent), NULL);
+void send_midi_packet(MIDI_EventPacket_t* event) {
+ MIDI_Device_SendEventPacket(&USB_MIDI_Interface, event);
+}
- /* If the endpoint is now empty, clear the bank */
- if (!(Endpoint_BytesInEndpoint()))
- {
- /* Clear the endpoint ready for new packet */
- Endpoint_ClearOUT();
- }
- }
+bool recv_midi_packet(MIDI_EventPacket_t* const event) {
+ return MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, event);
}
#endif
@@ -1105,26 +921,6 @@ static void setup_usb(void)
print_set_sendchar(sendchar);
}
-
-#ifdef MIDI_ENABLE
-void fallthrough_callback(MidiDevice * device,
- uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2);
-void cc_callback(MidiDevice * device,
- uint8_t chan, uint8_t num, uint8_t val);
-void sysex_callback(MidiDevice * device,
- uint16_t start, uint8_t length, uint8_t * data);
-
-void setup_midi(void)
-{
-#ifdef MIDI_ADVANCED
- midi_init();
-#endif
- midi_device_init(&midi_device);
- midi_device_set_send_func(&midi_device, usb_send_func);
- midi_device_set_pre_input_process_func(&midi_device, usb_get_midi);
-}
-#endif
-
int main(void) __attribute__ ((weak));
int main(void)
{
@@ -1137,18 +933,6 @@ int main(void)
setup_usb();
sei();
-#ifdef MIDI_ENABLE
- midi_register_fallthrough_callback(&midi_device, fallthrough_callback);
- midi_register_cc_callback(&midi_device, cc_callback);
- midi_register_sysex_callback(&midi_device, sysex_callback);
-
- // init_notes();
- // midi_send_cc(&midi_device, 0, 1, 2);
- // midi_send_cc(&midi_device, 15, 1, 0);
- // midi_send_noteon(&midi_device, 0, 64, 127);
- // midi_send_noteoff(&midi_device, 0, 64, 127);
-#endif
-
#if defined(MODULE_ADAFRUIT_EZKEY) || defined(MODULE_RN42)
serial_init();
#endif
@@ -1193,10 +977,7 @@ int main(void)
keyboard_task();
#ifdef MIDI_ENABLE
- midi_device_process(&midi_device);
-#ifdef MIDI_ADVANCED
- midi_task();
-#endif
+ MIDI_Device_USBTask(&USB_MIDI_Interface);
#endif
#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE)
@@ -1223,71 +1004,10 @@ int main(void)
}
}
-#ifdef MIDI_ENABLE
-void fallthrough_callback(MidiDevice * device,
- uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2){
-
-#ifdef AUDIO_ENABLE
- if (cnt == 3) {
- switch (byte0 & 0xF0) {
- case MIDI_NOTEON:
- play_note(((double)261.6)*pow(2.0, -4.0)*pow(2.0,(byte1 & 0x7F)/12.0), (byte2 & 0x7F) / 8);
- break;
- case MIDI_NOTEOFF:
- stop_note(((double)261.6)*pow(2.0, -4.0)*pow(2.0,(byte1 & 0x7F)/12.0));
- break;
- }
- }
- if (byte0 == MIDI_STOP) {
- stop_all_notes();
- }
-#endif
-}
-
-
-void cc_callback(MidiDevice * device,
- uint8_t chan, uint8_t num, uint8_t val) {
- //sending it back on the next channel
- // midi_send_cc(device, (chan + 1) % 16, num, val);
-}
-
-#ifdef API_SYSEX_ENABLE
-uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0};
-#endif
-
-void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) {
- #ifdef API_SYSEX_ENABLE
- // SEND_STRING("\n");
- // send_word(start);
- // SEND_STRING(": ");
- // Don't store the header
- int16_t pos = start - 4;
- for (uint8_t place = 0; place < length; place++) {
- // send_byte(*data);
- if (pos >= 0) {
- if (*data == 0xF7) {
- // SEND_STRING("\nRD: ");
- // for (uint8_t i = 0; i < start + place + 1; i++){
- // send_byte(midi_buffer[i]);
- // SEND_STRING(" ");
- // }
- const unsigned decoded_length = sysex_decoded_length(pos);
- uint8_t decoded[API_SYSEX_MAX_SIZE];
- sysex_decode(decoded, midi_buffer, pos);
- process_api(decoded_length, decoded);
- return;
- }
- else if (pos >= MIDI_SYSEX_BUFFER) {
- return;
- }
- midi_buffer[pos] = *data;
- }
- // SEND_STRING(" ");
- data++;
- pos++;
- }
- #endif
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
+ const uint16_t wIndex,
+ const void** const DescriptorAddress)
+{
+ return get_usb_descriptor(wValue, wIndex, DescriptorAddress);
}
-
-#endif
diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h
index a515737862..7364cdf7ce 100644
--- a/tmk_core/protocol/lufa/lufa.h
+++ b/tmk_core/protocol/lufa/lufa.h
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2012 Jun Wako <wakojun@gmail.com>
* This file is based on:
* LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse
@@ -48,9 +48,6 @@
#include <LUFA/Version.h>
#include <LUFA/Drivers/USB/USB.h>
#include "host.h"
-#ifdef MIDI_ENABLE
- #include "process_midi.h"
-#endif
#ifdef __cplusplus
extern "C" {
#endif
@@ -67,11 +64,6 @@ typedef struct {
uint16_t usage;
} __attribute__ ((packed)) report_extra_t;
-#ifdef MIDI_ENABLE
- void MIDI_Task(void);
- MidiDevice midi_device;
-#endif
-
#ifdef API_ENABLE
#include "api.h"
#endif