1 module core.sys.linux.input; 2 3 version (linux): 4 extern(C): 5 nothrow: 6 7 import core.sys.linux.sys.time; 8 import core.sys.posix.sys.ioctl; 9 10 public import core.sys.linux.input_event_codes; 11 12 struct input_event 13 { 14 timeval time; 15 ushort type; 16 ushort code; 17 int value; 18 } 19 20 enum EV_VERSION = 0x010001; 21 22 struct input_id 23 { 24 ushort bustype; 25 ushort vendor; 26 ushort product; 27 ushort version_; 28 } 29 30 struct input_absinfo 31 { 32 int value; 33 int minimum; 34 int maximum; 35 int fuzz; 36 int flat; 37 int resolution; 38 } 39 40 enum INPUT_KEYMAP_BY_INDEX = (1 << 0); 41 struct input_keymap_entry 42 { 43 ubyte flags; 44 ubyte len; 45 ushort index; 46 uint keycode; 47 ubyte[32] scancode; 48 } 49 50 struct input_mask 51 { 52 uint type; 53 uint codes_size; 54 ulong codes_ptr; 55 } 56 57 enum EVIOCGVERSION = _IOR!int('E', 0x01); 58 enum EVIOCGID = _IOR!input_id('E', 0x02); 59 enum EVIOCGREP = _IOR!(uint[2])('E', 0x03); 60 enum EVIOCSREP = _IOW!(uint[2])('E', 0x03); 61 62 enum EVIOCGKEYCODE = _IOR!(uint[2])('E', 0x04); 63 enum EVIOCGKEYCODE_V2 = _IOR!input_keymap_entry('E', 0x04); 64 enum EVIOCSKEYCODE = _IOW!(uint[2])('E', 0x04); 65 enum EVIOCSKEYCODE_V2 = _IOW!input_keymap_entry('E', 0x04); 66 67 enum EVIOCGNAME(len) = _IOC(_IOC_READ, 'E', 0x06, len); 68 enum EVIOCGPHYS(len) = _IOC(_IOC_READ, 'E', 0x07, len); 69 enum EVIOCGUNIQ(len) = _IOC(_IOC_READ, 'E', 0x08, len); 70 enum EVIOCGPROP(len) = _IOC(_IOC_READ, 'E', 0x09, len); 71 72 enum EVIOCGMTSLOTS(len) = _IOC(_IOC_READ, 'E', 0x0a, len); 73 74 enum EVIOCGKEY(len) = _IOC(_IOC_READ, 'E', 0x18, len); 75 enum EVIOCGLED(len) = _IOC(_IOC_READ, 'E', 0x19, len); 76 enum EVIOCGSND(len) = _IOC(_IOC_READ, 'E', 0x1a, len); 77 enum EVIOCGSW(len) = _IOC(_IOC_READ, 'E', 0x1b, len); 78 79 enum EVIOCGBIT(ev,len) = _IOC(_IOC_READ, 'E', 0x20 + (ev), len); 80 enum EVIOCGABS(abs) = _IOR!input_absinfo('E', 0x40 + (abs)); 81 enum EVIOCSABS(abs) = _IOW!input_absinfo('E', 0xc0 + (abs)); 82 83 enum EVIOCSFF = _IOW!ff_effect('E', 0x80); 84 enum EVIOCRMFF = _IOW!int('E', 0x81); 85 enum EVIOCGEFFECTS = _IOR!int('E', 0x84); 86 87 enum EVIOCGRAB = _IOW!int('E', 0x90); 88 enum EVIOCREVOKE = _IOW!int('E', 0x91); 89 90 enum EVIOCGMASK = _IOR!input_mask('E', 0x92); 91 92 enum EVIOCSMASK = _IOW!input_mask('E', 0x93); 93 94 enum EVIOCSCLOCKID = _IOW!int('E', 0xa0); 95 96 enum ID_BUS = 0; 97 enum ID_VENDOR = 1; 98 enum ID_PRODUCT = 2; 99 enum ID_VERSION = 3; 100 101 enum BUS_PCI = 0x01; 102 enum BUS_ISAPNP = 0x02; 103 enum BUS_USB = 0x03; 104 enum BUS_HIL = 0x04; 105 enum BUS_BLUETOOTH = 0x05; 106 enum BUS_VIRTUAL = 0x06; 107 108 enum BUS_ISA = 0x10; 109 enum BUS_I8042 = 0x11; 110 enum BUS_XTKBD = 0x12; 111 enum BUS_RS232 = 0x13; 112 enum BUS_GAMEPORT = 0x14; 113 enum BUS_PARPORT = 0x15; 114 enum BUS_AMIGA = 0x16; 115 enum BUS_ADB = 0x17; 116 enum BUS_I2C = 0x18; 117 enum BUS_HOST = 0x19; 118 enum BUS_GSC = 0x1A; 119 enum BUS_ATARI = 0x1B; 120 enum BUS_SPI = 0x1C; 121 enum BUS_RMI = 0x1D; 122 enum BUS_CEC = 0x1E; 123 enum BUS_INTEL_ISHTP = 0x1F; 124 125 enum MT_TOOL_FINGER = 0; 126 enum MT_TOOL_PEN = 1; 127 enum MT_TOOL_PALM = 2; 128 enum MT_TOOL_MAX = 2; 129 130 enum FF_STATUS_STOPPED = 0x00; 131 enum FF_STATUS_PLAYING = 0x01; 132 enum FF_STATUS_MAX = 0x01; 133 134 struct ff_replay { 135 ushort length; 136 ushort delay; 137 }; 138 139 struct ff_trigger { 140 ushort button; 141 ushort interval; 142 }; 143 144 struct ff_envelope { 145 ushort attack_length; 146 ushort attack_level; 147 ushort fade_length; 148 ushort fade_level; 149 }; 150 151 struct ff_constant_effect { 152 short level; 153 ff_envelope envelope; 154 }; 155 156 struct ff_ramp_effect { 157 short start_level; 158 short end_level; 159 ff_envelope envelope; 160 }; 161 162 struct ff_condition_effect { 163 ushort right_saturation; 164 ushort left_saturation; 165 166 short right_coeff; 167 short left_coeff; 168 169 ushort deadband; 170 short center; 171 }; 172 173 struct ff_periodic_effect { 174 ushort waveform; 175 ushort period; 176 short magnitude; 177 short offset; 178 ushort phase; 179 180 ff_envelope envelope; 181 182 uint custom_len; 183 short *custom_data; 184 }; 185 186 struct ff_rumble_effect { 187 ushort strong_magnitude; 188 ushort weak_magnitude; 189 }; 190 191 struct ff_effect { 192 ushort type; 193 short id; 194 ushort direction; 195 ff_trigger trigger; 196 ff_replay replay; 197 198 union U { 199 ff_constant_effect constant; 200 ff_ramp_effect ramp; 201 ff_periodic_effect periodic; 202 ff_condition_effect[2] condition; 203 ff_rumble_effect rumble; 204 } 205 U u; 206 }; 207 208 enum FF_RUMBLE = 0x50; 209 enum FF_PERIODIC = 0x51; 210 enum FF_CONSTANT = 0x52; 211 enum FF_SPRING = 0x53; 212 enum FF_FRICTION = 0x54; 213 enum FF_DAMPER = 0x55; 214 enum FF_INERTIA = 0x56; 215 enum FF_RAMP = 0x57; 216 217 enum FF_EFFECT_MIN = FF_RUMBLE; 218 enum FF_EFFECT_MAX = FF_RAMP; 219 220 enum FF_SQUARE = 0x58; 221 enum FF_TRIANGLE = 0x59; 222 enum FF_SINE = 0x5a; 223 enum FF_SAW_UP = 0x5b; 224 enum FF_SAW_DOWN = 0x5c; 225 enum FF_CUSTOM = 0x5d; 226 227 enum FF_WAVEFORM_MIN = FF_SQUARE; 228 enum FF_WAVEFORM_MAX = FF_CUSTOM; 229 230 enum FF_GAIN = 0x60; 231 enum FF_AUTOCENTER = 0x61; 232 233 enum FF_MAX_EFFECTS = FF_GAIN; 234 235 enum FF_MAX = 0x7f; 236 enum FF_CNT = (FF_MAX+1);