1 /* ---------------------------------------------------------------------------- 2 * Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved. 3 * Description: LiteOS USB Driver HID Protocol HeadFile 4 * Author: wanghongxu 5 * Create: 2019-10-24 6 * Redistribution and use in source and binary forms, with or without modification, 7 * are permitted provided that the following conditions are met: 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 11 * of conditions and the following disclaimer in the documentation and/or other materials 12 * provided with the distribution. 13 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 14 * to endorse or promote products derived from this software without specific prior written 15 * permission. 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 18 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * --------------------------------------------------------------------------- */ 28 /* ---------------------------------------------------------------------------- 29 * Notice of Export Control Law 30 * =============================================== 31 * Huawei LiteOS may be subject to applicable export control laws and regulations, which might 32 * include those applicable to Huawei LiteOS of U.S. and the country in which you are located. 33 * Import, export and usage of Huawei LiteOS in any manner by you shall be in compliance with such 34 * applicable export control laws and regulations. 35 * --------------------------------------------------------------------------- */ 36 37 #ifndef _F_HID_GADGET_H 38 #define _F_HID_GADGET_H 39 40 #include "gadget/usbdev.h" 41 #include "gadget/composite.h" 42 43 #ifdef __cplusplus 44 #if __cplusplus 45 extern "C" { 46 #endif /* __cplusplus */ 47 #endif /* __cplusplus */ 48 49 /* Define usb hid gadget path. */ 50 51 #define USB_HID_DEV "/dev/hid" 52 53 #define HID_IN_DATA_SIZE 0x40U 54 #define HID_OUT_DATA_SIZE 0x40U 55 #define USB_HID_READ_EVENT 0x11 56 57 struct hid_endpoint_descriptor 58 { 59 uByte bLength; 60 uByte bDescriptorType; 61 uByte bEndpointAddress; 62 uByte bmAttributes; 63 uWord wMaxPacketSize; 64 uByte bInterval; 65 } __attribute__((packed)); 66 67 struct hid_dev_s 68 { 69 struct usbdev_ep_s *out_ep; /* interrupt output endpoint */ 70 struct usbdev_ep_s *in_ep; /* interrupt input endpoint */ 71 bool out_ep_enabled; 72 bool in_ep_enabled; 73 struct usbdev_req_s outputreq; /* interrupt output report */ 74 struct usbdev_req_s inputreq; /* HID report request */ 75 76 void *read_buf; 77 size_t read_len; 78 EVENT_CB_S read_event; 79 spinlock_t hid_lock; 80 atomic_t open_flag; /* Hid device status. 1: open, 0: close */ 81 82 struct list_head hid_queue; 83 int hid_queue_len; 84 volatile atomic_t busy_flag; 85 struct hid_queue_node *cur_node; 86 }; 87 88 struct hid_driver_s 89 { 90 struct usbdevclass_driver_s drvr; 91 struct hid_dev_s *dev; 92 }; 93 94 struct hid_softc 95 { 96 struct hid_dev_s dev; 97 struct hid_driver_s drvr; 98 }; 99 100 struct dev_report_desc 101 { 102 size_t report_size; 103 uint8_t *report_desc; 104 }; 105 106 struct dev_string_desc 107 { 108 char *str; 109 uint32_t len; 110 }; 111 112 extern void hid_deviceid_info(uint16_t vendorid, uint16_t productid); 113 extern int hid_report_descriptor_info(const void *buf, size_t len); 114 extern int hid_device_string_info(const struct dev_string_desc *str_manufacturer, 115 const struct dev_string_desc *str_product, 116 const struct dev_string_desc *str_serial_number); 117 118 #ifdef __cplusplus 119 #if __cplusplus 120 } 121 #endif /* __cplusplus */ 122 #endif /* __cplusplus */ 123 124 #endif /* _F_HID_GADGET_H */