root/include/linux/input/mt.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. input_mt_set_value
  2. input_mt_get_value
  3. input_mt_is_active
  4. input_mt_is_used
  5. input_mt_new_trkid
  6. input_mt_slot
  7. input_is_mt_value
  8. input_is_mt_axis

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 #ifndef _INPUT_MT_H
   3 #define _INPUT_MT_H
   4 
   5 /*
   6  * Input Multitouch Library
   7  *
   8  * Copyright (c) 2010 Henrik Rydberg
   9  */
  10 
  11 #include <linux/input.h>
  12 
  13 #define TRKID_MAX       0xffff
  14 
  15 #define INPUT_MT_POINTER        0x0001  /* pointer device, e.g. trackpad */
  16 #define INPUT_MT_DIRECT         0x0002  /* direct device, e.g. touchscreen */
  17 #define INPUT_MT_DROP_UNUSED    0x0004  /* drop contacts not seen in frame */
  18 #define INPUT_MT_TRACK          0x0008  /* use in-kernel tracking */
  19 #define INPUT_MT_SEMI_MT        0x0010  /* semi-mt device, finger count handled manually */
  20 
  21 /**
  22  * struct input_mt_slot - represents the state of an input MT slot
  23  * @abs: holds current values of ABS_MT axes for this slot
  24  * @frame: last frame at which input_mt_report_slot_state() was called
  25  * @key: optional driver designation of this slot
  26  */
  27 struct input_mt_slot {
  28         int abs[ABS_MT_LAST - ABS_MT_FIRST + 1];
  29         unsigned int frame;
  30         unsigned int key;
  31 };
  32 
  33 /**
  34  * struct input_mt - state of tracked contacts
  35  * @trkid: stores MT tracking ID for the next contact
  36  * @num_slots: number of MT slots the device uses
  37  * @slot: MT slot currently being transmitted
  38  * @flags: input_mt operation flags
  39  * @frame: increases every time input_mt_sync_frame() is called
  40  * @red: reduced cost matrix for in-kernel tracking
  41  * @slots: array of slots holding current values of tracked contacts
  42  */
  43 struct input_mt {
  44         int trkid;
  45         int num_slots;
  46         int slot;
  47         unsigned int flags;
  48         unsigned int frame;
  49         int *red;
  50         struct input_mt_slot slots[];
  51 };
  52 
  53 static inline void input_mt_set_value(struct input_mt_slot *slot,
  54                                       unsigned code, int value)
  55 {
  56         slot->abs[code - ABS_MT_FIRST] = value;
  57 }
  58 
  59 static inline int input_mt_get_value(const struct input_mt_slot *slot,
  60                                      unsigned code)
  61 {
  62         return slot->abs[code - ABS_MT_FIRST];
  63 }
  64 
  65 static inline bool input_mt_is_active(const struct input_mt_slot *slot)
  66 {
  67         return input_mt_get_value(slot, ABS_MT_TRACKING_ID) >= 0;
  68 }
  69 
  70 static inline bool input_mt_is_used(const struct input_mt *mt,
  71                                     const struct input_mt_slot *slot)
  72 {
  73         return slot->frame == mt->frame;
  74 }
  75 
  76 int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots,
  77                         unsigned int flags);
  78 void input_mt_destroy_slots(struct input_dev *dev);
  79 
  80 static inline int input_mt_new_trkid(struct input_mt *mt)
  81 {
  82         return mt->trkid++ & TRKID_MAX;
  83 }
  84 
  85 static inline void input_mt_slot(struct input_dev *dev, int slot)
  86 {
  87         input_event(dev, EV_ABS, ABS_MT_SLOT, slot);
  88 }
  89 
  90 static inline bool input_is_mt_value(int axis)
  91 {
  92         return axis >= ABS_MT_FIRST && axis <= ABS_MT_LAST;
  93 }
  94 
  95 static inline bool input_is_mt_axis(int axis)
  96 {
  97         return axis == ABS_MT_SLOT || input_is_mt_value(axis);
  98 }
  99 
 100 bool input_mt_report_slot_state(struct input_dev *dev,
 101                                 unsigned int tool_type, bool active);
 102 
 103 void input_mt_report_finger_count(struct input_dev *dev, int count);
 104 void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count);
 105 void input_mt_drop_unused(struct input_dev *dev);
 106 
 107 void input_mt_sync_frame(struct input_dev *dev);
 108 
 109 /**
 110  * struct input_mt_pos - contact position
 111  * @x: horizontal coordinate
 112  * @y: vertical coordinate
 113  */
 114 struct input_mt_pos {
 115         s16 x, y;
 116 };
 117 
 118 int input_mt_assign_slots(struct input_dev *dev, int *slots,
 119                           const struct input_mt_pos *pos, int num_pos,
 120                           int dmax);
 121 
 122 int input_mt_get_slot_by_key(struct input_dev *dev, int key);
 123 
 124 #endif

/* [<][>][^][v][top][bottom][index][help] */