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 "scan_parameters_helper.h"
17 #include "napi_scan_utils.h"
18 #include "scan_constant.h"
19 #include "scan_log.h"
20
21 namespace OHOS::Scan {
22 static constexpr const char *PARAM_SCAN_PARA_FORMAT = "format";
23 static constexpr const char *PARAM_SCAN_PARA_LAST_FRAME = "lastFrame";
24 static constexpr const char *PARAM_SCAN_PARA_BYTES = "bytesPerLine";
25 static constexpr const char *PARAM_SCAN_PARA_PIXELS = "pixelsPerLine";
26 static constexpr const char *PARAM_SCAN_PARA_LINES = "lines";
27 static constexpr const char *PARAM_SCAN_PARA_DEPTH = "depth";
28
MakeJsObject(napi_env env,const ScanParameters & para)29 napi_value ScanParametersHelper::MakeJsObject(napi_env env, const ScanParameters ¶)
30 {
31 napi_value jsObj = nullptr;
32 SCAN_CALL(env, napi_create_object(env, &jsObj));
33 NapiScanUtils::SetUint32Property(env, jsObj, PARAM_SCAN_PARA_FORMAT, para.GetFormat());
34 NapiScanUtils::SetBooleanProperty(env, jsObj, PARAM_SCAN_PARA_LAST_FRAME, para.GetLastFrame());
35 NapiScanUtils::SetInt32Property(env, jsObj, PARAM_SCAN_PARA_BYTES, para.GetBytesPerLine());
36 NapiScanUtils::SetInt32Property(env, jsObj, PARAM_SCAN_PARA_PIXELS, para.GetPixelsPerLine());
37 NapiScanUtils::SetInt32Property(env, jsObj, PARAM_SCAN_PARA_LINES, para.GetLines());
38 NapiScanUtils::SetInt32Property(env, jsObj, PARAM_SCAN_PARA_DEPTH, para.GetDepth());
39 return jsObj;
40 }
41
BuildFromJs(napi_env env,napi_value jsValue)42 std::shared_ptr<ScanParameters> ScanParametersHelper::BuildFromJs(napi_env env, napi_value jsValue)
43 {
44 auto nativeObj = std::make_shared<ScanParameters>();
45
46 if (!ValidateProperty(env, jsValue)) {
47 SCAN_HILOGE("Invalid property of scan parameters");
48 return nullptr;
49 }
50
51 ScanFrame format = (ScanFrame)NapiScanUtils::GetUint32Property(env, jsValue, PARAM_SCAN_PARA_FORMAT);
52 nativeObj->SetFormat(format);
53 bool lastFrame = NapiScanUtils::GetBooleanProperty(env, jsValue, PARAM_SCAN_PARA_LAST_FRAME);
54 nativeObj->SetLastFrame(lastFrame);
55 int32_t bytesPerLine = NapiScanUtils::GetInt32Property(env, jsValue, PARAM_SCAN_PARA_BYTES);
56 nativeObj->SetBytesPerLine(bytesPerLine);
57 int32_t pixelsPerLine = NapiScanUtils::GetInt32Property(env, jsValue, PARAM_SCAN_PARA_PIXELS);
58 nativeObj->SetPixelsPerLine(pixelsPerLine);
59 int32_t lines = NapiScanUtils::GetInt32Property(env, jsValue, PARAM_SCAN_PARA_LINES);
60 nativeObj->SetLines(lines);
61 int32_t depth = NapiScanUtils::GetInt32Property(env, jsValue, PARAM_SCAN_PARA_DEPTH);
62 nativeObj->SetDepth(depth);
63
64 SCAN_HILOGE("Build Scan Parameters succeed");
65 return nativeObj;
66 }
67
ValidateProperty(napi_env env,napi_value object)68 bool ScanParametersHelper::ValidateProperty(napi_env env, napi_value object)
69 {
70 std::map<std::string, ScanParamStatus> propertyList = {
71 {PARAM_SCAN_PARA_FORMAT, SCAN_PARAM_OPT},
72 {PARAM_SCAN_PARA_LAST_FRAME, SCAN_PARAM_OPT},
73 {PARAM_SCAN_PARA_BYTES, SCAN_PARAM_OPT},
74 {PARAM_SCAN_PARA_PIXELS, SCAN_PARAM_OPT},
75 {PARAM_SCAN_PARA_LINES, SCAN_PARAM_OPT},
76 {PARAM_SCAN_PARA_DEPTH, SCAN_PARAM_OPT},
77 };
78
79 auto names = NapiScanUtils::GetPropertyNames(env, object);
80 for (auto name : names) {
81 if (propertyList.find(name) == propertyList.end()) {
82 SCAN_HILOGE("Invalid property: %{public}s", name.c_str());
83 return false;
84 }
85 propertyList[name] = SCAN_PARAM_SET;
86 }
87 bool hasFormat = propertyList[PARAM_SCAN_PARA_FORMAT] == SCAN_PARAM_SET;
88 bool hasFrame = propertyList[PARAM_SCAN_PARA_LAST_FRAME] == SCAN_PARAM_SET;
89 bool hasBytes = propertyList[PARAM_SCAN_PARA_BYTES] == SCAN_PARAM_SET;
90 bool hasPixels = propertyList[PARAM_SCAN_PARA_PIXELS] == SCAN_PARAM_SET;
91 bool hasLines = propertyList[PARAM_SCAN_PARA_LINES] == SCAN_PARAM_SET;
92 bool hasDepth = propertyList[PARAM_SCAN_PARA_DEPTH] == SCAN_PARAM_SET;
93
94 if (!hasFormat || !hasFrame || !hasBytes || !hasPixels || !hasLines || !hasDepth) {
95 return false;
96 }
97 return true;
98 }
99 } // namespace OHOS::Scan
100