1141cc406Sopenharmony_ci# SANE 2141cc406Sopenharmony_ci## Introduction 3141cc406Sopenharmony_ciSANE is an application programming interface (API) that provides standardized access to any raster image scanner hardware (flatbed scanner, hand-held scanner, video- and still-cameras, frame-grabbers, etc.). 4141cc406Sopenharmony_ci 5141cc406Sopenharmony_ciYou can also learn more about the SANE project through [the official website](http://sane-project.org/) 6141cc406Sopenharmony_ci 7141cc406Sopenharmony_ci## Background Brief 8141cc406Sopenharmony_ciIn the process of OpenHarmony's southward ecological development, it is necessary to be compatible with printers in the stock market. The use of CUPS printing system can directly connect with most printers in the market, which also reduces the difficulty for printer manufacturers to adapt to OpenHarmony. 9141cc406Sopenharmony_ci 10141cc406Sopenharmony_ci## Directory structure 11141cc406Sopenharmony_ci``` 12141cc406Sopenharmony_ci- LICENSE Copyright File 13141cc406Sopenharmony_ci- OAT.xml OAT.XML filtering configuration file 14141cc406Sopenharmony_ci- README.OpenSource Project README OpenSource files 15141cc406Sopenharmony_ci- README.md English Description 16141cc406Sopenharmony_ci- README_zh.md Chinese Description 17141cc406Sopenharmony_ci- backend scanning device backend source code 18141cc406Sopenharmony_ci- include SANE API interface 19141cc406Sopenharmony_ci- lib SANE library source code 20141cc406Sopenharmony_ci- sanei SANE internal utility functions and tools 21141cc406Sopenharmony_ci- doc documents and instruction files 22141cc406Sopenharmony_ci``` 23141cc406Sopenharmony_ci 24141cc406Sopenharmony_ci## How to use 25141cc406Sopenharmony_ci### 1、Header file import 26141cc406Sopenharmony_ci```c 27141cc406Sopenharmony_ci#include <sane/sane.h> 28141cc406Sopenharmony_ci``` 29141cc406Sopenharmony_ci### 2、Add Compilation Dependency 30141cc406Sopenharmony_ciAdd in the bundle. json file 31141cc406Sopenharmony_ci```json 32141cc406Sopenharmony_ci"deps": { 33141cc406Sopenharmony_ci "third_party": [ 34141cc406Sopenharmony_ci "backends" 35141cc406Sopenharmony_ci ] 36141cc406Sopenharmony_ci} 37141cc406Sopenharmony_ci``` 38141cc406Sopenharmony_ciAdd dependencies where needed in BUILD.gn 39141cc406Sopenharmony_ci 40141cc406Sopenharmony_ci```json 41141cc406Sopenharmony_cideps += [ "//third_party/backends:third_sane" ] 42141cc406Sopenharmony_ci``` 43141cc406Sopenharmony_ci### 3、Example of interface usage 44141cc406Sopenharmony_ci```c 45141cc406Sopenharmony_ciSANE_Status status; 46141cc406Sopenharmony_ciSANE_Handle handle; 47141cc406Sopenharmony_ci 48141cc406Sopenharmony_ci// Initialize SANE 49141cc406Sopenharmony_cistatus = sane_init(NULL, NULL); 50141cc406Sopenharmony_ciif (status != SANE_STATUS_GOOD) { 51141cc406Sopenharmony_ci fprintf(stderr, "Failed to initialize SANE: %s\n", sane_strstatus(status)); 52141cc406Sopenharmony_ci return 1; 53141cc406Sopenharmony_ci} 54141cc406Sopenharmony_ci 55141cc406Sopenharmony_ci// Open the first scanner device 56141cc406Sopenharmony_cistatus = sane_open("your_scanner_device_name", &handle); 57141cc406Sopenharmony_ciif (status != SANE_STATUS_GOOD) { 58141cc406Sopenharmony_ci fprintf(stderr, "Failed to open scanner: %s\n", sane_strstatus(status)); 59141cc406Sopenharmony_ci return 1; 60141cc406Sopenharmony_ci} 61141cc406Sopenharmony_ci 62141cc406Sopenharmony_ci// Get scanner device information 63141cc406Sopenharmony_ciconst SANE_Device *device_info; 64141cc406Sopenharmony_cistatus = sane_get_devices(&device_info, SANE_FALSE); 65141cc406Sopenharmony_ciif (status != SANE_STATUS_GOOD) { 66141cc406Sopenharmony_ci fprintf(stderr, "Failed to get scanner device information: %s\n", sane_strstatus(status)); 67141cc406Sopenharmony_ci return 1; 68141cc406Sopenharmony_ci} 69141cc406Sopenharmony_ci 70141cc406Sopenharmony_ci// Set scan parameters 71141cc406Sopenharmony_ciSANE_Parameters parameters; 72141cc406Sopenharmony_cistatus = sane_get_parameters(handle, ¶meters); 73141cc406Sopenharmony_ciif (status != SANE_STATUS_GOOD) { 74141cc406Sopenharmony_ci fprintf(stderr, "Failed to get scan parameters: %s\n", sane_strstatus(status)); 75141cc406Sopenharmony_ci return 1; 76141cc406Sopenharmony_ci} 77141cc406Sopenharmony_ci 78141cc406Sopenharmony_ci// Start scanning 79141cc406Sopenharmony_ciSANE_Image image; 80141cc406Sopenharmony_cistatus = sane_start(handle); 81141cc406Sopenharmony_ciif (status != SANE_STATUS_GOOD) { 82141cc406Sopenharmony_ci fprintf(stderr, "Failed to start scanning: %s\n", sane_strstatus(status)); 83141cc406Sopenharmony_ci return 1; 84141cc406Sopenharmony_ci} 85141cc406Sopenharmony_ci 86141cc406Sopenharmony_ci// Read scan data 87141cc406Sopenharmony_cido { 88141cc406Sopenharmony_ci status = sane_read(handle, &image); 89141cc406Sopenharmony_ci if (status != SANE_STATUS_GOOD) { 90141cc406Sopenharmony_ci fprintf(stderr, "Failed to read scan data: %s\n", sane_strstatus(status)); 91141cc406Sopenharmony_ci break; 92141cc406Sopenharmony_ci } 93141cc406Sopenharmony_ci 94141cc406Sopenharmony_ci} while (status == SANE_STATUS_GOOD); 95141cc406Sopenharmony_ci 96141cc406Sopenharmony_ci// Finish scanning 97141cc406Sopenharmony_cistatus = sane_cancel(handle); 98141cc406Sopenharmony_ciif (status != SANE_STATUS_GOOD) { 99141cc406Sopenharmony_ci fprintf(stderr, "Failed to cancel scanning: %s\n", sane_strstatus(status)); 100141cc406Sopenharmony_ci return 1; 101141cc406Sopenharmony_ci} 102141cc406Sopenharmony_ci 103141cc406Sopenharmony_ci// Close the scanner device 104141cc406Sopenharmony_cistatus = sane_close(handle); 105141cc406Sopenharmony_ciif (status != SANE_STATUS_GOOD) { 106141cc406Sopenharmony_ci fprintf(stderr, "Failed to close scanner: %s\n", sane_strstatus(status)); 107141cc406Sopenharmony_ci return 1; 108141cc406Sopenharmony_ci} 109141cc406Sopenharmony_ci 110141cc406Sopenharmony_ci// Exit SANE 111141cc406Sopenharmony_cisane_exit(); 112141cc406Sopenharmony_ci``` 113141cc406Sopenharmony_ci 114141cc406Sopenharmony_ci### 相关仓 115141cc406Sopenharmony_ci[print_print_fwk](https://gitee.com/openharmony/print_print_fwk) 116141cc406Sopenharmony_ci 117141cc406Sopenharmony_ci### 参与贡献 118141cc406Sopenharmony_ci[How to involve](https://gitee.com/openharmony/docs/blob/HEAD/zh-cn/contribute/参与贡献.md) 119141cc406Sopenharmony_ci 120141cc406Sopenharmony_ci[Commit message spec](https://gitee.com/openharmony/device_qemu/wikis/Commit%20message%E8%A7%84%E8%8C%83)