The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/evdev/input.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2016 Oleksandr Tymoshenko <gonzo@FreeBSD.org>
    3  * Copyright (c) 2015-2016 Vladimir Kondratyev <wulf@FreeBSD.org>
    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/ioccom.h>
   35 #include <sys/time.h>
   36 #include <sys/types.h>
   37 #endif
   38 
   39 #include "input-event-codes.h"
   40 
   41 #define input_event_sec         time.tv_sec
   42 #define input_event_usec        time.tv_usec
   43 
   44 struct input_event {
   45         struct timeval  time;
   46         uint16_t        type;
   47         uint16_t        code;
   48         int32_t         value;
   49 };
   50 
   51 #define EV_VERSION              0x010001
   52 
   53 struct input_id {
   54         uint16_t        bustype;
   55         uint16_t        vendor;
   56         uint16_t        product;
   57         uint16_t        version;
   58 };
   59 
   60 struct input_absinfo {
   61         int32_t         value;
   62         int32_t         minimum;
   63         int32_t         maximum;
   64         int32_t         fuzz;
   65         int32_t         flat;
   66         int32_t         resolution;
   67 };
   68 
   69 #define INPUT_KEYMAP_BY_INDEX   (1 << 0)
   70 
   71 struct input_keymap_entry {
   72         uint8_t         flags;
   73         uint8_t         len;
   74         uint16_t        index;
   75         uint32_t        keycode;
   76         uint8_t         scancode[32];
   77 };
   78 
   79 #define EVDEV_IOC_MAGIC 'E'
   80 #define EVIOCGVERSION           _IOR(EVDEV_IOC_MAGIC, 0x01, int)                /* get driver version */
   81 #define EVIOCGID                _IOR(EVDEV_IOC_MAGIC, 0x02, struct input_id)    /* get device ID */
   82 #define EVIOCGREP               _IOR(EVDEV_IOC_MAGIC, 0x03, unsigned int[2])    /* get repeat settings */
   83 #define EVIOCSREP               _IOW(EVDEV_IOC_MAGIC, 0x03, unsigned int[2])    /* set repeat settings */
   84 
   85 #define EVIOCGKEYCODE           _IOWR(EVDEV_IOC_MAGIC, 0x04, unsigned int[2])   /* get keycode */
   86 #define EVIOCGKEYCODE_V2        _IOWR(EVDEV_IOC_MAGIC, 0x04, struct input_keymap_entry)
   87 #define EVIOCSKEYCODE           _IOW(EVDEV_IOC_MAGIC, 0x04, unsigned int[2])    /* set keycode */
   88 #define EVIOCSKEYCODE_V2        _IOW(EVDEV_IOC_MAGIC, 0x04, struct input_keymap_entry)
   89 
   90 #define EVIOCGNAME(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x06, len)       /* get device name */
   91 #define EVIOCGPHYS(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x07, len)       /* get physical location */
   92 #define EVIOCGUNIQ(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x08, len)       /* get unique identifier */
   93 #define EVIOCGPROP(len)         _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x09, len)       /* get device properties */
   94 
   95 #define EVIOCGMTSLOTS(len)      _IOC(IOC_INOUT, EVDEV_IOC_MAGIC, 0x0a, len)     /* get MT slots values */
   96 
   97 #define EVIOCGKEY(len)          _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x18, len)       /* get global key state */
   98 #define EVIOCGLED(len)          _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x19, len)       /* get all LEDs */
   99 #define EVIOCGSND(len)          _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x1a, len)       /* get all sounds status */
  100 #define EVIOCGSW(len)           _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x1b, len)       /* get all switch states */
  101 
  102 #define EVIOCGBIT(ev,len)       _IOC(IOC_OUT, EVDEV_IOC_MAGIC, 0x20 + (ev), len)        /* get event bits */
  103 #define EVIOCGABS(abs)          _IOR(EVDEV_IOC_MAGIC, 0x40 + (abs), struct input_absinfo)       /* get abs value/limits */
  104 #define EVIOCSABS(abs)          _IOW(EVDEV_IOC_MAGIC, 0xc0 + (abs), struct input_absinfo)       /* set abs value/limits */
  105 
  106 #define EVIOCSFF                _IOW(EVDEV_IOC_MAGIC, 0x80, struct ff_effect)   /* send a force effect to a force feedback device */
  107 #define EVIOCRMFF               _IOWINT(EVDEV_IOC_MAGIC, 0x81)                  /* Erase a force effect */
  108 #define EVIOCGEFFECTS           _IOR(EVDEV_IOC_MAGIC, 0x84, int)                /* Report number of effects playable at the same time */
  109 
  110 #define EVIOCGRAB               _IOWINT(EVDEV_IOC_MAGIC, 0x90)                  /* Grab/Release device */
  111 #define EVIOCREVOKE             _IOWINT(EVDEV_IOC_MAGIC, 0x91)                  /* Revoke device access */
  112 
  113 #define EVIOCSCLOCKID           _IOW(EVDEV_IOC_MAGIC, 0xa0, int)                /* Set clockid to be used for timestamps */
  114 
  115 /*
  116  * IDs.
  117  */
  118 
  119 #define ID_BUS                  0
  120 #define ID_VENDOR               1
  121 #define ID_PRODUCT              2
  122 #define ID_VERSION              3
  123 
  124 #define BUS_PCI                 0x01
  125 #define BUS_ISAPNP              0x02
  126 #define BUS_USB                 0x03
  127 #define BUS_HIL                 0x04
  128 #define BUS_BLUETOOTH           0x05
  129 #define BUS_VIRTUAL             0x06
  130 
  131 #define BUS_ISA                 0x10
  132 #define BUS_I8042               0x11
  133 #define BUS_XTKBD               0x12
  134 #define BUS_RS232               0x13
  135 #define BUS_GAMEPORT            0x14
  136 #define BUS_PARPORT             0x15
  137 #define BUS_AMIGA               0x16
  138 #define BUS_ADB                 0x17
  139 #define BUS_I2C                 0x18
  140 #define BUS_HOST                0x19
  141 #define BUS_GSC                 0x1A
  142 #define BUS_ATARI               0x1B
  143 #define BUS_SPI                 0x1C
  144 #define BUS_RMI                 0x1D
  145 #define BUS_CEC                 0x1E
  146 #define BUS_INTEL_ISHTP         0x1F
  147 
  148 /*
  149  * MT_TOOL types
  150  */
  151 #define MT_TOOL_FINGER          0x00
  152 #define MT_TOOL_PEN             0x01
  153 #define MT_TOOL_PALM            0x02
  154 #define MT_TOOL_DIAL            0x0a
  155 #define MT_TOOL_MAX             0x0f
  156 
  157 /*
  158  * Values describing the status of a force-feedback effect
  159  */
  160 #define FF_STATUS_STOPPED       0x00
  161 #define FF_STATUS_PLAYING       0x01
  162 #define FF_STATUS_MAX           0x01
  163 
  164 /* scheduling info for force feedback effect */
  165 struct ff_replay {
  166         uint16_t        length;         /* length of the effect (ms) */
  167         uint16_t        delay;          /* delay before effect starts (ms) */
  168 };
  169 
  170 /* trigger for force feedback effect */
  171 struct ff_trigger {
  172         uint16_t        button;         /* trigger button number */
  173         uint16_t        interval;       /* delay between re-triggers */
  174 };
  175 
  176 /* force feedback effect envelop */
  177 struct ff_envelope {
  178         uint16_t        attack_length;  /* duration of the attach (ms) */
  179         uint16_t        attack_level;   /* level at the beginning (0x0000 - 0x7fff) */
  180         uint16_t        fade_length;    /* duratin of fade (ms) */
  181         uint16_t        fade_level;     /* level at the end of fade */
  182 };
  183 
  184 struct ff_constant_effect {
  185         int16_t                 level;
  186         struct ff_envelope      envelope;
  187 };
  188 
  189 struct ff_ramp_effect {
  190         int16_t                 start_level;
  191         int16_t                 end_level;
  192         struct ff_envelope      envelope;
  193 };
  194 
  195 struct ff_condition_effect {
  196         /* maximum level when joystick moved to respective side */
  197         uint16_t        right_saturation;
  198 
  199         uint16_t        left_saturation;
  200         /* how fast force grows when joystick move to the respective side */
  201         int16_t         right_coeff;
  202         int16_t         left_coeff;
  203 
  204         uint16_t        deadband;       /* size of dead zone when no force is produced */
  205         int16_t         center;         /* center of dead zone */
  206 };
  207 
  208 /*
  209  * Force feedback periodic effect types
  210  */
  211 
  212 #define FF_SQUARE       0x58
  213 #define FF_TRIANGLE     0x59
  214 #define FF_SINE         0x5a
  215 #define FF_SAW_UP       0x5b
  216 #define FF_SAW_DOWN     0x5c
  217 #define FF_CUSTOM       0x5d
  218 
  219 #define FF_WAVEFORM_MIN FF_SQUARE
  220 #define FF_WAVEFORM_MAX FF_CUSTOM
  221 
  222 struct ff_periodic_effect {
  223         uint16_t                waveform;
  224         uint16_t                period;         /* ms */
  225         int16_t                 magnitude;      /* peak */
  226         int16_t                 offset;         /* mean, roughly */
  227         uint16_t                phase;          /* horizontal shift */
  228         struct ff_envelope      envelope;
  229         uint32_t                custom_len;     /* FF_CUSTOM waveform only */
  230         int16_t                 *custom_data;   /* FF_CUSTOM waveform only */
  231 };
  232 
  233 struct ff_rumble_effect {
  234         uint16_t        strong_magnitude;       /* magnitude of the heavy motor */
  235         uint16_t        weak_magnitude;         /* magnitude of the light motor */
  236 };
  237 
  238 /*
  239  * Force feedback effect types
  240  */
  241 
  242 #define FF_RUMBLE       0x50
  243 #define FF_PERIODIC     0x51
  244 #define FF_CONSTANT     0x52
  245 #define FF_SPRING       0x53
  246 #define FF_FRICTION     0x54
  247 #define FF_DAMPER       0x55
  248 #define FF_INERTIA      0x56
  249 #define FF_RAMP         0x57
  250 
  251 #define FF_EFFECT_MIN   FF_RUMBLE
  252 #define FF_EFFECT_MAX   FF_RAMP
  253 
  254 struct ff_effect {
  255         uint16_t                type;
  256         int16_t                 id;
  257         uint16_t                direction;      /* [0 .. 360) degrees -> [0 .. 0x10000) */
  258         struct ff_trigger       trigger;
  259         struct ff_replay        replay;
  260 
  261         union {
  262                 struct ff_constant_effect       constant;
  263                 struct ff_ramp_effect           ramp;
  264                 struct ff_periodic_effect       periodic;
  265                 struct ff_condition_effect      condition[2]; /* One for each axis */
  266                 struct ff_rumble_effect         rumble;
  267         } u;
  268 };
  269 
  270 /*
  271  * force feedback device properties
  272  */
  273 
  274 #define FF_GAIN         0x60
  275 #define FF_AUTOCENTER   0x61
  276 
  277 #define FF_MAX          0x7f
  278 #define FF_CNT          (FF_MAX+1)
  279 
  280 #endif /* _EVDEV_INPUT_H */

Cache object: 9ef8cd8783fbc6a95857dc1d3b65d197


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.