Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / ui / events / ozone / evdev / touch_event_converter_evdev.h
blobee703f3658dff6c0808ec5bc5f13645220ab2702
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
6 #define UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
8 #include <bitset>
10 #include "base/compiler_specific.h"
11 #include "base/files/file_path.h"
12 #include "base/message_loop/message_pump_libevent.h"
13 #include "ui/events/event_constants.h"
14 #include "ui/events/ozone/evdev/event_converter_evdev.h"
15 #include "ui/events/ozone/evdev/event_device_info.h"
16 #include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
18 namespace ui {
20 class TouchEvent;
22 class EVENTS_OZONE_EVDEV_EXPORT TouchEventConverterEvdev
23 : public EventConverterEvdev,
24 public base::MessagePumpLibevent::Watcher {
25 public:
26 enum {
27 MAX_FINGERS = 11
29 TouchEventConverterEvdev(int fd,
30 base::FilePath path,
31 const EventDeviceInfo& info,
32 const EventDispatchCallback& dispatch);
33 virtual ~TouchEventConverterEvdev();
35 // Start & stop watching for events.
36 virtual void Start() OVERRIDE;
37 virtual void Stop() OVERRIDE;
39 private:
40 friend class MockTouchEventConverterEvdev;
42 // Unsafe part of initialization.
43 void Init(const EventDeviceInfo& info);
45 // Overidden from base::MessagePumpLibevent::Watcher.
46 virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
47 virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
49 virtual bool Reinitialize();
51 void ProcessInputEvent(const input_event& input);
52 void ProcessAbs(const input_event& input);
53 void ProcessSyn(const input_event& input);
55 void ReportEvents(base::TimeDelta delta);
57 // Set if we have seen a SYN_DROPPED and not yet re-synced with the device.
58 bool syn_dropped_;
60 // Set if this is a type A device (uses SYN_MT_REPORT).
61 bool is_type_a_;
63 // Pressure values.
64 int pressure_min_;
65 int pressure_max_; // Used to normalize pressure values.
67 // Input range for x-axis.
68 float x_min_tuxels_;
69 float x_num_tuxels_;
71 // Input range for y-axis.
72 float y_min_tuxels_;
73 float y_num_tuxels_;
75 // Output range for x-axis.
76 float x_min_pixels_;
77 float x_num_pixels_;
79 // Output range for y-axis.
80 float y_min_pixels_;
81 float y_num_pixels_;
83 // Touch point currently being updated from the /dev/input/event* stream.
84 int current_slot_;
86 // File descriptor for the /dev/input/event* instance.
87 int fd_;
89 // Path to input device.
90 base::FilePath path_;
92 // Bit field tracking which in-progress touch points have been modified
93 // without a syn event.
94 std::bitset<MAX_FINGERS> altered_slots_;
96 struct InProgressEvents {
97 float x_;
98 float y_;
99 int id_; // Device reported "unique" touch point id; -1 means not active
100 int finger_; // "Finger" id starting from 0; -1 means not active
102 EventType type_;
103 float radius_x_;
104 float radius_y_;
105 float pressure_;
108 // In-progress touch points.
109 InProgressEvents events_[MAX_FINGERS];
111 // Controller for watching the input fd.
112 base::MessagePumpLibevent::FileDescriptorWatcher controller_;
114 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdev);
117 } // namespace ui
119 #endif // UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_