| /* | 
 |  * Copyright (C) 2022 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */ | 
 |  | 
 | #pragma once | 
 |  | 
 | #include <vector> | 
 |  | 
 | #include <input/Input.h> | 
 | #include <input/InputDevice.h> | 
 | #include <input/TouchVideoFrame.h> | 
 |  | 
 | namespace android { | 
 |  | 
 | /* Describes a configuration change event. */ | 
 | struct NotifyConfigurationChangedArgs { | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     inline NotifyConfigurationChangedArgs() {} | 
 |  | 
 |     NotifyConfigurationChangedArgs(int32_t id, nsecs_t eventTime); | 
 |  | 
 |     bool operator==(const NotifyConfigurationChangedArgs& rhs) const = default; | 
 |  | 
 |     NotifyConfigurationChangedArgs(const NotifyConfigurationChangedArgs& other) = default; | 
 | }; | 
 |  | 
 | /* Describes a key event. */ | 
 | struct NotifyKeyArgs { | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     int32_t deviceId; | 
 |     uint32_t source; | 
 |     int32_t displayId; | 
 |     uint32_t policyFlags; | 
 |     int32_t action; | 
 |     int32_t flags; | 
 |     int32_t keyCode; | 
 |     int32_t scanCode; | 
 |     int32_t metaState; | 
 |     nsecs_t downTime; | 
 |     nsecs_t readTime; | 
 |  | 
 |     inline NotifyKeyArgs() {} | 
 |  | 
 |     NotifyKeyArgs(int32_t id, nsecs_t eventTime, nsecs_t readTime, int32_t deviceId, | 
 |                   uint32_t source, int32_t displayId, uint32_t policyFlags, int32_t action, | 
 |                   int32_t flags, int32_t keyCode, int32_t scanCode, int32_t metaState, | 
 |                   nsecs_t downTime); | 
 |  | 
 |     bool operator==(const NotifyKeyArgs& rhs) const = default; | 
 |  | 
 |     NotifyKeyArgs(const NotifyKeyArgs& other) = default; | 
 | }; | 
 |  | 
 | /* Describes a motion event. */ | 
 | struct NotifyMotionArgs { | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     int32_t deviceId; | 
 |     uint32_t source; | 
 |     int32_t displayId; | 
 |     uint32_t policyFlags; | 
 |     int32_t action; | 
 |     int32_t actionButton; | 
 |     int32_t flags; | 
 |     int32_t metaState; | 
 |     int32_t buttonState; | 
 |     /** | 
 |      * Classification of the current touch gesture | 
 |      */ | 
 |     MotionClassification classification; | 
 |     int32_t edgeFlags; | 
 |  | 
 |     uint32_t pointerCount; | 
 |     PointerProperties pointerProperties[MAX_POINTERS]; | 
 |     PointerCoords pointerCoords[MAX_POINTERS]; | 
 |     float xPrecision; | 
 |     float yPrecision; | 
 |     /** | 
 |      * Mouse cursor position when this event is reported relative to the origin of the specified | 
 |      * display. Only valid if this is a mouse event (originates from a mouse or from a trackpad in | 
 |      * gestures enabled mode. | 
 |      */ | 
 |     float xCursorPosition; | 
 |     float yCursorPosition; | 
 |     nsecs_t downTime; | 
 |     nsecs_t readTime; | 
 |     std::vector<TouchVideoFrame> videoFrames; | 
 |  | 
 |     inline NotifyMotionArgs() {} | 
 |  | 
 |     NotifyMotionArgs(int32_t id, nsecs_t eventTime, nsecs_t readTime, int32_t deviceId, | 
 |                      uint32_t source, int32_t displayId, uint32_t policyFlags, int32_t action, | 
 |                      int32_t actionButton, int32_t flags, int32_t metaState, int32_t buttonState, | 
 |                      MotionClassification classification, int32_t edgeFlags, uint32_t pointerCount, | 
 |                      const PointerProperties* pointerProperties, const PointerCoords* pointerCoords, | 
 |                      float xPrecision, float yPrecision, float xCursorPosition, | 
 |                      float yCursorPosition, nsecs_t downTime, | 
 |                      const std::vector<TouchVideoFrame>& videoFrames); | 
 |  | 
 |     NotifyMotionArgs(const NotifyMotionArgs& other); | 
 |  | 
 |     NotifyMotionArgs& operator=(const android::NotifyMotionArgs&) = default; | 
 |  | 
 |     bool operator==(const NotifyMotionArgs& rhs) const; | 
 |  | 
 |     std::string dump() const; | 
 | }; | 
 |  | 
 | /* Describes a sensor event. */ | 
 | struct NotifySensorArgs { | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     int32_t deviceId; | 
 |     uint32_t source; | 
 |     InputDeviceSensorType sensorType; | 
 |     InputDeviceSensorAccuracy accuracy; | 
 |     bool accuracyChanged; | 
 |     nsecs_t hwTimestamp; | 
 |     std::vector<float> values; | 
 |  | 
 |     inline NotifySensorArgs() {} | 
 |  | 
 |     NotifySensorArgs(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32_t source, | 
 |                      InputDeviceSensorType sensorType, InputDeviceSensorAccuracy accuracy, | 
 |                      bool accuracyChanged, nsecs_t hwTimestamp, std::vector<float> values); | 
 |  | 
 |     NotifySensorArgs(const NotifySensorArgs& other) = default; | 
 | }; | 
 |  | 
 | /* Describes a switch event. */ | 
 | struct NotifySwitchArgs { | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     uint32_t policyFlags; | 
 |     uint32_t switchValues; | 
 |     uint32_t switchMask; | 
 |  | 
 |     inline NotifySwitchArgs() {} | 
 |  | 
 |     NotifySwitchArgs(int32_t id, nsecs_t eventTime, uint32_t policyFlags, uint32_t switchValues, | 
 |                      uint32_t switchMask); | 
 |  | 
 |     NotifySwitchArgs(const NotifySwitchArgs& other) = default; | 
 |  | 
 |     bool operator==(const NotifySwitchArgs& rhs) const = default; | 
 | }; | 
 |  | 
 | /* Describes a device reset event, such as when a device is added, | 
 |  * reconfigured, or removed. */ | 
 | struct NotifyDeviceResetArgs { | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     int32_t deviceId; | 
 |  | 
 |     inline NotifyDeviceResetArgs() {} | 
 |  | 
 |     NotifyDeviceResetArgs(int32_t id, nsecs_t eventTime, int32_t deviceId); | 
 |  | 
 |     NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other) = default; | 
 |  | 
 |     bool operator==(const NotifyDeviceResetArgs& rhs) const = default; | 
 | }; | 
 |  | 
 | /* Describes a change in the state of Pointer Capture. */ | 
 | struct NotifyPointerCaptureChangedArgs { | 
 |     // The sequence number of the Pointer Capture request, if enabled. | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     PointerCaptureRequest request; | 
 |  | 
 |     inline NotifyPointerCaptureChangedArgs() {} | 
 |  | 
 |     NotifyPointerCaptureChangedArgs(int32_t id, nsecs_t eventTime, const PointerCaptureRequest&); | 
 |  | 
 |     NotifyPointerCaptureChangedArgs(const NotifyPointerCaptureChangedArgs& other) = default; | 
 | }; | 
 |  | 
 | /* Describes a vibrator state event. */ | 
 | struct NotifyVibratorStateArgs { | 
 |     int32_t id; | 
 |     nsecs_t eventTime; | 
 |  | 
 |     int32_t deviceId; | 
 |     bool isOn; | 
 |  | 
 |     inline NotifyVibratorStateArgs() {} | 
 |  | 
 |     NotifyVibratorStateArgs(int32_t id, nsecs_t eventTIme, int32_t deviceId, bool isOn); | 
 |  | 
 |     NotifyVibratorStateArgs(const NotifyVibratorStateArgs& other) = default; | 
 | }; | 
 |  | 
 | using NotifyArgs = std::variant<NotifyConfigurationChangedArgs, NotifyKeyArgs, NotifyMotionArgs, | 
 |                                 NotifySensorArgs, NotifySwitchArgs, NotifyDeviceResetArgs, | 
 |                                 NotifyPointerCaptureChangedArgs, NotifyVibratorStateArgs>; | 
 |  | 
 | const char* toString(const NotifyArgs& args); | 
 |  | 
 | } // namespace android |