1 /*
2  * Copyright (c) 2023 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 "init.h"
17 
18 #include "allow_type.h"
19 #include "common.h"
20 #include "standby_napi_module.h"
21 
22 namespace OHOS {
23 namespace DevStandbyMgr {
24 EXTERN_C_START
25 
DeviceStandbyFuncInit(napi_env env,napi_value exports)26 napi_value DeviceStandbyFuncInit(napi_env env, napi_value exports)
27 {
28     napi_property_descriptor desc[] = {
29         DECLARE_NAPI_FUNCTION("isDeviceInStandby", IsDeviceInStandby),
30         DECLARE_NAPI_FUNCTION("getExemptedApps", GetExemptionListApps),
31         DECLARE_NAPI_FUNCTION("requestExemptionResource", ApplyAllowResource),
32         DECLARE_NAPI_FUNCTION("releaseExemptionResource", UnapplyAllowResource),
33     };
34     NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
35 
36     return exports;
37 }
38 
SetNamedPropertyByInteger(napi_env env,napi_value dstObj,int32_t objName,const char * propName)39 void SetNamedPropertyByInteger(napi_env env, napi_value dstObj, int32_t objName, const char *propName)
40 {
41     napi_value prop = nullptr;
42     if (napi_create_int32(env, objName, &prop) == napi_ok) {
43         napi_set_named_property(env, dstObj, propName, prop);
44     }
45 }
46 
DeviceStandbyTypeInit(napi_env env,napi_value exports)47 napi_value DeviceStandbyTypeInit(napi_env env, napi_value exports)
48 {
49     napi_value obj = nullptr;
50     napi_create_object(env, &obj);
51 
52     SetNamedPropertyByInteger(env, obj, static_cast<uint32_t>(AllowType::NETWORK), "NETWORK");
53     SetNamedPropertyByInteger(env, obj, static_cast<uint32_t>(AllowType::RUNNING_LOCK), "RUNNING_LOCK");
54     SetNamedPropertyByInteger(env, obj, static_cast<uint32_t>(AllowType::TIMER), "TIMER");
55     SetNamedPropertyByInteger(env, obj, static_cast<uint32_t>(AllowType::WORK_SCHEDULER), "WORK_SCHEDULER");
56     SetNamedPropertyByInteger(env, obj, static_cast<uint32_t>(AllowType::AUTO_SYNC), "AUTO_SYNC");
57     SetNamedPropertyByInteger(env, obj, static_cast<uint32_t>(AllowType::PUSH), "PUSH");
58     SetNamedPropertyByInteger(env, obj, static_cast<uint32_t>(AllowType::FREEZE), "FREEZE");
59 
60     napi_property_descriptor exportFuncs[] = {
61         DECLARE_NAPI_PROPERTY("ResourceType", obj),
62     };
63 
64     napi_define_properties(env, exports, sizeof(exportFuncs) / sizeof(*exportFuncs), exportFuncs);
65     return exports;
66 }
67 
68 /*
69  * Module export function
70  */
DeviceStandbyInit(napi_env env,napi_value exports)71 static napi_value DeviceStandbyInit(napi_env env, napi_value exports)
72 {
73     /*
74      * Properties define
75      */
76     DeviceStandbyFuncInit(env, exports);
77     DeviceStandbyTypeInit(env, exports);
78     return exports;
79 }
80 
81 /*
82  * Module register function
83  */
RegisterModule(void)84 __attribute__((constructor)) void RegisterModule(void)
85 {
86     napi_module_register(&g_module);
87 }
88 EXTERN_C_END
89 }  // namespace DevStandbyMgr
90 }  // namespace OHOS
91