~ruther/qmk_firmware

632285c9820f1c8231eeb0c7dc3ace3002ba0e26 — yiancar 5 years ago 805f5cb
V-USB Interface reorder (#9090)

2 files changed, 79 insertions(+), 73 deletions(-)

M tmk_core/protocol/vusb/vusb.c
M tmk_core/protocol/vusb/vusb.h
M tmk_core/protocol/vusb/vusb.c => tmk_core/protocol/vusb/vusb.c +73 -67
@@ 43,12 43,15 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
enum usb_interfaces {
    KEYBOARD_INTERFACE = NEXT_INTERFACE,
#if (defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE))
    MOUSE_EXTRA_INTERFACE = NEXT_INTERFACE,
#endif
// 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
    RAW_INTERFACE = NEXT_INTERFACE,
#endif
#if (defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE))
    MOUSE_EXTRA_INTERFACE = NEXT_INTERFACE,
#endif
#ifdef CONSOLE_ENABLE
    CONSOLE_INTERFACE = NEXT_INTERFACE,
#endif


@@ 404,6 407,29 @@ const PROGMEM uchar keyboard_hid_report[] = {
    0xC0         // End Collection
};

#ifdef RAW_ENABLE
const PROGMEM uchar raw_hid_report[] = {
    0x06, 0x60, 0xFF,  // Usage Page (Vendor Defined)
    0x09, 0x61,        // 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, RAW_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, RAW_BUFFER_SIZE,  //   Report Count
    0x75, 0x08,             //   Report Size (8)
    0x91, 0x02,             //   Output (Data, Variable, Absolute)
    0xC0                    // End Collection
};
#endif

#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
const PROGMEM uchar mouse_extra_hid_report[] = {
#    ifdef MOUSE_ENABLE


@@ 488,29 514,6 @@ const PROGMEM uchar mouse_extra_hid_report[] = {
};
#endif

#ifdef RAW_ENABLE
const PROGMEM uchar raw_hid_report[] = {
    0x06, 0x60, 0xFF,  // Usage Page (Vendor Defined)
    0x09, 0x61,        // 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, RAW_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, RAW_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)


@@ 657,88 660,91 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
        .bInterval           = USB_POLLING_INTERVAL_MS
    },

#    if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
#    if defined(RAW_ENABLE)
    /*
     * Mouse/Extrakeys
     * RAW HID
     */
    .mouseExtraInterface = {
    .rawInterface = {
        .header = {
            .bLength         = sizeof(usbInterfaceDescriptor_t),
            .bDescriptorType = USBDESCR_INTERFACE
        },
        .bInterfaceNumber    = MOUSE_EXTRA_INTERFACE,
        .bInterfaceNumber    = RAW_INTERFACE,
        .bAlternateSetting   = 0x00,
        .bNumEndpoints       = 1,
        .bNumEndpoints       = 2,
        .bInterfaceClass     = 0x03,
        .bInterfaceSubClass  = 0x00,
        .bInterfaceProtocol  = 0x00,
        .iInterface          = 0x00
    },
    .mouseExtraHID = {
    .rawHID = {
        .header = {
            .bLength         = sizeof(usbHIDDescriptor_t),
            .bDescriptorType = USBDESCR_HID
        },
        .bcdHID              = 0x0101,
        .bCountryCode        = 0x00,
        .bNumDescriptors     = 1,
        .bNumDescriptors     = 2,
        .bDescriptorType     = USBDESCR_HID_REPORT,
        .wDescriptorLength   = sizeof(mouse_extra_hid_report)
        .wDescriptorLength   = sizeof(raw_hid_report)
    },
    .mouseExtraINEndpoint = {
    .rawINEndpoint = {
        .header = {
            .bLength         = sizeof(usbEndpointDescriptor_t),
            .bDescriptorType = USBDESCR_ENDPOINT
        },
        .bEndpointAddress    = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP3_NUMBER),
        .bmAttributes        = 0x03,
        .wMaxPacketSize      = 8,
        .wMaxPacketSize      = RAW_EPSIZE,
        .bInterval           = USB_POLLING_INTERVAL_MS
    },
    .rawOUTEndpoint = {
        .header = {
            .bLength         = sizeof(usbEndpointDescriptor_t),
            .bDescriptorType = USBDESCR_ENDPOINT
        },
        .bEndpointAddress    = (USBRQ_DIR_HOST_TO_DEVICE | USB_CFG_EP3_NUMBER),
        .bmAttributes        = 0x03,
        .wMaxPacketSize      = RAW_EPSIZE,
        .bInterval           = USB_POLLING_INTERVAL_MS
    },
#    endif
#    if defined(RAW_ENABLE)
    .rawInterface = {
#    if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
    /*
     * Mouse/Extrakeys
     */
    .mouseExtraInterface = {
        .header = {
            .bLength         = sizeof(usbInterfaceDescriptor_t),
            .bDescriptorType = USBDESCR_INTERFACE
        },
        .bInterfaceNumber    = RAW_INTERFACE,
        .bInterfaceNumber    = MOUSE_EXTRA_INTERFACE,
        .bAlternateSetting   = 0x00,
        .bNumEndpoints       = 2,
        .bNumEndpoints       = 1,
        .bInterfaceClass     = 0x03,
        .bInterfaceSubClass  = 0x00,
        .bInterfaceProtocol  = 0x00,
        .iInterface          = 0x00
    },
    .rawHID = {
    .mouseExtraHID = {
        .header = {
            .bLength         = sizeof(usbHIDDescriptor_t),
            .bDescriptorType = USBDESCR_HID
        },
        .bcdHID              = 0x0101,
        .bCountryCode        = 0x00,
        .bNumDescriptors     = 2,
        .bNumDescriptors     = 1,
        .bDescriptorType     = USBDESCR_HID_REPORT,
        .wDescriptorLength   = sizeof(raw_hid_report)
        .wDescriptorLength   = sizeof(mouse_extra_hid_report)
    },
    .rawINEndpoint = {
    .mouseExtraINEndpoint = {
        .header = {
            .bLength         = sizeof(usbEndpointDescriptor_t),
            .bDescriptorType = USBDESCR_ENDPOINT
        },
        .bEndpointAddress    = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP3_NUMBER),
        .bmAttributes        = 0x03,
        .wMaxPacketSize      = RAW_EPSIZE,
        .bInterval           = USB_POLLING_INTERVAL_MS
    },
    .rawOUTEndpoint = {
        .header = {
            .bLength         = sizeof(usbEndpointDescriptor_t),
            .bDescriptorType = USBDESCR_ENDPOINT
        },
        .bEndpointAddress    = (USBRQ_DIR_HOST_TO_DEVICE | USB_CFG_EP3_NUMBER),
        .bmAttributes        = 0x03,
        .wMaxPacketSize      = RAW_EPSIZE,
        .wMaxPacketSize      = 8,
        .bInterval           = USB_POLLING_INTERVAL_MS
    },
#    endif


@@ 841,18 847,18 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
                    usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.keyboardHID;
                    len       = sizeof(usbHIDDescriptor_t);
                    break;
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
                case MOUSE_EXTRA_INTERFACE:
                    usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.mouseExtraHID;
                    len       = sizeof(usbHIDDescriptor_t);
                    break;
#endif
#if defined(RAW_ENABLE)
                case RAW_INTERFACE:
                    usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.rawHID;
                    len       = sizeof(usbHIDDescriptor_t);
                    break;
#endif
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
                case MOUSE_EXTRA_INTERFACE:
                    usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.mouseExtraHID;
                    len       = sizeof(usbHIDDescriptor_t);
                    break;
#endif
#if defined(CONSOLE_ENABLE)
                case CONSOLE_INTERFACE:
                    usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor.consoleHID;


@@ 868,18 874,18 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
                    usbMsgPtr = (unsigned char *)keyboard_hid_report;
                    len       = sizeof(keyboard_hid_report);
                    break;
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
                case MOUSE_EXTRA_INTERFACE:
                    usbMsgPtr = (unsigned char *)mouse_extra_hid_report;
                    len       = sizeof(mouse_extra_hid_report);
                    break;
#endif
#if defined(RAW_ENABLE)
                case RAW_INTERFACE:
                    usbMsgPtr = (unsigned char *)raw_hid_report;
                    len       = sizeof(raw_hid_report);
                    break;
#endif
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
                case MOUSE_EXTRA_INTERFACE:
                    usbMsgPtr = (unsigned char *)mouse_extra_hid_report;
                    len       = sizeof(mouse_extra_hid_report);
                    break;
#endif
#if defined(CONSOLE_ENABLE)
                case CONSOLE_INTERFACE:
                    usbMsgPtr = (unsigned char *)console_hid_report;

M tmk_core/protocol/vusb/vusb.h => tmk_core/protocol/vusb/vusb.h +6 -6
@@ 89,12 89,6 @@ typedef struct usbConfigurationDescriptor {
    usbHIDDescriptor_t                 keyboardHID;
    usbEndpointDescriptor_t            keyboardINEndpoint;

#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
    usbInterfaceDescriptor_t mouseExtraInterface;
    usbHIDDescriptor_t       mouseExtraHID;
    usbEndpointDescriptor_t  mouseExtraINEndpoint;
#endif

#if defined(RAW_ENABLE)
    usbInterfaceDescriptor_t rawInterface;
    usbHIDDescriptor_t       rawHID;


@@ 102,6 96,12 @@ typedef struct usbConfigurationDescriptor {
    usbEndpointDescriptor_t  rawOUTEndpoint;
#endif

#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
    usbInterfaceDescriptor_t mouseExtraInterface;
    usbHIDDescriptor_t       mouseExtraHID;
    usbEndpointDescriptor_t  mouseExtraINEndpoint;
#endif

#if defined(CONSOLE_ENABLE)
    usbInterfaceDescriptor_t consoleInterface;
    usbHIDDescriptor_t       consoleHID;