1/*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef LIBINPUT_INTERFACE_H
17#define LIBINPUT_INTERFACE_H
18
19#include <memory>
20#include <string>
21
22#include "libinput.h"
23
24struct udev_device {
25    uint32_t tags;
26};
27
28struct libinput_device {
29    struct udev_device udevDev;
30    unsigned int busType;
31    unsigned int version;
32    unsigned int product;
33    unsigned int vendor;
34    std::string name;
35};
36
37struct libinput_event {
38    uint64_t time;
39    enum libinput_event_type type;
40    libinput_device dev;
41};
42
43struct libinput_event_pointer {
44    struct libinput_event base;
45    enum libinput_button_state buttonState;
46};
47
48struct libinput_event_keyboard {
49    struct libinput_event base;
50    uint32_t key;
51    enum libinput_key_state keyState;
52};
53
54struct libinput_event_tablet_tool {
55    struct libinput_event base;
56    enum libinput_tablet_tool_tip_state tipState;
57};
58
59struct libinput_tablet_tool {
60    struct libinput_event_tablet_tool base;
61    enum libinput_tablet_tool_type toolType;
62};
63
64struct libinput_event_touch {
65    struct libinput_event base;
66    int32_t seatSlot;
67    int32_t longAxis;
68    int32_t shortAxis;
69    int32_t toolType;
70    double x;
71    double y;
72    double pressure;
73    double toolX;
74    double toolY;
75    double toolWidth;
76    double toolHeight;
77};
78
79struct device_coords {
80    int32_t x;
81    int32_t y;
82};
83
84constexpr uint32_t N_GESTURE_DEVICE_COORDS { 5 };
85
86struct libinput_event_gesture {
87    struct libinput_event base;
88    double scale;
89    double angle;
90    struct device_coords coords[N_GESTURE_DEVICE_COORDS];
91};
92
93
94namespace OHOS {
95namespace MMI {
96
97class LibinputInterface {
98public:
99    LibinputInterface();
100    virtual ~LibinputInterface() = default;
101
102    virtual enum libinput_event_type GetEventType(struct libinput_event *event) = 0;
103    virtual struct libinput_device* GetDevice(struct libinput_event *event) = 0;
104    virtual uint64_t GetSensorTime(struct libinput_event *event) = 0;
105    virtual struct libinput_event_touch* GetTouchEvent(struct libinput_event *event) = 0;
106    virtual struct libinput_event_tablet_tool* GetTabletToolEvent(struct libinput_event *event) = 0;
107    virtual struct libinput_event_gesture* GetGestureEvent(struct libinput_event *event) = 0;
108    virtual struct libinput_tablet_tool* TabletToolGetTool(struct libinput_event_tablet_tool *event) = 0;
109    virtual enum libinput_tablet_tool_tip_state TabletToolGetTipState(struct libinput_event_tablet_tool *event) = 0;
110    virtual enum libinput_tablet_tool_type TabletToolGetType(struct libinput_tablet_tool *tool) = 0;
111    virtual enum libinput_pointer_axis_source GetAxisSource(struct libinput_event_pointer *event) = 0;
112    virtual struct libinput_event_pointer* LibinputGetPointerEvent(struct libinput_event *event) = 0;
113    virtual int32_t TabletToolGetToolType(struct libinput_event_tablet_tool *event) = 0;
114    virtual double TabletToolGetTiltX(struct libinput_event_tablet_tool *event) = 0;
115    virtual double TabletToolGetTiltY(struct libinput_event_tablet_tool *event) = 0;
116    virtual uint64_t TabletToolGetTimeUsec(struct libinput_event_tablet_tool *event) = 0;
117    virtual double TabletToolGetPressure(struct libinput_event_tablet_tool *event) = 0;
118    virtual uint64_t TouchEventGetTime(struct libinput_event_touch *event) = 0;
119    virtual int32_t TouchEventGetSeatSlot(struct libinput_event_touch *event) = 0;
120    virtual double TouchEventGetPressure(struct libinput_event_touch* event) = 0;
121    virtual int32_t TouchEventGetMoveFlag(struct libinput_event_touch* event) = 0;
122    virtual int32_t TouchEventGetContactLongAxis(struct libinput_event_touch *event) = 0;
123    virtual int32_t TouchEventGetContactShortAxis(struct libinput_event_touch *event) = 0;
124    virtual int32_t TouchEventGetToolType(struct libinput_event_touch *event) = 0;
125    virtual int TouchEventGetBtnToolTypeDown(struct libinput_device *device, int32_t btnToolType) = 0;
126    virtual uint32_t GestureEventGetTime(struct libinput_event_gesture *event) = 0;
127    virtual int GestureEventGetFingerCount(struct libinput_event_gesture *event) = 0;
128    virtual int GestureEventGetDevCoordsX(struct libinput_event_gesture *event, uint32_t idx) = 0;
129    virtual int GestureEventGetDevCoordsY(struct libinput_event_gesture *event, uint32_t idx) = 0;
130    virtual uint32_t PointerEventGetFingerCount(struct libinput_event_pointer *event) = 0;
131    virtual double PointerGetDxUnaccelerated(struct libinput_event_pointer *event) = 0;
132    virtual double PointerGetDyUnaccelerated(struct libinput_event_pointer *event) = 0;
133    virtual uint32_t PointerGetButton(struct libinput_event_pointer *event) = 0;
134    virtual int PointerHasAxis(struct libinput_event_pointer *event, enum libinput_pointer_axis axis) = 0;
135    virtual double PointerGetAxisValue(struct libinput_event_pointer *event, enum libinput_pointer_axis axis) = 0;
136    virtual struct libinput_event_touch* GetTouchpadEvent(struct libinput_event *event) = 0;
137    virtual int32_t TouchpadGetTool(struct libinput_event_touch *event) = 0;
138    virtual char* DeviceGetName(struct libinput_device *device) = 0;
139    virtual struct libinput_event_keyboard* LibinputEventGetKeyboardEvent (struct libinput_event *event) = 0;
140    virtual uint32_t LibinputEventKeyboardGetKey (struct libinput_event_keyboard *event) = 0;
141    virtual enum libinput_key_state LibinputEventKeyboardGetKeyState (struct libinput_event_keyboard *event) = 0;
142};
143} // namespace MMI
144} // namespace OHOS
145#endif // LIBINPUT_INTERFACE_H