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