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
16 #include "napi/native_api.h"
17 #include <LocationKit/oh_location.h>
18 #include <LocationKit/oh_location_type.h>
19 #include <js_native_api_types.h>
20 #include <unistd.h>
21
22 namespace {
23 static const Location_RequestConfig *requestConfig = OH_Location_CreateRequestConfig();
24 }
25
OHLocationInfoGetAdditionalInfo(napi_env env,napi_callback_info info)26 static napi_value OHLocationInfoGetAdditionalInfo(napi_env env, napi_callback_info info)
27 {
28 Location_Info *location;
29 char additionalInfo[] = "";
30 Location_ResultCode errorCode = OH_LocationInfo_GetAdditionalInfo(nullptr, additionalInfo, 0);
31 napi_value result = nullptr;
32 napi_create_int32(env, errorCode, &result);
33 return result;
34 }
OH_Location_IsLocatingEnabled1(napi_env env,napi_callback_info info)35 static napi_value OH_Location_IsLocatingEnabled1(napi_env env, napi_callback_info info)
36 {
37 bool flag = true;
38 bool *enabled = &flag;
39 Location_ResultCode startCode = OH_Location_IsLocatingEnabled(enabled);
40 napi_value result = nullptr;
41 napi_create_int32(env, startCode, &result);
42 return result;
43 }
OH_Location_IsLocatingEnabled2(napi_env env,napi_callback_info info)44 static napi_value OH_Location_IsLocatingEnabled2(napi_env env, napi_callback_info info)
45 {
46 Location_ResultCode startCode = OH_Location_IsLocatingEnabled(nullptr);
47 napi_value result = nullptr;
48 napi_create_int32(env, startCode, &result);
49 return result;
50 }
51
OH_Location_StartLocating1(napi_env env,napi_callback_info info)52 static napi_value OH_Location_StartLocating1(napi_env env, napi_callback_info info)
53 {
54 Location_RequestConfig *config = OH_Location_CreateRequestConfig();
55 Location_ResultCode startCode1 = OH_Location_StartLocating(config);
56 napi_value result = nullptr;
57 napi_create_int32(env, startCode1, &result);
58 return result;
59 }
OH_Location_StartLocating2(napi_env env,napi_callback_info info)60 static napi_value OH_Location_StartLocating2(napi_env env, napi_callback_info info)
61 {
62 Location_ResultCode startCode = OH_Location_StartLocating(nullptr);
63 napi_value result = nullptr;
64 napi_create_int32(env, startCode, &result);
65 return result;
66 }
OH_Location_StopLocating2(napi_env env,napi_callback_info info)67 static napi_value OH_Location_StopLocating2(napi_env env, napi_callback_info info)
68 {
69 Location_ResultCode stopCode = OH_Location_StopLocating(nullptr);
70 napi_value result = nullptr;
71 napi_create_int32(env, stopCode, &result);
72 return result;
73 }
OHLocationInfoGetAdditionalInfo0100(napi_env env,napi_callback_info info)74 static napi_value OHLocationInfoGetAdditionalInfo0100(napi_env env, napi_callback_info info)
75 {
76 Location_Info *location;
77 char additionalInfo[] = "";
78 Location_ResultCode errorCode = OH_LocationInfo_GetAdditionalInfo(location, additionalInfo, 0);
79 napi_value result = nullptr;
80 napi_create_int32(env, errorCode, &result);
81 return result;
82 }
OH_LocationRequestConfig_SetUseScene0100(napi_env env,napi_callback_info info)83 static napi_value OH_LocationRequestConfig_SetUseScene0100(napi_env env, napi_callback_info info)
84 {
85 try {
86 Location_RequestConfig *requestConfig = OH_Location_CreateRequestConfig();
87 OH_LocationRequestConfig_SetUseScene(requestConfig, LOCATION_USE_SCENE_SPORT);
88 int32_t errorCode = 0;
89 napi_value result = nullptr;
90 napi_create_int32(env, errorCode, &result);
91 return result;
92 } catch (...) {
93 int32_t errorCode = 1;
94 napi_value result = nullptr;
95 napi_create_int32(env, errorCode, &result);
96 return result;
97 }
98 }
OH_LocationRequestConfig_SetUseScene0101(napi_env env,napi_callback_info info)99 static napi_value OH_LocationRequestConfig_SetUseScene0101(napi_env env, napi_callback_info info)
100 {
101 try {
102 Location_RequestConfig *requestConfig = OH_Location_CreateRequestConfig();
103 OH_LocationRequestConfig_SetUseScene(requestConfig, LOCATION_USE_SCENE_TRANSPORT);
104 int32_t errorCode = 0;
105 napi_value result = nullptr;
106 napi_create_int32(env, errorCode, &result);
107 return result;
108 } catch (...) {
109 int32_t errorCode = 1;
110 napi_value result = nullptr;
111 napi_create_int32(env, errorCode, &result);
112 return result;
113 }
114 }
OH_LocationRequestConfig_SetUseScene0102(napi_env env,napi_callback_info info)115 static napi_value OH_LocationRequestConfig_SetUseScene0102(napi_env env, napi_callback_info info)
116 {
117 try {
118 Location_RequestConfig *requestConfig = OH_Location_CreateRequestConfig();
119 OH_LocationRequestConfig_SetUseScene(requestConfig, LOCATION_USE_SCENE_DAILY_LIFE_SERVICE);
120 int32_t errorCode = 0;
121 napi_value result = nullptr;
122 napi_create_int32(env, errorCode, &result);
123 return result;
124 } catch (...) {
125 int32_t errorCode = 1;
126 napi_value result = nullptr;
127 napi_create_int32(env, errorCode, &result);
128 return result;
129 }
130 }
OH_LocationRequestConfig_SetPowerConsumptionScene0100(napi_env env,napi_callback_info info)131 static napi_value OH_LocationRequestConfig_SetPowerConsumptionScene0100(napi_env env, napi_callback_info info)
132 {
133 try {
134 Location_RequestConfig *requestConfig = OH_Location_CreateRequestConfig();
135 OH_LocationRequestConfig_SetPowerConsumptionScene(requestConfig, LOCATION_LOW_POWER_CONSUMPTION);
136 int32_t errorCode = 0;
137 napi_value result = nullptr;
138 napi_create_int32(env, errorCode, &result);
139 return result;
140 } catch (...) {
141 int32_t errorCode = 1;
142 napi_value result = nullptr;
143 napi_create_int32(env, errorCode, &result);
144 return result;
145 }
146 }
OH_LocationRequestConfig_SetPowerConsumptionScene0101(napi_env env,napi_callback_info info)147 static napi_value OH_LocationRequestConfig_SetPowerConsumptionScene0101(napi_env env, napi_callback_info info)
148 {
149 try {
150 Location_RequestConfig *requestConfig = OH_Location_CreateRequestConfig();
151 OH_LocationRequestConfig_SetPowerConsumptionScene(requestConfig, LOCATION_NO_POWER_CONSUMPTION);
152 int32_t errorCode = 0;
153 napi_value result = nullptr;
154 napi_create_int32(env, errorCode, &result);
155 return result;
156 } catch (...) {
157 int32_t errorCode = 1;
158 napi_value result = nullptr;
159 napi_create_int32(env, errorCode, &result);
160 return result;
161 }
162 }
163
164 EXTERN_C_START
Init(napi_env env,napi_value exports)165 static napi_value Init(napi_env env, napi_value exports)
166 {
167 napi_property_descriptor desc[] = {
168 {"OHLocationInfoGetAdditionalInfo", nullptr, OHLocationInfoGetAdditionalInfo, nullptr, nullptr, nullptr,
169 napi_default, nullptr},
170 {"OH_Location_IsLocatingEnabled1", nullptr, OH_Location_IsLocatingEnabled1, nullptr, nullptr, nullptr,
171 napi_default, nullptr},
172 {"OH_Location_IsLocatingEnabled2", nullptr, OH_Location_IsLocatingEnabled2, nullptr, nullptr, nullptr,
173 napi_default, nullptr},
174 {"OH_Location_StartLocating1", nullptr, OH_Location_StartLocating1, nullptr, nullptr, nullptr, napi_default,
175 nullptr},
176 {"OH_Location_StartLocating2", nullptr, OH_Location_StartLocating2, nullptr, nullptr, nullptr, napi_default,
177 nullptr},
178 {"OH_Location_StopLocating2", nullptr, OH_Location_StopLocating2, nullptr, nullptr, nullptr, napi_default,
179 nullptr},
180 {"OHLocationInfoGetAdditionalInfo0100", nullptr, OHLocationInfoGetAdditionalInfo0100, nullptr, nullptr, nullptr,
181 napi_default, nullptr},
182 {"OH_LocationRequestConfig_SetUseScene0100", nullptr, OH_LocationRequestConfig_SetUseScene0100, nullptr,
183 nullptr, nullptr, napi_default, nullptr},
184 {"OH_LocationRequestConfig_SetUseScene0101", nullptr, OH_LocationRequestConfig_SetUseScene0101, nullptr,
185 nullptr, nullptr, napi_default, nullptr},
186 {"OH_LocationRequestConfig_SetUseScene0102", nullptr, OH_LocationRequestConfig_SetUseScene0102, nullptr,
187 nullptr, nullptr, napi_default, nullptr},
188 {"OH_LocationRequestConfig_SetPowerConsumptionScene0100", nullptr,
189 OH_LocationRequestConfig_SetPowerConsumptionScene0100, nullptr, nullptr, nullptr, napi_default, nullptr},
190 {"OH_LocationRequestConfig_SetPowerConsumptionScene0101", nullptr,
191 OH_LocationRequestConfig_SetPowerConsumptionScene0101, nullptr, nullptr, nullptr, napi_default, nullptr},
192 };
193
194 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
195 return exports;
196 }
197 EXTERN_C_END
198
199 static napi_module demoModule = {
200 .nm_version = 1,
201 .nm_flags = 0,
202 .nm_filename = nullptr,
203 .nm_register_func = Init,
204 .nm_modname = "locationcapi20",
205 .nm_priv = ((void *)0),
206 .reserved = {0},
207 };
208
RegisterModule(void)209 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); }
210