source: rtems-libbsd/freebsd/sys/dev/evdev/input.h @ 67de3b5

55-freebsd-126-freebsd-12
Last change on this file since 67de3b5 was 67de3b5, checked in by Kevin Kirspel <kevin-kirspel@…>, on 05/17/17 at 12:40:26

Adding EVDEV FREEBSD files

  • Property mode set to 100644
File size: 8.1 KB
Line 
1/*-
2 * Copyright (c) 2016 Oleksandr Tymoshenko <gonzo@FreeBSD.org>
3 * Copyright (c) 2015-2016 Vladimir Kondratyev <wulf@cicgroup.ru>
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 *
27 * $FreeBSD$
28 */
29
30#ifndef _EVDEV_INPUT_H
31#define _EVDEV_INPUT_H
32
33#ifndef __KERNEL__
34#include <sys/time.h>
35#include <sys/ioccom.h>
36#include <sys/types.h>
37#endif
38
39#include "input-event-codes.h"
40
41struct input_event {
42        struct timeval  time;
43        uint16_t        type;
44        uint16_t        code;
45        int32_t         value;
46};
47
48#define EV_VERSION              0x010001
49
50struct input_id {
51        uint16_t        bustype;
52        uint16_t        vendor;
53        uint16_t        product;
54        uint16_t        version;
55};
56
57struct input_absinfo {
58        int32_t         value;
59        int32_t         minimum;
60        int32_t         maximum;
61        int32_t         fuzz;
62        int32_t         flat;
63        int32_t         resolution;
64};
65
66#define INPUT_KEYMAP_BY_INDEX   (1 << 0)
67
68struct input_keymap_entry {
69        uint8_t         flags;
70        uint8_t         len;
71        uint16_t        index;
72        uint32_t        keycode;
73        uint8_t         scancode[32];
74};
75
76#define EVDEV_IOC_MAGIC 'E'
77#define EVIOCGVERSION           _IOR(EVDEV_IOC_MAGIC, 0x01, int)                /* get driver version */
78#define EVIOCGID                _IOR(EVDEV_IOC_MAGIC, 0x02, struct input_id)    /* get device ID */
79#define EVIOCGREP               _IOR(EVDEV_IOC_MAGIC, 0x03, unsigned int[2])    /* get repeat settings */
80#define EVIOCSREP               _IOW(EVDEV_IOC_MAGIC, 0x03, unsigned int[2])    /* set repeat settings */
81
82#define EVIOCGKEYCODE           _IOWR(EVDEV_IOC_MAGIC, 0x04, unsigned int[2])   /* get keycode */
83#define EVIOCGKEYCODE_V2        _IOWR(EVDEV_IOC_MAGIC, 0x04, struct input_keymap_entry)
84#define EVIOCSKEYCODE           _IOW(EVDEV_IOC_MAGIC, 0x04, unsigned int[2])    /* set keycode */
85#define EVIOCSKEYCODE_V2        _IOW(EVDEV_IOC_MAGIC, 0x04, struct input_keymap_entry)
86
87#define EVIOCGNAME(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x06, len)       /* get device name */
88#define EVIOCGPHYS(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x07, len)       /* get physical location */
89#define EVIOCGUNIQ(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x08, len)       /* get unique identifier */
90#define EVIOCGPROP(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x09, len)       /* get device properties */
91
92#define EVIOCGMTSLOTS(len)      _IOC(IOC_INOUT, EVDEV_IOC_MAGIC, 0x0a, len)     /* get MT slots values */
93
94#define EVIOCGKEY(len)          _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x18, len)       /* get global key state */
95#define EVIOCGLED(len)          _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x19, len)       /* get all LEDs */
96#define EVIOCGSND(len)          _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x1a, len)       /* get all sounds status */
97#define EVIOCGSW(len)           _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x1b, len)       /* get all switch states */
98
99#define EVIOCGBIT(ev,len)       _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x20 + (ev), len)        /* get event bits */
100#define EVIOCGABS(abs)          _IOR(EVDEV_IOC_MAGIC, 0x40 + (abs), struct input_absinfo)       /* get abs value/limits */
101#define EVIOCSABS(abs)          _IOW(EVDEV_IOC_MAGIC, 0xc0 + (abs), struct input_absinfo)       /* set abs value/limits */
102
103#define EVIOCSFF                _IOW(EVDEV_IOC_MAGIC, 0x80, struct ff_effect)   /* send a force effect to a force feedback device */
104#define EVIOCRMFF               _IOWINT(EVDEV_IOC_MAGIC, 0x81)                  /* Erase a force effect */
105#define EVIOCGEFFECTS           _IOR(EVDEV_IOC_MAGIC, 0x84, int)                /* Report number of effects playable at the same time */
106
107#define EVIOCGRAB               _IOWINT(EVDEV_IOC_MAGIC, 0x90)                  /* Grab/Release device */
108#define EVIOCREVOKE             _IOWINT(EVDEV_IOC_MAGIC, 0x91)                  /* Revoke device access */
109
110#define EVIOCSCLOCKID           _IOW(EVDEV_IOC_MAGIC, 0xa0, int)                /* Set clockid to be used for timestamps */
111
112/*
113 * IDs.
114 */
115
116#define ID_BUS                  0
117#define ID_VENDOR               1
118#define ID_PRODUCT              2
119#define ID_VERSION              3
120
121#define BUS_PCI                 0x01
122#define BUS_ISAPNP              0x02
123#define BUS_USB                 0x03
124#define BUS_HIL                 0x04
125#define BUS_BLUETOOTH           0x05
126#define BUS_VIRTUAL             0x06
127
128#define BUS_ISA                 0x10
129#define BUS_I8042               0x11
130#define BUS_XTKBD               0x12
131#define BUS_RS232               0x13
132#define BUS_GAMEPORT            0x14
133#define BUS_PARPORT             0x15
134#define BUS_AMIGA               0x16
135#define BUS_ADB                 0x17
136#define BUS_I2C                 0x18
137#define BUS_HOST                0x19
138#define BUS_GSC                 0x1A
139#define BUS_ATARI               0x1B
140#define BUS_SPI                 0x1C
141
142/*
143 * MT_TOOL types
144 */
145#define MT_TOOL_FINGER          0
146#define MT_TOOL_PEN             1
147#define MT_TOOL_PALM            2
148#define MT_TOOL_MAX             2
149
150/*
151 * Values describing the status of a force-feedback effect
152 */
153#define FF_STATUS_STOPPED       0x00
154#define FF_STATUS_PLAYING       0x01
155#define FF_STATUS_MAX           0x01
156
157/* scheduling info for force feedback effect */
158struct ff_replay {
159        uint16_t        length;         /* length of the effect (ms) */
160        uint16_t        delay;          /* delay before effect starts (ms) */
161};
162
163/* trigger for force feedback effect */
164struct ff_trigger {
165        uint16_t        button;         /* trigger button number */
166        uint16_t        interval;       /* delay between re-triggers */
167};
168
169/* force feedback effect envelop */
170struct ff_envelope {
171        uint16_t        attack_length;  /* duration of the attach (ms) */
172        uint16_t        attack_level;   /* level at the beginning (0x0000 - 0x7fff) */
173        uint16_t        fade_length;    /* duratin of fade (ms) */
174        uint16_t        fade_level;     /* level at the end of fade */
175};
176
177struct ff_constant_effect {
178        int16_t                 level;
179        struct ff_envelope      envelope;
180};
181
182struct ff_ramp_effect {
183        int16_t                 start_level;
184        int16_t                 end_level;
185        struct ff_envelope      envelope;
186};
187
188struct ff_condition_effect {
189        /* maximum level when joystick moved to respective side */
190        uint16_t        right_saturation;
191
192        uint16_t        left_saturation;
193        /* how fast force grows when joystick move to the respective side */
194        int16_t         right_coeff;
195        int16_t         left_coeff;
196
197        uint16_t        deadband;       /* size of dead zone when no force is produced */
198        int16_t         center;         /* center of dead zone */
199};
200
201/*
202 * Force feedback periodic effect types
203 */
204
205#define FF_SQUARE       0x58
206#define FF_TRIANGLE     0x59
207#define FF_SINE         0x5a
208#define FF_SAW_UP       0x5b
209#define FF_SAW_DOWN     0x5c
210#define FF_CUSTOM       0x5d
211
212#define FF_WAVEFORM_MIN FF_SQUARE
213#define FF_WAVEFORM_MAX FF_CUSTOM
214
215struct ff_periodic_effect {
216        uint16_t                waveform;
217        uint16_t                period;         /* ms */
218        int16_t                 magnitude;      /* peak */
219        int16_t                 offset;         /* mean, roughly */
220        uint16_t                phase;          /* horizontal shift */
221        struct ff_envelope      envelope;
222        uint32_t                custom_len;     /* FF_CUSTOM waveform only */
223        int16_t                 *custom_data;   /* FF_CUSTOM waveform only */
224};
225
226struct ff_rumble_effect {
227        uint16_t        strong_magnitude;       /* magnitude of the heavy motor */
228        uint16_t        weak_magnitude;         /* magnitude of the light motor */
229};
230
231/*
232 * Force feedback effect types
233 */
234
235#define FF_RUMBLE       0x50
236#define FF_PERIODIC     0x51
237#define FF_CONSTANT     0x52
238#define FF_SPRING       0x53
239#define FF_FRICTION     0x54
240#define FF_DAMPER       0x55
241#define FF_INERTIA      0x56
242#define FF_RAMP         0x57
243
244#define FF_EFFECT_MIN   FF_RUMBLE
245#define FF_EFFECT_MAX   FF_RAMP
246
247struct ff_effect {
248        uint16_t                type;
249        int16_t                 id;
250        uint16_t                direction;      /* [0 .. 360) degrees -> [0 .. 0x10000) */
251        struct ff_trigger       trigger;
252        struct ff_replay        replay;
253
254        union {
255                struct ff_constant_effect       constant;
256                struct ff_ramp_effect           ramp;
257                struct ff_periodic_effect       periodic;
258                struct ff_condition_effect      condition[2]; /* One for each axis */
259                struct ff_rumble_effect         rumble;
260        } u;
261};
262
263/*
264 * force feedback device properties
265 */
266
267#define FF_GAIN         0x60
268#define FF_AUTOCENTER   0x61
269
270#define FF_MAX          0x7f
271#define FF_CNT          (FF_MAX+1)
272
273#endif /* _EVDEV_INPUT_H */
Note: See TracBrowser for help on using the repository browser.