Quellcode-Bibliothek input.h
Sprache: C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* Copyright ( c ) 1999 - 2002 Vojtech Pavlik
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*/
#ifndef _UAPI_INPUT_H
#define _UAPI_INPUT_H
#ifndef __KERNEL__
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <linux/types.h>
#endif
#include "input-event-codes.h"
/*
* The event structure itself
* Note that _ _ USE_TIME_BITS64 is defined by libc based on
* application ' s request to use 64 bit time_t .
*/
struct input_event {
#if (__BITS_PER_LONG != 32 || !defined (__USE_TIME_BITS64)) && !defined (__KERNEL__)
struct timeval time;
#define input_event_sec time.tv_sec
#define input_event_usec time.tv_usec
#else
__kernel_ulong_t __sec;
#if defined (__sparc__) && defined (__arch64__)
unsigned int __usec;
unsigned int __pad;
#else
__kernel_ulong_t __usec;
#endif
#define input_event_sec __sec
#define input_event_usec __usec
#endif
__u16 type;
__u16 code;
__s32 value;
};
/*
* Protocol version .
*/
#define EV_VERSION 0 x010001
/*
* IOCTLs ( 0 x00 - 0 x7f )
*/
struct input_id {
__u16 bustype;
__u16 vendor;
__u16 product;
__u16 version;
};
/**
* struct input_absinfo - used by EVIOCGABS / EVIOCSABS ioctls
* @ value : latest reported value for the axis .
* @ minimum : specifies minimum value for the axis .
* @ maximum : specifies maximum value for the axis .
* @ fuzz : specifies fuzz value that is used to filter noise from
* the event stream .
* @ flat : values that are within this value will be discarded by
* joydev interface and reported as 0 instead .
* @ resolution : specifies resolution for the values reported for
* the axis .
*
* Note that input core does not clamp reported values to the
* [ minimum , maximum ] limits , such task is left to userspace .
*
* The default resolution for main axes ( ABS_X , ABS_Y , ABS_Z ,
* ABS_MT_POSITION_X , ABS_MT_POSITION_Y ) is reported in units
* per millimeter ( units / mm ) , resolution for rotational axes
* ( ABS_RX , ABS_RY , ABS_RZ ) is reported in units per radian .
* The resolution for the size axes ( ABS_MT_TOUCH_MAJOR ,
* ABS_MT_TOUCH_MINOR , ABS_MT_WIDTH_MAJOR , ABS_MT_WIDTH_MINOR )
* is reported in units per millimeter ( units / mm ) .
* When INPUT_PROP_ACCELEROMETER is set the resolution changes .
* The main axes ( ABS_X , ABS_Y , ABS_Z ) are then reported in
* units per g ( units / g ) and in units per degree per second
* ( units / deg / s ) for rotational axes ( ABS_RX , ABS_RY , ABS_RZ ) .
*/
struct input_absinfo {
__s32 value;
__s32 minimum;
__s32 maximum;
__s32 fuzz;
__s32 flat;
__s32 resolution;
};
/**
* struct input_keymap_entry - used by EVIOCGKEYCODE / EVIOCSKEYCODE ioctls
* @ scancode : scancode represented in machine - endian form .
* @ len : length of the scancode that resides in @ scancode buffer .
* @ index : index in the keymap , may be used instead of scancode
* @ flags : allows to specify how kernel should handle the request . For
* example , setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
* should perform lookup in keymap by @ index instead of @ scancode
* @ keycode : key code assigned to this scancode
*
* The structure is used to retrieve and modify keymap data . Users have
* option of performing lookup either by @ scancode itself or by @ index
* in keymap entry . EVIOCGKEYCODE will also return scancode or index
* ( depending on which element was used to perform lookup ) .
*/
struct input_keymap_entry {
#define INPUT_KEYMAP_BY_INDEX (1 << 0 )
__u8 flags;
__u8 len;
__u16 index;
__u32 keycode;
__u8 scancode[32 ];
};
struct input_mask {
__u32 type;
__u32 codes_size;
__u64 codes_ptr;
};
#define EVIOCGVERSION _IOR('E' , 0 x01, int ) /* get driver version */
#define EVIOCGID _IOR('E' , 0 x02, struct input_id) /* get device ID */
#define EVIOCGREP _IOR('E' , 0 x03, unsigned int [2 ]) /* get repeat settings */
#define EVIOCSREP _IOW('E' , 0 x03, unsigned int [2 ]) /* set repeat settings */
#define EVIOCGKEYCODE _IOR('E' , 0 x04, unsigned int [2 ]) /* get keycode */
#define EVIOCGKEYCODE_V2 _IOR('E' , 0 x04, struct input_keymap_entry)
#define EVIOCSKEYCODE _IOW('E' , 0 x04, unsigned int [2 ]) /* set keycode */
#define EVIOCSKEYCODE_V2 _IOW('E' , 0 x04, struct input_keymap_entry)
#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E' , 0 x06, len) /* get device name */
#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E' , 0 x07, len) /* get physical location */
#define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E' , 0 x08, len) /* get unique identifier */
#define EVIOCGPROP(len) _IOC(_IOC_READ, 'E' , 0 x09, len) /* get device properties */
/**
* EVIOCGMTSLOTS ( len ) - get MT slot values
* @ len : size of the data buffer in bytes
*
* The ioctl buffer argument should be binary equivalent to
*
* struct input_mt_request_layout {
* _ _ u32 code ;
* _ _ s32 values [ num_slots ] ;
* } ;
*
* where num_slots is the ( arbitrary ) number of MT slots to extract .
*
* The ioctl size argument ( len ) is the size of the buffer , which
* should satisfy len = ( num_slots + 1 ) * sizeof ( _ _ s32 ) . If len is
* too small to fit all available slots , the first num_slots are
* returned .
*
* Before the call , code is set to the wanted ABS_MT event type . On
* return , values [ ] is filled with the slot values for the specified
* ABS_MT code .
*
* If the request code is not an ABS_MT value , - EINVAL is returned .
*/
#define EVIOCGMTSLOTS(len) _IOC(_IOC_READ, 'E' , 0 x0a, len)
#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E' , 0 x18, len) /* get global key state */
#define EVIOCGLED(len) _IOC(_IOC_READ, 'E' , 0 x19, len) /* get all LEDs */
#define EVIOCGSND(len) _IOC(_IOC_READ, 'E' , 0 x1a, len) /* get all sounds status */
#define EVIOCGSW(len) _IOC(_IOC_READ, 'E' , 0 x1b, len) /* get all switch states */
#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E' , 0 x20 + (ev), len) /* get event bits */
#define EVIOCGABS(abs) _IOR('E' , 0 x40 + (abs), struct input_absinfo) /* get abs value/limits */
#define EVIOCSABS(abs) _IOW('E' , 0 xc0 + (abs), struct input_absinfo) /* set abs value/limits */
#define EVIOCSFF _IOW('E' , 0 x80, struct ff_effect) /* send a force effect to a force feedback device */
#define EVIOCRMFF _IOW('E' , 0 x81, int ) /* Erase a force effect */
#define EVIOCGEFFECTS _IOR('E' , 0 x84, int ) /* Report number of effects playable at the same time */
#define EVIOCGRAB _IOW('E' , 0 x90, int ) /* Grab/Release device */
#define EVIOCREVOKE _IOW('E' , 0 x91, int ) /* Revoke device access */
/**
* EVIOCGMASK - Retrieve current event mask
*
* This ioctl allows user to retrieve the current event mask for specific
* event type . The argument must be of type " struct input_mask " and
* specifies the event type to query , the address of the receive buffer and
* the size of the receive buffer .
*
* The event mask is a per - client mask that specifies which events are
* forwarded to the client . Each event code is represented by a single bit
* in the event mask . If the bit is set , the event is passed to the client
* normally . Otherwise , the event is filtered and will never be queued on
* the client ' s receive buffer .
*
* Event masks do not affect global state of the input device . They only
* affect the file descriptor they are applied to .
*
* The default event mask for a client has all bits set , i . e . all events
* are forwarded to the client . If the kernel is queried for an unknown
* event type or if the receive buffer is larger than the number of
* event codes known to the kernel , the kernel returns all zeroes for those
* codes .
*
* At maximum , codes_size bytes are copied .
*
* This ioctl may fail with ENODEV in case the file is revoked , EFAULT
* if the receive - buffer points to invalid memory , or EINVAL if the kernel
* does not implement the ioctl .
*/
#define EVIOCGMASK _IOR('E' , 0 x92, struct input_mask) /* Get event-masks */
/**
* EVIOCSMASK - Set event mask
*
* This ioctl is the counterpart to EVIOCGMASK . Instead of receiving the
* current event mask , this changes the client ' s event mask for a specific
* type . See EVIOCGMASK for a description of event - masks and the
* argument - type .
*
* This ioctl provides full forward compatibility . If the passed event type
* is unknown to the kernel , or if the number of event codes specified in
* the mask is bigger than what is known to the kernel , the ioctl is still
* accepted and applied . However , any unknown codes are left untouched and
* stay cleared . That means , the kernel always filters unknown codes
* regardless of what the client requests . If the new mask doesn ' t cover
* all known event - codes , all remaining codes are automatically cleared and
* thus filtered .
*
* This ioctl may fail with ENODEV in case the file is revoked . EFAULT is
* returned if the receive - buffer points to invalid memory . EINVAL is returned
* if the kernel does not implement the ioctl .
*/
#define EVIOCSMASK _IOW('E' , 0 x93, struct input_mask) /* Set event-masks */
#define EVIOCSCLOCKID _IOW('E' , 0 xa0, int ) /* Set clockid to be used for timestamps */
/*
* IDs .
*/
#define ID_BUS 0
#define ID_VENDOR 1
#define ID_PRODUCT 2
#define ID_VERSION 3
#define BUS_PCI 0 x01
#define BUS_ISAPNP 0 x02
#define BUS_USB 0 x03
#define BUS_HIL 0 x04
#define BUS_BLUETOOTH 0 x05
#define BUS_VIRTUAL 0 x06
#define BUS_ISA 0 x10
#define BUS_I8042 0 x11
#define BUS_XTKBD 0 x12
#define BUS_RS232 0 x13
#define BUS_GAMEPORT 0 x14
#define BUS_PARPORT 0 x15
#define BUS_AMIGA 0 x16
#define BUS_ADB 0 x17
#define BUS_I2C 0 x18
#define BUS_HOST 0 x19
#define BUS_GSC 0 x1A
#define BUS_ATARI 0 x1B
#define BUS_SPI 0 x1C
#define BUS_RMI 0 x1D
#define BUS_CEC 0 x1E
#define BUS_INTEL_ISHTP 0 x1F
#define BUS_AMD_SFH 0 x20
#define BUS_SDW 0 x21
/*
* MT_TOOL types
*/
#define MT_TOOL_FINGER 0 x00
#define MT_TOOL_PEN 0 x01
#define MT_TOOL_PALM 0 x02
#define MT_TOOL_DIAL 0 x0a
#define MT_TOOL_MAX 0 x0f
/*
* Values describing the status of a force - feedback effect
*/
#define FF_STATUS_STOPPED 0 x00
#define FF_STATUS_PLAYING 0 x01
#define FF_STATUS_MAX 0 x01
/*
* Structures used in ioctls to upload effects to a device
* They are pieces of a bigger structure ( called ff_effect )
*/
/*
* All duration values are expressed in ms . Values above 32767 ms ( 0 x7fff )
* should not be used and have unspecified results .
*/
/**
* struct ff_replay - defines scheduling of the force - feedback effect
* @ length : duration of the effect
* @ delay : delay before effect should start playing
*/
struct ff_replay {
__u16 length;
__u16 delay;
};
/**
* struct ff_trigger - defines what triggers the force - feedback effect
* @ button : number of the button triggering the effect
* @ interval : controls how soon the effect can be re - triggered
*/
struct ff_trigger {
__u16 button;
__u16 interval;
};
/**
* struct ff_envelope - generic force - feedback effect envelope
* @ attack_length : duration of the attack ( ms )
* @ attack_level : level at the beginning of the attack
* @ fade_length : duration of fade ( ms )
* @ fade_level : level at the end of fade
*
* The @ attack_level and @ fade_level are absolute values ; when applying
* envelope force - feedback core will convert to positive / negative
* value based on polarity of the default level of the effect .
* Valid range for the attack and fade levels is 0 x0000 - 0 x7fff
*/
struct ff_envelope {
__u16 attack_length;
__u16 attack_level;
__u16 fade_length;
__u16 fade_level;
};
/**
* struct ff_constant_effect - defines parameters of a constant force - feedback effect
* @ level : strength of the effect ; may be negative
* @ envelope : envelope data
*/
struct ff_constant_effect {
__s16 level;
struct ff_envelope envelope;
};
/**
* struct ff_ramp_effect - defines parameters of a ramp force - feedback effect
* @ start_level : beginning strength of the effect ; may be negative
* @ end_level : final strength of the effect ; may be negative
* @ envelope : envelope data
*/
struct ff_ramp_effect {
__s16 start_level;
__s16 end_level;
struct ff_envelope envelope;
};
/**
* struct ff_condition_effect - defines a spring or friction force - feedback effect
* @ right_saturation : maximum level when joystick moved all way to the right
* @ left_saturation : same for the left side
* @ right_coeff : controls how fast the force grows when the joystick moves
* to the right
* @ left_coeff : same for the left side
* @ deadband : size of the dead zone , where no force is produced
* @ center : position of the dead zone
*/
struct ff_condition_effect {
__u16 right_saturation;
__u16 left_saturation;
__s16 right_coeff;
__s16 left_coeff;
__u16 deadband;
__s16 center;
};
/**
* struct ff_periodic_effect - defines parameters of a periodic force - feedback effect
* @ waveform : kind of the effect ( wave )
* @ period : period of the wave ( ms )
* @ magnitude : peak value
* @ offset : mean value of the wave ( roughly )
* @ phase : ' horizontal ' shift
* @ envelope : envelope data
* @ custom_len : number of samples ( FF_CUSTOM only )
* @ custom_data : buffer of samples ( FF_CUSTOM only )
*
* Known waveforms - FF_SQUARE , FF_TRIANGLE , FF_SINE , FF_SAW_UP ,
* FF_SAW_DOWN , FF_CUSTOM . The exact syntax FF_CUSTOM is undefined
* for the time being as no driver supports it yet .
*
* Note : the data pointed by custom_data is copied by the driver .
* You can therefore dispose of the memory after the upload / update .
*/
struct ff_periodic_effect {
__u16 waveform;
__u16 period;
__s16 magnitude;
__s16 offset;
__u16 phase;
struct ff_envelope envelope;
__u32 custom_len;
__s16 __user *custom_data;
};
/**
* struct ff_rumble_effect - defines parameters of a periodic force - feedback effect
* @ strong_magnitude : magnitude of the heavy motor
* @ weak_magnitude : magnitude of the light one
*
* Some rumble pads have two motors of different weight . Strong_magnitude
* represents the magnitude of the vibration generated by the heavy one .
*/
struct ff_rumble_effect {
__u16 strong_magnitude;
__u16 weak_magnitude;
};
/**
* struct ff_effect - defines force feedback effect
* @ type : type of the effect ( FF_CONSTANT , FF_PERIODIC , FF_RAMP , FF_SPRING ,
* FF_FRICTION , FF_DAMPER , FF_RUMBLE , FF_INERTIA , or FF_CUSTOM )
* @ id : an unique id assigned to an effect
* @ direction : direction of the effect
* @ trigger : trigger conditions ( struct ff_trigger )
* @ replay : scheduling of the effect ( struct ff_replay )
* @ u : effect - specific structure ( one of ff_constant_effect , ff_ramp_effect ,
* ff_periodic_effect , ff_condition_effect , ff_rumble_effect ) further
* defining effect parameters
*
* This structure is sent through ioctl from the application to the driver .
* To create a new effect application should set its @ id to - 1 ; the kernel
* will return assigned @ id which can later be used to update or delete
* this effect .
*
* Direction of the effect is encoded as follows :
* 0 deg - > 0 x0000 ( down )
* 90 deg - > 0 x4000 ( left )
* 180 deg - > 0 x8000 ( up )
* 270 deg - > 0 xC000 ( right )
*/
struct ff_effect {
__u16 type;
__s16 id;
__u16 direction;
struct ff_trigger trigger;
struct ff_replay replay;
union {
struct ff_constant_effect constant;
struct ff_ramp_effect ramp;
struct ff_periodic_effect periodic;
struct ff_condition_effect condition[2 ]; /* One for each axis */
struct ff_rumble_effect rumble;
} u;
};
/*
* Force feedback effect types
*/
#define FF_RUMBLE 0 x50
#define FF_PERIODIC 0 x51
#define FF_CONSTANT 0 x52
#define FF_SPRING 0 x53
#define FF_FRICTION 0 x54
#define FF_DAMPER 0 x55
#define FF_INERTIA 0 x56
#define FF_RAMP 0 x57
#define FF_EFFECT_MIN FF_RUMBLE
#define FF_EFFECT_MAX FF_RAMP
/*
* Force feedback periodic effect types
*/
#define FF_SQUARE 0 x58
#define FF_TRIANGLE 0 x59
#define FF_SINE 0 x5a
#define FF_SAW_UP 0 x5b
#define FF_SAW_DOWN 0 x5c
#define FF_CUSTOM 0 x5d
#define FF_WAVEFORM_MIN FF_SQUARE
#define FF_WAVEFORM_MAX FF_CUSTOM
/*
* Set ff device properties
*/
#define FF_GAIN 0 x60
#define FF_AUTOCENTER 0 x61
/*
* ff - > playback ( effect_id = FF_GAIN ) is the first effect_id to
* cause a collision with another ff method , in this case ff - > set_gain ( ) .
* Therefore the greatest safe value for effect_id is FF_GAIN - 1 ,
* and thus the total number of effects should never exceed FF_GAIN .
*/
#define FF_MAX_EFFECTS FF_GAIN
#define FF_MAX 0 x7f
#define FF_CNT (FF_MAX+1 )
#endif /* _UAPI_INPUT_H */
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.34Bemerkung:
(vorverarbeitet am 2026-09-27)
¤
*Bot Zugriff
2026-10-10
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=1126864
#Domains=2039723