/* Copyright 2011 Jun Wako 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 . */ #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; usbEndpointDescriptor_t keyboardINEndpoint; #if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) usbInterfaceDescriptor_t mouseExtraInterface; usbHIDDescriptor_t mouseExtraHID; usbEndpointDescriptor_t mouseExtraINEndpoint; #elif defined(RAW_ENABLE) usbInterfaceDescriptor_t rawInterface; usbHIDDescriptor_t rawHID; usbEndpointDescriptor_t rawINEndpoint; usbEndpointDescriptor_t rawOUTEndpoint; #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); #ifdef RAW_ENABLE void raw_hid_task(void); #endif