1 /*
2 * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development 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 "napi/native_api.h"
17 #include <bits/alltypes.h>
18 #include "nodeapi.h"
19 #include "basesample.h"
20 #include "nadatatypes.h"
21 #include "cjsonsample.h"
22 #include "javascriptapi.h"
23 #include "ncpp/ffmpegcase/manager/plugin_manager.h"
24 #include <iostream>
25 #include <fstream>
26 #include "cJsonNapiH/cjsonnapi.h"
27
Add(napi_env env, napi_callback_info info)28 static napi_value Add(napi_env env, napi_callback_info info)
29 {
30 size_t requireArgc = 2;
31 size_t argc = 2;
32 napi_value args[2] = {nullptr};
33
34 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
35
36 napi_valuetype valuetype0;
37 napi_typeof(env, args[0], &valuetype0);
38
39 napi_valuetype valuetype1;
40 napi_typeof(env, args[1], &valuetype1);
41
42 double value0;
43 napi_get_value_double(env, args[0], &value0);
44
45 double value1;
46 napi_get_value_double(env, args[1], &value1);
47
48 napi_value sum;
49 napi_create_double(env, value0 + value1, &sum);
50
51 return sum;
52 }
53
getTestCase(napi_env env, napi_callback_info info)54 static napi_value getTestCase(napi_env env, napi_callback_info info)
55 {
56 size_t requireArgc = 1;
57 size_t argc = 1;
58 napi_value args[1] = {nullptr};
59 napi_status status;
60 int32_t result = 0;
61
62 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
63
64 napi_valuetype valuetype0;
65 napi_typeof(env, args[0], &valuetype0);
66
67 uint32_t value0;
68 napi_get_value_uint32(env, args[0], &value0);
69
70 OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, "getTestCase", "input param %{public}d", value0);
71
72 // 返回结果
73 napi_value resultValue;
74 switch (value0) {
75 case TCT_BASE:
76 {
77 resultValue = createTctBaseInstance(env);
78 }
79 break;
80 case TCT_NADATATYPE:
81 {
82 resultValue = createTctNADataTypeInstance(env);
83 }
84 break;
85 case TCT_NAENVLCAPI:
86 case TCT_JSABSTARCTOPS:
87 case TCT_JSPREOPERTY:
88 case TCT_JSVALUES:
89 break;
90 case TCT_CJSON:
91 {
92 resultValue = createTctCJsonInstance(env);
93 }
94 break;
95 case TCT_FFMPEG:
96 case TCT_OPENCV:
97 break;
98 default:
99 break;
100 }
101
102 return resultValue;
103 }
104
105 EXTERN_C_START
Init(napi_env env, napi_value exports)106 static napi_value Init(napi_env env, napi_value exports)
107 {
108 // 对应nodeapi/envlifecycleapis/napisetinstancedata
109 setInstancedata(env, exports);
110
111 // 对应 javascriptapi/jsvalues/jsValuesInit.cpp
112 jsValuesInit(env, exports);
113
114 // 对应 javascriptapi/jsproperty/jsPropertyInit.cpp
115 jsPropertyInit(env, exports);
116
117 // 对应 javascriptapi/jsfunctions/jsFunctionsInit.cpp
118 jsFunctionsInit(env, exports);
119
120 // 对应 javascriptapi/jsobjectwrap/jsObjectWrapInit.cpp
121 jsObjectWrapInit(env, exports);
122
123 napi_property_descriptor descArr[] = {
124 {"add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr},
125 {"getTestCase", nullptr, getTestCase, nullptr, nullptr, nullptr, napi_default, nullptr},
126 {"testNapiStatus", nullptr, testNapiStatus, nullptr, nullptr, nullptr, napi_default, nullptr},
127 {"testExterrinfo", nullptr, testNapiExterrinfo, nullptr, nullptr, nullptr, napi_default, nullptr},
128 {"testNapiEnv", nullptr, testNapiEnv, nullptr, nullptr, nullptr, napi_default, nullptr},
129 {"testNapiValue", nullptr, testNapiValue, nullptr, nullptr, nullptr, napi_default, nullptr},
130 {"testNapiThreadsafefunc", nullptr, setThreadsafefunc, nullptr, nullptr, nullptr, napi_default, nullptr},
131 {"testNapiThreadsafefuncrel", nullptr, setThreadsafefuncrel, nullptr, nullptr, nullptr, napi_default, nullptr},
132 {"testNapiThreadsafefuncall", nullptr, setThreadsafefuncall, nullptr, nullptr, nullptr, napi_default, nullptr},
133 {"cjson_version", nullptr, cJSONVersion, nullptr, nullptr, nullptr, napi_default, nullptr},
134 {"getContext", nullptr, NativeXComponentSample::PluginManager::GetContext,
135 nullptr, nullptr, nullptr, napi_default, nullptr},
136 };
137 napi_define_properties(env, exports, sizeof(descArr) / sizeof(descArr[0]), descArr);
138
139 NativeXComponentSample::PluginManager::GetInstance()->Export(env, exports);
140 size_t len = sizeof(descArr) / sizeof(napi_property_descriptor);
141
142 // Allocate memory & copy
143 napi_property_descriptor *desc = (napi_property_descriptor *)malloc(sizeof(descArr));
144 if (desc == nullptr) {
145 OH_LOG_Print(LOG_APP, LOG_ERROR, GLOBAL_RESMGR, "jsAbstractOpsInit", "Failed to allocated memory");
146 napi_throw_error(env, NULL, "Failed to allocate memory");
147 }
148 for (size_t i = 0; i < len; ++i) {
149 desc[i] = descArr[i];
150 }
151
152 // Initialization of functions in `javascriptapi/jsabstractops`
153 jsAbstractOpsInit(&desc, &len);
154
155 napi_define_properties(env, exports, len, desc);
156 return exports;
157 }
158 EXTERN_C_END
159
160 static napi_module demoModule = {
161 .nm_version = 1,
162 .nm_flags = 0,
163 .nm_filename = nullptr,
164 .nm_register_func = Init,
165 .nm_modname = "entry",
166 .nm_priv = ((void *)0),
167 .reserved = {0},
168 };
169
RegisterEntryModule(void)170 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
171