forked from forks/qmk_firmware
89a675d57c
* rewrite usbhid feature on vusb * Apply suggestions from code review Co-Authored-By: Ryan <fauxpark@gmail.com> * fix typo * fix typo again * Update tmk_core/protocol/vusb/vusb.c Co-Authored-By: Ryan <fauxpark@gmail.com> * clean up defines Co-authored-by: Ryan <fauxpark@gmail.com>
118 lines
4 KiB
C
118 lines
4 KiB
C
/*
|
|
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "host_driver.h"
|
|
|
|
typedef struct usbDescriptorHeader {
|
|
uchar bLength;
|
|
uchar bDescriptorType;
|
|
} __attribute__((packed)) usbDescriptorHeader_t;
|
|
|
|
typedef struct usbDeviceDescriptor {
|
|
usbDescriptorHeader_t header;
|
|
unsigned bcdUSB;
|
|
uchar bDeviceClass;
|
|
uchar bDeviceSubClass;
|
|
uchar bDeviceProtocol;
|
|
uchar bMaxPacketSize0;
|
|
unsigned idVendor;
|
|
unsigned idProduct;
|
|
unsigned bcdDevice;
|
|
uchar iManufacturer;
|
|
uchar iProduct;
|
|
uchar iSerialNumber;
|
|
uchar bNumConfigurations;
|
|
} __attribute__((packed)) usbDeviceDescriptor_t;
|
|
|
|
typedef struct usbConfigurationDescriptorHeader {
|
|
usbDescriptorHeader_t header;
|
|
unsigned wTotalLength;
|
|
uchar bNumInterfaces;
|
|
uchar bConfigurationValue;
|
|
uchar iConfiguration;
|
|
uchar bmAttributes;
|
|
uchar bMaxPower;
|
|
} __attribute__((packed)) usbConfigurationDescriptorHeader_t;
|
|
|
|
typedef struct usbStringDescriptor {
|
|
usbDescriptorHeader_t header;
|
|
int bString[];
|
|
} __attribute__((packed)) usbStringDescriptor_t;
|
|
|
|
typedef struct usbInterfaceDescriptor {
|
|
usbDescriptorHeader_t header;
|
|
uchar bInterfaceNumber;
|
|
uchar bAlternateSetting;
|
|
uchar bNumEndpoints;
|
|
uchar bInterfaceClass;
|
|
uchar bInterfaceSubClass;
|
|
uchar bInterfaceProtocol;
|
|
uchar iInterface;
|
|
} __attribute__((packed)) usbInterfaceDescriptor_t;
|
|
|
|
typedef struct usbEndpointDescriptor {
|
|
usbDescriptorHeader_t header;
|
|
uchar bEndpointAddress;
|
|
uchar bmAttributes;
|
|
unsigned wMaxPacketSize;
|
|
uchar bInterval;
|
|
} __attribute__((packed)) usbEndpointDescriptor_t;
|
|
|
|
typedef struct usbHIDDescriptor {
|
|
usbDescriptorHeader_t header;
|
|
unsigned bcdHID;
|
|
uchar bCountryCode;
|
|
uchar bNumDescriptors;
|
|
uchar bDescriptorType;
|
|
unsigned wDescriptorLength;
|
|
} __attribute__((packed)) usbHIDDescriptor_t;
|
|
|
|
typedef struct usbConfigurationDescriptor {
|
|
usbConfigurationDescriptorHeader_t header;
|
|
usbInterfaceDescriptor_t keyboardInterface;
|
|
usbHIDDescriptor_t keyboardHID;
|
|
#ifdef USB_CFG_HAVE_INTRIN_ENDPOINT
|
|
usbEndpointDescriptor_t keyboardINEndpoint;
|
|
#endif
|
|
|
|
#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
|
|
usbInterfaceDescriptor_t mouseExtraInterface;
|
|
usbHIDDescriptor_t mouseExtraHID;
|
|
# ifdef USB_CFG_HAVE_INTRIN_ENDPOINT3
|
|
usbEndpointDescriptor_t mouseExtraINEndpoint;
|
|
# endif
|
|
#elif defined(RAW_ENABLE)
|
|
usbInterfaceDescriptor_t rawInterface;
|
|
usbHIDDescriptor_t rawHID;
|
|
# ifdef USB_CFG_HAVE_INTRIN_ENDPOINT3
|
|
usbEndpointDescriptor_t rawINEndpoint;
|
|
usbEndpointDescriptor_t rawOUTEndpoint;
|
|
# endif
|
|
#endif
|
|
} __attribute__((packed)) usbConfigurationDescriptor_t;
|
|
|
|
#define USB_STRING_LEN(s) (sizeof(usbDescriptorHeader_t) + ((s) << 1))
|
|
|
|
host_driver_t *vusb_driver(void);
|
|
void vusb_transfer_keyboard(void);
|
|
|
|
#if defined(RAW_ENABLE)
|
|
void raw_hid_task(void);
|
|
#endif
|