• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 <cstddef>
19 
20 #include "get_work_status.h"
21 #include "is_last_work_time_out.h"
22 #include "start_work.h"
23 #include "stop_and_clear_works.h"
24 #include "stop_work.h"
25 #include "obtain_all_works.h"
26 #include "work_condition.h"
27 #include "work_sched_hilog.h"
28 #include "common.h"
29 
30 namespace OHOS {
31 namespace WorkScheduler {
32 EXTERN_C_START
33 
34 static const uint8_t ARG_FIRST = 1;
35 
36 napi_ref g_networkTypeConstructor = nullptr;
37 napi_ref g_chargingTypeConstructor = nullptr;
38 napi_ref g_batteryStatusConstructor = nullptr;
39 napi_ref g_storageRequestConstructor = nullptr;
40 
InitApi(napi_env env,napi_value exports)41 napi_value InitApi(napi_env env, napi_value exports)
42 {
43     WS_HILOGD("Work scheduler napi init.");
44     napi_property_descriptor desc[] = {
45         DECLARE_NAPI_FUNCTION("startWork", StartWork),
46         DECLARE_NAPI_FUNCTION("stopWork", StopWork),
47         DECLARE_NAPI_FUNCTION("getWorkStatus", GetWorkStatus),
48         DECLARE_NAPI_FUNCTION("obtainAllWorks", ObtainAllWorks),
49         DECLARE_NAPI_FUNCTION("stopAndClearWorks", StopAndClearWorks),
50         DECLARE_NAPI_FUNCTION("isLastWorkTimeOut", IsLastWorkTimeOut),
51     };
52 
53     NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
54 
55     // Init constant value.
56     InitNetworkType(env, exports);
57     InitChargingType(env, exports);
58     InitBatteryStatus(env, exports);
59     InitStorageRequest(env, exports);
60 
61     return exports;
62 }
63 
InitNetworkType(napi_env env,napi_value exports)64 napi_value InitNetworkType(napi_env env, napi_value exports)
65 {
66     napi_value networkTypeAny;
67     napi_value networkTypeMobile;
68     napi_value networkTypeWifi;
69     napi_value networkTypeBluetooth;
70     napi_value networkTypeWifiP2p;
71     napi_value networkTypeEthernet;
72     int32_t refCount = 1;
73 
74     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Network::NETWORK_TYPE_ANY),
75         &networkTypeAny);
76     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Network::NETWORK_TYPE_MOBILE),
77         &networkTypeMobile);
78     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Network::NETWORK_TYPE_WIFI),
79         &networkTypeWifi);
80     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Network::NETWORK_TYPE_BLUETOOTH),
81         &networkTypeBluetooth);
82     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Network::NETWORK_TYPE_WIFI_P2P),
83         &networkTypeWifiP2p);
84     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Network::NETWORK_TYPE_ETHERNET),
85         &networkTypeEthernet);
86 
87     napi_property_descriptor desc[] = {
88         DECLARE_NAPI_STATIC_PROPERTY("NETWORK_TYPE_ANY", networkTypeAny),
89         DECLARE_NAPI_STATIC_PROPERTY("NETWORK_TYPE_MOBILE", networkTypeMobile),
90         DECLARE_NAPI_STATIC_PROPERTY("NETWORK_TYPE_WIFI", networkTypeWifi),
91         DECLARE_NAPI_STATIC_PROPERTY("NETWORK_TYPE_BLUETOOTH", networkTypeBluetooth),
92         DECLARE_NAPI_STATIC_PROPERTY("NETWORK_TYPE_WIFI_P2P", networkTypeWifiP2p),
93         DECLARE_NAPI_STATIC_PROPERTY("NETWORK_TYPE_ETHERNET", networkTypeEthernet),
94     };
95 
96     napi_value result = nullptr;
97     napi_define_class(env, "NetworkType", NAPI_AUTO_LENGTH, EnumNetworkTypeConstructor,
98         nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
99     napi_create_reference(env, result, refCount, &g_networkTypeConstructor);
100     napi_set_named_property(env, exports, "NetworkType", result);
101     return exports;
102 }
103 
EnumNetworkTypeConstructor(napi_env env,napi_callback_info info)104 napi_value EnumNetworkTypeConstructor(napi_env env, napi_callback_info info)
105 {
106     size_t argc = 0;
107     napi_value args[ARG_FIRST] = {nullptr};
108     napi_value res = nullptr;
109     void *data = nullptr;
110 
111     napi_status status = napi_get_cb_info(env, info, &argc, args, &res, &data);
112     if (status != napi_ok) {
113         return nullptr;
114     }
115 
116     return res;
117 }
118 
InitChargingType(napi_env env,napi_value exports)119 napi_value InitChargingType(napi_env env, napi_value exports)
120 {
121     napi_value chargingPluggedAny;
122     napi_value chargingPluggedAc;
123     napi_value chargingPluggedUsb;
124     napi_value chargingPluggedWireless;
125     int32_t refCount = 1;
126 
127     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Charger::CHARGING_PLUGGED_ANY),
128         &chargingPluggedAny);
129     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Charger::CHARGING_PLUGGED_AC),
130         &chargingPluggedAc);
131     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Charger::CHARGING_PLUGGED_USB),
132         &chargingPluggedUsb);
133     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Charger::CHARGING_PLUGGED_WIRELESS),
134         &chargingPluggedWireless);
135 
136     napi_property_descriptor desc[] = {
137         DECLARE_NAPI_STATIC_PROPERTY("CHARGING_PLUGGED_ANY", chargingPluggedAny),
138         DECLARE_NAPI_STATIC_PROPERTY("CHARGING_PLUGGED_AC", chargingPluggedAc),
139         DECLARE_NAPI_STATIC_PROPERTY("CHARGING_PLUGGED_USB", chargingPluggedUsb),
140         DECLARE_NAPI_STATIC_PROPERTY("CHARGING_PLUGGED_WIRELESS", chargingPluggedWireless),
141     };
142 
143     napi_value result = nullptr;
144     napi_define_class(env, "ChargingType", NAPI_AUTO_LENGTH, EnumChargingTypeConstructor,
145         nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
146     napi_create_reference(env, result, refCount, &g_chargingTypeConstructor);
147     napi_set_named_property(env, exports, "ChargingType", result);
148     return exports;
149 }
150 
EnumChargingTypeConstructor(napi_env env,napi_callback_info info)151 napi_value EnumChargingTypeConstructor(napi_env env, napi_callback_info info)
152 {
153     size_t argc = 0;
154     napi_value args[ARG_FIRST] = {nullptr};
155     napi_value res = nullptr;
156     void *data = nullptr;
157 
158     napi_status status = napi_get_cb_info(env, info, &argc, args, &res, &data);
159     if (status != napi_ok) {
160         return nullptr;
161     }
162 
163     return res;
164 }
165 
InitBatteryStatus(napi_env env,napi_value exports)166 napi_value InitBatteryStatus(napi_env env, napi_value exports)
167 {
168     napi_value batteryStatusLow;
169     napi_value batteryStatusOkay;
170     napi_value batteryStatusLowOrOkay;
171     int32_t refCount = 1;
172 
173     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::BatteryStatus::BATTERY_STATUS_LOW),
174         &batteryStatusLow);
175     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::BatteryStatus::BATTERY_STATUS_OKAY),
176         &batteryStatusOkay);
177     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::BatteryStatus::BATTERY_STATUS_LOW_OR_OKAY),
178         &batteryStatusLowOrOkay);
179 
180     napi_property_descriptor desc[] = {
181         DECLARE_NAPI_STATIC_PROPERTY("BATTERY_STATUS_LOW", batteryStatusLow),
182         DECLARE_NAPI_STATIC_PROPERTY("BATTERY_STATUS_OKAY", batteryStatusOkay),
183         DECLARE_NAPI_STATIC_PROPERTY("BATTERY_STATUS_LOW_OR_OKAY", batteryStatusLowOrOkay),
184     };
185 
186     napi_value result = nullptr;
187     napi_define_class(env, "BatteryStatus", NAPI_AUTO_LENGTH, EnumBatteryStatusConstructor, nullptr,
188         sizeof(desc) / sizeof(*desc), desc, &result);
189     napi_create_reference(env, result, refCount, &g_batteryStatusConstructor);
190     napi_set_named_property(env, exports, "BatteryStatus", result);
191     return exports;
192 }
193 
EnumBatteryStatusConstructor(napi_env env,napi_callback_info info)194 napi_value EnumBatteryStatusConstructor(napi_env env, napi_callback_info info)
195 {
196     size_t argc = 0;
197     napi_value args[ARG_FIRST] = {nullptr};
198     napi_value res = nullptr;
199     void *data = nullptr;
200 
201     napi_status status = napi_get_cb_info(env, info, &argc, args, &res, &data);
202     if (status != napi_ok) {
203         return nullptr;
204     }
205     return res;
206 }
207 
InitStorageRequest(napi_env env,napi_value exports)208 napi_value InitStorageRequest(napi_env env, napi_value exports)
209 {
210     napi_value storageLeveLow;
211     napi_value storageLevelOkay;
212     napi_value storageLevelLowOrOkay;
213     int32_t refCount = 1;
214 
215     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Storage::STORAGE_LEVEL_LOW),
216         &storageLeveLow);
217     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Storage::STORAGE_LEVEL_OKAY),
218         &storageLevelOkay);
219     napi_create_uint32(env, static_cast<uint32_t>(WorkCondition::Storage::STORAGE_LEVEL_LOW_OR_OKAY),
220         &storageLevelLowOrOkay);
221 
222     napi_property_descriptor desc[] = {
223         DECLARE_NAPI_STATIC_PROPERTY("STORAGE_LEVEL_LOW", storageLeveLow),
224         DECLARE_NAPI_STATIC_PROPERTY("STORAGE_LEVEL_OKAY", storageLevelOkay),
225         DECLARE_NAPI_STATIC_PROPERTY("STORAGE_LEVEL_LOW_OR_OKAY", storageLevelLowOrOkay),
226     };
227 
228     napi_value result = nullptr;
229     napi_define_class(env, "StorageRequest", NAPI_AUTO_LENGTH, EnumStorageRequestConstructor,
230         nullptr, sizeof(desc) / sizeof(*desc), desc, &result);
231     napi_create_reference(env, result, refCount, &g_storageRequestConstructor);
232     napi_set_named_property(env, exports, "StorageRequest", result);
233     return exports;
234 }
235 
EnumStorageRequestConstructor(napi_env env,napi_callback_info info)236 napi_value EnumStorageRequestConstructor(napi_env env, napi_callback_info info)
237 {
238     size_t argc = 0;
239     napi_value args[ARG_FIRST] = {nullptr};
240     napi_value res = nullptr;
241     void *data = nullptr;
242 
243     napi_status status = napi_get_cb_info(env, info, &argc, args, &res, &data);
244     if (status != napi_ok) {
245         return nullptr;
246     }
247 
248     return res;
249 }
250 
251 /*
252  * Module register function
253  */
RegisterModule(void)254 __attribute__((constructor)) void RegisterModule(void)
255 {
256     napi_module_register(&g_apiModule);
257 }
258 EXTERN_C_END
259 } // namespace WorkScheduler
260 } // namespace OHOS