summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2010-04-18 09:10:36 +0200
committerHenrik Rydberg <rydberg@euromail.se>2010-04-18 09:58:49 +0200
commit182d9419ded03262166514e3c76033a8daa14141 (patch)
tree3265ebe907591793ee73c0186be3e0d810716722
parent923754e3b864c33e23725435ae5049354a8ac5aa (diff)
Filter non-zero finger width events
Add filtering also to touch/width events, but be careful to treat a zero touch exactly as zero. Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
-rw-r--r--src/capabilities.c9
-rw-r--r--src/capabilities.h3
-rw-r--r--src/hwstate.c16
3 files changed, 24 insertions, 4 deletions
diff --git a/src/capabilities.c b/src/capabilities.c
index 1f555f9..7f3b34d 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -29,6 +29,7 @@
29#define CLICK_AREA(c) ((c->has_ibt ? 0.20 : 0.00) * get_cap_ysize(c)) 29#define CLICK_AREA(c) ((c->has_ibt ? 0.20 : 0.00) * get_cap_ysize(c))
30 30
31static const int SN_COORD = 250; /* coordinate signal-to-noise ratio */ 31static const int SN_COORD = 250; /* coordinate signal-to-noise ratio */
32static const int SN_WIDTH = 15; /* width signal-to-noise ratio */
32 33
33static const int bits_per_long = 8 * sizeof(long); 34static const int bits_per_long = 8 * sizeof(long);
34 35
@@ -103,6 +104,9 @@ int read_capabilities(struct Capabilities *cap, int fd)
103 cap->xfuzz = get_cap_xsize(cap) / SN_COORD; 104 cap->xfuzz = get_cap_xsize(cap) / SN_COORD;
104 cap->yfuzz = get_cap_ysize(cap) / SN_COORD; 105 cap->yfuzz = get_cap_ysize(cap) / SN_COORD;
105 } 106 }
107 cap->wfuzz = cap->abs_touch_major.fuzz;
108 if (cap->wfuzz <= 0)
109 cap->wfuzz = get_cap_wsize(cap) / SN_WIDTH;
106 110
107 cap->yclick = cap->abs_position_y.maximum - CLICK_AREA(cap); 111 cap->yclick = cap->abs_position_y.maximum - CLICK_AREA(cap);
108 112
@@ -119,6 +123,11 @@ int get_cap_ysize(const struct Capabilities *cap)
119 return cap->abs_position_y.maximum - cap->abs_position_y.minimum; 123 return cap->abs_position_y.maximum - cap->abs_position_y.minimum;
120} 124}
121 125
126int get_cap_wsize(const struct Capabilities *cap)
127{
128 return cap->abs_touch_major.maximum - cap->abs_touch_major.minimum;
129}
130
122void output_capabilities(const struct Capabilities *cap) 131void output_capabilities(const struct Capabilities *cap)
123{ 132{
124 char line[1024]; 133 char line[1024];
diff --git a/src/capabilities.h b/src/capabilities.h
index af59384..402d297 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -40,13 +40,14 @@ struct Capabilities {
40 struct input_absinfo abs_orientation; 40 struct input_absinfo abs_orientation;
41 struct input_absinfo abs_position_x; 41 struct input_absinfo abs_position_x;
42 struct input_absinfo abs_position_y; 42 struct input_absinfo abs_position_y;
43 int xfuzz, yfuzz; 43 int xfuzz, yfuzz, wfuzz;
44 int yclick; 44 int yclick;
45}; 45};
46 46
47int read_capabilities(struct Capabilities *cap, int fd); 47int read_capabilities(struct Capabilities *cap, int fd);
48int get_cap_xsize(const struct Capabilities *cap); 48int get_cap_xsize(const struct Capabilities *cap);
49int get_cap_ysize(const struct Capabilities *cap); 49int get_cap_ysize(const struct Capabilities *cap);
50int get_cap_wsize(const struct Capabilities *cap);
50 51
51void output_capabilities(const struct Capabilities *cap); 52void output_capabilities(const struct Capabilities *cap);
52 53
diff --git a/src/hwstate.c b/src/hwstate.c
index d758d25..07bab31 100644
--- a/src/hwstate.c
+++ b/src/hwstate.c
@@ -69,14 +69,24 @@ static void set_finger(struct FingerState *fs,
69{ 69{
70 int x = defuzz(hw->position_x, fs->hw.position_x, caps->xfuzz); 70 int x = defuzz(hw->position_x, fs->hw.position_x, caps->xfuzz);
71 int y = defuzz(hw->position_y, fs->hw.position_y, caps->yfuzz); 71 int y = defuzz(hw->position_y, fs->hw.position_y, caps->yfuzz);
72 fs->hw = *hw; 72 int tj = defuzz(hw->touch_major, fs->hw.touch_major, caps->wfuzz);
73 int tn = defuzz(hw->touch_minor, fs->hw.touch_minor, caps->wfuzz);
74 int wj = defuzz(hw->width_major, fs->hw.width_major, caps->wfuzz);
75 int wn = defuzz(hw->width_minor, fs->hw.width_minor, caps->wfuzz);
73 fs->id = id; 76 fs->id = id;
77 fs->hw = *hw;
78 fs->hw.position_x = x;
79 fs->hw.position_y = y;
80 if (hw->touch_major) {
81 fs->hw.touch_major = tj;
82 fs->hw.touch_minor = tn;
83 }
84 fs->hw.width_major = wj;
85 fs->hw.width_minor = wn;
74 if (!caps->has_touch_minor) 86 if (!caps->has_touch_minor)
75 fs->hw.touch_minor = hw->touch_major; 87 fs->hw.touch_minor = hw->touch_major;
76 if (!caps->has_width_minor) 88 if (!caps->has_width_minor)
77 fs->hw.width_minor = hw->width_major; 89 fs->hw.width_minor = hw->width_major;
78 fs->hw.position_x = x;
79 fs->hw.position_y = y;
80} 90}
81 91
82void modify_hwstate(struct HWState *s, 92void modify_hwstate(struct HWState *s,