146debc2cSopenharmony_ci/*
246debc2cSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
346debc2cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
446debc2cSopenharmony_ci * you may not use this file except in compliance with the License.
546debc2cSopenharmony_ci * You may obtain a copy of the License at
646debc2cSopenharmony_ci *
746debc2cSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
846debc2cSopenharmony_ci *
946debc2cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1046debc2cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1146debc2cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1246debc2cSopenharmony_ci * See the License for the specific language governing permissions and
1346debc2cSopenharmony_ci * limitations under the License.
1446debc2cSopenharmony_ci */
1546debc2cSopenharmony_ci
1646debc2cSopenharmony_ci#ifndef SCAN_CONSTANT_H
1746debc2cSopenharmony_ci#define SCAN_CONSTANT_H
1846debc2cSopenharmony_ci
1946debc2cSopenharmony_ci#include <string>
2046debc2cSopenharmony_ci
2146debc2cSopenharmony_cinamespace OHOS::Scan {
2246debc2cSopenharmony_ci
2346debc2cSopenharmony_ci#define SCAN_RET_NONE
2446debc2cSopenharmony_ci#define SCAN_MAX_COUNT 1000
2546debc2cSopenharmony_ci
2646debc2cSopenharmony_ci#define SCAN_ASSERT_BASE(env, assertion, message, retVal)  \
2746debc2cSopenharmony_ci    do {                                                    \
2846debc2cSopenharmony_ci        if (!(assertion)) {                                 \
2946debc2cSopenharmony_ci            SCAN_HILOGE(message);                          \
3046debc2cSopenharmony_ci            return retVal;                                  \
3146debc2cSopenharmony_ci        }                                                   \
3246debc2cSopenharmony_ci    } while (0)
3346debc2cSopenharmony_ci
3446debc2cSopenharmony_ci#define SCAN_ASSERT(env, assertion, message) SCAN_ASSERT_BASE(env, assertion, message, nullptr)
3546debc2cSopenharmony_ci
3646debc2cSopenharmony_ci#define SCAN_ASSERT_RETURN_VOID(env, assertion, message) SCAN_ASSERT_BASE(env, assertion, message, SCAN_RET_NONE)
3746debc2cSopenharmony_ci
3846debc2cSopenharmony_ci#define SCAN_CALL_BASE(env, theCall, retVal)   \
3946debc2cSopenharmony_ci    do {                                        \
4046debc2cSopenharmony_ci        if ((theCall) != napi_ok) {             \
4146debc2cSopenharmony_ci            return retVal;                      \
4246debc2cSopenharmony_ci        }                                       \
4346debc2cSopenharmony_ci    } while (0)
4446debc2cSopenharmony_ci
4546debc2cSopenharmony_ci#define SCAN_CALL(env, theCall) SCAN_CALL_BASE(env, theCall, nullptr)
4646debc2cSopenharmony_ci
4746debc2cSopenharmony_ci#define SCAN_CALL_RETURN_VOID(env, theCall) SCAN_CALL_BASE(env, theCall, SCAN_RET_NONE)
4846debc2cSopenharmony_ci
4946debc2cSopenharmony_ci#define DELETE_AND_NULLIFY(ptr) \
5046debc2cSopenharmony_ci    if ((ptr) != nullptr) { \
5146debc2cSopenharmony_ci        delete (ptr); \
5246debc2cSopenharmony_ci        (ptr) = nullptr; \
5346debc2cSopenharmony_ci    }
5446debc2cSopenharmony_ci
5546debc2cSopenharmony_ci#define DELETE_ARRAY_AND_NULLIFY(ptr) \
5646debc2cSopenharmony_ci    if ((ptr) != nullptr) { \
5746debc2cSopenharmony_ci        delete[] (ptr); \
5846debc2cSopenharmony_ci        (ptr) = nullptr; \
5946debc2cSopenharmony_ci    }
6046debc2cSopenharmony_ci
6146debc2cSopenharmony_ci#define FREE_AND_NULLPTR(ptr) \
6246debc2cSopenharmony_ci    if ((ptr) != nullptr) { \
6346debc2cSopenharmony_ci        free (ptr); \
6446debc2cSopenharmony_ci        (ptr) = nullptr; \
6546debc2cSopenharmony_ci    }
6646debc2cSopenharmony_ci
6746debc2cSopenharmony_ci#define INIT_CALLBACK_PARAMS \
6846debc2cSopenharmony_ci        uv_loop_s *loop = nullptr; \
6946debc2cSopenharmony_ci        bool flag = true; \
7046debc2cSopenharmony_ci        napi_get_uv_event_loop(env_, &loop); \
7146debc2cSopenharmony_ci        CHECK_AND_CREATE(loop, "Failed to get uv event loop", flag); \
7246debc2cSopenharmony_ci        uv_work_t *work = nullptr; \
7346debc2cSopenharmony_ci        CallbackParam *param = nullptr; \
7446debc2cSopenharmony_ci        CallbackContext *context = nullptr; \
7546debc2cSopenharmony_ci        CreateCallbackParam(work, param, context, flag) \
7646debc2cSopenharmony_ci
7746debc2cSopenharmony_ci#define CHECK_AND_CREATE(pointer, error_message, flag) \
7846debc2cSopenharmony_ci    if ((pointer) == nullptr) { \
7946debc2cSopenharmony_ci        SCAN_HILOGE(error_message); \
8046debc2cSopenharmony_ci        (flag) = false; \
8146debc2cSopenharmony_ci    }
8246debc2cSopenharmony_ci
8346debc2cSopenharmony_ci#define CREATE_PRC_MESSAGE \
8446debc2cSopenharmony_ci    MessageParcel data; \
8546debc2cSopenharmony_ci    MessageParcel reply; \
8646debc2cSopenharmony_ci    MessageOption option; \
8746debc2cSopenharmony_ci    data.WriteInterfaceToken(GetDescriptor()) \
8846debc2cSopenharmony_ci
8946debc2cSopenharmony_ci#define CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, retVal)                                             \
9046debc2cSopenharmony_ci    do {                                                                                            \
9146debc2cSopenharmony_ci        if ((count) > SCAN_MAX_COUNT) {                                                      \
9246debc2cSopenharmony_ci            SCAN_HILOGW("input val is exceed scan max range:%{public}d", SCAN_MAX_COUNT);  \
9346debc2cSopenharmony_ci            return retVal;                                                                          \
9446debc2cSopenharmony_ci        }                                                                                           \
9546debc2cSopenharmony_ci    } while (0)
9646debc2cSopenharmony_ci
9746debc2cSopenharmony_ci#define CHECK_IS_EXCEED_SCAN_RANGE(count)          CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, nullptr)
9846debc2cSopenharmony_ci#define CHECK_IS_EXCEED_SCAN_RANGE_BOOL(count)     CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, false)
9946debc2cSopenharmony_ci#define CHECK_IS_EXCEED_SCAN_RANGE_VOID(count)     CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, E_SCAN_NONE)
10046debc2cSopenharmony_ci#define CHECK_IS_EXCEED_SCAN_RANGE_INT(count)      CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, E_SCAN_INVALID_PARAMETER)
10146debc2cSopenharmony_ci
10246debc2cSopenharmony_cienum ScanErrorCode {
10346debc2cSopenharmony_ci    // FWK ERROR
10446debc2cSopenharmony_ci    E_SCAN_NONE = 0, // no error
10546debc2cSopenharmony_ci    E_SCAN_NO_PERMISSION = 201, // no permission
10646debc2cSopenharmony_ci    E_SCAN_INVALID_PARAMETER = 401, // invalid parameter
10746debc2cSopenharmony_ci    E_SCAN_GENERIC_FAILURE = 13100001, // generic failure of scan
10846debc2cSopenharmony_ci    E_SCAN_RPC_FAILURE = 13100002, // RPC failure
10946debc2cSopenharmony_ci    E_SCAN_SERVER_FAILURE = 13100003, // failure of scan service
11046debc2cSopenharmony_ci
11146debc2cSopenharmony_ci    // DEVICE ERROR
11246debc2cSopenharmony_ci    E_SCAN_GOOD = 13200000,  /* everything A-OK */
11346debc2cSopenharmony_ci    E_SCAN_UNSUPPORTED = 13200001,  /* operation is not supported */
11446debc2cSopenharmony_ci    E_SCAN_CANCELLED = 13200002,  /* operation was cancelled */
11546debc2cSopenharmony_ci    E_SCAN_DEVICE_BUSY = 13200003,  /* device is busy; try again later */
11646debc2cSopenharmony_ci    E_SCAN_INVAL = 13200004,  /* data is invalid (includes no dev at open) */
11746debc2cSopenharmony_ci    E_SCAN_EOF = 13200005,  /* no more data available (end-of-file) */
11846debc2cSopenharmony_ci    E_SCAN_JAMMED = 13200006,  /* document feeder jammed */
11946debc2cSopenharmony_ci    E_SCAN_NO_DOCS = 13200007,  /* document feeder out of documents */
12046debc2cSopenharmony_ci    E_SCAN_COVER_OPEN = 13200008,  /* scanner cover is open */
12146debc2cSopenharmony_ci    E_SCAN_IO_ERROR = 13200009,  /* error during device I/O */
12246debc2cSopenharmony_ci    E_SCAN_NO_MEM = 13200010,  /* out of memory */
12346debc2cSopenharmony_ci    E_SCAN_ACCESS_DENIED = 13200011,  /* access to resource has been denied */
12446debc2cSopenharmony_ci};
12546debc2cSopenharmony_ci
12646debc2cSopenharmony_ciconst uint32_t SCAN_INVALID_ID = 0xFFFFFFFF;   // -1
12746debc2cSopenharmony_ciconst uint16_t USB_VALUE_DESCRIPTOR_INDEX_SERIAL_NUMBER = 0X03;
12846debc2cSopenharmony_ciconst uint8_t USB_REQUESTTYPE_DEVICE_TO_HOST = 0X80;
12946debc2cSopenharmony_ciconst uint8_t USB_REQUEST_GET_DESCRIPTOR = 0X06;
13046debc2cSopenharmony_ciconst uint16_t USB_VALUE_DESCRIPTOR_TYPE_STRING = 0X03;
13146debc2cSopenharmony_ciconst int HTTP_COMMON_CONST_VALUE_8 = 8;
13246debc2cSopenharmony_ciconst uint16_t USB_INDEX_LANGUAGE_ID_ENGLISH = 0X409;
13346debc2cSopenharmony_ciconst int HTTP_COMMON_CONST_VALUE_500 = 500;
13446debc2cSopenharmony_ciconst int HTTP_COMMON_CONST_VALUE_100 = 100;
13546debc2cSopenharmony_ciconst int HTTP_COMMON_CONST_VALUE_2 = 2;
13646debc2cSopenharmony_ciconst int USB_DEVICEID_FIRSTID_LEN_3 = 3;
13746debc2cSopenharmony_ci
13846debc2cSopenharmony_cienum ScanFrame  {
13946debc2cSopenharmony_ci    SCAN_FRAME_GRAY = 0,  /* band covering human visual range */
14046debc2cSopenharmony_ci    SCAN_FRAME_RGB = 1,  /* pixel-interleaved red/green/blue bands */
14146debc2cSopenharmony_ci    SCAN_FRAME_RED = 2,  /* red band only */
14246debc2cSopenharmony_ci    SCAN_FRAME_GREEN = 3,  /* green band only */
14346debc2cSopenharmony_ci    SCAN_FRAME_BLUE = 4,  /* blue band only */
14446debc2cSopenharmony_ci};
14546debc2cSopenharmony_ci
14646debc2cSopenharmony_cienum ScanExtensionState {
14746debc2cSopenharmony_ci    SCAN_EXTENSION_UNLOAD,
14846debc2cSopenharmony_ci    SCAN_EXTENSION_LOADING,
14946debc2cSopenharmony_ci    SCAN_EXTENSION_LOADED,
15046debc2cSopenharmony_ci};
15146debc2cSopenharmony_ci
15246debc2cSopenharmony_cienum ScanParamStatus {
15346debc2cSopenharmony_ci    SCAN_PARAM_NOT_SET,
15446debc2cSopenharmony_ci    SCAN_PARAM_OPT,
15546debc2cSopenharmony_ci    SCAN_PARAM_SET,
15646debc2cSopenharmony_ci};
15746debc2cSopenharmony_ci
15846debc2cSopenharmony_cienum ScanOptionOpType {
15946debc2cSopenharmony_ci    SCAN_ACTION_GET_VALUE = 0,
16046debc2cSopenharmony_ci    SCAN_ACTION_SET_VALUE,
16146debc2cSopenharmony_ci    SCAN_ACTION_SET_AUTO
16246debc2cSopenharmony_ci};
16346debc2cSopenharmony_ci
16446debc2cSopenharmony_cienum ScanOptionValueType {
16546debc2cSopenharmony_ci    SCAN_VALUE_NONE,
16646debc2cSopenharmony_ci    SCAN_VALUE_NUM,
16746debc2cSopenharmony_ci    SCAN_VALUE_NUM_LIST,
16846debc2cSopenharmony_ci    SCAN_VALUE_STR,
16946debc2cSopenharmony_ci    SCAN_VALUE_BOOL,
17046debc2cSopenharmony_ci};
17146debc2cSopenharmony_ci
17246debc2cSopenharmony_cienum ScanConstraintType {
17346debc2cSopenharmony_ci    SCAN_CONSTRAINT_NONE = 0,
17446debc2cSopenharmony_ci    SCAN_CONSTRAINT_RANGE = 1,
17546debc2cSopenharmony_ci    SCAN_CONSTRAINT_WORD_LIST = 2,
17646debc2cSopenharmony_ci    SCAN_CONSTRAINT_STRING_LIST = 3,
17746debc2cSopenharmony_ci};
17846debc2cSopenharmony_ci
17946debc2cSopenharmony_cienum ScannerState {
18046debc2cSopenharmony_ci    SCANNER_READY = 0,
18146debc2cSopenharmony_ci    SCANNER_SCANING = 1,
18246debc2cSopenharmony_ci    SCANNER_SEARCHING = 2,
18346debc2cSopenharmony_ci    SCANNER_CANCELING = 3,
18446debc2cSopenharmony_ci};
18546debc2cSopenharmony_ci} // namespace OHOS::Scan
18646debc2cSopenharmony_ci#endif // SCAN_CONSTANT_H
187