1 /*
2 * Copyright (c) 2025 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 #include "napi/native_api.h"
16 #include "multimodalinput/oh_input_manager.h"
17 #include "multimodalinput/oh_key_code.h"
18 #include "hilog/log.h"
19 #include <bits/alltypes.h>
20 #include <thread>
21 #include <iostream>
22
23 #undef LOG_TAG
24 #define LOG_TAG "MMI"
25
26 const int GLOBAL_RESMGR = 0xFF00;
27 const char *TAG = "[SensorCapiSample]";
28
QueryMaxTouchPoints1(napi_env env,napi_callback_info info)29 static napi_value QueryMaxTouchPoints1(napi_env env, napi_callback_info info)
30 {
31 napi_value result;
32
33 Input_Result retResult = OH_Input_QueryMaxTouchPoints(nullptr);
34 OH_LOG_INFO(LOG_APP, "SUB_MMI_Input_Api_QueryMaxTouchPoints_0100 retResult:%{public}d", retResult);
35 napi_create_int32(env, (retResult == INPUT_PARAMETER_ERROR) ? 1 : 0, &result);
36 return result;
37 }
38
QueryMaxTouchPoints2(napi_env env,napi_callback_info info)39 static napi_value QueryMaxTouchPoints2(napi_env env, napi_callback_info info)
40 {
41 napi_value result;
42
43 int32_t count;
44 int32_t minCount = -1;
45 int32_t maxCount = 10;
46 Input_Result retResult = OH_Input_QueryMaxTouchPoints(&count);
47 OH_LOG_INFO(LOG_APP, "SUB_MMI_Input_Api_QueryMaxTouchPoints_0200 retResult:%{public}d", retResult);
48 napi_create_int32(env, (retResult == INPUT_SUCCESS && (count >= minCount && count <= maxCount)) ? 1 : 0, &result);
49 return result;
50 }
51
InjectTouchEventGlobal1(napi_env env,napi_callback_info info)52 static napi_value InjectTouchEventGlobal1(napi_env env, napi_callback_info info)
53 {
54 napi_value result;
55
56 struct Input_TouchEvent* touchEvent = OH_Input_CreateTouchEvent();
57 OH_Input_SetTouchEventGlobalX(touchEvent, 100);
58 OH_Input_SetTouchEventGlobalY(touchEvent, 100);
59 OH_Input_SetTouchEventAction(touchEvent, 1);
60 int32_t retResult = OH_Input_InjectTouchEventGlobal(touchEvent);
61 OH_LOG_INFO(LOG_APP, "SUB_MMI_Input_Api_InjectTouchEventGlobal_0100 retResult:%{public}d", retResult);
62 napi_create_int32(env, (touchEvent != nullptr && retResult == INPUT_PERMISSION_DENIED) ? 1 : 0, &result);
63 OH_Input_DestroyTouchEvent(&touchEvent);
64 return result;
65 }
66
InjectTouchEventGlobal2(napi_env env,napi_callback_info info)67 static napi_value InjectTouchEventGlobal2(napi_env env, napi_callback_info info)
68 {
69 napi_value result;
70
71 struct Input_TouchEvent* touchEvent = OH_Input_CreateTouchEvent();
72 OH_Input_SetTouchEventGlobalX(touchEvent, 100);
73 int32_t globalX = OH_Input_GetTouchEventGlobalX(touchEvent);
74 OH_LOG_INFO(LOG_APP, "SUB_MMI_Input_Api_InjectTouchEventGlobal_0200 globalX:%{public}d", globalX);
75 napi_create_int32(env, (touchEvent != nullptr && globalX == 100) ? 1 : 0, &result);
76 OH_Input_DestroyTouchEvent(&touchEvent);
77 return result;
78 }
79
InjectTouchEventGlobal3(napi_env env,napi_callback_info info)80 static napi_value InjectTouchEventGlobal3(napi_env env, napi_callback_info info)
81 {
82 napi_value result;
83
84 struct Input_TouchEvent* touchEvent = OH_Input_CreateTouchEvent();
85 OH_Input_SetTouchEventGlobalY(touchEvent, 100);
86 int32_t globalY = OH_Input_GetTouchEventGlobalY(touchEvent);
87 OH_LOG_INFO(LOG_APP, "SUB_MMI_Input_Api_InjectTouchEventGlobal_0300 globalY:%{public}d", globalY);
88 napi_create_int32(env, (touchEvent != nullptr && globalY == 100) ? 1 : 0, &result);
89 OH_Input_DestroyTouchEvent(&touchEvent);
90 return result;
91 }
92
AxisEventGlobal1(napi_env env,napi_callback_info info)93 static napi_value AxisEventGlobal1(napi_env env, napi_callback_info info)
94 {
95 napi_value result;
96
97 struct Input_AxisEvent* axisEvent = OH_Input_CreateAxisEvent();
98 OH_Input_SetAxisEventGlobalX(axisEvent, 100);
99 int32_t globalX;
100 Input_Result retResult = OH_Input_GetAxisEventGlobalX(axisEvent, &globalX);
101 OH_LOG_INFO(LOG_APP, "SUB_MMI_Input_Api_AxisEventGlobal_0100 retResult:%{public}d", retResult);
102 napi_create_int32(env, (globalX == 100 && retResult == INPUT_SUCCESS) ? 1 : 0, &result);
103 OH_Input_DestroyAxisEvent(&axisEvent);
104 return result;
105 }
106
AxisEventGlobal2(napi_env env,napi_callback_info info)107 static napi_value AxisEventGlobal2(napi_env env, napi_callback_info info)
108 {
109 napi_value result;
110
111 struct Input_AxisEvent* axisEvent = OH_Input_CreateAxisEvent();
112 OH_Input_SetAxisEventGlobalY(axisEvent, 99);
113 int32_t globalY;
114 Input_Result retResult = OH_Input_GetAxisEventGlobalY(axisEvent, &globalY);
115 OH_LOG_INFO(LOG_APP, "SUB_MMI_Input_Api_AxisEventGlobal_0200 retResult:%{public}d", retResult);
116 napi_create_int32(env, (globalY == 99 && retResult == INPUT_SUCCESS) ? 1 : 0, &result);
117 OH_Input_DestroyAxisEvent(&axisEvent);
118 return result;
119 }
120
121 EXTERN_C_START
Init(napi_env env,napi_value exports)122 static napi_value Init(napi_env env, napi_value exports)
123 {
124 napi_property_descriptor desc[] = {
125 {"QueryMaxTouchPoints1", nullptr, QueryMaxTouchPoints1, nullptr, nullptr, nullptr, napi_default, nullptr},
126 {"QueryMaxTouchPoints2", nullptr, QueryMaxTouchPoints2, nullptr, nullptr, nullptr, napi_default, nullptr},
127 {"InjectTouchEventGlobal1", nullptr, InjectTouchEventGlobal1, nullptr, nullptr, nullptr, napi_default, nullptr},
128 {"InjectTouchEventGlobal2", nullptr, InjectTouchEventGlobal2, nullptr, nullptr, nullptr, napi_default, nullptr},
129 {"InjectTouchEventGlobal3", nullptr, InjectTouchEventGlobal3, nullptr, nullptr, nullptr, napi_default, nullptr},
130 {"AxisEventGlobal1", nullptr, AxisEventGlobal1, nullptr, nullptr, nullptr, napi_default, nullptr},
131 {"AxisEventGlobal2", nullptr, AxisEventGlobal2, nullptr, nullptr, nullptr, napi_default, nullptr},
132 };
133 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
134 return exports;
135 }
136 EXTERN_C_END
137
138 static napi_module demoModule = {
139 .nm_version = 1,
140 .nm_flags = 0,
141 .nm_filename = nullptr,
142 .nm_register_func = Init,
143 .nm_modname = "libtouchndk",
144 .nm_priv = ((void *)0),
145 .reserved = {0},
146 };
147
RegisterEntryModule(void)148 extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
149 {
150 napi_module_register(&demoModule);
151 }