Android-cuttlefish cvd tool
input_connector.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2023 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <memory>
20#include <vector>
21
24
25namespace cuttlefish {
26
28 int32_t id;
29 int32_t x;
30 int32_t y;
31};
32
33// The InputConnector encapsulates the components required to interact with the
34// Android VM. In order to send input events to the guest an EventSink must be
35// instantiated. The event sink should be destroyed when it is known no more
36// events will be delivered through it. Multiple event sinks can exist at the
37// same time and used concurrently.
39 public:
40 class EventSink {
41 public:
42 virtual ~EventSink() = default;
43 virtual Result<void> SendMouseMoveEvent(int x, int y) = 0;
44 virtual Result<void> SendMouseButtonEvent(int button, bool down) = 0;
45 virtual Result<void> SendMouseWheelEvent(int pixels) = 0;
46 virtual Result<void> SendGamepadKeyEvent(int button, bool down) = 0;
47 virtual Result<void> SendGamepadMotionEvent(int code, int value) = 0;
48 virtual Result<void> SendTouchEvent(const std::string& display, int x,
49 int y, bool down) = 0;
51 const std::string& device_label,
52 const std::vector<MultitouchSlot>& slots, bool down) = 0;
53 virtual Result<void> SendKeyboardEvent(uint16_t code, bool down) = 0;
54 virtual Result<void> SendRotaryEvent(int pixels) = 0;
55 virtual Result<void> SendSwitchesEvent(uint16_t code, bool state) = 0;
56 };
57
58 virtual ~InputConnector() = default;
59
60 virtual std::unique_ptr<EventSink> CreateSink() = 0;
61};
62
64
66 public:
67 explicit InputConnectorBuilder();
72
73 void WithMultitouchDevice(const std::string& device_label, SharedFD conn);
74 void WithTouchDevice(const std::string& device_label, SharedFD conn);
75 void WithKeyboard(SharedFD conn);
76 void WithSwitches(SharedFD conn);
77 void WithRotary(SharedFD conn);
78 void WithMouse(SharedFD conn);
79 void WithGamepad(SharedFD conn);
80 // This object becomes invalid after calling Build(), the rvalue reference
81 // makes it explicit that it shouldn't be used after.
82 std::unique_ptr<InputConnector> Build() &&;
83
84 private:
85 std::unique_ptr<InputConnectorImpl> connector_;
86};
87
88} // namespace cuttlefish
89
Definition: expected.h:86
Definition: input_connector.h:65
InputConnectorBuilder()
Definition: input_connector.cpp:181
void WithMouse(SharedFD conn)
Definition: input_connector.cpp:221
void WithMultitouchDevice(const std::string &device_label, SharedFD conn)
Definition: input_connector.cpp:186
void WithRotary(SharedFD conn)
Definition: input_connector.cpp:216
void WithSwitches(SharedFD conn)
Definition: input_connector.cpp:211
std::unique_ptr< InputConnectorImpl > connector_
Definition: input_connector.h:85
void WithKeyboard(SharedFD conn)
Definition: input_connector.cpp:206
InputConnectorBuilder(InputConnectorBuilder &&)=delete
std::unique_ptr< InputConnector > Build() &&
Definition: input_connector.cpp:231
void WithTouchDevice(const std::string &device_label, SharedFD conn)
Definition: input_connector.cpp:196
void WithGamepad(SharedFD conn)
Definition: input_connector.cpp:226
InputConnectorBuilder & operator=(const InputConnectorBuilder &)=delete
InputConnectorBuilder(const InputConnectorBuilder &)=delete
Definition: input_connector.cpp:156
Definition: input_connector.h:40
virtual Result< void > SendSwitchesEvent(uint16_t code, bool state)=0
virtual Result< void > SendTouchEvent(const std::string &display, int x, int y, bool down)=0
virtual Result< void > SendGamepadMotionEvent(int code, int value)=0
virtual Result< void > SendKeyboardEvent(uint16_t code, bool down)=0
virtual Result< void > SendMouseMoveEvent(int x, int y)=0
virtual Result< void > SendGamepadKeyEvent(int button, bool down)=0
virtual Result< void > SendMouseButtonEvent(int button, bool down)=0
virtual Result< void > SendMultiTouchEvent(const std::string &device_label, const std::vector< MultitouchSlot > &slots, bool down)=0
virtual Result< void > SendRotaryEvent(int pixels)=0
virtual Result< void > SendMouseWheelEvent(int pixels)=0
Definition: input_connector.h:38
virtual ~InputConnector()=default
virtual std::unique_ptr< EventSink > CreateSink()=0
Definition: shared_fd.h:129
Definition: alloc_utils.cpp:23
Definition: input_connector.h:27
int32_t y
Definition: input_connector.h:30
int32_t id
Definition: input_connector.h:28
int32_t x
Definition: input_connector.h:29