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 #include <js_native_api.h>
17 #include "napi/native_api.h"
18 #include "native_display_soloist/native_display_soloist.h"
19 #include "hilog/log.h"
20
21 #define SUCCESS 0
22 #define FAIL (-1)
23 #define FRAME_RATE_30_HZ 30
24 #define FRAME_RATE_60_HZ 60
25 #define FRAME_RATE_90_HZ 90
26 #define FRAME_RATE_120_HZ 120
27 #define SLEEP_TIME_US 100000
28 #define EXEC_SUCCESS 0
29 #define SOLOIST_ERROR (-1)
30
OnVSync(long long timestamp,long long targetTimestamp,void * data)31 static void OnVSync(long long timestamp, long long targetTimestamp, void* data)
32 {
33 }
34
OHDisplaySoloistCreate001(napi_env env,napi_callback_info info)35 static napi_value OHDisplaySoloistCreate001(napi_env env, napi_callback_info info)
36 {
37 napi_value result = nullptr;
38 OH_DisplaySoloist *nativeDisplaySoloist = nullptr;
39 nativeDisplaySoloist = OH_DisplaySoloist_Create(false);
40 if (nativeDisplaySoloist != nullptr) {
41 napi_create_int32(env, SUCCESS, &result);
42 } else {
43 napi_create_int32(env, FAIL, &result);
44 }
45 OH_DisplaySoloist_Destroy(nativeDisplaySoloist);
46 return result;
47 }
48
OHDisplaySoloistStart001(napi_env env,napi_callback_info info)49 static napi_value OHDisplaySoloistStart001(napi_env env, napi_callback_info info)
50 {
51 napi_value result = nullptr;
52 OH_DisplaySoloist_FrameCallback callback = OnVSync;
53 int32_t resultStart = OH_DisplaySoloist_Start(nullptr, callback, nullptr);
54 if (resultStart == SOLOIST_ERROR) {
55 napi_create_int32(env, SUCCESS, &result);
56 } else {
57 napi_create_int32(env, FAIL, &result);
58 }
59 return result;
60 }
61
OHDisplaySoloistStart002(napi_env env,napi_callback_info info)62 static napi_value OHDisplaySoloistStart002(napi_env env, napi_callback_info info)
63 {
64 napi_value result = nullptr;
65 OH_DisplaySoloist *nativeDisplaySoloist = nullptr;
66 OH_DisplaySoloist_FrameCallback callback = OnVSync;
67 nativeDisplaySoloist = OH_DisplaySoloist_Create(false);
68 int32_t resultStart = OH_DisplaySoloist_Start(nativeDisplaySoloist, callback, nullptr);
69 if (resultStart == EXEC_SUCCESS) {
70 napi_create_int32(env, SUCCESS, &result);
71 } else {
72 napi_create_int32(env, FAIL, &result);
73 }
74 OH_DisplaySoloist_Destroy(nativeDisplaySoloist);
75 return result;
76 }
77
OHDisplaySoloistSetExpectedFrameRateRange001(napi_env env,napi_callback_info info)78 static napi_value OHDisplaySoloistSetExpectedFrameRateRange001(napi_env env, napi_callback_info info)
79 {
80 napi_value result = nullptr;
81 OH_DisplaySoloist *nativeDisplaySoloist = nullptr;
82 DisplaySoloist_ExpectedRateRange validRange = { FRAME_RATE_30_HZ, FRAME_RATE_120_HZ, FRAME_RATE_60_HZ };
83 nativeDisplaySoloist = OH_DisplaySoloist_Create(false);
84 if ((OH_DisplaySoloist_SetExpectedFrameRateRange(nullptr, &validRange) == SOLOIST_ERROR) ||
85 (OH_DisplaySoloist_SetExpectedFrameRateRange(nativeDisplaySoloist, nullptr) == SOLOIST_ERROR)) {
86 napi_create_int32(env, SUCCESS, &result);
87 } else {
88 napi_create_int32(env, FAIL, &result);
89 }
90 OH_DisplaySoloist_Destroy(nativeDisplaySoloist);
91 return result;
92 }
93
OHDisplaySoloistSetExpectedFrameRateRange002(napi_env env,napi_callback_info info)94 static napi_value OHDisplaySoloistSetExpectedFrameRateRange002(napi_env env, napi_callback_info info)
95 {
96 napi_value result = nullptr;
97 DisplaySoloist_ExpectedRateRange invalidRange = { FRAME_RATE_30_HZ, FRAME_RATE_90_HZ, FRAME_RATE_120_HZ };
98 int32_t resultRange = OH_DisplaySoloist_SetExpectedFrameRateRange(nullptr, &invalidRange);
99 if (resultRange == SOLOIST_ERROR) {
100 napi_create_int32(env, SUCCESS, &result);
101 } else {
102 napi_create_int32(env, FAIL, &result);
103 }
104 return result;
105 }
106
OHDisplaySoloistSetExpectedFrameRateRange003(napi_env env,napi_callback_info info)107 static napi_value OHDisplaySoloistSetExpectedFrameRateRange003(napi_env env, napi_callback_info info)
108 {
109 napi_value result = nullptr;
110 OH_DisplaySoloist *nativeDisplaySoloist = nullptr;
111 DisplaySoloist_ExpectedRateRange validRange = { FRAME_RATE_30_HZ, FRAME_RATE_120_HZ, FRAME_RATE_60_HZ };
112 nativeDisplaySoloist = OH_DisplaySoloist_Create(false);
113 int32_t resultRange = OH_DisplaySoloist_SetExpectedFrameRateRange(nativeDisplaySoloist, &validRange);
114 if (resultRange == EXEC_SUCCESS) {
115 napi_create_int32(env, SUCCESS, &result);
116 } else {
117 napi_create_int32(env, FAIL, &result);
118 }
119 OH_DisplaySoloist_Destroy(nativeDisplaySoloist);
120 return result;
121 }
122
OHDisplaySoloistStop001(napi_env env,napi_callback_info info)123 static napi_value OHDisplaySoloistStop001(napi_env env, napi_callback_info info)
124 {
125 napi_value result = nullptr;
126 int32_t resultStop = OH_DisplaySoloist_Stop(nullptr);
127 if (resultStop == SOLOIST_ERROR) {
128 napi_create_int32(env, SUCCESS, &result);
129 } else {
130 napi_create_int32(env, FAIL, &result);
131 }
132 return result;
133 }
134
OHDisplaySoloistStop002(napi_env env,napi_callback_info info)135 static napi_value OHDisplaySoloistStop002(napi_env env, napi_callback_info info)
136 {
137 napi_value result = nullptr;
138 OH_DisplaySoloist *nativeDisplaySoloist = nullptr;
139 nativeDisplaySoloist = OH_DisplaySoloist_Create(false);
140 int32_t resultStop = OH_DisplaySoloist_Stop(nativeDisplaySoloist);
141 if (resultStop == EXEC_SUCCESS) {
142 napi_create_int32(env, SUCCESS, &result);
143 } else {
144 napi_create_int32(env, FAIL, &result);
145 }
146 OH_DisplaySoloist_Destroy(nativeDisplaySoloist);
147 return result;
148 }
149
OHDisplaySoloistDestroy001(napi_env env,napi_callback_info info)150 static napi_value OHDisplaySoloistDestroy001(napi_env env, napi_callback_info info)
151 {
152 napi_value result = nullptr;
153 int32_t resultDestroy = OH_DisplaySoloist_Destroy(nullptr);
154 if (resultDestroy == SOLOIST_ERROR) {
155 napi_create_int32(env, SUCCESS, &result);
156 } else {
157 napi_create_int32(env, FAIL, &result);
158 }
159 return result;
160 }
161
OHDisplaySoloistDestroy002(napi_env env,napi_callback_info info)162 static napi_value OHDisplaySoloistDestroy002(napi_env env, napi_callback_info info)
163 {
164 napi_value result = nullptr;
165 OH_DisplaySoloist *nativeDisplaySoloist = nullptr;
166 nativeDisplaySoloist = OH_DisplaySoloist_Create(false);
167 int32_t resultDestroy = OH_DisplaySoloist_Destroy(nativeDisplaySoloist);
168 if (resultDestroy == EXEC_SUCCESS) {
169 napi_create_int32(env, SUCCESS, &result);
170 } else {
171 napi_create_int32(env, FAIL, &result);
172 }
173 return result;
174 }
175
176 EXTERN_C_START
Init(napi_env env,napi_value exports)177 static napi_value Init(napi_env env, napi_value exports)
178 {
179 napi_property_descriptor desc[] = {
180 {"oHDisplaySoloistCreate001", nullptr, OHDisplaySoloistCreate001,
181 nullptr, nullptr, nullptr, napi_default, nullptr},
182 {"oHDisplaySoloistStart001", nullptr, OHDisplaySoloistStart001,
183 nullptr, nullptr, nullptr, napi_default, nullptr},
184 {"oHDisplaySoloistStart002", nullptr, OHDisplaySoloistStart002,
185 nullptr, nullptr, nullptr, napi_default, nullptr},
186 {"oHDisplaySoloistSetExpectedFrameRateRange001", nullptr, OHDisplaySoloistSetExpectedFrameRateRange001,
187 nullptr, nullptr, nullptr, napi_default, nullptr},
188 {"oHDisplaySoloistSetExpectedFrameRateRange002", nullptr, OHDisplaySoloistSetExpectedFrameRateRange002,
189 nullptr, nullptr, nullptr, napi_default, nullptr},
190 {"oHDisplaySoloistSetExpectedFrameRateRange003", nullptr, OHDisplaySoloistSetExpectedFrameRateRange003,
191 nullptr, nullptr, nullptr, napi_default, nullptr},
192 {"oHDisplaySoloistStop001", nullptr, OHDisplaySoloistStop001,
193 nullptr, nullptr, nullptr, napi_default, nullptr},
194 {"oHDisplaySoloistStop002", nullptr, OHDisplaySoloistStop002,
195 nullptr, nullptr, nullptr, napi_default, nullptr},
196 {"oHDisplaySoloistDestroy001", nullptr, OHDisplaySoloistDestroy001,
197 nullptr, nullptr, nullptr, napi_default, nullptr},
198 {"oHDisplaySoloistDestroy002", nullptr, OHDisplaySoloistDestroy002,
199 nullptr, nullptr, nullptr, napi_default, nullptr},
200 };
201 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
202 return exports;
203 }
204
205 EXTERN_C_END
206
207 static napi_module demoModule = {
208 .nm_version = 1,
209 .nm_flags = 0,
210 .nm_filename = nullptr,
211 .nm_register_func = Init,
212 .nm_modname = "nativeDisplaySoloistNdk",
213 .nm_priv = ((void *)0),
214 .reserved = {0},
215 };
216
RegisterEntryModule(void)217 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }