1 #ifndef __UHID_H_ 2 #define __UHID_H_ 3 4 /* 5 * User-space I/O driver support for HID subsystem 6 * Copyright (c) 2012 David Herrmann 7 */ 8 9 /* 10 * This program is free software; you can redistribute it and/or modify it 11 * under the terms of the GNU General Public License as published by the Free 12 * Software Foundation; either version 2 of the License, or (at your option) 13 * any later version. 14 */ 15 16 /* 17 * Public header for user-space communication. We try to keep every structure 18 * aligned but to be safe we also use __attribute__((__packed__)). Therefore, 19 * the communication should be ABI compatible even between architectures. 20 */ 21 22 #include <linux/input.h> 23 #include <linux/types.h> 24 25 enum uhid_event_type { 26 UHID_CREATE, 27 UHID_DESTROY, 28 UHID_START, 29 UHID_STOP, 30 UHID_OPEN, 31 UHID_CLOSE, 32 UHID_OUTPUT, 33 UHID_OUTPUT_EV, /* obsolete! */ 34 UHID_INPUT, 35 UHID_FEATURE, 36 UHID_FEATURE_ANSWER, 37 }; 38 39 struct uhid_create_req { 40 __u8 name[128]; 41 __u8 phys[64]; 42 __u8 uniq[64]; 43 __u8 __user *rd_data; 44 __u16 rd_size; 45 46 __u16 bus; 47 __u32 vendor; 48 __u32 product; 49 __u32 version; 50 __u32 country; 51 } __attribute__((__packed__)); 52 53 #define UHID_DATA_MAX 4096 54 55 enum uhid_report_type { 56 UHID_FEATURE_REPORT, 57 UHID_OUTPUT_REPORT, 58 UHID_INPUT_REPORT, 59 }; 60 61 struct uhid_input_req { 62 __u8 data[UHID_DATA_MAX]; 63 __u16 size; 64 } __attribute__((__packed__)); 65 66 struct uhid_output_req { 67 __u8 data[UHID_DATA_MAX]; 68 __u16 size; 69 __u8 rtype; 70 } __attribute__((__packed__)); 71 72 /* Obsolete! Newer kernels will no longer send these events but instead convert 73 * it into raw output reports via UHID_OUTPUT. */ 74 struct uhid_output_ev_req { 75 __u16 type; 76 __u16 code; 77 __s32 value; 78 } __attribute__((__packed__)); 79 80 struct uhid_feature_req { 81 __u32 id; 82 __u8 rnum; 83 __u8 rtype; 84 } __attribute__((__packed__)); 85 86 struct uhid_feature_answer_req { 87 __u32 id; 88 __u16 err; 89 __u16 size; 90 __u8 data[UHID_DATA_MAX]; 91 } __attribute__((__packed__)); 92 93 struct uhid_event { 94 __u32 type; 95 96 union { 97 struct uhid_create_req create; 98 struct uhid_input_req input; 99 struct uhid_output_req output; 100 struct uhid_output_ev_req output_ev; 101 struct uhid_feature_req feature; 102 struct uhid_feature_answer_req feature_answer; 103 } u; 104 } __attribute__((__packed__)); 105 106 #endif /* __UHID_H_ */ 107