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 "napi_inner_scan.h"
17 #include "scan_constant.h"
18 #include "scan_log.h"
19 #include "napi_scan_utils.h"
20
21 using namespace OHOS::Scan;
22
23 static constexpr const char *FUNCTION_INIT_SCAN = "init";
24 static constexpr const char *FUNCTION_EXIT_SCAN = "exit";
25 static constexpr const char *FUNCTION_GET_SCANNER_LIST = "startScannerDiscovery";
26 static constexpr const char *FUNCTION_OPEN_SCANNER = "openScanner";
27 static constexpr const char *FUNCTION_CLOSE_SCANNER = "closeScanner";
28 static constexpr const char *FUNCTION_START_SCAN = "startScan";
29 static constexpr const char *FUNCTION_CANCEL_SCAN = "cancelScan";
30 static constexpr const char *FUNCTION_GET_SCAN_PROGRESS = "getPictureScanProgress";
31 static constexpr const char *FUNCTION_SET_SCAN_AUTO_OPTION = "setScanAutoOption";
32 static constexpr const char *FUNCTION_GET_SCAN_OPTION = "getScannerCurrentSetting";
33 static constexpr const char *FUNCTION_SET_SCAN_OPTION = "setScannerParameter";
34 static constexpr const char *FUNCTION_GET_SCAN_PARAMETERS = "getScannerParameter";
35
36 static constexpr const char *FUNCTION_ADD_SCANNER = "addScanner";
37 static constexpr const char *FUNCTION_DELETE_SCANNER = "deleteScanner";
38 static constexpr const char *FUNCTION_GET_ADDED_SCANNER = "getAddedScanners";
39 static constexpr const char *FUNCTION_REGISTER_EVENT = "on";
40 static constexpr const char *FUNCTION_UNREGISTER_EVENT = "off";
41
42
43 #define SCAN_NAPI_METHOD(name, func) \
44 { \
45 name, 0, func, 0, 0, 0, napi_default, 0 \
46 }
47
48 #define SCAN_NAPI_PROPERTY(name, val) \
49 { \
50 (name), nullptr, nullptr, nullptr, nullptr, val, napi_static, nullptr \
51 }
52
NapiCreateScanErrorCodeEnum(napi_env env)53 static napi_value NapiCreateScanErrorCodeEnum(napi_env env)
54 {
55 napi_value object = nullptr;
56 napi_status status = napi_create_object(env, &object);
57 if (status != napi_ok) {
58 SCAN_HILOGE("Failed to create object");
59 return nullptr;
60 }
61 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_NO_PERMISSION", E_SCAN_NO_PERMISSION);
62 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_NOT_SYSTEM_APPLICATION",
63 E_SCAN_ERROR_NOT_SYSTEM_APPLICATION);
64 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_INVALID_PARAMETER", E_SCAN_INVALID_PARAMETER);
65 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_GENERIC_FAILURE", E_SCAN_GENERIC_FAILURE);
66 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_RPC_FAILURE", E_SCAN_RPC_FAILURE);
67 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_SERVER_FAILURE", E_SCAN_SERVER_FAILURE);
68 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_UNSUPPORTED", E_SCAN_UNSUPPORTED);
69 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_CANCELED", E_SCAN_CANCELLED);
70 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_DEVICE_BUSY", E_SCAN_DEVICE_BUSY);
71 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_INVALID", E_SCAN_INVAL);
72 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_JAMMED", E_SCAN_JAMMED);
73 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_NO_DOCS", E_SCAN_NO_DOCS);
74 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_COVER_OPEN", E_SCAN_COVER_OPEN);
75 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_IO_ERROR", E_SCAN_IO_ERROR);
76 NapiScanUtils::SetUint32Property(env, object, "SCAN_ERROR_NO_MEMORY", E_SCAN_NO_MEM);
77 return object;
78 }
79
NapiCreateConstraintTypeEnum(napi_env env)80 static napi_value NapiCreateConstraintTypeEnum(napi_env env)
81 {
82 napi_value object = nullptr;
83 napi_status status = napi_create_object(env, &object);
84 if (status != napi_ok) {
85 SCAN_HILOGE("Failed to create object");
86 return nullptr;
87 }
88 NapiScanUtils::SetUint32Property(env, object, "SCAN_CONSTRAINT_NONE", SCAN_CONSTRAINT_NONE);
89 NapiScanUtils::SetUint32Property(env, object, "SCAN_CONSTRAINT_RANGE", SCAN_CONSTRAINT_RANGE);
90 NapiScanUtils::SetUint32Property(env, object, "SCAN_CONSTRAINT_WORD_LIST", SCAN_CONSTRAINT_WORD_LIST);
91 NapiScanUtils::SetUint32Property(env, object, "SCAN_CONSTRAINT_STRING_LIST", SCAN_CONSTRAINT_STRING_LIST);
92 return object;
93 }
94
NapiCreatePhysicalUnitEnum(napi_env env)95 static napi_value NapiCreatePhysicalUnitEnum(napi_env env)
96 {
97 napi_value object = nullptr;
98 napi_status status = napi_create_object(env, &object);
99 if (status != napi_ok) {
100 SCAN_HILOGE("Failed to create object");
101 return nullptr;
102 }
103 NapiScanUtils::SetUint32Property(env, object, "SCAN_UNIT_NONE", SCANNER_UNIT_NONE);
104 NapiScanUtils::SetUint32Property(env, object, "SCAN_UNIT_PIXEL", SCANNER_UNIT_PIXEL);
105 NapiScanUtils::SetUint32Property(env, object, "SCAN_UNIT_BIT", SCANNER_UNIT_BIT);
106 NapiScanUtils::SetUint32Property(env, object, "SCAN_UNIT_MM", SCANNER_UNIT_MM);
107 NapiScanUtils::SetUint32Property(env, object, "SCAN_UNIT_DPI", SCANNER_UNIT_DPI);
108 NapiScanUtils::SetUint32Property(env, object, "SCAN_UNIT_PERCENT", SCANNER_UNIT_PERCENT);
109 NapiScanUtils::SetUint32Property(env, object, "SCAN_UNIT_MICROSECOND", SCANNER_UNIT_MICROSECOND);
110 return object;
111 }
112
NapiCreateOptionValueTypeEnum(napi_env env)113 static napi_value NapiCreateOptionValueTypeEnum(napi_env env)
114 {
115 napi_value object = nullptr;
116 napi_status status = napi_create_object(env, &object);
117 if (status != napi_ok) {
118 SCAN_HILOGE("Failed to create object");
119 return nullptr;
120 }
121 NapiScanUtils::SetUint32Property(env, object, "SCAN_TYPE_BOOL", SCAN_VALUE_BOOL);
122 NapiScanUtils::SetUint32Property(env, object, "SCAN_TYPE_INT", SCAN_VALUE_NUM);
123 NapiScanUtils::SetUint32Property(env, object, "SCAN_TYPE_FIXED", SCAN_VALUE_FIXED);
124 NapiScanUtils::SetUint32Property(env, object, "SCAN_TYPE_STRING", SCAN_VALUE_STR);
125 return object;
126 }
127
NapiCreateScannerDiscoveryModeEnum(napi_env env)128 static napi_value NapiCreateScannerDiscoveryModeEnum(napi_env env)
129 {
130 napi_value object = nullptr;
131 napi_status status = napi_create_object(env, &object);
132 if (status != napi_ok) {
133 SCAN_HILOGE("Failed to create object");
134 return nullptr;
135 }
136 NapiScanUtils::SetStringPropertyUtf8(env, object, "TCP_STR", "TCP");
137 NapiScanUtils::SetStringPropertyUtf8(env, object, "USB_STR", "USB");
138 return object;
139 }
140
NapiCreateScannerSyncModeEnum(napi_env env)141 static napi_value NapiCreateScannerSyncModeEnum(napi_env env)
142 {
143 napi_value object = nullptr;
144 napi_status status = napi_create_object(env, &object);
145 if (status != napi_ok) {
146 SCAN_HILOGE("Failed to create object");
147 return nullptr;
148 }
149 NapiScanUtils::SetStringPropertyUtf8(env, object, "UPDATE_STR", "update");
150 NapiScanUtils::SetStringPropertyUtf8(env, object, "DELETE_STR", "delete");
151 return object;
152 }
153
Init(napi_env env,napi_value exports)154 static napi_value Init(napi_env env, napi_value exports)
155 {
156 napi_property_descriptor desc[] = {
157 SCAN_NAPI_METHOD(FUNCTION_INIT_SCAN, NapiInnerScan::InitScan),
158 SCAN_NAPI_METHOD(FUNCTION_EXIT_SCAN, NapiInnerScan::ExitScan),
159 SCAN_NAPI_METHOD(FUNCTION_GET_SCANNER_LIST, NapiInnerScan::GetScannerList),
160 SCAN_NAPI_METHOD(FUNCTION_OPEN_SCANNER, NapiInnerScan::OpenScanner),
161 SCAN_NAPI_METHOD(FUNCTION_CLOSE_SCANNER, NapiInnerScan::CloseScanner),
162 SCAN_NAPI_METHOD(FUNCTION_SET_SCAN_OPTION, NapiInnerScan::SetScanOption),
163 SCAN_NAPI_METHOD(FUNCTION_SET_SCAN_AUTO_OPTION, NapiInnerScan::SetScanAutoOption),
164 SCAN_NAPI_METHOD(FUNCTION_GET_SCAN_OPTION, NapiInnerScan::GetScanOption),
165 SCAN_NAPI_METHOD(FUNCTION_GET_SCAN_PARAMETERS, NapiInnerScan::GetScanParameters),
166 SCAN_NAPI_METHOD(FUNCTION_START_SCAN, NapiInnerScan::StartScan),
167 SCAN_NAPI_METHOD(FUNCTION_CANCEL_SCAN, NapiInnerScan::CancelScan),
168 SCAN_NAPI_METHOD(FUNCTION_GET_SCAN_PROGRESS, NapiInnerScan::GetScanProgress),
169 SCAN_NAPI_METHOD(FUNCTION_ADD_SCANNER, NapiInnerScan::AddScanner),
170 SCAN_NAPI_METHOD(FUNCTION_DELETE_SCANNER, NapiInnerScan::DeleteScanner),
171 SCAN_NAPI_METHOD(FUNCTION_GET_ADDED_SCANNER, NapiInnerScan::GetAddedScanner),
172 SCAN_NAPI_METHOD(FUNCTION_REGISTER_EVENT, NapiInnerScan::On),
173 SCAN_NAPI_METHOD(FUNCTION_UNREGISTER_EVENT, NapiInnerScan::Off),
174 SCAN_NAPI_PROPERTY("ScanErrorCode", NapiCreateScanErrorCodeEnum(env)),
175 SCAN_NAPI_PROPERTY("ConstraintType", NapiCreateConstraintTypeEnum(env)),
176 SCAN_NAPI_PROPERTY("PhysicalUnit", NapiCreatePhysicalUnitEnum(env)),
177 SCAN_NAPI_PROPERTY("OptionValueType", NapiCreateOptionValueTypeEnum(env)),
178 SCAN_NAPI_PROPERTY("ScannerDiscoveryMode", NapiCreateScannerDiscoveryModeEnum(env)),
179 SCAN_NAPI_PROPERTY("ScannerSyncMode", NapiCreateScannerSyncModeEnum(env)),
180 };
181
182 napi_status status = napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc);
183 SCAN_HILOGD("init scan module %{public}d", status);
184 return exports;
185 }
186
RegisterModule()187 static __attribute__((constructor)) void RegisterModule()
188 {
189 static napi_module module = { .nm_version = 1,
190 .nm_flags = 0,
191 .nm_filename = nullptr,
192 .nm_register_func = Init,
193 .nm_modname = "scan",
194 .nm_priv = ((void *)0),
195 .reserved = { 0 } };
196 napi_module_register(&module);
197 SCAN_HILOGD("module register scan");
198 }
199