1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License")
4 {}
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 #include "libinput_interface.h"
18 
19 namespace {
20 OHOS::MMI::LibinputInterface *g_instance = nullptr;
21 } // namespace
22 
23 namespace OHOS {
24 namespace MMI {
25 
LibinputInterface()26 LibinputInterface::LibinputInterface()
27 {
28     g_instance = this;
29 }
30 } // namespace MMI
31 } // namespace OHOS
32 
33 extern "C" {
libinput_event_get_type(struct libinput_event * event)34 enum libinput_event_type libinput_event_get_type(struct libinput_event *event)
35 {
36     return g_instance->GetEventType(event);
37 }
38 
libinput_event_tablet_tool_get_tip_state(struct libinput_event_tablet_tool * event)39 enum libinput_tablet_tool_tip_state libinput_event_tablet_tool_get_tip_state(struct libinput_event_tablet_tool *event)
40 {
41     return g_instance->TabletToolGetTipState(event);
42 }
43 
libinput_event_tablet_tool_get_tilt_x(struct libinput_event_tablet_tool * event)44 double libinput_event_tablet_tool_get_tilt_x(struct libinput_event_tablet_tool *event)
45 {
46     return g_instance->TabletToolGetTiltX(event);
47 }
48 
libinput_event_pointer_get_axis_source(struct libinput_event_pointer * event)49 enum libinput_pointer_axis_source libinput_event_pointer_get_axis_source(struct libinput_event_pointer *event)
50 {
51     return g_instance->GetAxisSource(event);
52 }
53 
libinput_event_tablet_tool_get_tilt_y(struct libinput_event_tablet_tool * event)54 double libinput_event_tablet_tool_get_tilt_y(struct libinput_event_tablet_tool *event)
55 {
56     return g_instance->TabletToolGetTiltY(event);
57 }
58 
libinput_event_tablet_tool_get_time_usec(struct libinput_event_tablet_tool * event)59 uint64_t libinput_event_tablet_tool_get_time_usec(struct libinput_event_tablet_tool *event)
60 {
61     return g_instance->TabletToolGetTimeUsec(event);
62 }
63 
libinput_event_tablet_tool_get_pressure(struct libinput_event_tablet_tool * event)64 double libinput_event_tablet_tool_get_pressure(struct libinput_event_tablet_tool *event)
65 {
66     return g_instance->TabletToolGetPressure(event);
67 }
68 
libinput_event_tablet_tool_get_tool_type(struct libinput_event_tablet_tool * event)69 int32_t libinput_event_tablet_tool_get_tool_type(struct libinput_event_tablet_tool *event)
70 {
71     return g_instance->TabletToolGetToolType(event);
72 }
73 
libinput_tablet_tool_get_type(struct libinput_tablet_tool * tool)74 enum libinput_tablet_tool_type libinput_tablet_tool_get_type(struct libinput_tablet_tool *tool)
75 {
76     return g_instance->TabletToolGetType(tool);
77 }
78 
libinput_event_tablet_tool_get_tool(struct libinput_event_tablet_tool * event)79 struct libinput_tablet_tool* libinput_event_tablet_tool_get_tool(struct libinput_event_tablet_tool *event)
80 {
81     return g_instance->TabletToolGetTool(event);
82 }
83 
libinput_event_get_device(struct libinput_event * event)84 struct libinput_device* libinput_event_get_device(struct libinput_event *event)
85 {
86     return g_instance->GetDevice(event);
87 }
88 
libinput_event_get_sensortime(struct libinput_event * event)89 uint64_t libinput_event_get_sensortime(struct libinput_event *event)
90 {
91     return g_instance->GetSensorTime(event);
92 }
93 
libinput_event_get_keyboard_event(struct libinput_event * event)94 struct libinput_event_keyboard* libinput_event_get_keyboard_event(struct libinput_event *event)
95 {
96     return g_instance->LibinputEventGetKeyboardEvent(event);
97 }
98 
libinput_event_get_pointer_event(struct libinput_event * event)99 struct libinput_event_pointer* libinput_event_get_pointer_event(struct libinput_event *event)
100 {
101     return g_instance->LibinputGetPointerEvent(event);
102 }
103 
libinput_event_get_touch_event(struct libinput_event * event)104 struct libinput_event_touch* libinput_event_get_touch_event(struct libinput_event *event)
105 {
106     return g_instance->GetTouchEvent(event);
107 }
108 
libinput_event_get_touchpad_event(struct libinput_event * event)109 struct libinput_event_touch* libinput_event_get_touchpad_event(struct libinput_event *event)
110 {
111     return g_instance->GetTouchpadEvent(event);
112 }
113 
libinput_event_get_gesture_event(struct libinput_event * event)114 struct libinput_event_gesture* libinput_event_get_gesture_event(struct libinput_event *event)
115 {
116     return g_instance->GetGestureEvent(event);
117 }
118 
libinput_event_get_tablet_tool_event(struct libinput_event * event)119 struct libinput_event_tablet_tool* libinput_event_get_tablet_tool_event(struct libinput_event *event)
120 {
121     return g_instance->GetTabletToolEvent(event);
122 }
123 
libinput_event_keyboard_get_time_usec(struct libinput_event_keyboard * event)124 uint64_t libinput_event_keyboard_get_time_usec(struct libinput_event_keyboard *event)
125 {
126     return (event != nullptr ? event->base.time : 0);
127 }
128 
libinput_event_keyboard_get_key(struct libinput_event_keyboard * event)129 uint32_t libinput_event_keyboard_get_key(struct libinput_event_keyboard *event)
130 {
131     return g_instance->LibinputEventKeyboardGetKey(event);
132 }
133 
libinput_device_keyboard_has_key(struct libinput_device * device,uint32_t code)134 int libinput_device_keyboard_has_key(struct libinput_device *device, uint32_t code)
135 {
136     return 0;
137 }
138 
libinput_event_keyboard_get_key_state(struct libinput_event_keyboard * event)139 enum libinput_key_state libinput_event_keyboard_get_key_state(struct libinput_event_keyboard *event)
140 {
141     return g_instance->LibinputEventKeyboardGetKeyState(event);
142 }
143 
libinput_event_pointer_get_button_state(struct libinput_event_pointer * event)144 enum libinput_button_state libinput_event_pointer_get_button_state(struct libinput_event_pointer *event)
145 {
146     return (event != nullptr ? event->buttonState : LIBINPUT_BUTTON_STATE_RELEASED);
147 }
148 
libinput_event_touch_get_time_usec(struct libinput_event_touch * event)149 uint64_t libinput_event_touch_get_time_usec(struct libinput_event_touch *event)
150 {
151     return g_instance->TouchEventGetTime(event);
152 }
153 
libinput_event_touch_get_seat_slot(struct libinput_event_touch * event)154 int32_t libinput_event_touch_get_seat_slot(struct libinput_event_touch *event)
155 {
156     return g_instance->TouchEventGetSeatSlot(event);
157 }
158 
libinput_event_touch_get_pressure(struct libinput_event_touch * event)159 double libinput_event_touch_get_pressure(struct libinput_event_touch* event)
160 {
161     return g_instance->TouchEventGetPressure(event);
162 }
163 
libinput_event_get_touch_contact_long_axis(struct libinput_event_touch * event)164 int32_t libinput_event_get_touch_contact_long_axis(struct libinput_event_touch *event)
165 {
166     return g_instance->TouchEventGetContactLongAxis(event);
167 }
168 
libinput_event_get_touch_contact_short_axis(struct libinput_event_touch * event)169 int32_t libinput_event_get_touch_contact_short_axis(struct libinput_event_touch *event)
170 {
171     return g_instance->TouchEventGetContactShortAxis(event);
172 }
173 
libinput_event_touch_get_tool_type(struct libinput_event_touch * event)174 int32_t libinput_event_touch_get_tool_type(struct libinput_event_touch *event)
175 {
176     return g_instance->TouchEventGetToolType(event);
177 }
178 
libinput_device_touch_btn_tool_type_down(struct libinput_device * device,int32_t btnToolType)179 int libinput_device_touch_btn_tool_type_down(struct libinput_device *device, int32_t btnToolType)
180 {
181     return g_instance->TouchEventGetBtnToolTypeDown(device, btnToolType);
182 }
183 
libinput_event_touch_get_x_transformed(struct libinput_event_touch * event,uint32_t width)184 double libinput_event_touch_get_x_transformed(struct libinput_event_touch *event, uint32_t width)
185 {
186     return -1.0;
187 }
188 
libinput_event_touch_get_y_transformed(struct libinput_event_touch * event,uint32_t height)189 double libinput_event_touch_get_y_transformed(struct libinput_event_touch *event, uint32_t height)
190 {
191     return -1.0;
192 }
193 
libinput_event_touch_get_tool_x_transformed(struct libinput_event_touch * event,uint32_t width)194 double libinput_event_touch_get_tool_x_transformed(struct libinput_event_touch *event, uint32_t width)
195 {
196     return -1.0;
197 }
198 
libinput_event_touch_get_tool_y_transformed(struct libinput_event_touch * event,uint32_t height)199 double libinput_event_touch_get_tool_y_transformed(struct libinput_event_touch *event, uint32_t height)
200 {
201     return -1.0;
202 }
203 
libinput_event_touch_get_tool_width_transformed(struct libinput_event_touch * event,uint32_t width)204 double libinput_event_touch_get_tool_width_transformed(struct libinput_event_touch *event, uint32_t width)
205 {
206     return -1.0;
207 }
208 
libinput_event_touch_get_tool_height_transformed(struct libinput_event_touch * event,uint32_t height)209 double libinput_event_touch_get_tool_height_transformed(struct libinput_event_touch *event, uint32_t height)
210 {
211     return -1.0;
212 }
213 
libinput_event_tablet_tool_get_x_transformed(struct libinput_event_tablet_tool * event,uint32_t width)214 double libinput_event_tablet_tool_get_x_transformed(struct libinput_event_tablet_tool *event, uint32_t width)
215 {
216     return -1.0;
217 }
218 
libinput_event_tablet_tool_get_y_transformed(struct libinput_event_tablet_tool * event,uint32_t height)219 double libinput_event_tablet_tool_get_y_transformed(struct libinput_event_tablet_tool *event, uint32_t height)
220 {
221     return -1.0;
222 }
223 
libinput_event_touchpad_get_time_usec(struct libinput_event_touch * event)224 uint64_t libinput_event_touchpad_get_time_usec(struct libinput_event_touch *event)
225 {
226     return (event != nullptr ? event->base.time : 0);
227 }
228 
libinput_event_touchpad_get_seat_slot(struct libinput_event_touch * event)229 int32_t libinput_event_touchpad_get_seat_slot(struct libinput_event_touch *event)
230 {
231     return (event != nullptr ? event->seatSlot : 0);
232 }
233 
libinput_event_touchpad_get_x(struct libinput_event_touch * event)234 double libinput_event_touchpad_get_x(struct libinput_event_touch *event)
235 {
236     return (event != nullptr ? event->x : 0.0);
237 }
238 
libinput_event_touchpad_get_y(struct libinput_event_touch * event)239 double libinput_event_touchpad_get_y(struct libinput_event_touch *event)
240 {
241     return (event != nullptr ? event->y : 0.0);
242 }
243 
libinput_event_touchpad_get_pressure(struct libinput_event_touch * event)244 double libinput_event_touchpad_get_pressure(struct libinput_event_touch *event)
245 {
246     return (event != nullptr ? event->pressure : 0.0);
247 }
248 
libinput_event_touchpad_get_touch_contact_long_axis(struct libinput_event_touch * event)249 int32_t libinput_event_touchpad_get_touch_contact_long_axis(struct libinput_event_touch *event)
250 {
251     return (event != nullptr ? event->longAxis : 0);
252 }
253 
libinput_event_touchpad_get_touch_contact_short_axis(struct libinput_event_touch * event)254 int32_t libinput_event_touchpad_get_touch_contact_short_axis(struct libinput_event_touch *event)
255 {
256     return (event != nullptr ? event->shortAxis : 0);
257 }
258 
libinput_event_touchpad_get_tool_type(struct libinput_event_touch * event)259 int32_t libinput_event_touchpad_get_tool_type(struct libinput_event_touch *event)
260 {
261     return g_instance->TouchpadGetTool(event);
262 }
263 
libinput_device_touchpad_btn_tool_type_down(struct libinput_device * device,int32_t btnToolType)264 int32_t libinput_device_touchpad_btn_tool_type_down(struct libinput_device *device, int32_t btnToolType)
265 {
266     return -1;
267 }
268 
libinput_event_touchpad_get_tool_x(struct libinput_event_touch * event)269 double libinput_event_touchpad_get_tool_x(struct libinput_event_touch *event)
270 {
271     return (event != nullptr ? event->toolX : 0.0);
272 }
273 
libinput_event_touchpad_get_tool_y(struct libinput_event_touch * event)274 double libinput_event_touchpad_get_tool_y(struct libinput_event_touch *event)
275 {
276     return (event != nullptr ? event->toolY : 0.0);
277 }
278 
libinput_event_touchpad_get_tool_width(struct libinput_event_touch * event)279 double libinput_event_touchpad_get_tool_width(struct libinput_event_touch *event)
280 {
281     return (event != nullptr ? event->toolWidth : 0.0);
282 }
283 
libinput_event_touchpad_get_tool_height(struct libinput_event_touch * event)284 double libinput_event_touchpad_get_tool_height(struct libinput_event_touch *event)
285 {
286     return (event != nullptr ? event->toolWidth : 0.0);
287 }
288 
libinput_event_gesture_get_time(struct libinput_event_gesture * event)289 uint32_t libinput_event_gesture_get_time(struct libinput_event_gesture *event)
290 {
291     return g_instance->GestureEventGetTime(event);
292 }
293 
libinput_event_gesture_get_finger_count(struct libinput_event_gesture * event)294 int libinput_event_gesture_get_finger_count(struct libinput_event_gesture *event)
295 {
296     return g_instance->GestureEventGetFingerCount(event);
297 }
298 
libinput_event_gesture_get_scale(struct libinput_event_gesture * event)299 double libinput_event_gesture_get_scale(struct libinput_event_gesture *event)
300 {
301     return (event != nullptr ? static_cast<uint32_t>(event->scale) : 1.0);
302 }
303 
libinput_event_gesture_get_device_coords_x(struct libinput_event_gesture * event,uint32_t idx)304 int libinput_event_gesture_get_device_coords_x(struct libinput_event_gesture *event, uint32_t idx)
305 {
306     return g_instance->GestureEventGetDevCoordsX(event, idx);
307 }
308 
libinput_event_gesture_get_device_coords_y(struct libinput_event_gesture * event,uint32_t idx)309 int libinput_event_gesture_get_device_coords_y(struct libinput_event_gesture *event, uint32_t idx)
310 {
311     return g_instance->GestureEventGetDevCoordsY(event, idx);
312 }
313 
libinput_has_event_led_type(struct libinput_device * device)314 int libinput_has_event_led_type(struct libinput_device *device)
315 {
316     return 0;
317 }
318 
libinput_device_get_name(struct libinput_device * device)319 const char* libinput_device_get_name(struct libinput_device *device)
320 {
321     return g_instance->DeviceGetName(device);
322 }
323 
libinput_device_get_id_bustype(struct libinput_device * device)324 unsigned int libinput_device_get_id_bustype(struct libinput_device *device)
325 {
326     return (device != nullptr ? device->busType : 0);
327 }
328 
libinput_device_get_id_version(struct libinput_device * device)329 unsigned int libinput_device_get_id_version(struct libinput_device *device)
330 {
331     return (device != nullptr ? device->version : 0);
332 }
333 
libinput_device_get_id_product(struct libinput_device * device)334 unsigned int libinput_device_get_id_product(struct libinput_device *device)
335 {
336     return (device != nullptr ? device->product : 0);
337 }
338 
libinput_device_get_id_vendor(struct libinput_device * device)339 unsigned int libinput_device_get_id_vendor(struct libinput_device *device)
340 {
341     return (device != nullptr ? device->vendor : 0);
342 }
343 
libinput_device_get_phys(struct libinput_device * device)344 const char* libinput_device_get_phys(struct libinput_device* device)
345 {
346     return "";
347 }
348 
libinput_device_get_uniq(struct libinput_device * device)349 const char* libinput_device_get_uniq(struct libinput_device* device)
350 {
351     return "";
352 }
353 
libinput_device_get_sysname(struct libinput_device * device)354 const char* libinput_device_get_sysname(struct libinput_device *device)
355 {
356     return nullptr;
357 }
358 
libinput_device_get_udev_device(struct libinput_device * device)359 struct udev_device* libinput_device_get_udev_device(struct libinput_device *device)
360 {
361     return nullptr;
362 }
363 
libinput_device_get_tags(struct libinput_device * device)364 enum evdev_device_udev_tags libinput_device_get_tags(struct libinput_device* device)
365 {
366     return EVDEV_UDEV_TAG_INPUT;
367 }
368 
libinput_device_has_capability(struct libinput_device * device,enum libinput_device_capability capability)369 int libinput_device_has_capability(struct libinput_device *device, enum libinput_device_capability capability)
370 {
371     return 0;
372 }
373 
libinput_device_has_key(struct libinput_device * device,int32_t keyCode)374 int32_t libinput_device_has_key(struct libinput_device* device, int32_t keyCode)
375 {
376     return 0;
377 }
378 
libinput_device_get_axis_min(struct libinput_device * device,int32_t code)379 int32_t libinput_device_get_axis_min(struct libinput_device* device, int32_t code)
380 {
381     return -1;
382 }
383 
libinput_device_get_axis_max(struct libinput_device * device,int32_t code)384 int32_t libinput_device_get_axis_max(struct libinput_device* device, int32_t code)
385 {
386     return -1;
387 }
388 
libinput_device_get_axis_fuzz(struct libinput_device * device,int32_t code)389 int32_t libinput_device_get_axis_fuzz(struct libinput_device* device, int32_t code)
390 {
391     return -1;
392 }
393 
libinput_device_get_axis_flat(struct libinput_device * device,int32_t code)394 int32_t libinput_device_get_axis_flat(struct libinput_device* device, int32_t code)
395 {
396     return -1;
397 }
398 
libinput_device_get_axis_resolution(struct libinput_device * device,int32_t code)399 int32_t libinput_device_get_axis_resolution(struct libinput_device* device, int32_t code)
400 {
401     return -1;
402 }
403 
libinput_get_funckey_state(struct libinput_device * device,unsigned int code)404 int libinput_get_funckey_state(struct libinput_device *device, unsigned int code)
405 {
406     return 0;
407 }
408 
libinput_event_pointer_get_finger_count(struct libinput_event_pointer * event)409 uint32_t libinput_event_pointer_get_finger_count(struct libinput_event_pointer *event)
410 {
411     return g_instance->PointerEventGetFingerCount(event);
412 }
413 
libinput_event_pointer_get_dx_unaccelerated(struct libinput_event_pointer * event)414 double libinput_event_pointer_get_dx_unaccelerated(struct libinput_event_pointer *event)
415 {
416     return g_instance->PointerGetDxUnaccelerated(event);
417 }
418 
libinput_event_pointer_get_dy_unaccelerated(struct libinput_event_pointer * event)419 double libinput_event_pointer_get_dy_unaccelerated(struct libinput_event_pointer *event)
420 {
421     return g_instance->PointerGetDyUnaccelerated(event);
422 }
423 
libinput_event_pointer_get_button(struct libinput_event_pointer * event)424 uint32_t libinput_event_pointer_get_button(struct libinput_event_pointer *event)
425 {
426     return g_instance->PointerGetButton(event);
427 }
428 
libinput_event_pointer_has_axis(struct libinput_event_pointer * event,enum libinput_pointer_axis axis)429 int libinput_event_pointer_has_axis(struct libinput_event_pointer *event, enum libinput_pointer_axis axis)
430 {
431     return g_instance->PointerHasAxis(event, axis);
432 }
433 
libinput_event_pointer_get_axis_value(struct libinput_event_pointer * event,enum libinput_pointer_axis axis)434 double libinput_event_pointer_get_axis_value(struct libinput_event_pointer *event, enum libinput_pointer_axis axis)
435 {
436     return g_instance->PointerGetAxisValue(event, axis);
437 }
438 } // extern "C"
439