xref: /interface/sdk_c/BasicServicesKit/ohscan.h (revision 7777dab0)
1/*
2 * Copyright (c) 2024 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/**
17 * @addtogroup OH_Scan
18 * @{
19 *
20 * @brief Provides the definition of the C interface for the scan module.
21 *
22 * @syscap SystemCapability.Print.PrintFramework
23 *
24 * @since 12
25 * @version 1.0
26 */
27
28/**
29 * @file ohscan.h
30 *
31 * @brief Declares the APIs to discover and connect scanners, scan images from the scanner,
32 *        obtain the page scanning progress and set scanned image parameters, and so on.
33 *
34 * @library libohscan.so
35 * @kit BasicServicesKit
36 * @syscap SystemCapability.Print.PrintFramework
37 * @since 12
38 * @version 1.0
39 */
40
41#ifndef OH_SCAN_H
42#define OH_SCAN_H
43
44#include <stdint.h>
45#include <stdbool.h>
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51/**
52 * @brief Defines error codes.
53 *
54 * @since 12
55 * @version 1.0
56 */
57typedef enum {
58    /** @error The operation is successful. */
59    SCAN_ERROR_NONE = 0,
60    /** @error Permission verification failed. */
61    SCAN_ERROR_NO_PERMISSION = 201,
62    /** @error The parameter is invalid. For example, the pointer is null or the character string is null. */
63    SCAN_ERROR_INVALID_PARAMETER = 401,
64    /** @error General internal error. */
65    SCAN_ERROR_GENERIC_FAILURE = 24300101,
66    /** @error RPC communication error. */
67    SCAN_ERROR_RPC_FAILURE = 24300102,
68    /** @error Server error. */
69    SCAN_ERROR_SERVER_FAILURE = 24300103,
70    /** @error Operation is not supported. **/
71    SCAN_ERROR_UNSUPPORTED = 24300104,
72    /** @error Operation was cancelled. **/
73    SCAN_ERROR_CANCELED = 24300105,
74    /** @error Device is busy, try again later. **/
75    SCAN_ERROR_DEVICE_BUSY = 24300106,
76    /** @error Data is invalid (includes no dev at open). **/
77    SCAN_ERROR_INVALID = 24300107,
78    /** @error Document feeder jammed. **/
79    SCAN_ERROR_JAMMED = 24300108,
80    /** @error Document feeder out of documents. **/
81    SCAN_ERROR_NO_DOCS = 24300109,
82    /** @error Scanner cover is open. **/
83    SCAN_ERROR_COVER_OPEN = 24300110,
84    /** @error Error during device I/O. **/
85    SCAN_ERROR_IO_ERROR = 24300111,
86    /** @error Out of memory. **/
87    SCAN_ERROR_NO_MEMORY = 24300112,
88} Scan_ErrorCode;
89
90/**
91 * @brief Indicates scanner device information.
92 *
93 * @since 12
94 */
95typedef struct {
96    /** Scanner id. */
97    const char* scannerId;
98    /** Scanner manufacturer. */
99    const char* manufacturer;
100    /** Scanner model. */
101    const char* model;
102    /** Scanner discoverMode. */
103    const char* discoverMode;
104    /** Scanner serialNumber. */
105    const char* serialNumber;
106} Scan_ScannerDevice;
107
108/**
109 * @brief Indicates the progress of scanning a picture by the scanner.
110 *
111 * @since 12
112 */
113typedef struct {
114    /** Picture progress from 0 to 100. */
115    int32_t progress;
116    /** scanner file handle. */
117    int32_t fd;
118    /** Indicates whether the image is the last scanned image. */
119    bool isFinal;
120} Scan_PictureScanProgress;
121
122/**
123 * @brief Indicates all parameter options for one scanner.
124 *
125 * @since 12
126 */
127typedef struct {
128    /** Title of an option. */
129    char** titles;
130    /** Description of an option. */
131    char** descriptions;
132    /** The range that an option can be set to. */
133    char** ranges;
134    /** Number of parameter options that can be set. */
135    int32_t optionCount;
136} Scan_ScannerOptions;
137
138/**
139 * @brief Scanner devices discovery callback, register by {@link OH_Scan_StartScannerDiscovery}.
140 * The memory to which the pointer points will be released when the callback function ends.
141 *
142 * @param devices List of all discovered scanner devices.
143 * @param deviceCount Number of Scanners Found.
144 * @since 12
145 */
146typedef void (*Scan_ScannerDiscoveryCallback)(Scan_ScannerDevice** devices, int32_t deviceCount);
147
148/**
149 * @brief This API checks and pulls up the scan service, initializes the scan client,
150 *        and establishes a connection to the scan service.
151 *
152 * @permission {@code ohos.permission.PRINT}
153 * @return {@link Scan_ERROR_NONE} Indicates the scanning service is successfully started.
154 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
155 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
156 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
157 * @syscap SystemCapability.Print.PrintFramework
158 * @since 12
159 */
160int32_t OH_Scan_Init();
161
162/**
163 * @brief This API starts discovering scanners, Register a callback to handle discovered scanner devices.
164 *
165 * @permission {@code ohos.permission.PRINT}
166 * @param callback The {@link Scan_ScannerDiscoveryCallback} of scanner discovery event.
167 * @return {@link Scan_ERROR_NONE} Indicates successful start of scanner search.
168 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
169 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
170 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
171 * @syscap SystemCapability.Print.PrintFramework
172 * @since 12
173 */
174int32_t OH_Scan_StartScannerDiscovery(Scan_ScannerDiscoveryCallback callback);
175
176/**
177 * @brief This API connects to scanner devices.
178 *
179 * @permission {@code ohos.permission.PRINT}
180 * @param scannerId The id used to connect to the scanner.
181 * @return {@link Scan_ERROR_NONE} Indicates that the scanner was successfully connected.
182 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
183 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
184 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
185 *         {@link SCAN_ERROR_DEVICE_BUSY} Indicates that the scanner is busy.
186 *         {@link SCAN_ERROR_INVALID_PARAMETER} Indicates that the input parameter is invalid.
187 *         {@link SCAN_ERROR_IO_ERROR} Indicates an error occured while communicating with the device.
188 *         {@link SCAN_ERROR_NO_MEM} Indicates an insufficent amount of memory is available.
189 * @syscap SystemCapability.Print.PrintFramework
190 * @since 12
191 */
192int32_t OH_Scan_OpenScanner(const char* scannerId);
193
194/**
195 * @brief This API is used to close the connected scanner device.
196 *
197 * @permission {@code ohos.permission.PRINT}
198 * @param scannerId The id to disconnect the scanner.
199 * @return {@link Scan_ERROR_NONE} Indicates that the scanner connection was successfully closed.
200 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
201 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
202 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
203 *         {@link SCAN_ERROR_INVALID_PARAMETER} Indicates that the input parameter is invalid.
204 * @syscap SystemCapability.Print.PrintFramework
205 * @since 12
206 */
207int32_t OH_Scan_CloseScanner(const char* scannerId);
208
209/**
210 * @brief This API can be used to get a list of options that can be set by the scanner.
211 * The returned struct pointer points to memory that is automatically freed when {@link OH_Scan_Exit},
212 * and only one copy will be stored in memory for each model.
213 *
214 * @permission {@code ohos.permission.PRINT}
215 * @param scannerId The id used to obtain the scanner parameters.
216 * @param errorCode The errorCode returns {@link Scan_ErrorCode#Scan_ERROR_NONE} if the execution is successful,
217 *         otherwise returns a specific error code, refer to {@link Print_ErrorCode}.
218 * @return {@link Scan_ERROR_NONE} Indicates that the scanner parameter options are successfully obtained.
219 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
220 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
221 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
222 *         {@link SCAN_ERROR_INVALID_PARAMETER} Indicates invalid parameter.
223 * @syscap SystemCapability.Print.PrintFramework
224 * @since 12
225 */
226Scan_ScannerOptions* OH_Scan_GetScannerParameter(const char* scannerId, int32_t* errorCode);
227
228/**
229 * @brief This API can be used to set one of the scanner's option parameters.
230 * The option and value passed in are obtained from {@link OH_Scan_GetScannerParameter}.
231 *
232 * @permission {@code ohos.permission.PRINT}
233 * @param scannerId This id is used to set the options for a specific scanner.
234 * @param option Options number to be set.The value ranges from 0 to {@link optionCount} - 1,
235 * be obtained from the {@link Scan_ScannerOptions}.
236 * @param value Option value to be set, valid value is obtained from the {@link ranges},
237 * be obtained from the {@link Scan_ScannerOptions}.
238 * @return {@link Scan_ERROR_NONE} Indicates that the scanner parameters were successfully set.
239 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
240 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
241 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates an error occurs in the scan process.
242 *         {@link SCAN_ERROR_INVALID_PARAMETER} Indicates invalid parameter.
243 * @syscap SystemCapability.Print.PrintFramework
244 * @since 12
245 */
246int32_t OH_Scan_SetScannerParameter(const char* scannerId, const int32_t option, const char* value);
247
248/**
249 * @brief This API allows the scanner to start scanning.
250 *
251 * @permission {@code ohos.permission.PRINT}
252 * @param scannerId This id is used to start the scan job for the specified scanner.
253 * @param batchMode Whether to start the scanner in batch mode.
254 * @return {@link Scan_ERROR_NONE} Indicates that the scanner has successfully canceled the scan job.
255 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
256 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
257 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
258 *         {@link SCAN_ERROR_JAMMED} Indicates the document feeder is jammed.
259 *         {@link SCAN_ERROR_NO_DOCS} Indicates the document feeder is out of documents.
260 *         {@link SCAN_ERROR_COVER_OPEN} Indicates the scanner cover is open.
261 *         {@link SCAN_ERROR_IO_ERROR} Indicates an error occurred while communicating with the device.
262 *         {@link SCAN_ERROR_NO_MEM} Indicates an insufficent amount of memory is available.
263 *         {@link SCAN_ERROR_INVALID_PARAMETER} Indicates that the input parameter is invalid.
264 *         {@link SCAN_ERROR_DEVICE_BUSY} Indicates the device is busy, the operation should be retried later.
265 * @syscap SystemCapability.Print.PrintFramework
266 * @since 12
267 */
268int32_t OH_Scan_StartScan(const char* scannerId, bool batchMode);
269
270/**
271 * @brief This API allows the scanner to cancel the scan.
272 *
273 * @permission {@code ohos.permission.PRINT}
274 * @param scannerId This id is used to cancel the scan job for the specified scanner.
275 * @return {@link Scan_ERROR_NONE} Indicates that the scanner has successfully canceled the scan job.
276 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
277 *         {@link SCAN_ERROR_INVALID_PARAMETER} Indicates if the pointer is null or the character string is null.
278 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
279 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
280 * @syscap SystemCapability.Print.PrintFramework
281 * @since 12
282 */
283int32_t OH_Scan_CancelScan(const char* scannerId);
284
285/**
286 * @brief This API can get the progress of the scanner scanning the picture.A non-null value must be passed in,
287 * and the scan progress will be written to the structure to which the pointer points.
288 *
289 * @permission {@code ohos.permission.PRINT}
290 * @param scannerId The id for querying the image scanning progress of the scanner.
291 * @param prog The {@link Scan_PictureScanProgress} of scanning pictures, must be a non-null value.
292 * @return {@link Scan_ERROR_NONE} Indicates the scanner has successfully queried the progress of the scanned image.
293 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
294 *         {@link SCAN_ERROR_INVALID_PARAMETER} Indicates if the pointer is null or the character string is null.
295 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
296 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
297 *         {@link SCAN_ERROR_JAMMED} Indicates the document feeder is jammed.
298 *         {@link SCAN_ERROR_NO_DOCS} Indicates the document feeder is out of documents.
299 *         {@link SCAN_ERROR_COVER_OPEN} Indicates the scanner cover is open.
300 *         {@link SCAN_ERROR_IO_ERROR} Indicates an error occurred while communicating with the scanner.
301 *         {@link SCAN_ERROR_NO_MEM} Indicates an insufficent amount of memory is available.
302 *         {@link SCAN_ERROR_DEVICE_BUSY} Indicates the device is busy, the operation should be retried later.
303 * @syscap SystemCapability.Print.PrintFramework
304 * @since 12
305 */
306int32_t OH_Scan_GetPictureScanProgress(const char* scannerId, Scan_PictureScanProgress* prog);
307
308/**
309 * @brief This API can be used to exit the scanning service, free the Scan Framework Memory,
310 *        and unregister the callback for scanner discover.
311 *
312 * @permission {@code ohos.permission.PRINT}
313 * @return {@link Scan_ERROR_NONE} Indicates the scan service exit successfully.
314 *         {@link SCAN_ERROR_NO_PERMISSION} Indicates have no permission to use this interface.
315 *         {@link SCAN_ERROR_RPC_FAILURE} Indicates an RPC communication error.
316 *         {@link SCAN_ERROR_SERVER_FAILURE} Indicates An error occurs in the scan process.
317 * @syscap SystemCapability.Print.PrintFramework
318 * @since 12
319 */
320int32_t OH_Scan_Exit();
321
322#ifdef __cplusplus
323}
324#endif
325
326#endif  // OH_SCAN_H
327/** @} */
328