1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License.
5d9f0492fSopenharmony_ci * You may obtain a copy of the License at
6d9f0492fSopenharmony_ci *
7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8d9f0492fSopenharmony_ci *
9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and
13d9f0492fSopenharmony_ci * limitations under the License.
14d9f0492fSopenharmony_ci */
15d9f0492fSopenharmony_ci
16d9f0492fSopenharmony_ci#include <cstdio>
17d9f0492fSopenharmony_ci#include <string>
18d9f0492fSopenharmony_ci
19d9f0492fSopenharmony_ci#include "napi/native_api.h"
20d9f0492fSopenharmony_ci#include "napi/native_node_api.h"
21d9f0492fSopenharmony_ci#include "parameter.h"
22d9f0492fSopenharmony_ci#include "sysversion.h"
23d9f0492fSopenharmony_ci#ifdef DEPENDENT_APPEXECFWK_BASE
24d9f0492fSopenharmony_ci#include "bundlemgr/bundle_mgr_proxy.h"
25d9f0492fSopenharmony_ci#endif
26d9f0492fSopenharmony_ci#include "iservice_registry.h"
27d9f0492fSopenharmony_ci#include "if_system_ability_manager.h"
28d9f0492fSopenharmony_ci#include "system_ability_definition.h"
29d9f0492fSopenharmony_ci#include "beget_ext.h"
30d9f0492fSopenharmony_ci#include "init_error.h"
31d9f0492fSopenharmony_ci#include "securec.h"
32d9f0492fSopenharmony_ci
33d9f0492fSopenharmony_ci#ifndef DEVICEINFO_JS_DOMAIN
34d9f0492fSopenharmony_ci#define DEVICEINFO_JS_DOMAIN (BASE_DOMAIN + 8)
35d9f0492fSopenharmony_ci#endif
36d9f0492fSopenharmony_ci
37d9f0492fSopenharmony_ci#ifndef DINFO_TAG
38d9f0492fSopenharmony_ci#define DINFO_TAG "DEVICEINFO_JS"
39d9f0492fSopenharmony_ci#endif
40d9f0492fSopenharmony_ci
41d9f0492fSopenharmony_ci#define DEVINFO_LOGV(fmt, ...) STARTUP_LOGV(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
42d9f0492fSopenharmony_ci#define DEVINFO_LOGI(fmt, ...) STARTUP_LOGI(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
43d9f0492fSopenharmony_ci#define DEVINFO_LOGW(fmt, ...) STARTUP_LOGW(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
44d9f0492fSopenharmony_ci#define DEVINFO_LOGE(fmt, ...) STARTUP_LOGE(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
45d9f0492fSopenharmony_ci
46d9f0492fSopenharmony_ciconst int UDID_LEN = 65;
47d9f0492fSopenharmony_ciconst int ODID_LEN = 37;
48d9f0492fSopenharmony_ci
49d9f0492fSopenharmony_citypedef enum {
50d9f0492fSopenharmony_ci    DEV_INFO_OK,
51d9f0492fSopenharmony_ci    DEV_INFO_ENULLPTR,
52d9f0492fSopenharmony_ci    DEV_INFO_EGETODID,
53d9f0492fSopenharmony_ci    DEV_INFO_ESTRCOPY
54d9f0492fSopenharmony_ci} DevInfoError;
55d9f0492fSopenharmony_ci
56d9f0492fSopenharmony_cistatic napi_value GetDeviceType(napi_env env, napi_callback_info info)
57d9f0492fSopenharmony_ci{
58d9f0492fSopenharmony_ci    napi_value deviceType = nullptr;
59d9f0492fSopenharmony_ci    const char *value = GetDeviceType();
60d9f0492fSopenharmony_ci    if (value == nullptr) {
61d9f0492fSopenharmony_ci        value = "";
62d9f0492fSopenharmony_ci    }
63d9f0492fSopenharmony_ci
64d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, value, strlen(value), &deviceType));
65d9f0492fSopenharmony_ci    return deviceType;
66d9f0492fSopenharmony_ci}
67d9f0492fSopenharmony_ci
68d9f0492fSopenharmony_cistatic napi_value GetManufacture(napi_env env, napi_callback_info info)
69d9f0492fSopenharmony_ci{
70d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
71d9f0492fSopenharmony_ci    const char *manfactureName = GetManufacture();
72d9f0492fSopenharmony_ci    if (manfactureName == nullptr) {
73d9f0492fSopenharmony_ci        manfactureName = "";
74d9f0492fSopenharmony_ci    }
75d9f0492fSopenharmony_ci
76d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, manfactureName, strlen(manfactureName), &napiValue));
77d9f0492fSopenharmony_ci    return napiValue;
78d9f0492fSopenharmony_ci}
79d9f0492fSopenharmony_ci
80d9f0492fSopenharmony_cistatic napi_value GetBrand(napi_env env, napi_callback_info info)
81d9f0492fSopenharmony_ci{
82d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
83d9f0492fSopenharmony_ci    const char *productBrand = GetBrand();
84d9f0492fSopenharmony_ci    if (productBrand == nullptr) {
85d9f0492fSopenharmony_ci        productBrand = "";
86d9f0492fSopenharmony_ci    }
87d9f0492fSopenharmony_ci
88d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, productBrand, strlen(productBrand), &napiValue));
89d9f0492fSopenharmony_ci    return napiValue;
90d9f0492fSopenharmony_ci}
91d9f0492fSopenharmony_ci
92d9f0492fSopenharmony_cistatic napi_value GetMarketName(napi_env env, napi_callback_info info)
93d9f0492fSopenharmony_ci{
94d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
95d9f0492fSopenharmony_ci    const char *marketName = GetMarketName();
96d9f0492fSopenharmony_ci    if (marketName == nullptr) {
97d9f0492fSopenharmony_ci        marketName = "";
98d9f0492fSopenharmony_ci    }
99d9f0492fSopenharmony_ci
100d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, marketName, strlen(marketName), &napiValue));
101d9f0492fSopenharmony_ci    return napiValue;
102d9f0492fSopenharmony_ci}
103d9f0492fSopenharmony_ci
104d9f0492fSopenharmony_cistatic napi_value GetProductSeries(napi_env env, napi_callback_info info)
105d9f0492fSopenharmony_ci{
106d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
107d9f0492fSopenharmony_ci    const char *productSeries = GetProductSeries();
108d9f0492fSopenharmony_ci    if (productSeries == nullptr) {
109d9f0492fSopenharmony_ci        productSeries = "";
110d9f0492fSopenharmony_ci    }
111d9f0492fSopenharmony_ci
112d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, productSeries, strlen(productSeries), &napiValue));
113d9f0492fSopenharmony_ci    return napiValue;
114d9f0492fSopenharmony_ci}
115d9f0492fSopenharmony_ci
116d9f0492fSopenharmony_cistatic napi_value GetProductModel(napi_env env, napi_callback_info info)
117d9f0492fSopenharmony_ci{
118d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
119d9f0492fSopenharmony_ci    const char *productModel = GetProductModel();
120d9f0492fSopenharmony_ci    if (productModel == nullptr) {
121d9f0492fSopenharmony_ci        productModel = "";
122d9f0492fSopenharmony_ci    }
123d9f0492fSopenharmony_ci
124d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, productModel, strlen(productModel), &napiValue));
125d9f0492fSopenharmony_ci    return napiValue;
126d9f0492fSopenharmony_ci}
127d9f0492fSopenharmony_ci
128d9f0492fSopenharmony_cistatic napi_value GetSoftwareModel(napi_env env, napi_callback_info info)
129d9f0492fSopenharmony_ci{
130d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
131d9f0492fSopenharmony_ci    const char *softwareModel = GetSoftwareModel();
132d9f0492fSopenharmony_ci    if (softwareModel == nullptr) {
133d9f0492fSopenharmony_ci        softwareModel = "";
134d9f0492fSopenharmony_ci    }
135d9f0492fSopenharmony_ci
136d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, softwareModel, strlen(softwareModel), &napiValue));
137d9f0492fSopenharmony_ci    return napiValue;
138d9f0492fSopenharmony_ci}
139d9f0492fSopenharmony_ci
140d9f0492fSopenharmony_cistatic napi_value GetHardwareModel(napi_env env, napi_callback_info info)
141d9f0492fSopenharmony_ci{
142d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
143d9f0492fSopenharmony_ci    const char *hardwareModel = GetHardwareModel();
144d9f0492fSopenharmony_ci    if (hardwareModel == nullptr) {
145d9f0492fSopenharmony_ci        hardwareModel = "";
146d9f0492fSopenharmony_ci    }
147d9f0492fSopenharmony_ci
148d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, hardwareModel, strlen(hardwareModel), &napiValue));
149d9f0492fSopenharmony_ci    return napiValue;
150d9f0492fSopenharmony_ci}
151d9f0492fSopenharmony_ci
152d9f0492fSopenharmony_cistatic napi_value GetHardwareProfile(napi_env env, napi_callback_info info)
153d9f0492fSopenharmony_ci{
154d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
155d9f0492fSopenharmony_ci    const char *hardwareProfile = GetHardwareProfile();
156d9f0492fSopenharmony_ci    if (hardwareProfile == nullptr) {
157d9f0492fSopenharmony_ci        hardwareProfile = "";
158d9f0492fSopenharmony_ci    }
159d9f0492fSopenharmony_ci
160d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, hardwareProfile, strlen(hardwareProfile), &napiValue));
161d9f0492fSopenharmony_ci    return napiValue;
162d9f0492fSopenharmony_ci}
163d9f0492fSopenharmony_ci
164d9f0492fSopenharmony_cistatic napi_value GetSerial(napi_env env, napi_callback_info info)
165d9f0492fSopenharmony_ci{
166d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
167d9f0492fSopenharmony_ci    const char *serialNumber = AclGetSerial();
168d9f0492fSopenharmony_ci    if (serialNumber == nullptr) {
169d9f0492fSopenharmony_ci        serialNumber = "";
170d9f0492fSopenharmony_ci    }
171d9f0492fSopenharmony_ci
172d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, serialNumber, strlen(serialNumber), &napiValue));
173d9f0492fSopenharmony_ci    return napiValue;
174d9f0492fSopenharmony_ci}
175d9f0492fSopenharmony_ci
176d9f0492fSopenharmony_cistatic napi_value GetBootloaderVersion(napi_env env, napi_callback_info info)
177d9f0492fSopenharmony_ci{
178d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
179d9f0492fSopenharmony_ci    const char *bootloaderVersion = GetBootloaderVersion();
180d9f0492fSopenharmony_ci    if (bootloaderVersion == nullptr) {
181d9f0492fSopenharmony_ci        bootloaderVersion = "";
182d9f0492fSopenharmony_ci    }
183d9f0492fSopenharmony_ci
184d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, bootloaderVersion, strlen(bootloaderVersion), &napiValue));
185d9f0492fSopenharmony_ci    return napiValue;
186d9f0492fSopenharmony_ci}
187d9f0492fSopenharmony_ci
188d9f0492fSopenharmony_cistatic napi_value GetAbiList(napi_env env, napi_callback_info info)
189d9f0492fSopenharmony_ci{
190d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
191d9f0492fSopenharmony_ci    const char *abiList = GetAbiList();
192d9f0492fSopenharmony_ci    if (abiList == nullptr) {
193d9f0492fSopenharmony_ci        abiList = "";
194d9f0492fSopenharmony_ci    }
195d9f0492fSopenharmony_ci
196d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, abiList, strlen(abiList), &napiValue));
197d9f0492fSopenharmony_ci    return napiValue;
198d9f0492fSopenharmony_ci}
199d9f0492fSopenharmony_ci
200d9f0492fSopenharmony_cistatic napi_value GetSecurityPatchTag(napi_env env, napi_callback_info info)
201d9f0492fSopenharmony_ci{
202d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
203d9f0492fSopenharmony_ci    const char *securityPatchTag = GetSecurityPatchTag();
204d9f0492fSopenharmony_ci    if (securityPatchTag == nullptr) {
205d9f0492fSopenharmony_ci        securityPatchTag = "";
206d9f0492fSopenharmony_ci    }
207d9f0492fSopenharmony_ci
208d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, securityPatchTag, strlen(securityPatchTag), &napiValue));
209d9f0492fSopenharmony_ci    return napiValue;
210d9f0492fSopenharmony_ci}
211d9f0492fSopenharmony_ci
212d9f0492fSopenharmony_cistatic napi_value GetDisplayVersion(napi_env env, napi_callback_info info)
213d9f0492fSopenharmony_ci{
214d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
215d9f0492fSopenharmony_ci    const char *productVersion = GetDisplayVersion();
216d9f0492fSopenharmony_ci    if (productVersion == nullptr) {
217d9f0492fSopenharmony_ci        productVersion = "";
218d9f0492fSopenharmony_ci    }
219d9f0492fSopenharmony_ci
220d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, productVersion, strlen(productVersion), &napiValue));
221d9f0492fSopenharmony_ci    return napiValue;
222d9f0492fSopenharmony_ci}
223d9f0492fSopenharmony_ci
224d9f0492fSopenharmony_cistatic napi_value GetIncrementalVersion(napi_env env, napi_callback_info info)
225d9f0492fSopenharmony_ci{
226d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
227d9f0492fSopenharmony_ci    const char *incrementalVersion = GetIncrementalVersion();
228d9f0492fSopenharmony_ci    if (incrementalVersion == nullptr) {
229d9f0492fSopenharmony_ci        incrementalVersion = "";
230d9f0492fSopenharmony_ci    }
231d9f0492fSopenharmony_ci
232d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, incrementalVersion, strlen(incrementalVersion), &napiValue));
233d9f0492fSopenharmony_ci    return napiValue;
234d9f0492fSopenharmony_ci}
235d9f0492fSopenharmony_ci
236d9f0492fSopenharmony_cistatic napi_value GetOsReleaseType(napi_env env, napi_callback_info info)
237d9f0492fSopenharmony_ci{
238d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
239d9f0492fSopenharmony_ci    const char *osReleaseType = GetOsReleaseType();
240d9f0492fSopenharmony_ci    if (osReleaseType == nullptr) {
241d9f0492fSopenharmony_ci        osReleaseType = "";
242d9f0492fSopenharmony_ci    }
243d9f0492fSopenharmony_ci
244d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, osReleaseType, strlen(osReleaseType), &napiValue));
245d9f0492fSopenharmony_ci    return napiValue;
246d9f0492fSopenharmony_ci}
247d9f0492fSopenharmony_ci
248d9f0492fSopenharmony_cistatic napi_value GetOSFullName(napi_env env, napi_callback_info info)
249d9f0492fSopenharmony_ci{
250d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
251d9f0492fSopenharmony_ci    const char *osVersion = GetOSFullName();
252d9f0492fSopenharmony_ci    if (osVersion == nullptr) {
253d9f0492fSopenharmony_ci        osVersion = "";
254d9f0492fSopenharmony_ci    }
255d9f0492fSopenharmony_ci
256d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, osVersion, strlen(osVersion), &napiValue));
257d9f0492fSopenharmony_ci    return napiValue;
258d9f0492fSopenharmony_ci}
259d9f0492fSopenharmony_ci
260d9f0492fSopenharmony_cistatic napi_value GetMajorVersion(napi_env env, napi_callback_info info)
261d9f0492fSopenharmony_ci{
262d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
263d9f0492fSopenharmony_ci    int majorVersion = GetMajorVersion();
264d9f0492fSopenharmony_ci
265d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_int32(env, majorVersion, &napiValue));
266d9f0492fSopenharmony_ci    return napiValue;
267d9f0492fSopenharmony_ci}
268d9f0492fSopenharmony_ci
269d9f0492fSopenharmony_cistatic napi_value GetSeniorVersion(napi_env env, napi_callback_info info)
270d9f0492fSopenharmony_ci{
271d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
272d9f0492fSopenharmony_ci    int seniorVersion = GetSeniorVersion();
273d9f0492fSopenharmony_ci
274d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_int32(env, seniorVersion, &napiValue));
275d9f0492fSopenharmony_ci    return napiValue;
276d9f0492fSopenharmony_ci}
277d9f0492fSopenharmony_ci
278d9f0492fSopenharmony_cistatic napi_value GetFeatureVersion(napi_env env, napi_callback_info info)
279d9f0492fSopenharmony_ci{
280d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
281d9f0492fSopenharmony_ci    int featureVersion = GetFeatureVersion();
282d9f0492fSopenharmony_ci
283d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_int32(env, featureVersion, &napiValue));
284d9f0492fSopenharmony_ci    return napiValue;
285d9f0492fSopenharmony_ci}
286d9f0492fSopenharmony_ci
287d9f0492fSopenharmony_cistatic napi_value GetBuildVersion(napi_env env, napi_callback_info info)
288d9f0492fSopenharmony_ci{
289d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
290d9f0492fSopenharmony_ci    int buildVersion = GetBuildVersion();
291d9f0492fSopenharmony_ci
292d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_int32(env, buildVersion, &napiValue));
293d9f0492fSopenharmony_ci    return napiValue;
294d9f0492fSopenharmony_ci}
295d9f0492fSopenharmony_ci
296d9f0492fSopenharmony_cistatic napi_value GetSdkApiVersion(napi_env env, napi_callback_info info)
297d9f0492fSopenharmony_ci{
298d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
299d9f0492fSopenharmony_ci    int sdkApiVersion = GetSdkApiVersion();
300d9f0492fSopenharmony_ci
301d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_int32(env, sdkApiVersion, &napiValue));
302d9f0492fSopenharmony_ci    return napiValue;
303d9f0492fSopenharmony_ci}
304d9f0492fSopenharmony_ci
305d9f0492fSopenharmony_cistatic napi_value GetFirstApiVersion(napi_env env, napi_callback_info info)
306d9f0492fSopenharmony_ci{
307d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
308d9f0492fSopenharmony_ci    int firstApiVersion = GetFirstApiVersion();
309d9f0492fSopenharmony_ci
310d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_int32(env, firstApiVersion, &napiValue));
311d9f0492fSopenharmony_ci    return napiValue;
312d9f0492fSopenharmony_ci}
313d9f0492fSopenharmony_ci
314d9f0492fSopenharmony_cistatic napi_value GetVersionId(napi_env env, napi_callback_info info)
315d9f0492fSopenharmony_ci{
316d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
317d9f0492fSopenharmony_ci    const char *versionId = GetVersionId();
318d9f0492fSopenharmony_ci    if (versionId == nullptr) {
319d9f0492fSopenharmony_ci        versionId = "";
320d9f0492fSopenharmony_ci    }
321d9f0492fSopenharmony_ci
322d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, versionId, strlen(versionId), &napiValue));
323d9f0492fSopenharmony_ci    return napiValue;
324d9f0492fSopenharmony_ci}
325d9f0492fSopenharmony_ci
326d9f0492fSopenharmony_cistatic napi_value GetBuildType(napi_env env, napi_callback_info info)
327d9f0492fSopenharmony_ci{
328d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
329d9f0492fSopenharmony_ci    const char *buildType = GetBuildType();
330d9f0492fSopenharmony_ci    if (buildType == nullptr) {
331d9f0492fSopenharmony_ci        buildType = "";
332d9f0492fSopenharmony_ci    }
333d9f0492fSopenharmony_ci
334d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, buildType, strlen(buildType), &napiValue));
335d9f0492fSopenharmony_ci    return napiValue;
336d9f0492fSopenharmony_ci}
337d9f0492fSopenharmony_ci
338d9f0492fSopenharmony_cistatic napi_value GetBuildUser(napi_env env, napi_callback_info info)
339d9f0492fSopenharmony_ci{
340d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
341d9f0492fSopenharmony_ci    const char *buildUser = GetBuildUser();
342d9f0492fSopenharmony_ci    if (buildUser == nullptr) {
343d9f0492fSopenharmony_ci        buildUser = "";
344d9f0492fSopenharmony_ci    }
345d9f0492fSopenharmony_ci
346d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, buildUser, strlen(buildUser), &napiValue));
347d9f0492fSopenharmony_ci    return napiValue;
348d9f0492fSopenharmony_ci}
349d9f0492fSopenharmony_ci
350d9f0492fSopenharmony_cistatic napi_value GetBuildHost(napi_env env, napi_callback_info info)
351d9f0492fSopenharmony_ci{
352d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
353d9f0492fSopenharmony_ci    const char *buildHost = GetBuildHost();
354d9f0492fSopenharmony_ci    if (buildHost == nullptr) {
355d9f0492fSopenharmony_ci        buildHost = "";
356d9f0492fSopenharmony_ci    }
357d9f0492fSopenharmony_ci
358d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, buildHost, strlen(buildHost), &napiValue));
359d9f0492fSopenharmony_ci    return napiValue;
360d9f0492fSopenharmony_ci}
361d9f0492fSopenharmony_ci
362d9f0492fSopenharmony_cistatic napi_value GetBuildTime(napi_env env, napi_callback_info info)
363d9f0492fSopenharmony_ci{
364d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
365d9f0492fSopenharmony_ci    const char *buildTime = GetBuildTime();
366d9f0492fSopenharmony_ci    if (buildTime == nullptr) {
367d9f0492fSopenharmony_ci        buildTime = "";
368d9f0492fSopenharmony_ci    }
369d9f0492fSopenharmony_ci
370d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, buildTime, strlen(buildTime), &napiValue));
371d9f0492fSopenharmony_ci    return napiValue;
372d9f0492fSopenharmony_ci}
373d9f0492fSopenharmony_ci
374d9f0492fSopenharmony_cistatic napi_value GetBuildRootHash(napi_env env, napi_callback_info info)
375d9f0492fSopenharmony_ci{
376d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
377d9f0492fSopenharmony_ci    const char *buildRootHash = GetBuildRootHash();
378d9f0492fSopenharmony_ci    if (buildRootHash == nullptr) {
379d9f0492fSopenharmony_ci        buildRootHash = "";
380d9f0492fSopenharmony_ci    }
381d9f0492fSopenharmony_ci
382d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, buildRootHash, strlen(buildRootHash), &napiValue));
383d9f0492fSopenharmony_ci    return napiValue;
384d9f0492fSopenharmony_ci}
385d9f0492fSopenharmony_ci
386d9f0492fSopenharmony_cistatic napi_value GetDevUdid(napi_env env, napi_callback_info info)
387d9f0492fSopenharmony_ci{
388d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
389d9f0492fSopenharmony_ci    char localDeviceId[UDID_LEN] = {0};
390d9f0492fSopenharmony_ci    AclGetDevUdid(localDeviceId, UDID_LEN);
391d9f0492fSopenharmony_ci
392d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, localDeviceId, strlen(localDeviceId), &napiValue));
393d9f0492fSopenharmony_ci    return napiValue;
394d9f0492fSopenharmony_ci}
395d9f0492fSopenharmony_ci
396d9f0492fSopenharmony_cistatic napi_value NAPI_GetDistributionOSName(napi_env env, napi_callback_info info)
397d9f0492fSopenharmony_ci{
398d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
399d9f0492fSopenharmony_ci    const char *val = GetDistributionOSName();
400d9f0492fSopenharmony_ci
401d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
402d9f0492fSopenharmony_ci    return napiValue;
403d9f0492fSopenharmony_ci}
404d9f0492fSopenharmony_ci
405d9f0492fSopenharmony_cistatic napi_value NAPI_GetDistributionOSVersion(napi_env env, napi_callback_info info)
406d9f0492fSopenharmony_ci{
407d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
408d9f0492fSopenharmony_ci    const char *val = GetDistributionOSVersion();
409d9f0492fSopenharmony_ci
410d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
411d9f0492fSopenharmony_ci    return napiValue;
412d9f0492fSopenharmony_ci}
413d9f0492fSopenharmony_ci
414d9f0492fSopenharmony_cistatic napi_value NAPI_GetDistributionOSApiVersion(napi_env env, napi_callback_info info)
415d9f0492fSopenharmony_ci{
416d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
417d9f0492fSopenharmony_ci    int sdkApiVersion = GetDistributionOSApiVersion();
418d9f0492fSopenharmony_ci
419d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_int32(env, sdkApiVersion, &napiValue));
420d9f0492fSopenharmony_ci    return napiValue;
421d9f0492fSopenharmony_ci}
422d9f0492fSopenharmony_ci
423d9f0492fSopenharmony_cistatic napi_value NAPI_GetDistributionOSApiName(napi_env env, napi_callback_info info)
424d9f0492fSopenharmony_ci{
425d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
426d9f0492fSopenharmony_ci    const char *val = GetDistributionOSApiName();
427d9f0492fSopenharmony_ci
428d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
429d9f0492fSopenharmony_ci    return napiValue;
430d9f0492fSopenharmony_ci}
431d9f0492fSopenharmony_ci
432d9f0492fSopenharmony_cistatic napi_value NAPI_GetDistributionOSReleaseType(napi_env env, napi_callback_info info)
433d9f0492fSopenharmony_ci{
434d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
435d9f0492fSopenharmony_ci    const char *val = GetDistributionOSReleaseType();
436d9f0492fSopenharmony_ci
437d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
438d9f0492fSopenharmony_ci    return napiValue;
439d9f0492fSopenharmony_ci}
440d9f0492fSopenharmony_ci
441d9f0492fSopenharmony_cistatic DevInfoError AclGetDevOdid(char *odid, int size)
442d9f0492fSopenharmony_ci{
443d9f0492fSopenharmony_ci    DevInfoError ret = DEV_INFO_OK;
444d9f0492fSopenharmony_ci    if (odid[0] != '\0') {
445d9f0492fSopenharmony_ci        return DEV_INFO_OK;
446d9f0492fSopenharmony_ci    }
447d9f0492fSopenharmony_ci    auto systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
448d9f0492fSopenharmony_ci    if (!systemAbilityManager) {
449d9f0492fSopenharmony_ci        return DEV_INFO_ENULLPTR;
450d9f0492fSopenharmony_ci    }
451d9f0492fSopenharmony_ci
452d9f0492fSopenharmony_ci    auto remoteObject = systemAbilityManager->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID);
453d9f0492fSopenharmony_ci    if (!remoteObject) {
454d9f0492fSopenharmony_ci        return DEV_INFO_ENULLPTR;
455d9f0492fSopenharmony_ci    }
456d9f0492fSopenharmony_ci
457d9f0492fSopenharmony_ci#ifdef DEPENDENT_APPEXECFWK_BASE
458d9f0492fSopenharmony_ci    auto bundleMgrProxy = OHOS::iface_cast<OHOS::AppExecFwk::BundleMgrProxy>(remoteObject);
459d9f0492fSopenharmony_ci    if (!bundleMgrProxy) {
460d9f0492fSopenharmony_ci        return DEV_INFO_ENULLPTR;
461d9f0492fSopenharmony_ci    }
462d9f0492fSopenharmony_ci
463d9f0492fSopenharmony_ci    std::string odidStr;
464d9f0492fSopenharmony_ci    if (bundleMgrProxy->GetOdid(odidStr) != 0) {
465d9f0492fSopenharmony_ci        return DEV_INFO_EGETODID;
466d9f0492fSopenharmony_ci    }
467d9f0492fSopenharmony_ci
468d9f0492fSopenharmony_ci    if (strcpy_s(odid, size, odidStr.c_str()) != EOK) {
469d9f0492fSopenharmony_ci        return DEV_INFO_ESTRCOPY;
470d9f0492fSopenharmony_ci    }
471d9f0492fSopenharmony_ci#else
472d9f0492fSopenharmony_ci    DEVINFO_LOGE("DEPENDENT_APPEXECFWK_BASE does not exist, The ODID could not be obtained");
473d9f0492fSopenharmony_ci    ret = DEV_INFO_EGETODID;
474d9f0492fSopenharmony_ci#endif
475d9f0492fSopenharmony_ci
476d9f0492fSopenharmony_ci    return ret;
477d9f0492fSopenharmony_ci}
478d9f0492fSopenharmony_ci
479d9f0492fSopenharmony_cistatic napi_value GetDevOdid(napi_env env, napi_callback_info info)
480d9f0492fSopenharmony_ci{
481d9f0492fSopenharmony_ci    napi_value napiValue = nullptr;
482d9f0492fSopenharmony_ci    static char odid[ODID_LEN] = {0};
483d9f0492fSopenharmony_ci    DevInfoError ret = AclGetDevOdid(odid, ODID_LEN);
484d9f0492fSopenharmony_ci    if (ret != DEV_INFO_OK) {
485d9f0492fSopenharmony_ci        DEVINFO_LOGE("GetDevOdid ret:%d", ret);
486d9f0492fSopenharmony_ci    }
487d9f0492fSopenharmony_ci
488d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_create_string_utf8(env, odid, strlen(odid), &napiValue));
489d9f0492fSopenharmony_ci    return napiValue;
490d9f0492fSopenharmony_ci}
491d9f0492fSopenharmony_ci
492d9f0492fSopenharmony_ciEXTERN_C_START
493d9f0492fSopenharmony_ci/*
494d9f0492fSopenharmony_ci * Module init
495d9f0492fSopenharmony_ci */
496d9f0492fSopenharmony_cistatic napi_value Init(napi_env env, napi_value exports)
497d9f0492fSopenharmony_ci{
498d9f0492fSopenharmony_ci    /*
499d9f0492fSopenharmony_ci     * Attribute definition
500d9f0492fSopenharmony_ci     */
501d9f0492fSopenharmony_ci    napi_property_descriptor desc[] = {
502d9f0492fSopenharmony_ci        {"deviceType", nullptr, nullptr, GetDeviceType, nullptr, nullptr, napi_default, nullptr},
503d9f0492fSopenharmony_ci        {"manufacture", nullptr, nullptr, GetManufacture, nullptr, nullptr, napi_default, nullptr},
504d9f0492fSopenharmony_ci        {"brand", nullptr, nullptr, GetBrand, nullptr, nullptr, napi_default, nullptr},
505d9f0492fSopenharmony_ci        {"marketName", nullptr, nullptr, GetMarketName, nullptr, nullptr, napi_default, nullptr},
506d9f0492fSopenharmony_ci        {"productSeries", nullptr, nullptr, GetProductSeries, nullptr, nullptr, napi_default, nullptr},
507d9f0492fSopenharmony_ci        {"productModel", nullptr, nullptr, GetProductModel, nullptr, nullptr, napi_default, nullptr},
508d9f0492fSopenharmony_ci        {"softwareModel", nullptr, nullptr, GetSoftwareModel, nullptr, nullptr, napi_default, nullptr},
509d9f0492fSopenharmony_ci        {"hardwareModel", nullptr, nullptr, GetHardwareModel, nullptr, nullptr, napi_default, nullptr},
510d9f0492fSopenharmony_ci        {"hardwareProfile", nullptr, nullptr, GetHardwareProfile, nullptr, nullptr, napi_default, nullptr},
511d9f0492fSopenharmony_ci        {"serial", nullptr, nullptr, GetSerial, nullptr, nullptr, napi_default, nullptr},
512d9f0492fSopenharmony_ci        {"bootloaderVersion", nullptr, nullptr, GetBootloaderVersion, nullptr, nullptr, napi_default, nullptr},
513d9f0492fSopenharmony_ci        {"abiList", nullptr, nullptr, GetAbiList, nullptr, nullptr, napi_default, nullptr},
514d9f0492fSopenharmony_ci        {"securityPatchTag", nullptr, nullptr, GetSecurityPatchTag, nullptr, nullptr, napi_default, nullptr},
515d9f0492fSopenharmony_ci        {"displayVersion", nullptr, nullptr, GetDisplayVersion, nullptr, nullptr, napi_default, nullptr},
516d9f0492fSopenharmony_ci        {"incrementalVersion", nullptr, nullptr, GetIncrementalVersion, nullptr, nullptr, napi_default, nullptr},
517d9f0492fSopenharmony_ci        {"osReleaseType", nullptr, nullptr, GetOsReleaseType, nullptr, nullptr, napi_default, nullptr},
518d9f0492fSopenharmony_ci        {"osFullName", nullptr, nullptr, GetOSFullName, nullptr, nullptr, napi_default, nullptr},
519d9f0492fSopenharmony_ci        {"majorVersion", nullptr, nullptr, GetMajorVersion, nullptr, nullptr, napi_default, nullptr},
520d9f0492fSopenharmony_ci        {"seniorVersion", nullptr, nullptr, GetSeniorVersion, nullptr, nullptr, napi_default, nullptr},
521d9f0492fSopenharmony_ci        {"featureVersion", nullptr, nullptr, GetFeatureVersion, nullptr, nullptr, napi_default, nullptr},
522d9f0492fSopenharmony_ci        {"buildVersion", nullptr, nullptr, GetBuildVersion, nullptr, nullptr, napi_default, nullptr},
523d9f0492fSopenharmony_ci        {"sdkApiVersion", nullptr, nullptr, GetSdkApiVersion, nullptr, nullptr, napi_default, nullptr},
524d9f0492fSopenharmony_ci        {"firstApiVersion", nullptr, nullptr, GetFirstApiVersion, nullptr, nullptr, napi_default, nullptr},
525d9f0492fSopenharmony_ci        {"versionId", nullptr, nullptr, GetVersionId, nullptr, nullptr, napi_default, nullptr},
526d9f0492fSopenharmony_ci        {"buildType", nullptr, nullptr, GetBuildType, nullptr, nullptr, napi_default, nullptr},
527d9f0492fSopenharmony_ci        {"buildUser", nullptr, nullptr, GetBuildUser, nullptr, nullptr, napi_default, nullptr},
528d9f0492fSopenharmony_ci        {"buildHost", nullptr, nullptr, GetBuildHost, nullptr, nullptr, napi_default, nullptr},
529d9f0492fSopenharmony_ci        {"buildTime", nullptr, nullptr, GetBuildTime, nullptr, nullptr, napi_default, nullptr},
530d9f0492fSopenharmony_ci        {"buildRootHash", nullptr, nullptr, GetBuildRootHash, nullptr, nullptr, napi_default, nullptr},
531d9f0492fSopenharmony_ci        {"udid", nullptr, nullptr, GetDevUdid, nullptr, nullptr, napi_default, nullptr},
532d9f0492fSopenharmony_ci        {"distributionOSName", nullptr, nullptr, NAPI_GetDistributionOSName, nullptr, nullptr, napi_default, nullptr},
533d9f0492fSopenharmony_ci        {"distributionOSVersion", nullptr, nullptr, NAPI_GetDistributionOSVersion, nullptr, nullptr, napi_default, nullptr},
534d9f0492fSopenharmony_ci        {"distributionOSApiVersion", nullptr, nullptr, NAPI_GetDistributionOSApiVersion, nullptr, nullptr, napi_default, nullptr},
535d9f0492fSopenharmony_ci        {"distributionOSApiName", nullptr, nullptr, NAPI_GetDistributionOSApiName, nullptr, nullptr, napi_default, nullptr},
536d9f0492fSopenharmony_ci        {"distributionOSReleaseType", nullptr, nullptr, NAPI_GetDistributionOSReleaseType, nullptr, nullptr, napi_default, nullptr},
537d9f0492fSopenharmony_ci        {"ODID", nullptr, nullptr, GetDevOdid, nullptr, nullptr, napi_default, nullptr},
538d9f0492fSopenharmony_ci    };
539d9f0492fSopenharmony_ci    NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc));
540d9f0492fSopenharmony_ci
541d9f0492fSopenharmony_ci    return exports;
542d9f0492fSopenharmony_ci}
543d9f0492fSopenharmony_ciEXTERN_C_END
544d9f0492fSopenharmony_ci
545d9f0492fSopenharmony_ci/*
546d9f0492fSopenharmony_ci * Module definition
547d9f0492fSopenharmony_ci */
548d9f0492fSopenharmony_cistatic napi_module _module = {
549d9f0492fSopenharmony_ci    .nm_version = 1,
550d9f0492fSopenharmony_ci    .nm_flags = 0,
551d9f0492fSopenharmony_ci    .nm_filename = NULL,
552d9f0492fSopenharmony_ci    .nm_register_func = Init,
553d9f0492fSopenharmony_ci    .nm_modname = "deviceInfo",
554d9f0492fSopenharmony_ci    .nm_priv = ((void *)0),
555d9f0492fSopenharmony_ci    .reserved = { 0 }
556d9f0492fSopenharmony_ci};
557d9f0492fSopenharmony_ci/*
558d9f0492fSopenharmony_ci * Module registration function
559d9f0492fSopenharmony_ci */
560d9f0492fSopenharmony_ciextern "C" __attribute__((constructor)) void RegisterModule(void)
561d9f0492fSopenharmony_ci{
562d9f0492fSopenharmony_ci    napi_module_register(&_module);
563d9f0492fSopenharmony_ci}
564