/* * Copyright (c) 2019, Alex Taradov * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _USB_HID_H_ #define _USB_HID_H_ /*- Includes ----------------------------------------------------------------*/ #include #include #include "utils.h" #include "usb_std.h" /*- Definitions -------------------------------------------------------------*/ enum { USB_HID_DESCRIPTOR = 0x21, USB_HID_REPORT_DESCRIPTOR = 0x22, USB_HID_PHYSICAL_DESCRIPTOR = 0x23, }; enum { USB_HID_DEVICE_CLASS = 3, // USB Human Interface Device Class }; /*- Types -------------------------------------------------------------------*/ typedef struct PACK { uint8_t bLength; uint8_t bDescriptorType; uint16_t bcdHID; uint8_t bCountryCode; uint8_t bNumDescriptors; uint8_t bDescriptorType1; uint16_t wDescriptorLength; } usb_hid_descriptor_t; /*- Prototypes --------------------------------------------------------------*/ void usb_hid_init(void); bool usb_hid_handle_request(usb_request_t *request); void usb_hid_send(uint8_t *data, int size); void usb_hid_recv(uint8_t *data, int size); void usb_hid_send_callback(void); void usb_hid_recv_callback(int size); #endif // _USB_HID_H_