| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/gamepad_event_converter_evdev.h" | 5 #include "ui/events/ozone/evdev/gamepad_event_converter_evdev.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <linux/input.h> | 8 #include <linux/input.h> |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 | 10 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 id, | 100 id, |
| 101 devinfo.device_type(), | 101 devinfo.device_type(), |
| 102 devinfo.name(), | 102 devinfo.name(), |
| 103 devinfo.vendor_id(), | 103 devinfo.vendor_id(), |
| 104 devinfo.product_id()), | 104 devinfo.product_id()), |
| 105 will_send_frame_(false), | 105 will_send_frame_(false), |
| 106 last_hat_left_press_(false), | 106 last_hat_left_press_(false), |
| 107 last_hat_right_press_(false), | 107 last_hat_right_press_(false), |
| 108 last_hat_up_press_(false), | 108 last_hat_up_press_(false), |
| 109 last_hat_down_press_(false), | 109 last_hat_down_press_(false), |
| 110 mapper_(GetGamepadMapper(devinfo.vendor_id(), devinfo.product_id())), | 110 mapper_(GetGamepadMapper(devinfo)), |
| 111 input_device_fd_(std::move(fd)), | 111 input_device_fd_(std::move(fd)), |
| 112 dispatcher_(dispatcher) { | 112 dispatcher_(dispatcher) { |
| 113 input_absinfo abs_info; | 113 input_absinfo abs_info; |
| 114 GamepadEventType mapped_type; | 114 GamepadEventType mapped_type; |
| 115 uint16_t mapped_code; | 115 uint16_t mapped_code; |
| 116 // In order to map gamepad, we have to save the abs_info from device_info | 116 // In order to map gamepad, we have to save the abs_info from device_info |
| 117 // and get the gamepad_mapping. | 117 // and get the gamepad_mapping. |
| 118 for (int code = 0; code < ABS_CNT; ++code) { | 118 for (int code = 0; code < ABS_CNT; ++code) { |
| 119 abs_info = devinfo.GetAbsInfoByCode(code); | 119 abs_info = devinfo.GetAbsInfoByCode(code); |
| 120 if (devinfo.HasAbsEvent(code)) { | 120 if (devinfo.HasAbsEvent(code)) { |
| 121 // If fuzz was reported as zero, it will be set to flat * 0.25f. It is | 121 // If fuzz was reported as zero, it will be set to flat * 0.25f. It is |
| 122 // the same thing done in Android InputReader.cpp. See: | 122 // the same thing done in Android InputReader.cpp. See: |
| 123 // frameworks/native/services/inputflinger/InputReader.cpp line 6988 for | 123 // frameworks/native/services/inputflinger/InputReader.cpp line 6988 for |
| 124 // more details. | 124 // more details. |
| 125 if (abs_info.fuzz == 0) { | 125 if (abs_info.fuzz == 0) { |
| 126 abs_info.fuzz = abs_info.flat * 0.25f; | 126 abs_info.fuzz = abs_info.flat * 0.25f; |
| 127 } | 127 } |
| 128 mapper_(EV_ABS, code, &mapped_type, &mapped_code); | 128 (*mapper_)(EV_ABS, code, &mapped_type, &mapped_code); |
| 129 axes_[code] = Axis(abs_info, mapped_type, mapped_code); | 129 axes_[code] = Axis(abs_info, mapped_type, mapped_code); |
| 130 } | 130 } |
| 131 } | 131 } |
| 132 } | 132 } |
| 133 | 133 |
| 134 GamepadEventConverterEvdev::~GamepadEventConverterEvdev() { | 134 GamepadEventConverterEvdev::~GamepadEventConverterEvdev() { |
| 135 DCHECK(!enabled_); | 135 DCHECK(!enabled_); |
| 136 delete mapper_; |
| 136 } | 137 } |
| 137 | 138 |
| 138 bool GamepadEventConverterEvdev::HasGamepad() const { | 139 bool GamepadEventConverterEvdev::HasGamepad() const { |
| 139 return true; | 140 return true; |
| 140 } | 141 } |
| 141 | 142 |
| 142 void GamepadEventConverterEvdev::OnFileCanReadWithoutBlocking(int fd) { | 143 void GamepadEventConverterEvdev::OnFileCanReadWithoutBlocking(int fd) { |
| 143 TRACE_EVENT1("evdev", | 144 TRACE_EVENT1("evdev", |
| 144 "GamepadEventConverterEvdev::OnFileCanReadWithoutBlocking", "fd", | 145 "GamepadEventConverterEvdev::OnFileCanReadWithoutBlocking", "fd", |
| 145 fd); | 146 fd); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 } | 184 } |
| 184 } | 185 } |
| 185 | 186 |
| 186 void GamepadEventConverterEvdev::ProcessEvdevKey( | 187 void GamepadEventConverterEvdev::ProcessEvdevKey( |
| 187 uint16_t code, | 188 uint16_t code, |
| 188 uint16_t value, | 189 uint16_t value, |
| 189 const base::TimeTicks& timestamp) { | 190 const base::TimeTicks& timestamp) { |
| 190 GamepadEventType mapped_type; | 191 GamepadEventType mapped_type; |
| 191 uint16_t mapped_code; | 192 uint16_t mapped_code; |
| 192 | 193 |
| 193 bool found_map = mapper_(EV_KEY, code, &mapped_type, &mapped_code); | 194 bool found_map = (*mapper_)(EV_KEY, code, &mapped_type, &mapped_code); |
| 194 | 195 |
| 195 // If we cannot find a map for this event, it will be discarded. | 196 // If we cannot find a map for this event, it will be discarded. |
| 196 if (!found_map) { | 197 if (!found_map) { |
| 197 return; | 198 return; |
| 198 } | 199 } |
| 199 | 200 |
| 200 // If it's btn -> btn mapping, we can send the event and return now. | 201 // If it's btn -> btn mapping, we can send the event and return now. |
| 201 OnButtonChange(mapped_code, value, timestamp); | 202 OnButtonChange(mapped_code, value, timestamp); |
| 202 } | 203 } |
| 203 | 204 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 | 309 |
| 309 void GamepadEventConverterEvdev::OnSync(const base::TimeTicks& timestamp) { | 310 void GamepadEventConverterEvdev::OnSync(const base::TimeTicks& timestamp) { |
| 310 if (will_send_frame_) { | 311 if (will_send_frame_) { |
| 311 GamepadEvent event(input_device_.id, GamepadEventType::FRAME, 0, 0, | 312 GamepadEvent event(input_device_.id, GamepadEventType::FRAME, 0, 0, |
| 312 timestamp); | 313 timestamp); |
| 313 dispatcher_->DispatchGamepadEvent(event); | 314 dispatcher_->DispatchGamepadEvent(event); |
| 314 will_send_frame_ = false; | 315 will_send_frame_ = false; |
| 315 } | 316 } |
| 316 } | 317 } |
| 317 } // namespace ui | 318 } // namespace ui |
| OLD | NEW |