| Index: ui/events/ozone/evdev/event_converter_evdev.cc
|
| diff --git a/ui/events/ozone/evdev/event_converter_evdev.cc b/ui/events/ozone/evdev/event_converter_evdev.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..efee28040edacb3e4f607f111fe64ba89169e306
|
| --- /dev/null
|
| +++ b/ui/events/ozone/evdev/event_converter_evdev.cc
|
| @@ -0,0 +1,142 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <linux/input.h>
|
| +
|
| +#include "ui/events/ozone/evdev/event_converter_evdev.h"
|
| +
|
| +#include "base/files/file_path.h"
|
| +#include "base/logging.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/trace_event/trace_event.h"
|
| +#include "ui/events/devices/input_device.h"
|
| +
|
| +namespace ui {
|
| +
|
| +EventConverterEvdev::EventConverterEvdev(int fd,
|
| + const base::FilePath& path,
|
| + int id,
|
| + InputDeviceType type,
|
| + const std::string& name,
|
| + uint16_t vendor_id,
|
| + uint16_t product_id)
|
| + : fd_(fd),
|
| + path_(path),
|
| + input_device_(id, type, name, vendor_id, product_id) {
|
| +}
|
| +
|
| +EventConverterEvdev::~EventConverterEvdev() {
|
| + DCHECK(!enabled_);
|
| + DCHECK(!watching_);
|
| + if (fd_ >= 0)
|
| + close(fd_);
|
| +}
|
| +
|
| +void EventConverterEvdev::Start() {
|
| + base::MessageLoopForUI::current()->WatchFileDescriptor(
|
| + fd_, true, base::MessagePumpLibevent::WATCH_READ, &controller_, this);
|
| + watching_ = true;
|
| +}
|
| +
|
| +void EventConverterEvdev::Stop() {
|
| + controller_.StopWatchingFileDescriptor();
|
| + watching_ = false;
|
| +}
|
| +
|
| +void EventConverterEvdev::SetEnabled(bool enabled) {
|
| + if (enabled == enabled_)
|
| + return;
|
| + if (enabled) {
|
| + TRACE_EVENT1("evdev", "EventConverterEvdev::OnEnabled", "path",
|
| + path_.value());
|
| + OnEnabled();
|
| + } else {
|
| + TRACE_EVENT1("evdev", "EventConverterEvdev::OnDisabled", "path",
|
| + path_.value());
|
| + OnDisabled();
|
| + }
|
| + enabled_ = enabled;
|
| +}
|
| +
|
| +void EventConverterEvdev::OnStopped() {
|
| +}
|
| +
|
| +void EventConverterEvdev::OnEnabled() {
|
| +}
|
| +
|
| +void EventConverterEvdev::OnDisabled() {
|
| +}
|
| +
|
| +void EventConverterEvdev::OnFileCanWriteWithoutBlocking(int fd) {
|
| + NOTREACHED();
|
| +}
|
| +
|
| +bool EventConverterEvdev::HasKeyboard() const {
|
| + return false;
|
| +}
|
| +
|
| +bool EventConverterEvdev::HasMouse() const {
|
| + return false;
|
| +}
|
| +
|
| +bool EventConverterEvdev::HasTouchpad() const {
|
| + return false;
|
| +}
|
| +
|
| +bool EventConverterEvdev::HasTouchscreen() const {
|
| + return false;
|
| +}
|
| +
|
| +bool EventConverterEvdev::HasCapsLockLed() const {
|
| + return false;
|
| +}
|
| +
|
| +gfx::Size EventConverterEvdev::GetTouchscreenSize() const {
|
| + NOTREACHED();
|
| + return gfx::Size();
|
| +}
|
| +
|
| +int EventConverterEvdev::GetTouchPoints() const {
|
| + NOTREACHED();
|
| + return 0;
|
| +}
|
| +
|
| +void EventConverterEvdev::SetKeyFilter(bool enable_filter,
|
| + std::vector<DomCode> allowed_keys) {
|
| + NOTREACHED();
|
| +}
|
| +
|
| +void EventConverterEvdev::SetCapsLockLed(bool enabled) {
|
| + if (!HasCapsLockLed())
|
| + return;
|
| +
|
| + input_event events[2];
|
| + memset(&events, 0, sizeof(events));
|
| +
|
| + events[0].type = EV_LED;
|
| + events[0].code = LED_CAPSL;
|
| + events[0].value = enabled;
|
| +
|
| + events[1].type = EV_SYN;
|
| + events[1].code = SYN_REPORT;
|
| + events[1].value = 0;
|
| +
|
| + ssize_t written = write(fd_, events, sizeof(events));
|
| +
|
| + if (written < 0) {
|
| + if (errno != ENODEV)
|
| + PLOG(ERROR) << "cannot set leds for " << path_.value() << ":";
|
| + Stop();
|
| + } else if (written != sizeof(events)) {
|
| + LOG(ERROR) << "short write setting leds for " << path_.value();
|
| + Stop();
|
| + }
|
| +}
|
| +
|
| +base::TimeDelta EventConverterEvdev::TimeDeltaFromInputEvent(
|
| + const input_event& event) {
|
| + return base::TimeDelta::FromMicroseconds(event.time.tv_sec * 1000000 +
|
| + event.time.tv_usec);
|
| +}
|
| +} // namespace ui
|
|
|