Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(582)

Side by Side Diff: ui/events/ozone/evdev/event_device_info.cc

Issue 672633002: Revert of [Ozone] Properly initialize multitouch slot values (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/events/ozone/evdev/event_device_info.h" 5 #include "ui/events/ozone/evdev/event_device_info.h"
6 6
7 #include <linux/input.h> 7 #include <linux/input.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
(...skipping 22 matching lines...) Expand all
33 } 33 }
34 34
35 bool GetAbsInfo(int fd, int code, struct input_absinfo* absinfo) { 35 bool GetAbsInfo(int fd, int code, struct input_absinfo* absinfo) {
36 if (ioctl(fd, EVIOCGABS(code), absinfo)) { 36 if (ioctl(fd, EVIOCGABS(code), absinfo)) {
37 DLOG(ERROR) << "failed EVIOCGABS(" << code << ") on fd " << fd; 37 DLOG(ERROR) << "failed EVIOCGABS(" << code << ") on fd " << fd;
38 return false; 38 return false;
39 } 39 }
40 return true; 40 return true;
41 } 41 }
42 42
43 // |request| needs to be the equivalent to:
44 // struct input_mt_request_layout {
45 // uint32_t code;
46 // int32_t values[num_slots];
47 // };
48 //
49 // |size| is num_slots + 1 (for code).
50 bool GetSlotValues(int fd, int32_t* request, unsigned int size) {
51 if (ioctl(fd,
52 EVIOCGMTSLOTS(sizeof(int32_t) * size),
53 request) < 0) {
54 LOG(ERROR) << "failed EVIOCGMTSLOTS(" << request[0] << ") on fd " << fd;
55 return false;
56 }
57
58 return true;
59 }
60
61 } // namespace 43 } // namespace
62 44
63 EventDeviceInfo::EventDeviceInfo() { 45 EventDeviceInfo::EventDeviceInfo() {
64 memset(ev_bits_, 0, sizeof(ev_bits_)); 46 memset(ev_bits_, 0, sizeof(ev_bits_));
65 memset(key_bits_, 0, sizeof(key_bits_)); 47 memset(key_bits_, 0, sizeof(key_bits_));
66 memset(rel_bits_, 0, sizeof(rel_bits_)); 48 memset(rel_bits_, 0, sizeof(rel_bits_));
67 memset(abs_bits_, 0, sizeof(abs_bits_)); 49 memset(abs_bits_, 0, sizeof(abs_bits_));
68 memset(msc_bits_, 0, sizeof(msc_bits_)); 50 memset(msc_bits_, 0, sizeof(msc_bits_));
69 memset(sw_bits_, 0, sizeof(sw_bits_)); 51 memset(sw_bits_, 0, sizeof(sw_bits_));
70 memset(led_bits_, 0, sizeof(led_bits_)); 52 memset(led_bits_, 0, sizeof(led_bits_));
(...skipping 26 matching lines...) Expand all
97 return false; 79 return false;
98 80
99 if (!GetPropBits(fd, prop_bits_, sizeof(prop_bits_))) 81 if (!GetPropBits(fd, prop_bits_, sizeof(prop_bits_)))
100 return false; 82 return false;
101 83
102 for (unsigned int i = 0; i < ABS_CNT; ++i) 84 for (unsigned int i = 0; i < ABS_CNT; ++i)
103 if (HasAbsEvent(i)) 85 if (HasAbsEvent(i))
104 if (!GetAbsInfo(fd, i, &abs_info_[i])) 86 if (!GetAbsInfo(fd, i, &abs_info_[i]))
105 return false; 87 return false;
106 88
107 int max_num_slots = abs_info_[ABS_MT_SLOT].maximum + 1;
108 // |request| is MT code + slots.
109 int32_t request[max_num_slots + 1];
110 for (unsigned int i = ABS_MT_SLOT + 1; i < ABS_MAX; ++i) {
111 memset(request, 0, sizeof(request));
112 request[0] = i;
113 if (HasAbsEvent(i))
114 if (!GetSlotValues(fd, request, max_num_slots + 1))
115 return false;
116
117 slot_values_[i - ABS_MT_SLOT - 1].assign(
118 request + 1, request + max_num_slots + 1);
119 }
120
121 return true; 89 return true;
122 } 90 }
123 91
124 bool EventDeviceInfo::HasEventType(unsigned int type) const { 92 bool EventDeviceInfo::HasEventType(unsigned int type) const {
125 if (type > EV_MAX) 93 if (type > EV_MAX)
126 return false; 94 return false;
127 return EvdevBitIsSet(ev_bits_, type); 95 return EvdevBitIsSet(ev_bits_, type);
128 } 96 }
129 97
130 bool EventDeviceInfo::HasKeyEvent(unsigned int code) const { 98 bool EventDeviceInfo::HasKeyEvent(unsigned int code) const {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 } 138 }
171 139
172 int32 EventDeviceInfo::GetAbsMinimum(unsigned int code) const { 140 int32 EventDeviceInfo::GetAbsMinimum(unsigned int code) const {
173 return abs_info_[code].minimum; 141 return abs_info_[code].minimum;
174 } 142 }
175 143
176 int32 EventDeviceInfo::GetAbsMaximum(unsigned int code) const { 144 int32 EventDeviceInfo::GetAbsMaximum(unsigned int code) const {
177 return abs_info_[code].maximum; 145 return abs_info_[code].maximum;
178 } 146 }
179 147
180 int32 EventDeviceInfo::GetSlotValue(unsigned int code,
181 unsigned int slot) const {
182 const std::vector<int32_t>& slots = GetMtSlotsForCode(code);
183 DCHECK_LE(0u, slot) << slot << " is an invalid slot";
184 DCHECK_LT(slot, slots.size()) << slot << " is an invalid slot";
185 return slots[slot];
186 }
187
188 bool EventDeviceInfo::HasAbsXY() const { 148 bool EventDeviceInfo::HasAbsXY() const {
189 if (HasAbsEvent(ABS_X) && HasAbsEvent(ABS_Y)) 149 if (HasAbsEvent(ABS_X) && HasAbsEvent(ABS_Y))
190 return true; 150 return true;
191 151
192 if (HasAbsEvent(ABS_MT_POSITION_X) && HasAbsEvent(ABS_MT_POSITION_Y)) 152 if (HasAbsEvent(ABS_MT_POSITION_X) && HasAbsEvent(ABS_MT_POSITION_Y))
193 return true; 153 return true;
194 154
195 return false; 155 return false;
196 } 156 }
197 157
(...skipping 17 matching lines...) Expand all
215 175
216 // Touchpads are not mapped to the screen. 176 // Touchpads are not mapped to the screen.
217 if (HasKeyEvent(BTN_LEFT) || HasKeyEvent(BTN_MIDDLE) || 177 if (HasKeyEvent(BTN_LEFT) || HasKeyEvent(BTN_MIDDLE) ||
218 HasKeyEvent(BTN_RIGHT) || HasKeyEvent(BTN_TOOL_FINGER)) 178 HasKeyEvent(BTN_RIGHT) || HasKeyEvent(BTN_TOOL_FINGER))
219 return false; 179 return false;
220 180
221 // Touchscreens are mapped to the screen. 181 // Touchscreens are mapped to the screen.
222 return true; 182 return true;
223 } 183 }
224 184
225 const std::vector<int32_t>& EventDeviceInfo::GetMtSlotsForCode(int code) const {
226 int index = code - ABS_MT_SLOT - 1;
227 DCHECK_LE(0, index) << code << " is not a valid multi-touch code";
228 DCHECK_LT(index, EVDEV_ABS_MT_COUNT)
229 << code << " is not a valid multi-touch code";
230 return slot_values_[index];
231 }
232
233 } // namespace ui 185 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/event_device_info.h ('k') | ui/events/ozone/evdev/touch_event_converter_evdev.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698