aboutsummaryrefslogtreecommitdiffstats
path: root/tmk_core/protocol/vusb/vusb.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/protocol/vusb/vusb.h')
-rw-r--r--tmk_core/protocol/vusb/vusb.h76
1 files changed, 72 insertions, 4 deletions
diff --git a/tmk_core/protocol/vusb/vusb.h b/tmk_core/protocol/vusb/vusb.h
index cee07207a..debac67d2 100644
--- a/tmk_core/protocol/vusb/vusb.h
+++ b/tmk_core/protocol/vusb/vusb.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef VUSB_H
-#define VUSB_H
+#pragma once
#include "host_driver.h"
@@ -25,14 +24,83 @@ typedef struct usbDescriptorHeader {
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
+#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);
-
-#endif