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#ifndef SCAN_CONSTANT_H
17#define SCAN_CONSTANT_H
18
19#include <string>
20
21namespace OHOS::Scan {
22
23#define SCAN_RET_NONE
24#define SCAN_MAX_COUNT 1000
25
26#define SCAN_ASSERT_BASE(env, assertion, message, retVal)  \
27    do {                                                    \
28        if (!(assertion)) {                                 \
29            SCAN_HILOGE(message);                          \
30            return retVal;                                  \
31        }                                                   \
32    } while (0)
33
34#define SCAN_ASSERT(env, assertion, message) SCAN_ASSERT_BASE(env, assertion, message, nullptr)
35
36#define SCAN_ASSERT_RETURN_VOID(env, assertion, message) SCAN_ASSERT_BASE(env, assertion, message, SCAN_RET_NONE)
37
38#define SCAN_CALL_BASE(env, theCall, retVal)   \
39    do {                                        \
40        if ((theCall) != napi_ok) {             \
41            return retVal;                      \
42        }                                       \
43    } while (0)
44
45#define SCAN_CALL(env, theCall) SCAN_CALL_BASE(env, theCall, nullptr)
46
47#define SCAN_CALL_RETURN_VOID(env, theCall) SCAN_CALL_BASE(env, theCall, SCAN_RET_NONE)
48
49#define DELETE_AND_NULLIFY(ptr) \
50    if ((ptr) != nullptr) { \
51        delete (ptr); \
52        (ptr) = nullptr; \
53    }
54
55#define DELETE_ARRAY_AND_NULLIFY(ptr) \
56    if ((ptr) != nullptr) { \
57        delete[] (ptr); \
58        (ptr) = nullptr; \
59    }
60
61#define FREE_AND_NULLPTR(ptr) \
62    if ((ptr) != nullptr) { \
63        free (ptr); \
64        (ptr) = nullptr; \
65    }
66
67#define INIT_CALLBACK_PARAMS \
68        uv_loop_s *loop = nullptr; \
69        bool flag = true; \
70        napi_get_uv_event_loop(env_, &loop); \
71        CHECK_AND_CREATE(loop, "Failed to get uv event loop", flag); \
72        uv_work_t *work = nullptr; \
73        CallbackParam *param = nullptr; \
74        CallbackContext *context = nullptr; \
75        CreateCallbackParam(work, param, context, flag) \
76
77#define CHECK_AND_CREATE(pointer, error_message, flag) \
78    if ((pointer) == nullptr) { \
79        SCAN_HILOGE(error_message); \
80        (flag) = false; \
81    }
82
83#define CREATE_PRC_MESSAGE \
84    MessageParcel data; \
85    MessageParcel reply; \
86    MessageOption option; \
87    data.WriteInterfaceToken(GetDescriptor()) \
88
89#define CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, retVal)                                             \
90    do {                                                                                            \
91        if ((count) > SCAN_MAX_COUNT) {                                                      \
92            SCAN_HILOGW("input val is exceed scan max range:%{public}d", SCAN_MAX_COUNT);  \
93            return retVal;                                                                          \
94        }                                                                                           \
95    } while (0)
96
97#define CHECK_IS_EXCEED_SCAN_RANGE(count)          CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, nullptr)
98#define CHECK_IS_EXCEED_SCAN_RANGE_BOOL(count)     CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, false)
99#define CHECK_IS_EXCEED_SCAN_RANGE_VOID(count)     CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, E_SCAN_NONE)
100#define CHECK_IS_EXCEED_SCAN_RANGE_INT(count)      CHECK_IS_EXCEED_SCAN_RANGE_BASE(count, E_SCAN_INVALID_PARAMETER)
101
102enum ScanErrorCode {
103    // FWK ERROR
104    E_SCAN_NONE = 0, // no error
105    E_SCAN_NO_PERMISSION = 201, // no permission
106    E_SCAN_INVALID_PARAMETER = 401, // invalid parameter
107    E_SCAN_GENERIC_FAILURE = 13100001, // generic failure of scan
108    E_SCAN_RPC_FAILURE = 13100002, // RPC failure
109    E_SCAN_SERVER_FAILURE = 13100003, // failure of scan service
110
111    // DEVICE ERROR
112    E_SCAN_GOOD = 13200000,  /* everything A-OK */
113    E_SCAN_UNSUPPORTED = 13200001,  /* operation is not supported */
114    E_SCAN_CANCELLED = 13200002,  /* operation was cancelled */
115    E_SCAN_DEVICE_BUSY = 13200003,  /* device is busy; try again later */
116    E_SCAN_INVAL = 13200004,  /* data is invalid (includes no dev at open) */
117    E_SCAN_EOF = 13200005,  /* no more data available (end-of-file) */
118    E_SCAN_JAMMED = 13200006,  /* document feeder jammed */
119    E_SCAN_NO_DOCS = 13200007,  /* document feeder out of documents */
120    E_SCAN_COVER_OPEN = 13200008,  /* scanner cover is open */
121    E_SCAN_IO_ERROR = 13200009,  /* error during device I/O */
122    E_SCAN_NO_MEM = 13200010,  /* out of memory */
123    E_SCAN_ACCESS_DENIED = 13200011,  /* access to resource has been denied */
124};
125
126const uint32_t SCAN_INVALID_ID = 0xFFFFFFFF;   // -1
127const uint16_t USB_VALUE_DESCRIPTOR_INDEX_SERIAL_NUMBER = 0X03;
128const uint8_t USB_REQUESTTYPE_DEVICE_TO_HOST = 0X80;
129const uint8_t USB_REQUEST_GET_DESCRIPTOR = 0X06;
130const uint16_t USB_VALUE_DESCRIPTOR_TYPE_STRING = 0X03;
131const int HTTP_COMMON_CONST_VALUE_8 = 8;
132const uint16_t USB_INDEX_LANGUAGE_ID_ENGLISH = 0X409;
133const int HTTP_COMMON_CONST_VALUE_500 = 500;
134const int HTTP_COMMON_CONST_VALUE_100 = 100;
135const int HTTP_COMMON_CONST_VALUE_2 = 2;
136const int USB_DEVICEID_FIRSTID_LEN_3 = 3;
137
138enum ScanFrame  {
139    SCAN_FRAME_GRAY = 0,  /* band covering human visual range */
140    SCAN_FRAME_RGB = 1,  /* pixel-interleaved red/green/blue bands */
141    SCAN_FRAME_RED = 2,  /* red band only */
142    SCAN_FRAME_GREEN = 3,  /* green band only */
143    SCAN_FRAME_BLUE = 4,  /* blue band only */
144};
145
146enum ScanExtensionState {
147    SCAN_EXTENSION_UNLOAD,
148    SCAN_EXTENSION_LOADING,
149    SCAN_EXTENSION_LOADED,
150};
151
152enum ScanParamStatus {
153    SCAN_PARAM_NOT_SET,
154    SCAN_PARAM_OPT,
155    SCAN_PARAM_SET,
156};
157
158enum ScanOptionOpType {
159    SCAN_ACTION_GET_VALUE = 0,
160    SCAN_ACTION_SET_VALUE,
161    SCAN_ACTION_SET_AUTO
162};
163
164enum ScanOptionValueType {
165    SCAN_VALUE_NONE,
166    SCAN_VALUE_NUM,
167    SCAN_VALUE_NUM_LIST,
168    SCAN_VALUE_STR,
169    SCAN_VALUE_BOOL,
170};
171
172enum ScanConstraintType {
173    SCAN_CONSTRAINT_NONE = 0,
174    SCAN_CONSTRAINT_RANGE = 1,
175    SCAN_CONSTRAINT_WORD_LIST = 2,
176    SCAN_CONSTRAINT_STRING_LIST = 3,
177};
178
179enum ScannerState {
180    SCANNER_READY = 0,
181    SCANNER_SCANING = 1,
182    SCANNER_SEARCHING = 2,
183    SCANNER_CANCELING = 3,
184};
185} // namespace OHOS::Scan
186#endif // SCAN_CONSTANT_H
187