diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 29f340268aa..75a6d9b91b4 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -368,14 +368,14 @@ typedef struct { #ifdef RAW_ENABLE usb_driver_config_t raw_driver; #endif -#ifdef XAP_ENABLE - usb_driver_config_t xap_driver; -#endif #ifdef MIDI_ENABLE usb_driver_config_t midi_driver; #endif #ifdef VIRTSER_ENABLE usb_driver_config_t serial_driver; +#endif +#ifdef XAP_ENABLE + usb_driver_config_t xap_driver; #endif }; usb_driver_config_t array[0]; @@ -402,14 +402,6 @@ static usb_driver_configs_t drivers = { .raw_driver = QMK_USB_DRIVER_CONFIG(RAW, 0, false), #endif -#ifdef XAP_ENABLE -# define XAP_IN_CAPACITY 4 -# define XAP_OUT_CAPACITY 4 -# define XAP_IN_MODE USB_EP_MODE_TYPE_INTR -# define XAP_OUT_MODE USB_EP_MODE_TYPE_INTR - .xap_driver = QMK_USB_DRIVER_CONFIG(XAP, 0, false), -#endif - #ifdef MIDI_ENABLE # define MIDI_STREAM_IN_CAPACITY 4 # define MIDI_STREAM_OUT_CAPACITY 4 @@ -425,6 +417,14 @@ static usb_driver_configs_t drivers = { # define CDC_OUT_MODE USB_EP_MODE_TYPE_BULK .serial_driver = QMK_USB_DRIVER_CONFIG(CDC, CDC_NOTIFICATION_EPNUM, false), #endif + +#ifdef XAP_ENABLE +# define XAP_IN_CAPACITY 4 +# define XAP_OUT_CAPACITY 4 +# define XAP_IN_MODE USB_EP_MODE_TYPE_INTR +# define XAP_OUT_MODE USB_EP_MODE_TYPE_INTR + .xap_driver = QMK_USB_DRIVER_CONFIG(XAP, 0, false), +#endif }; #define NUM_USB_DRIVERS (sizeof(drivers) / sizeof(usb_driver_config_t)) diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index f050c5ac207..3d9bb94f4e8 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -486,12 +486,6 @@ void EVENT_USB_Device_ConfigurationChanged(void) { ConfigSuccess &= Endpoint_ConfigureEndpoint((RAW_OUT_EPNUM | ENDPOINT_DIR_OUT), EP_TYPE_INTERRUPT, RAW_EPSIZE, 1); #endif -#ifdef XAP_ENABLE - /* Setup XAP endpoints */ - ConfigSuccess &= Endpoint_ConfigureEndpoint((XAP_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_INTERRUPT, XAP_EPSIZE, 1); - ConfigSuccess &= Endpoint_ConfigureEndpoint((XAP_OUT_EPNUM | ENDPOINT_DIR_OUT), EP_TYPE_INTERRUPT, XAP_EPSIZE, 1); -#endif // XAP_ENABLE - #ifdef CONSOLE_ENABLE /* Setup console endpoint */ ConfigSuccess &= Endpoint_ConfigureEndpoint((CONSOLE_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_INTERRUPT, CONSOLE_EPSIZE, 1); @@ -523,6 +517,12 @@ void EVENT_USB_Device_ConfigurationChanged(void) { ConfigSuccess &= Endpoint_ConfigureEndpoint((DIGITIZER_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_INTERRUPT, DIGITIZER_EPSIZE, 1); #endif +#ifdef XAP_ENABLE + /* Setup XAP endpoints */ + ConfigSuccess &= Endpoint_ConfigureEndpoint((XAP_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_INTERRUPT, XAP_EPSIZE, 1); + ConfigSuccess &= Endpoint_ConfigureEndpoint((XAP_OUT_EPNUM | ENDPOINT_DIR_OUT), EP_TYPE_INTERRUPT, XAP_EPSIZE, 1); +#endif // XAP_ENABLE + usb_device_state_set_configuration(USB_DeviceState == DEVICE_STATE_Configured, USB_Device_ConfigurationNumber); } diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index 9c104fe4340..87f18267acb 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -406,30 +406,6 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] = { }; #endif -#ifdef XAP_ENABLE -const USB_Descriptor_HIDReport_Datatype_t PROGMEM XapReport[] = { - HID_RI_USAGE_PAGE(16, 0xFF51), // Vendor Defined ('Q') - HID_RI_USAGE(8, 0x58), // Vendor Defined ('X') - HID_RI_COLLECTION(8, 0x01), // Application - // Data to host - HID_RI_USAGE(8, 0x62), // Vendor Defined - HID_RI_LOGICAL_MINIMUM(8, 0x00), - HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), - HID_RI_REPORT_COUNT(8, XAP_EPSIZE), - HID_RI_REPORT_SIZE(8, 0x08), - HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - - // Data from host - HID_RI_USAGE(8, 0x63), // Vendor Defined - HID_RI_LOGICAL_MINIMUM(8, 0x00), - HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), - HID_RI_REPORT_COUNT(8, XAP_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 // XAP_ENABLE - #ifdef CONSOLE_ENABLE const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = { HID_RI_USAGE_PAGE(16, 0xFF31), // Vendor Defined (PJRC Teensy compatible) @@ -454,6 +430,30 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = { }; #endif +#ifdef XAP_ENABLE +const USB_Descriptor_HIDReport_Datatype_t PROGMEM XapReport[] = { + HID_RI_USAGE_PAGE(16, 0xFF51), // Vendor Defined ('Q') + HID_RI_USAGE(8, 0x58), // Vendor Defined ('X') + HID_RI_COLLECTION(8, 0x01), // Application + // Data to host + HID_RI_USAGE(8, 0x62), // Vendor Defined + HID_RI_LOGICAL_MINIMUM(8, 0x00), + HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), + HID_RI_REPORT_COUNT(8, XAP_EPSIZE), + HID_RI_REPORT_SIZE(8, 0x08), + HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + + // Data from host + HID_RI_USAGE(8, 0x63), // Vendor Defined + HID_RI_LOGICAL_MINIMUM(8, 0x00), + HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), + HID_RI_REPORT_COUNT(8, XAP_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 // XAP_ENABLE + /* * Device descriptor */ @@ -603,56 +603,6 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = { }, #endif -#ifdef XAP_ENABLE - /* - * QMK XAP - */ - .Xap_Interface = { - .Header = { - .Size = sizeof(USB_Descriptor_Interface_t), - .Type = DTYPE_Interface - }, - .InterfaceNumber = XAP_INTERFACE, - .AlternateSetting = 0x00, - .TotalEndpoints = 2, - .Class = HID_CSCP_HIDClass, - .SubClass = HID_CSCP_NonBootSubclass, - .Protocol = HID_CSCP_NonBootProtocol, - .InterfaceStrIndex = NO_DESCRIPTOR - }, - .Xap_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(XapReport) - }, - .Xap_INEndpoint = { - .Header = { - .Size = sizeof(USB_Descriptor_Endpoint_t), - .Type = DTYPE_Endpoint - }, - .EndpointAddress = (ENDPOINT_DIR_IN | XAP_IN_EPNUM), - .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), - .EndpointSize = XAP_EPSIZE, - .PollingIntervalMS = 0x01 - }, - .Xap_OUTEndpoint = { - .Header = { - .Size = sizeof(USB_Descriptor_Endpoint_t), - .Type = DTYPE_Endpoint - }, - .EndpointAddress = (ENDPOINT_DIR_OUT | XAP_OUT_EPNUM), - .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), - .EndpointSize = XAP_EPSIZE, - .PollingIntervalMS = 0x01 - }, -#endif - #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) /* * Mouse @@ -1122,6 +1072,56 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = { .PollingIntervalMS = USB_POLLING_INTERVAL_MS }, #endif + +#ifdef XAP_ENABLE + /* + * QMK XAP + */ + .Xap_Interface = { + .Header = { + .Size = sizeof(USB_Descriptor_Interface_t), + .Type = DTYPE_Interface + }, + .InterfaceNumber = XAP_INTERFACE, + .AlternateSetting = 0x00, + .TotalEndpoints = 2, + .Class = HID_CSCP_HIDClass, + .SubClass = HID_CSCP_NonBootSubclass, + .Protocol = HID_CSCP_NonBootProtocol, + .InterfaceStrIndex = NO_DESCRIPTOR + }, + .Xap_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(XapReport) + }, + .Xap_INEndpoint = { + .Header = { + .Size = sizeof(USB_Descriptor_Endpoint_t), + .Type = DTYPE_Endpoint + }, + .EndpointAddress = (ENDPOINT_DIR_IN | XAP_IN_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = XAP_EPSIZE, + .PollingIntervalMS = 0x01 + }, + .Xap_OUTEndpoint = { + .Header = { + .Size = sizeof(USB_Descriptor_Endpoint_t), + .Type = DTYPE_Endpoint + }, + .EndpointAddress = (ENDPOINT_DIR_OUT | XAP_OUT_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = XAP_EPSIZE, + .PollingIntervalMS = 0x01 + }, +#endif }; /* @@ -1250,14 +1250,6 @@ uint16_t get_usb_descriptor(const uint16_t wValue, const uint16_t wIndex, const break; #endif -#ifdef XAP_ENABLE - case XAP_INTERFACE: - Address = &ConfigurationDescriptor.Xap_HID; - Size = sizeof(USB_HID_Descriptor_HID_t); - - break; -#endif - #ifdef CONSOLE_ENABLE case CONSOLE_INTERFACE: Address = &ConfigurationDescriptor.Console_HID; @@ -1265,12 +1257,14 @@ uint16_t get_usb_descriptor(const uint16_t wValue, const uint16_t wIndex, const break; #endif + #if defined(JOYSTICK_ENABLE) && !defined(JOYSTICK_SHARED_EP) case JOYSTICK_INTERFACE: Address = &ConfigurationDescriptor.Joystick_HID; Size = sizeof(USB_HID_Descriptor_HID_t); break; #endif + #if defined(DIGITIZER_ENABLE) && !defined(DIGITIZER_SHARED_EP) case DIGITIZER_INTERFACE: Address = &ConfigurationDescriptor.Digitizer_HID; @@ -1278,6 +1272,14 @@ uint16_t get_usb_descriptor(const uint16_t wValue, const uint16_t wIndex, const break; #endif + +#ifdef XAP_ENABLE + case XAP_INTERFACE: + Address = &ConfigurationDescriptor.Xap_HID; + Size = sizeof(USB_HID_Descriptor_HID_t); + + break; +#endif } break; @@ -1315,14 +1317,6 @@ uint16_t get_usb_descriptor(const uint16_t wValue, const uint16_t wIndex, const break; #endif -#ifdef XAP_ENABLE - case XAP_INTERFACE: - Address = &XapReport; - Size = sizeof(XapReport); - - break; -#endif - #ifdef CONSOLE_ENABLE case CONSOLE_INTERFACE: Address = &ConsoleReport; @@ -1342,6 +1336,14 @@ uint16_t get_usb_descriptor(const uint16_t wValue, const uint16_t wIndex, const Size = sizeof(DigitizerReport); break; #endif + +#ifdef XAP_ENABLE + case XAP_INTERFACE: + Address = &XapReport; + Size = sizeof(XapReport); + + break; +#endif } break; diff --git a/tmk_core/protocol/usb_descriptor.h b/tmk_core/protocol/usb_descriptor.h index 97435272068..cf91ff3e661 100644 --- a/tmk_core/protocol/usb_descriptor.h +++ b/tmk_core/protocol/usb_descriptor.h @@ -78,14 +78,6 @@ typedef struct { USB_Descriptor_Endpoint_t Raw_OUTEndpoint; #endif -#ifdef XAP_ENABLE - // Mouse HID Interface - USB_Descriptor_Interface_t Xap_Interface; - USB_HID_Descriptor_HID_t Xap_HID; - USB_Descriptor_Endpoint_t Xap_INEndpoint; - USB_Descriptor_Endpoint_t Xap_OUTEndpoint; -#endif - #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) // Mouse HID Interface USB_Descriptor_Interface_t Mouse_Interface; @@ -153,6 +145,14 @@ typedef struct { USB_HID_Descriptor_HID_t Digitizer_HID; USB_Descriptor_Endpoint_t Digitizer_INEndpoint; #endif + +#ifdef XAP_ENABLE + // XAP HID Interface + USB_Descriptor_Interface_t Xap_Interface; + USB_HID_Descriptor_HID_t Xap_HID; + USB_Descriptor_Endpoint_t Xap_INEndpoint; + USB_Descriptor_Endpoint_t Xap_OUTEndpoint; +#endif } USB_Descriptor_Configuration_t; /* @@ -173,10 +173,6 @@ enum usb_interfaces { RAW_INTERFACE, #endif -#ifdef XAP_ENABLE - XAP_INTERFACE, -#endif - #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) MOUSE_INTERFACE, #endif @@ -206,6 +202,10 @@ enum usb_interfaces { #if defined(DIGITIZER_ENABLE) && !defined(DIGITIZER_SHARED_EP) DIGITIZER_INTERFACE, #endif + +#ifdef XAP_ENABLE + XAP_INTERFACE, +#endif TOTAL_INTERFACES }; @@ -238,15 +238,6 @@ enum usb_endpoints { # endif #endif -#ifdef XAP_ENABLE - XAP_IN_EPNUM = NEXT_EPNUM, -# if STM32_USB_USE_OTG1 -# define XAP_OUT_EPNUM XAP_IN_EPNUM -# else - XAP_OUT_EPNUM = NEXT_EPNUM, -# endif -#endif - #ifdef SHARED_EP_ENABLE SHARED_IN_EPNUM = NEXT_EPNUM, #endif @@ -302,6 +293,15 @@ enum usb_endpoints { # define DIGITIZER_IN_EPNUM SHARED_IN_EPNUM # endif #endif + +#ifdef XAP_ENABLE + XAP_IN_EPNUM = NEXT_EPNUM, +# if STM32_USB_USE_OTG1 +# define XAP_OUT_EPNUM XAP_IN_EPNUM +# else + XAP_OUT_EPNUM = NEXT_EPNUM, +# endif +#endif }; #ifdef PROTOCOL_LUFA diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index 3ee3f4e5660..0f221fa2eea 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -73,10 +73,6 @@ enum usb_interfaces { RAW_INTERFACE = NEXT_INTERFACE, #endif -#ifdef XAP_ENABLE - XAP_INTERFACE = NEXT_INTERFACE, -#endif - #if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP) SHARED_INTERFACE = NEXT_INTERFACE, #endif @@ -85,6 +81,10 @@ enum usb_interfaces { CONSOLE_INTERFACE = NEXT_INTERFACE, #endif +#ifdef XAP_ENABLE + XAP_INTERFACE = NEXT_INTERFACE, +#endif + TOTAL_INTERFACES = NEXT_INTERFACE }; @@ -789,29 +789,6 @@ const PROGMEM uchar raw_hid_report[] = { }; #endif -#ifdef XAP_ENABLE -const PROGMEM uchar xap_report[] = { - 0x06, 0x51, 0xFF, // Usage Page (Vendor Defined) - 0x09, 0x58, // Usage (Vendor Defined) - 0xA1, 0x01, // Collection (Application) - // Data to host - 0x09, 0x62, // Usage (Vendor Defined) - 0x15, 0x00, // Logical Minimum (0) - 0x26, 0xFF, 0x00, // Logical Maximum (255) - 0x95, XAP_BUFFER_SIZE, // Report Count - 0x75, 0x08, // Report Size (8) - 0x81, 0x02, // Input (Data, Variable, Absolute) - // Data from host - 0x09, 0x63, // Usage (Vendor Defined) - 0x15, 0x00, // Logical Minimum (0) - 0x26, 0xFF, 0x00, // Logical Maximum (255) - 0x95, XAP_BUFFER_SIZE, // Report Count - 0x75, 0x08, // Report Size (8) - 0x91, 0x02, // Output (Data, Variable, Absolute) - 0xC0 // End Collection -}; -#endif - #if defined(CONSOLE_ENABLE) const PROGMEM uchar console_hid_report[] = { 0x06, 0x31, 0xFF, // Usage Page (Vendor Defined - PJRC Teensy compatible) @@ -835,6 +812,29 @@ const PROGMEM uchar console_hid_report[] = { }; #endif +#ifdef XAP_ENABLE +const PROGMEM uchar xap_report[] = { + 0x06, 0x51, 0xFF, // Usage Page (Vendor Defined) + 0x09, 0x58, // Usage (Vendor Defined) + 0xA1, 0x01, // Collection (Application) + // Data to host + 0x09, 0x62, // Usage (Vendor Defined) + 0x15, 0x00, // Logical Minimum (0) + 0x26, 0xFF, 0x00, // Logical Maximum (255) + 0x95, XAP_BUFFER_SIZE, // Report Count + 0x75, 0x08, // Report Size (8) + 0x81, 0x02, // Input (Data, Variable, Absolute) + // Data from host + 0x09, 0x63, // Usage (Vendor Defined) + 0x15, 0x00, // Logical Minimum (0) + 0x26, 0xFF, 0x00, // Logical Maximum (255) + 0x95, XAP_BUFFER_SIZE, // Report Count + 0x75, 0x08, // Report Size (8) + 0x91, 0x02, // Output (Data, Variable, Absolute) + 0xC0 // End Collection +}; +#endif + #ifndef USB_MAX_POWER_CONSUMPTION # define USB_MAX_POWER_CONSUMPTION 500 #endif @@ -1011,56 +1011,6 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = { }, # endif -# if defined(XAP_ENABLE) - /* - * XAP - */ - .xapInterface = { - .header = { - .bLength = sizeof(usbInterfaceDescriptor_t), - .bDescriptorType = USBDESCR_INTERFACE - }, - .bInterfaceNumber = XAP_INTERFACE, - .bAlternateSetting = 0x00, - .bNumEndpoints = 2, - .bInterfaceClass = 0x03, - .bInterfaceSubClass = 0x00, - .bInterfaceProtocol = 0x00, - .iInterface = 0x00 - }, - .xapHID = { - .header = { - .bLength = sizeof(usbHIDDescriptor_t), - .bDescriptorType = USBDESCR_HID - }, - .bcdHID = 0x0101, - .bCountryCode = 0x00, - .bNumDescriptors = 1, - .bDescriptorType = USBDESCR_HID_REPORT, - .wDescriptorLength = sizeof(xap_report) - }, - .xapINEndpoint = { - .header = { - .bLength = sizeof(usbEndpointDescriptor_t), - .bDescriptorType = USBDESCR_ENDPOINT - }, - .bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP4_NUMBER), - .bmAttributes = 0x03, - .wMaxPacketSize = XAP_EPSIZE, - .bInterval = USB_POLLING_INTERVAL_MS - }, - .xapOUTEndpoint = { - .header = { - .bLength = sizeof(usbEndpointDescriptor_t), - .bDescriptorType = USBDESCR_ENDPOINT - }, - .bEndpointAddress = (USBRQ_DIR_HOST_TO_DEVICE | USB_CFG_EP4_NUMBER), - .bmAttributes = 0x03, - .wMaxPacketSize = XAP_EPSIZE, - .bInterval = USB_POLLING_INTERVAL_MS - }, -# endif - # ifdef SHARED_EP_ENABLE /* * Shared @@ -1157,7 +1107,57 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = { .bmAttributes = 0x03, .wMaxPacketSize = CONSOLE_EPSIZE, .bInterval = 0x01 - } + }, +# endif + +# if defined(XAP_ENABLE) + /* + * XAP + */ + .xapInterface = { + .header = { + .bLength = sizeof(usbInterfaceDescriptor_t), + .bDescriptorType = USBDESCR_INTERFACE + }, + .bInterfaceNumber = XAP_INTERFACE, + .bAlternateSetting = 0x00, + .bNumEndpoints = 2, + .bInterfaceClass = 0x03, + .bInterfaceSubClass = 0x00, + .bInterfaceProtocol = 0x00, + .iInterface = 0x00 + }, + .xapHID = { + .header = { + .bLength = sizeof(usbHIDDescriptor_t), + .bDescriptorType = USBDESCR_HID + }, + .bcdHID = 0x0101, + .bCountryCode = 0x00, + .bNumDescriptors = 1, + .bDescriptorType = USBDESCR_HID_REPORT, + .wDescriptorLength = sizeof(xap_report) + }, + .xapINEndpoint = { + .header = { + .bLength = sizeof(usbEndpointDescriptor_t), + .bDescriptorType = USBDESCR_ENDPOINT + }, + .bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP4_NUMBER), + .bmAttributes = 0x03, + .wMaxPacketSize = XAP_EPSIZE, + .bInterval = USB_POLLING_INTERVAL_MS + }, + .xapOUTEndpoint = { + .header = { + .bLength = sizeof(usbEndpointDescriptor_t), + .bDescriptorType = USBDESCR_ENDPOINT + }, + .bEndpointAddress = (USBRQ_DIR_HOST_TO_DEVICE | USB_CFG_EP4_NUMBER), + .bmAttributes = 0x03, + .wMaxPacketSize = XAP_EPSIZE, + .bInterval = USB_POLLING_INTERVAL_MS + }, # endif }; @@ -1216,13 +1216,6 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) { break; #endif -#if defined(XAP_ENABLE) - case XAP_INTERFACE: - usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.xapHID; - len = sizeof(usbHIDDescriptor_t); - break; -#endif - #ifdef SHARED_EP_ENABLE case SHARED_INTERFACE: usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.sharedHID; @@ -1236,6 +1229,13 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) { len = sizeof(usbHIDDescriptor_t); break; #endif + +#if defined(XAP_ENABLE) + case XAP_INTERFACE: + usbMsgPtr = (usbMsgPtr_t)&usbConfigurationDescriptor.xapHID; + len = sizeof(usbHIDDescriptor_t); + break; +#endif } break; case USBDESCR_HID_REPORT: @@ -1255,13 +1255,6 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) { break; #endif -#if defined(XAP_ENABLE) - case XAP_INTERFACE: - usbMsgPtr = (usbMsgPtr_t)xap_report; - len = sizeof(xap_report); - break; -#endif - #ifdef SHARED_EP_ENABLE case SHARED_INTERFACE: usbMsgPtr = (usbMsgPtr_t)shared_hid_report; @@ -1275,6 +1268,13 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) { len = sizeof(console_hid_report); break; #endif + +#if defined(XAP_ENABLE) + case XAP_INTERFACE: + usbMsgPtr = (usbMsgPtr_t)xap_report; + len = sizeof(xap_report); + break; +#endif } break; } diff --git a/tmk_core/protocol/vusb/vusb.h b/tmk_core/protocol/vusb/vusb.h index df4c93d1087..c3435b2084f 100644 --- a/tmk_core/protocol/vusb/vusb.h +++ b/tmk_core/protocol/vusb/vusb.h @@ -104,13 +104,6 @@ typedef struct usbConfigurationDescriptor { usbEndpointDescriptor_t rawOUTEndpoint; #endif -#if defined(XAP_ENABLE) - usbInterfaceDescriptor_t xapInterface; - usbHIDDescriptor_t xapHID; - usbEndpointDescriptor_t xapINEndpoint; - usbEndpointDescriptor_t xapOUTEndpoint; -#endif - #if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP) usbInterfaceDescriptor_t sharedInterface; usbHIDDescriptor_t sharedHID; @@ -123,6 +116,13 @@ typedef struct usbConfigurationDescriptor { usbEndpointDescriptor_t consoleINEndpoint; usbEndpointDescriptor_t consoleOUTEndpoint; #endif + +#if defined(XAP_ENABLE) + usbInterfaceDescriptor_t xapInterface; + usbHIDDescriptor_t xapHID; + usbEndpointDescriptor_t xapINEndpoint; + usbEndpointDescriptor_t xapOUTEndpoint; +#endif } __attribute__((packed)) usbConfigurationDescriptor_t; extern bool vusb_suspended;