• 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 "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