From aae6249d6807f683c016d1946ace58f41a9f450c Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 31 Jan 2024 09:41:22 +0800 Subject: [PATCH] =?UTF-8?q?SANE=E5=B1=9E=E6=80=A7name=E5=8F=8Afixed-id?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=EF=BC=8C=E5=8D=95=E7=8B=AC=E6=94=BEsane=5Fna?= =?UTF-8?q?me.h=E6=96=87=E4=BB=B6=E4=B8=AD=E7=BB=9F=E4=B8=80=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hardware/hardware.cpp | 104 +++++----- imgproc/algs/auto_crop.cpp | 16 +- imgproc/algs/color_correct.cpp | 6 +- imgproc/algs/rebuild.cpp | 2 +- imgproc/algs/stretch.cpp | 2 +- imgproc/imgprc_mgr.cpp | 6 +- scanner/async_scanner.cpp | 2 +- sdk/base/plat_types.h | 3 + sdk/sane/sane_ex.h | 339 +-------------------------------- sdk/sane/sane_name.h | 320 +++++++++++++++++++++++++++++++ sdk/sane_opt_json/user.cpp | 10 +- xmake.lua | 4 +- 12 files changed, 404 insertions(+), 410 deletions(-) create mode 100644 sdk/sane/sane_name.h diff --git a/hardware/hardware.cpp b/hardware/hardware.cpp index 158f54a..b3b94eb 100644 --- a/hardware/hardware.cpp +++ b/hardware/hardware.cpp @@ -173,29 +173,29 @@ void scanner_hw::init(void) CLEAN_ARRAY(gain_); CLEAN_ARRAY(off_); - opt_handler_[SANE_FULL_NAME(WAIT_TO_SCAN)] = a; - opt_handler_[SANE_FULL_NAME(WAIT_SCAN_EXIT)] = e; + opt_handler_[SANE_OPT_NAME(WAIT_TO_SCAN)] = a; + opt_handler_[SANE_OPT_NAME(WAIT_SCAN_EXIT)] = e; - opt_handler_[SANE_FULL_NAME(CIS_MODE)] = m; - opt_handler_[SANE_FULL_NAME(CIS_DPI)] = r; - opt_handler_[SANE_FULL_NAME(Y_DPI)] = y; - opt_handler_[SANE_FULL_NAME(CIS_BAUD)] = b; - opt_handler_[SANE_FULL_NAME(CIS_DELAY)] = d; - opt_handler_[SANE_FULL_NAME(CIS_FRAME_H)] = f; - opt_handler_[SANE_FULL_NAME(CIS_SAMPLE)] = s; - opt_handler_[SANE_FULL_NAME(CIS_SP)] = sp; - opt_handler_[SANE_FULL_NAME(PHASE_FRONT)] = pha; - opt_handler_[SANE_FULL_NAME(PHASE_BACK)] = phb; - opt_handler_[SANE_FULL_NAME(CIS_LED)] = led; - opt_handler_[SANE_FULL_NAME(CIS_STRETCH_H)] = stretch_h; - opt_handler_[SANE_FULL_NAME(CIS_STRETCH_V)] = stretch_v; + opt_handler_[SANE_OPT_NAME(CIS_MODE)] = m; + opt_handler_[SANE_OPT_NAME(CIS_DPI)] = r; + opt_handler_[SANE_OPT_NAME(Y_DPI)] = y; + opt_handler_[SANE_OPT_NAME(CIS_BAUD)] = b; + opt_handler_[SANE_OPT_NAME(CIS_DELAY)] = d; + opt_handler_[SANE_OPT_NAME(CIS_FRAME_H)] = f; + opt_handler_[SANE_OPT_NAME(CIS_SAMPLE)] = s; + opt_handler_[SANE_OPT_NAME(CIS_SP)] = sp; + opt_handler_[SANE_OPT_NAME(PHASE_FRONT)] = pha; + opt_handler_[SANE_OPT_NAME(PHASE_BACK)] = phb; + opt_handler_[SANE_OPT_NAME(CIS_LED)] = led; + opt_handler_[SANE_OPT_NAME(CIS_STRETCH_H)] = stretch_h; + opt_handler_[SANE_OPT_NAME(CIS_STRETCH_V)] = stretch_v; - opt_handler_[SANE_FULL_NAME(CIS_EXPO_FB)] = efb; - opt_handler_[SANE_FULL_NAME(CIS_EXPO_FG)] = efg; - opt_handler_[SANE_FULL_NAME(CIS_EXPO_FR)] = efr; - opt_handler_[SANE_FULL_NAME(CIS_EXPO_BB)] = ebb; - opt_handler_[SANE_FULL_NAME(CIS_EXPO_BG)] = ebg; - opt_handler_[SANE_FULL_NAME(CIS_EXPO_BR)] = ebr; + opt_handler_[SANE_OPT_NAME(CIS_EXPO_FB)] = efb; + opt_handler_[SANE_OPT_NAME(CIS_EXPO_FG)] = efg; + opt_handler_[SANE_OPT_NAME(CIS_EXPO_FR)] = efr; + opt_handler_[SANE_OPT_NAME(CIS_EXPO_BB)] = ebb; + opt_handler_[SANE_OPT_NAME(CIS_EXPO_BG)] = ebg; + opt_handler_[SANE_OPT_NAME(CIS_EXPO_BR)] = ebr; auto p = [this](void* value) -> void @@ -207,8 +207,8 @@ void scanner_hw::init(void) lateral_ = *(bool*)value; }; - opt_handler_[SANE_FULL_NAME(PAPER)] = p; - opt_handler_[SANE_FULL_NAME(LATERAL)] = l; + opt_handler_[SANE_OPT_NAME(PAPER)] = p; + opt_handler_[SANE_OPT_NAME(LATERAL)] = l; auto staple = [this](void* value) -> void { @@ -283,18 +283,18 @@ void scanner_hw::init(void) }; - opt_handler_[SANE_FULL_NAME(IS_CHECK_STAPLE)] = staple; - opt_handler_[SANE_FULL_NAME(IS_CHECK_ASKEW)] = screw; - opt_handler_[SANE_FULL_NAME(ASKEW_RANGE)] = screwl; - opt_handler_[SANE_FULL_NAME(DOUBLE_CHECK)] = dbchk; - opt_handler_[SANE_FULL_NAME(MOTOR_SPEED)] = motsp; - opt_handler_[SANE_FULL_NAME(DEVICE_MODEL)] = fm; - opt_handler_[SANE_FULL_NAME(SCAN_MODE)] = cntm; - opt_handler_[SANE_FULL_NAME(SCAN_COUNT)] = cnt; - opt_handler_[SANE_FULL_NAME(IS_AUTO_FEED_STRENGTH)] = afs; - opt_handler_[SANE_FULL_NAME(FEED_STRENGTH_VALUE)] = ff; - opt_handler_[SANE_FULL_NAME(FEED_STRENGTH)] = fs; - opt_handler_[SANE_FULL_NAME(TIME_TO_SLEEP)] = slp; + opt_handler_[SANE_OPT_NAME(IS_CHECK_STAPLE)] = staple; + opt_handler_[SANE_OPT_NAME(IS_CHECK_ASKEW)] = screw; + opt_handler_[SANE_OPT_NAME(ASKEW_RANGE)] = screwl; + opt_handler_[SANE_OPT_NAME(DOUBLE_CHECK)] = dbchk; + opt_handler_[SANE_OPT_NAME(MOTOR_SPEED)] = motsp; + opt_handler_[SANE_OPT_NAME(DEVICE_MODEL)] = fm; + opt_handler_[SANE_OPT_NAME(SCAN_MODE)] = cntm; + opt_handler_[SANE_OPT_NAME(SCAN_COUNT)] = cnt; + opt_handler_[SANE_OPT_NAME(IS_AUTO_FEED_STRENGTH)] = afs; + opt_handler_[SANE_OPT_NAME(FEED_STRENGTH_VALUE)] = ff; + opt_handler_[SANE_OPT_NAME(FEED_STRENGTH)] = fs; + opt_handler_[SANE_OPT_NAME(TIME_TO_SLEEP)] = slp; } void scanner_hw::init_version(std::string& text) { @@ -303,7 +303,7 @@ void scanner_hw::init_version(std::string& text) if(jsn->attach_text(&text[0])) { gb_json *child = nullptr; - jsn->get_value(SANE_FULL_NAME(MOTOR_VER), child); + jsn->get_value(SANE_OPT_NAME(MOTOR_VER), child); if(child) { unsigned int val = 0; @@ -320,7 +320,7 @@ void scanner_hw::init_version(std::string& text) child->release(); } - jsn->get_value(SANE_FULL_NAME(FPGA_VER), child); + jsn->get_value(SANE_OPT_NAME(FPGA_VER), child); if(child) { unsigned int val = 0; @@ -336,7 +336,7 @@ void scanner_hw::init_version(std::string& text) child->release(); } - jsn->get_value(SANE_FULL_NAME(CIS_LENGTH), child); + jsn->get_value(SANE_OPT_NAME(CIS_LENGTH), child); if(child) { child->get_value("default", cis_length_); @@ -542,7 +542,7 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er if(err) *err = SCANNER_ERR_OK; - if(strcmp(name, SANE_FULL_NAME(PAPER_ON)) == 0) + if(strcmp(name, SANE_OPT_NAME(PAPER_ON)) == 0) { ret = (char*)malloc(sizeof(int)); *(int*)ret = 0; @@ -550,7 +550,7 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er if(size) *size = sizeof(bool); } - else if(strcmp(name, SANE_FULL_NAME(PAPER_W)) == 0) + else if(strcmp(name, SANE_OPT_NAME(PAPER_W)) == 0) { SIZE sz = paper::size(paper_.c_str()); double mm = lateral_ && lateral_en_ ? sz.cy : sz.cx; @@ -560,7 +560,7 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er if(size) *size = sizeof(double); } - else if(strcmp(name, SANE_FULL_NAME(PAPER_H)) == 0) + else if(strcmp(name, SANE_OPT_NAME(PAPER_H)) == 0) { SIZE sz = paper::size(paper_.c_str()); double mm = lateral_ && lateral_en_ ? sz.cx : sz.cy; @@ -570,14 +570,14 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er if(size) *size = sizeof(double); } - else if(strcmp(name, SANE_FULL_NAME(CIS_MODE)) == 0) + else if(strcmp(name, SANE_OPT_NAME(CIS_MODE)) == 0) { ret = (char*)malloc(mode_.length() + 1); strcpy(ret, mode_.c_str()); if(size) *size = mode_.length(); } - else if(strcmp(name, SANE_FULL_NAME(CIS_DPI)) == 0) + else if(strcmp(name, SANE_OPT_NAME(CIS_DPI)) == 0) { ret = (char*)malloc(sizeof(int)); *(int*)ret = dpi_; @@ -600,24 +600,24 @@ int scanner_hw::set_value(const char* name, void* val) { opt_handler_[name](val); } - else if(strstr(name, SANE_FULL_NAME(CIS_GAIN_FRONT)) == name) + else if(strstr(name, SANE_OPT_NAME(CIS_GAIN_FRONT)) == name) { - name += strlen(SANE_FULL_NAME(CIS_GAIN_FRONT)) + 1; + name += strlen(SANE_OPT_NAME(CIS_GAIN_FRONT)) + 1; set_gain_value(true, true, atoi(name), *(int*)val); } - else if(strstr(name, SANE_FULL_NAME(CIS_GAIN_BACK)) == name) + else if(strstr(name, SANE_OPT_NAME(CIS_GAIN_BACK)) == name) { - name += strlen(SANE_FULL_NAME(CIS_GAIN_BACK)) + 1; + name += strlen(SANE_OPT_NAME(CIS_GAIN_BACK)) + 1; set_gain_value(false, true, atoi(name), *(int*)val); } - else if(strstr(name, SANE_FULL_NAME(CIS_OFFSET_FRONT)) == name) + else if(strstr(name, SANE_OPT_NAME(CIS_OFFSET_FRONT)) == name) { - name += strlen(SANE_FULL_NAME(CIS_OFFSET_FRONT)) + 1; + name += strlen(SANE_OPT_NAME(CIS_OFFSET_FRONT)) + 1; set_gain_value(true, false, atoi(name), *(int*)val); } - else if(strstr(name, SANE_FULL_NAME(CIS_OFFSET_BACK)) == name) + else if(strstr(name, SANE_OPT_NAME(CIS_OFFSET_BACK)) == name) { - name += strlen(SANE_FULL_NAME(CIS_OFFSET_BACK)) + 1; + name += strlen(SANE_OPT_NAME(CIS_OFFSET_BACK)) + 1; set_gain_value(false, false, atoi(name), *(int*)val); } else @@ -629,7 +629,7 @@ int scanner_hw::set_value(const char* name, void* val) } void scanner_hw::enable(const char* name, bool able) { - if(strcmp(name, SANE_FULL_NAME(LATERAL)) == 0) + if(strcmp(name, SANE_OPT_NAME(LATERAL)) == 0) lateral_en_ = able; } diff --git a/imgproc/algs/auto_crop.cpp b/imgproc/algs/auto_crop.cpp index 0f58383..c79200c 100644 --- a/imgproc/algs/auto_crop.cpp +++ b/imgproc/algs/auto_crop.cpp @@ -110,14 +110,14 @@ void auto_crop::init(void) lateral_ = *(bool*)val; }; - opt_handler_[SANE_FULL_NAME(ANTI_SKEW)] = deskew; - opt_handler_[SANE_FULL_NAME(ERASE_BLACK_FRAME)] = bg; - opt_handler_[SANE_FULL_NAME(FILL_BKG_MODE)] = bgm; - opt_handler_[SANE_FULL_NAME(THRESHOLD)] = thr; - opt_handler_[SANE_FULL_NAME(ANTI_NOISE_LEVEL)] = noise; - opt_handler_[SANE_FULL_NAME(MARGIN)] = margin; - opt_handler_[SANE_FULL_NAME(PAPER)] = paper; - opt_handler_[SANE_FULL_NAME(LATERAL)] = lat; + opt_handler_[SANE_OPT_NAME(ANTI_SKEW)] = deskew; + opt_handler_[SANE_OPT_NAME(ERASE_BLACK_FRAME)] = bg; + opt_handler_[SANE_OPT_NAME(FILL_BKG_MODE)] = bgm; + opt_handler_[SANE_OPT_NAME(THRESHOLD)] = thr; + opt_handler_[SANE_OPT_NAME(ANTI_NOISE_LEVEL)] = noise; + opt_handler_[SANE_OPT_NAME(MARGIN)] = margin; + opt_handler_[SANE_OPT_NAME(PAPER)] = paper; + opt_handler_[SANE_OPT_NAME(LATERAL)] = lat; } int auto_crop::work(PROCIMGINFO& in, PROCIMGINFO& out) { diff --git a/imgproc/algs/color_correct.cpp b/imgproc/algs/color_correct.cpp index 46a9446..e163a79 100644 --- a/imgproc/algs/color_correct.cpp +++ b/imgproc/algs/color_correct.cpp @@ -34,9 +34,9 @@ int color_correct::set_value(const char* name/*nullptr for all options*/, void* { int ret = SCANNER_ERR_OK; - if(strcmp(name, SANE_FULL_NAME(COLOR_CORRECT)) == 0) + if(strcmp(name, SANE_OPT_NAME(COLOR_CORRECT)) == 0) enabled_ = correct_ = *(bool*)val; - else if(strcmp(name, SANE_FULL_NAME(LUT_FILE)) == 0) + else if(strcmp(name, SANE_OPT_NAME(LUT_FILE)) == 0) { if(lut_path_ != (char*)val) { @@ -44,7 +44,7 @@ int color_correct::set_value(const char* name/*nullptr for all options*/, void* hg::initLut(lut_path_.c_str(), clr_); } } - else if(strcmp(name, SANE_FULL_NAME(CIS_MODE)) == 0) + else if(strcmp(name, SANE_OPT_NAME(CIS_MODE)) == 0) { bool pre = clr_; diff --git a/imgproc/algs/rebuild.cpp b/imgproc/algs/rebuild.cpp index f7a846d..0720c15 100644 --- a/imgproc/algs/rebuild.cpp +++ b/imgproc/algs/rebuild.cpp @@ -22,7 +22,7 @@ int rebuild::set_value(const char* name/*nullptr for all options*/, void* val/*n { int ret = SCANNER_ERR_OK; - if(strcmp(name, SANE_FULL_NAME(CIS_REBUILD)) == 0) + if(strcmp(name, SANE_OPT_NAME(CIS_REBUILD)) == 0) rebuild_ = *(bool*)val; else ret = SCANNER_ERR_DEVICE_NOT_SUPPORT; diff --git a/imgproc/algs/stretch.cpp b/imgproc/algs/stretch.cpp index f660589..16ea5de 100644 --- a/imgproc/algs/stretch.cpp +++ b/imgproc/algs/stretch.cpp @@ -28,7 +28,7 @@ int stretch::set_value(const char* name/*nullptr for all options*/, void* val/*n { int ret = SCANNER_ERR_OK; - if(strcmp(name, SANE_FULL_NAME(RESOLUTION)) == 0) + if(strcmp(name, SANE_OPT_NAME(RESOLUTION)) == 0) dpi_ = *(int*)val; else ret = SCANNER_ERR_DEVICE_NOT_SUPPORT; diff --git a/imgproc/imgprc_mgr.cpp b/imgproc/imgprc_mgr.cpp index 7f7c68a..1b97cac 100644 --- a/imgproc/imgprc_mgr.cpp +++ b/imgproc/imgprc_mgr.cpp @@ -237,11 +237,11 @@ int imgproc_mgr::set_value(const char* name, void* val) { int ret = SCANNER_ERR_OK; - if(strcmp(name, SANE_FULL_NAME(DUMP_IMG)) == 0) + if(strcmp(name, SANE_OPT_NAME(DUMP_IMG)) == 0) dump_img_ = *(bool*)val; - else if(strcmp(name, SANE_FULL_NAME(CIS_REBUILD)) == 0) + else if(strcmp(name, SANE_OPT_NAME(CIS_REBUILD)) == 0) do_rebuild_ = *(bool*)val; - else if(strcmp(name, SANE_FULL_NAME(CIS_STRETCH)) == 0) + else if(strcmp(name, SANE_OPT_NAME(CIS_STRETCH)) == 0) { if(*(bool*)val) { diff --git a/scanner/async_scanner.cpp b/scanner/async_scanner.cpp index 6e6ebdc..2fa9e32 100644 --- a/scanner/async_scanner.cpp +++ b/scanner/async_scanner.cpp @@ -168,7 +168,7 @@ async_scanner::async_scanner() : usb_(nullptr), cfg_mgr_(nullptr), scan_id_(0) user_ = new user_priv(); cfg_mgr_->add(const_opts_); - cis_->set_value(SANE_FULL_NAME(DEVICE_MODEL), &cfg_mgr_->get_option_value(SANE_FULL_NAME(DEVICE_MODEL), SANE_ACTION_GET_VALUE)[0]); + cis_->set_value(SANE_OPT_NAME(DEVICE_MODEL), &cfg_mgr_->get_option_value(SANE_OPT_NAME(DEVICE_MODEL), SANE_ACTION_GET_VALUE)[0]); cfg_mgr_->add(cis_); cfg_mgr_->add(user_); img_prcr_ = new imgproc_mgr(sender, cfg_mgr_); diff --git a/sdk/base/plat_types.h b/sdk/base/plat_types.h index 844b122..89d38d0 100644 --- a/sdk/base/plat_types.h +++ b/sdk/base/plat_types.h @@ -6,6 +6,8 @@ #define OS_WIN 0 #endif +#include // for fabs + #define SIZE_KB(n) ((n) * 1024) #define SIZE_MB(n) SIZE_KB((n) * 1024) #define SIZE_GB(n) SIZE_MB((n) * 1024) @@ -15,6 +17,7 @@ #define SEC_2_US(s) MSEC_2_US(SEC_2_MS(s)) #define MM_PER_INCH 25.4f +#define IS_DOUBLE_EQUAL(a, b) fabs((a) - (b)) < .000001 #define ALIGN_TO(v, align) (((v) + (align) - 1) / (align) * (align)) #define ALIGN_INT(v) ALIGN_TO(v, sizeof(int)) diff --git a/sdk/sane/sane_ex.h b/sdk/sane/sane_ex.h index 2e8e238..119d5c0 100644 --- a/sdk/sane/sane_ex.h +++ b/sdk/sane/sane_ex.h @@ -18,18 +18,8 @@ #define sane_ex_h -#define SIZE_KB(n) ((n) * 1024) -#define SIZE_MB(n) SIZE_KB(n * 1024) -#define SIZE_GB(n) SIZE_MB(n * 1024) - -#define SEC_2_MS(s) ((s) * 1000) -#define MSEC_2_US(ms) ((ms) * 1000) -#define SEC_2_US(s) MSEC_2_US(SEC_2_MS(s)) - -#define ALIGN_TO(v, align) (((v) + (align) - 1) / (align) * (align)) -#define ALIGN_INT(v) ALIGN_TO(v, sizeof(int)) - #include +#include "sane_name.h" #ifndef EXPORT_SANE_API #ifdef OEM_HANWANG @@ -73,17 +63,6 @@ #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define SANE_OPT_NAME(name) SANE_STD_OPT_NAME_##name -#define SANE_OPT_FIXED_ID(id) SANE_OPT_ID_##id -#define IS_SANE_OPT(v, sd) strcmp(v, SANE_OPT_NAME(sd)) == 0 -#define MAX_OPT_NAME_LEN 64 -#define JSON_SANE_TYPE_BOOL "bool" -#define JSON_SANE_TYPE_INT "int" -#define JSON_SANE_TYPE_FIXED "float" -#define JSON_SANE_TYPE_STRING "string" -#define JSON_SANE_TYPE_GROUP "group" -#define JSON_SANE_TYPE_BUTTON "button" - // 用户权限 enum { @@ -102,309 +81,11 @@ enum opt_visible_level // "visible" field OPT_VISIBLE_NOT_SUPPORT, // device does not support this option }; -// sane-standard-option-name defined by third-app -#define SANE_FULL_NAME(n) SANE_STD_OPT_NAME_##n -// -// PART I: 参数类型与华高一致,可直接通过改name字段为标准值实现 -#define SANE_STD_OPT_NAME_RESTORE "restore" // OPTION_TITLE_HFMRSZ -#define SANE_STD_OPT_NAME_HELP "help" // OPTION_TITLE_BZ -#define SANE_STD_OPT_NAME_IS_MULTI_OUT "is-multiout" // OPTION_TITLE_DLSC -#define SANE_STD_OPT_NAME_MULTI_OUT_TYPE "multiout-type" // OPTION_TITLE_DLSCLX -#define SANE_STD_OPT_NAME_COLOR_MODE "mode" // OPTION_TITLE_YSMS -#define SANE_STD_OPT_NAME_BINARY_THRESHOLD "binary-threshold" // OPTION_TITLE_HBTXYZ -#define SANE_STD_OPT_NAME_REVERSE_01 "reverse-bw" // OPTION_TITLE_HBTXFSSC -#define SANE_STD_OPT_NAME_FILTER "filter" // OPTION_TITLE_HDHHBTX_CSYZQ -#define SANE_STD_OPT_NAME_RID_MULTIOUT_RED "is-rid-multiout-red" // OPTION_TITLE_24WCSTX_DLSCCH -#define SANE_STD_OPT_NAME_RID_ANSWER_SHEET_RED "is-rid-answer-sheet-red" // OPTION_TITLE_24WCSTX_DTKCH -#define SANE_STD_OPT_NAME_ERASE_BACKGROUND "is-erase-bkg" // OPTION_TITLE_BJYC -#define SANE_STD_OPT_NAME_BKG_COLOR_RANGE "bkg-color-range" // OPTION_TITLE_BJSCFDFW -#define SANE_STD_OPT_NAME_SHARPEN "sharpen" // OPTION_TITLE_RHYMH -#define SANE_STD_OPT_NAME_RID_MORR "is-rid-morr" // OPTION_TITLE_QCMW -#define SANE_STD_OPT_NAME_RID_GRID "is-rid-grid" // OPTION_TITLE_CWW -#define SANE_STD_OPT_NAME_ERROR_EXTENSION "is-err-extension" // OPTION_TITLE_CWKS -#define SANE_STD_OPT_NAME_NOISE_OPTIMIZE "is-noise-optimize" // OPTION_TITLE_HBTXZDYH -#define SANE_STD_OPT_NAME_NOISE_SIZE "noise-size" // OPTION_TITLE_ZDYHCC -#define SANE_STD_OPT_NAME_PAPER "paper" // OPTION_TITLE_ZZCC -#define SANE_STD_OPT_NAME_PAPER_W "paper-w" // 纸张宽度 -#define SANE_STD_OPT_NAME_PAPER_H "paper-h" // 纸张高度 -#define SANE_STD_OPT_NAME_LATERAL "lateral" // 纸张横向标志 -#define SANE_STD_OPT_NAME_CUSTOM_AREA "is-custom-area" // OPTION_TITLE_ZDYSMQY -#define SANE_STD_OPT_NAME_CUSTOM_AREA_LEFT "tl-x" // OPTION_TITLE_SMQYZCmm -#define SANE_STD_OPT_NAME_CUSTOM_AREA_RIGHT "br-x" // OPTION_TITLE_SMQYYCmm -#define SANE_STD_OPT_NAME_CUSTOM_AREA_TOP "tl-y" // OPTION_TITLE_SMQYSCmm -#define SANE_STD_OPT_NAME_CUSTOM_AREA_BOTTOM "br-y" // OPTION_TITLE_SMQYXCmm -#define SANE_STD_OPT_NAME_SIZE_CHECK "is-size-check" // OPTION_TITLE_CCJC -#define SANE_STD_OPT_NAME_PAGE "page" // OPTION_TITLE_SMYM -#define SANE_STD_OPT_NAME_DISCARD_BLANK_SENS "blank-sensitivity" // OPTION_TITLE_TGKBYLMD -#define SANE_STD_OPT_NAME_RESOLUTION "resolution" // OPTION_TITLE_FBL -#define SANE_STD_OPT_NAME_TIME_TO_SLEEP "time-to-sleep" // OPTION_TITLE_XMSJ -#define SANE_STD_OPT_NAME_IMAGE_QUALITY "image-quality" // OPTION_TITLE_HZ -#define SANE_STD_OPT_NAME_EXCHANGE "is-exchange" // OPTION_TITLE_JHZFM -#define SANE_STD_OPT_NAME_SPLIT "is-split" // OPTION_TITLE_TXCF -#define SANE_STD_OPT_NAME_ANTI_SKEW "is-anti-skew" // OPTION_TITLE_ZDJP -#define SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA "is-custom-gamma" // OPTION_TITLE_QYSDQX -#define SANE_STD_OPT_NAME_GAMMA "gamma" // OPTION_TITLE_JMZ -#define SANE_STD_OPT_NAME_CUSTOM_GAMMA "custom-gamma" // OPTION_TITLE_CUSTOM_JMZ; data - SANE_Gamma* -#define SANE_STD_OPT_NAME_GRAY_GAMMA "gray-gamma-table" -#define SANE_STD_OPT_NAME_COLOR_GAMMA "color-gamma-table" -#define SANE_STD_OPT_NAME_RED_GAMMA "red-gamma-table" -#define SANE_STD_OPT_NAME_GREEN_GAMMA "green-gamma-table" -#define SANE_STD_OPT_NAME_BLUE_GAMMA "blue-gamma-table" -#define SANE_STD_OPT_NAME_BRIGHTNESS "brightness" // OPTION_TITLE_LDZ -#define SANE_STD_OPT_NAME_CONTRAST "contrast" // OPTION_TITLE_DBD -#define SANE_STD_OPT_NAME_IS_PHOTO_MODE "is-photo-mode" // OPTION_TITLE_ZPMS -#define SANE_STD_OPT_NAME_ERASE_BLACK_FRAME "is-erase-black-frame" // OPTION_TITLE_XCHK -#define SANE_STD_OPT_NAME_DARK_SAMPLE "is-dark-sample" // OPTION_TITLE_SSYZ -#define SANE_STD_OPT_NAME_THRESHOLD "threshold" // OPTION_TITLE_YZ -#define SANE_STD_OPT_NAME_ANTI_NOISE_LEVEL "anti-noise-level" // OPTION_TITLE_BJKZDJ -#define SANE_STD_OPT_NAME_MARGIN "margin" // OPTION_TITLE_BYSJ -#define SANE_STD_OPT_NAME_FILL_BKG_MODE "bkg-fill-mode" // OPTION_TITLE_BJTCFS -#define SANE_STD_OPT_NAME_IS_ANTI_PERMEATE "is-anti-permeate" // OPTION_TITLE_FZST -#define SANE_STD_OPT_NAME_ANTI_PERMEATE_LEVEL "permeate-level" // OPTION_TITLE_FZSTDJ -#define SANE_STD_OPT_NAME_RID_HOLE "is-rid-hole" // OPTION_TITLE_CKYC -#define SANE_STD_OPT_NAME_HOLE_THRESHOLD "hole-threshold" // -#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE "search-hole-range" // OPTION_TITLE_CKSSFWZFMBL -#define SANE_STD_OPT_NAME_RID_HOLE_L "is-rid-hole-l" // OPTION_TITLE_CKYCZC -#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_L "search-hole-range-l" // OPTION_TITLE_ZCCKSSFWZFMBL -#define SANE_STD_OPT_NAME_RID_HOLE_R "is-rid-hole-r" // OPTION_TITLE_CKYCYC -#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_R "search-hole-range-r" // OPTION_TITLE_YCCKSSFWZFMBL -#define SANE_STD_OPT_NAME_RID_HOLE_T "is-rid-hole-t" // OPTION_TITLE_CKYCSC -#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_T "search-hole-range-t" // OPTION_TITLE_SCCKSSFWZFMBL -#define SANE_STD_OPT_NAME_RID_HOLE_B "is-rid-hole-b" // OPTION_TITLE_CKYCXC -#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_B "search-hole-range-b" // OPTION_TITLE_XCCKSSFWZFMBL -#define SANE_STD_OPT_NAME_IS_FILL_COLOR "is-fill-color" // OPTION_TITLE_SCTC -#define SANE_STD_OPT_NAME_IS_ULTROSONIC_CHECK "is-ultrosonic" // OPTION_TITLE_CSBJC -#define SANE_STD_OPT_NAME_DOUBLE_CHECK "double-chk" -#define SANE_STD_OPT_NAME_DOUBLE_FEED_HANDLE "double-feed" // OPTION_TITLE_SZTPCL -#define SANE_STD_OPT_NAME_IS_CHECK_STAPLE "is-staple" // OPTION_TITLE_ZDJC -#define SANE_STD_OPT_NAME_SCAN_MODE "scan-mode" // OPTION_TITLE_SMZS -#define SANE_STD_OPT_NAME_SCAN_COUNT "scan-count" // OPTION_TITLE_SMSL -#define SANE_STD_OPT_NAME_TEXT_DIRECTION "direction" // OPTION_TITLE_WGFX -#define SANE_STD_OPT_NAME_IS_ROTATE_BKG_180 "is-rotate-bkg-180" // OPTION_TITLE_BMXZ180 -#define SANE_STD_OPT_NAME_IS_CHECK_DOG_EAR "is-check-dog-ear" // OPTION_TITLE_ZJJC -#define SANE_STD_OPT_NAME_DOG_EAR_SIZE "dog-ear-size" // OPTION_TITLE_ZJDX -#define SANE_STD_OPT_NAME_IS_CHECK_ASKEW "is-check-askew" // OPTION_TITLE_WXJC -#define SANE_STD_OPT_NAME_ASKEW_RANGE "askew-range" // OPTION_TITLE_WXRRD -#define SANE_STD_OPT_NAME_FEED_STRENGTH "feed-strength" // OPTION_TITLE_FZQD -#define SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH "is-auto-strength" // OPTION_TITLE_ZDFZQD -#define SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE "feed-strength-value" // OPTION_TITLE_JZSBL -#define SANE_STD_OPT_NAME_WAIT_TO_SCAN "is-wait-scan" // OPTION_TITLE_DZSM -#define SANE_STD_OPT_NAME_FOLD_TYPE "fold-type" // OPTION_TITLE_DZMS -#define SANE_STD_OPT_NAME_COLOR_CORRECTION "color-correction" // OPTION_TITLE_SPJZ -#define SANE_STD_OPT_NAME_WAIT_SCAN_EXIT "wait-scan-exit" // OPTION_TITLE_DZSMTCSJ -#define SANE_STD_OPT_NAME_DISCARDBLANK "discardblank" // OPTION_TITLE_TGKBY - -#define SANE_STD_OPT_NAME_DEVICE_NAME "dev-name" // 设备名称 -#define SANE_STD_OPT_NAME_DEVICE_VID "dev-vid" // 设备VID -#define SANE_STD_OPT_NAME_DEVICE_PID "dev-pid" // 设备PID -#define SANE_STD_OPT_NAME_DEVICE_MODEL "dev-model" // 设备系列 -#define SANE_STD_OPT_NAME_DEV_NAME SANE_STD_OPT_NAME_DEVICE_NAME -#define SANE_STD_OPT_NAME_VID SANE_STD_OPT_NAME_DEVICE_VID -#define SANE_STD_OPT_NAME_PID SANE_STD_OPT_NAME_DEVICE_PID -#define SANE_STD_OPT_NAME_DEV_FAMILY SANE_STD_OPT_NAME_DEVICE_MODEL -#define SANE_STD_OPT_NAME_DEVICE_TYPE "dev-type" // 设备型号 -#define SANE_STD_OPT_NAME_DEVICE_SERIAL_NO "dev-sn" // 设备序列号 -#define SANE_STD_OPT_NAME_FIRMWARE_VERSION "fmw-ver" // 固件版本 -#define SANE_STD_OPT_NAME_DEVICE_IP_ADDR "ip-addr" // 设备IP地址 -#define SANE_STD_OPT_NAME_DEVICE_MAC_ADDR "mac-addr" // 设备MAC地址 -#define SANE_STD_OPT_NAME_ROLLER_COUNT "roll-cnt" // 滚轴张数 -#define SANE_STD_OPT_NAME_TOTAL_COUNT "total-cnt" // 历史总张数 -#define SANE_STD_OPT_NAME_HISTORY_COUNT SANE_STD_OPT_NAME_TOTAL_COUNT -#define SANE_STD_OPT_NAME_GET_DEVS_L0G "devs-log" // 获取设备日志 -#define SANE_STD_OPT_NAME_DRIVER_VERSION "drv-ver" // 设备VID -#define SANE_STD_OPT_NAME_MANUFACTURER "company" // 公司名称 -#define SANE_STD_OPT_NAME_COPYRIGHT "copyright" // 版权 -#define SANE_STD_OPT_NAME_CO_URL "co-url" // 公司网址 -#define SANE_STD_OPT_NAME_CO_TEL "co-tel" // 公司电话 -#define SANE_STD_OPT_NAME_CO_ADDR "co-addr" // 公司地址 -#define SANE_STD_OPT_NAME_CO_GPS "co-gps" // 公司地图定位 -#define SANE_STD_OPT_NAME_USER_NAME "user-name" // 登录账号 -#define SANE_STD_OPT_NAME_USER_PASSWORD "user-pwd" // 登录密码 -#define SANE_STD_OPT_NAME_LOGIN "login" // 登录 -#define SANE_STD_OPT_NAME_LOGOUT "logout" // 登出 -#define SANE_STD_OPT_NAME_DRIVER_LOG "drv-log" // 驱动日志 -#define SANE_STD_OPT_NAME_DEVICE_LOG SANE_STD_OPT_NAME_GET_DEVS_L0G -#define SANE_STD_OPT_NAME_ROLLER_LIFE "roller-life" // 滚轴最大寿命(过纸张数) -#define SANE_STD_OPT_NAME_LANGUAGE "language" // 语言 -#define SANE_STD_OPT_NAME_MOTOR_VER "motor-ver" // 电机固件版本, data = char* -#define SANE_STD_OPT_NAME_FPGA_VER "fpga-ver" // CIS控制器(FPGA)版本, data = char* -#define SANE_STD_OPT_NAME_TRANSFORM_IMAGE_FORMAT "trans-img-fmt" // 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放 -#define SANE_STD_OPT_NAME_FREE_BUFFER "free-buf" // 释放由驱动返回的内存, data - (void**)&buf -#define SANE_STD_OPT_NAME_PAPER_ON "paper-on" // check whether paper is on -#define SANE_STD_OPT_NAME_INITIAL_BOOT_TIME "initial-boot-time" // 设备的初始开机时间 -#define SANE_STD_OPT_NAME_DUMP_IMG "dump-img" // 是否输出算法各阶段中间图像 -#define SANE_STD_OPT_NAME_DUMP_IMG_PATH "dump-path" // 中间图像输出路径 -#define SANE_STD_OPT_NAME_CIS_LENGTH "cis-len" // CIS 长度(采集图像的最大宽度) -#define SANE_STD_OPT_NAME_CIS_REBUILD "rebuild" // 复原从CIS出来的数据流为原始图像 - -// PART II: 参数类型与华高不一致,需要通过“hgsane”组件在中间转换 -#define SANE_STD_OPT_NAME_PAGE_W "page-width" // OPTION_TITLE_ZZCC -#define SANE_STD_OPT_NAME_PAGE_H "page-height" // OPTION_TITLE_ZZCC -#define SANE_STD_OPT_NAME_DUPLEX "duplex" // OPTION_TITLE_SMYM -// END for sane-standard-option-name defined by third-app -// - -// PART III: inner option on device -#define SANE_STD_OPT_NAME_CIS_MODE "cis-mode" -#define SANE_STD_OPT_NAME_CIS_DPI "cis-dpi" -#define SANE_STD_OPT_NAME_Y_DPI "y-dpi" -#define SANE_STD_OPT_NAME_CIS_BAUD "baud" -#define SANE_STD_OPT_NAME_CIS_DELAY "act-after" -#define SANE_STD_OPT_NAME_CIS_FRAME_H "frame-h" -#define SANE_STD_OPT_NAME_CIS_SAMPLE "sample" -#define SANE_STD_OPT_NAME_CIS_SP "cis-sp" -#define SANE_STD_OPT_NAME_CIS_LED "cis-led" -#define SANE_STD_OPT_NAME_CIS_REBUILD "cis-rebuild" -#define SANE_STD_OPT_NAME_CIS_STRETCH "stretch" -#define SANE_STD_OPT_NAME_CIS_EXPO_FB "expo-fb" -#define SANE_STD_OPT_NAME_CIS_EXPO_FG "expo-fg" -#define SANE_STD_OPT_NAME_CIS_EXPO_FR "expo-fr" -#define SANE_STD_OPT_NAME_CIS_EXPO_BB "expo-bb" -#define SANE_STD_OPT_NAME_CIS_EXPO_BG "expo-bg" -#define SANE_STD_OPT_NAME_CIS_EXPO_BR "expo-br" -#define SANE_STD_OPT_NAME_CIS_GAIN_FRONT "gain-f" -#define SANE_STD_OPT_NAME_CIS_GAIN_BACK "gain-b" -#define SANE_STD_OPT_NAME_CIS_OFFSET_FRONT "off-f" -#define SANE_STD_OPT_NAME_CIS_OFFSET_BACK "off-b" -#define SANE_STD_OPT_NAME_CIS_STRETCH_H "stretch-h" -#define SANE_STD_OPT_NAME_CIS_STRETCH_V "stretch-v" -#define SANE_STD_OPT_NAME_MOTOR_SPEED "motor-speed" -#define SANE_STD_OPT_NAME_COLOR_CORRECT "clr-correct" -#define SANE_STD_OPT_NAME_LUT_FILE "lut-file" -#define SANE_STD_OPT_NAME_PHASE_FRONT "phase-f" -#define SANE_STD_OPT_NAME_PHASE_BACK "phase-b" - -// -// 借鉴TWAIN协议固定ID的做法,定义SANE属性的固定ID - 这里与TWAIN中的ID保持一致,以方便TWAIN的调用 -enum sane_option_id -{ - SANE_OPT_ID_BASE = 0x8800, - SANE_OPT_ID_IS_MULTI_OUT = 0x8801, - SANE_OPT_ID_MULTI_OUT_TYPE = 0x8802, - SANE_OPT_ID_COLOR_MODE = 0x8803, - SANE_OPT_ID_FILTER = 0x8804, - SANE_OPT_ID_RID_MULTIOUT_RED = 0x8805, - SANE_OPT_ID_RID_ANSWER_SHEET_RED = 0x8806, - SANE_OPT_ID_ERASE_BACKGROUND = 0x8807, - SANE_OPT_ID_BKG_COLOR_RANGE = 0x8808, - SANE_OPT_ID_SHARPEN = 0x8809, - SANE_OPT_ID_RID_MORR = 0x880A, - SANE_OPT_ID_RID_GRID = 0x880B, - SANE_OPT_ID_ERROR_EXTENSION = 0x880C, - SANE_OPT_ID_NOISE_OPTIMIZE = 0x880D, - SANE_OPT_ID_NOISE_SIZE = 0x880E, - SANE_OPT_ID_PAPER = 0x880F, - SANE_OPT_ID_CUSTOM_AREA = 0x8810, - SANE_OPT_ID_CUSTOM_AREA_LEFT = 0x8811, - SANE_OPT_ID_CUSTOM_AREA_RIGHT = 0x8812, - SANE_OPT_ID_CUSTOM_AREA_TOP = 0x8813, - SANE_OPT_ID_CUSTOM_AREA_BOTTOM = 0x8814, - SANE_OPT_ID_SIZE_CHECK = 0x8815, - SANE_OPT_ID_PAGE = 0x8816, - SANE_OPT_ID_DISCARD_BLANK_SENS = 0x8817, - SANE_OPT_ID_RESOLUTION = 0x8818, - SANE_OPT_ID_IMAGE_QUALITY = 0x8819, - SANE_OPT_ID_EXCHANGE = 0x881A, - SANE_OPT_ID_SPLIT = 0x881B, - SANE_OPT_ID_ANTI_SKEW = 0x881C, - SANE_OPT_ID_IS_CUSTOM_GAMMA = 0x881D, - SANE_OPT_ID_BRIGHTNESS = 0x881E, - SANE_OPT_ID_CONTRAST = 0x881F, - SANE_OPT_ID_GAMMA = 0x8820, - SANE_OPT_ID_ERASE_BLACK_FRAME = 0x8821, - SANE_OPT_ID_DARK_SAMPLE = 0x8822, - SANE_OPT_ID_THRESHOLD = 0x8823, - SANE_OPT_ID_ANTI_NOISE_LEVEL = 0x8824, - SANE_OPT_ID_MARGIN = 0x8825, - SANE_OPT_ID_FILL_BKG_MODE = 0x8826, - SANE_OPT_ID_IS_ANTI_PERMEATE = 0x8827, - SANE_OPT_ID_ANTI_PERMEATE_LEVEL = 0x8828, - SANE_OPT_ID_RID_HOLE = 0x8829, - SANE_OPT_ID_SEARCH_HOLE_RANGE = 0x882A, - SANE_OPT_ID_IS_FILL_COLOR = 0x882B, - SANE_OPT_ID_IS_ULTROSONIC_CHECK = 0x882C, - SANE_OPT_ID_IS_CHECK_STAPLE = 0x882D, - SANE_OPT_ID_SCAN_MODE = 0x882E, - SANE_OPT_ID_SCAN_COUNT = 0x882F, - SANE_OPT_ID_TEXT_DIRECTION = 0x8830, - SANE_OPT_ID_IS_ROTATE_BKG_180 = 0x8831, - SANE_OPT_ID_IS_CHECK_DOG_EAR = 0x8832, - SANE_OPT_ID_DOG_EAR_SIZE = 0x8833, - SANE_OPT_ID_IS_CHECK_ASKEW = 0x8834, - SANE_OPT_ID_ASKEW_RANGE = 0x8835, - SANE_OPT_ID_BINARY_THRESHOLD = 0x8836, - SANE_OPT_ID_IS_PHOTO_MODE = 0x8837, - SANE_OPT_ID_DOUBLE_FEED_HANDLE = 0x8838, - SANE_OPT_ID_WAIT_TO_SCAN = 0x8839, - SANE_OPT_ID_FEED_STRENGTH = 0x883A, - SANE_OPT_ID_TIME_TO_SLEEP = 0x883B, - SANE_OPT_ID_IS_AUTO_FEED_STRENGTH = 0x883C, - SANE_OPT_ID_FEED_STRENGTH_VALUE = 0x883D, - SANE_OPT_ID_REVERSE_01 = 0x883E, - SANE_OPT_ID_RID_HOLE_L = 0x883F, - SANE_OPT_ID_SEARCH_HOLE_RANGE_L = 0x8840, - SANE_OPT_ID_RID_HOLE_R = 0x8841, - SANE_OPT_ID_SEARCH_HOLE_RANGE_R = 0x8842, - SANE_OPT_ID_RID_HOLE_T = 0x8843, - SANE_OPT_ID_SEARCH_HOLE_RANGE_T = 0x8844, - SANE_OPT_ID_RID_HOLE_B = 0x8845, - SANE_OPT_ID_SEARCH_HOLE_RANGE_B = 0x8846, - SANE_OPT_ID_FOLD_TYPE = 0x8847, - SANE_OPT_ID_COLOR_CORRECTION = 0x8848, - SANE_OPT_ID_HISTORY_COUNT = 0x8849, - SANE_OPT_ID_DRIVER_VERSION = 0x884A, - SANE_OPT_ID_MANUFACTURER = 0x884B, - SANE_OPT_ID_COPYRIGHT = 0x884C, - SANE_OPT_ID_CO_URL = 0x884D, - SANE_OPT_ID_CO_TEL = 0x884E, - SANE_OPT_ID_CO_ADDR = 0x884F, - SANE_OPT_ID_CO_GPS = 0x8850, - SANE_OPT_ID_HELP = 0x8851, - SANE_OPT_ID_VID = 0x8852, - SANE_OPT_ID_PID = 0x8853, - SANE_OPT_ID_DEV_NAME = 0x8854, - SANE_OPT_ID_DEV_FAMILY = 0x8855, - SANE_OPT_ID_DEVICE_SERIAL_NO = 0x8856, - SANE_OPT_ID_FIRMWARE_VERSION = 0x8857, - SANE_OPT_ID_DEVICE_IP_ADDR = 0x8858, - SANE_OPT_ID_DEVICE_MAC_ADDR = 0x8859, - SANE_OPT_ID_CUSTOM_GAMMA = 0x885A, // data: SANE_Gamma* - SANE_OPT_ID_ROLLER_LIFE = 0x885B, // data: uint32_t* - SANE_OPT_ID_LANGUAGE = 0x885C, // data: char* - SANE_OPT_ID_MOTOR_VER = 0x885D, // 电机固件版本, data - char* - SANE_OPT_ID_TRANSFORM_IMAGE_FORMAT = 0x885E,// 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放 - SANE_OPT_ID_FREE_BUFFER = 0x885F, // 释放由驱动返回的内存, data - (void**)&buf - SANE_OPT_ID_PAPER_ON = 0x8860, // 是否有纸张, data - SANE_Bool* - - SANE_OPT_ID_GRAY_GAMMA = 0x8861, // gray-gamma-table - SANE_OPT_ID_COLOR_GAMMA = 0x8862, // color-gamma-table - SANE_OPT_ID_RED_GAMMA = 0x8863, // red-gamma-table - SANE_OPT_ID_GREEN_GAMMA = 0x8864, // green-gamma-table - SANE_OPT_ID_BLUE_GAMMA = 0x8865, // blue-gamma-table - SANE_OPT_ID_INITIAL_BOOT_TIME = 0x8866, - SANE_OPT_ID_DISCARDBLANK = 0x8867, - SANE_OPT_ID_WAIT_SCAN_EXIT = 0x8868, - SANE_OPT_ID_RESTORE = 0x8869, - SANE_OPT_ID_PAPER_W = 0x886A, // 纸张宽度,单位为mm - SANE_OPT_ID_PAPER_H = 0x886B, // 纸张高度,单位为mm - SANE_OPT_ID_LATERAL = 0x886C, // 纸张横向标志,bool - - SANE_OPT_ID_LOGIN = 0x9900, - SANE_OPT_ID_LOGOUT = 0x9901, - SANE_OPT_ID_ROLLER_COUNT = 0x9902, - SANE_OPT_ID_DRIVER_LOG = 0x9903, - SANE_OPT_ID_DEVICE_LOG = 0x9904, - SANE_OPT_ID_USER_NAME = 0x9905, - SANE_OPT_ID_USER_PASSWORD = 0x9906, -}; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - +// 属性相关 #include "sane.h" -#include #define MAX_STRING_LEN 256 -#define IS_DOUBLE_EQUAL(a, b) fabs((a) - (b)) < .000001 -#define IS_PTR_NUMBER(ptr) (((unsigned long long)(ptr)) < 0x10000) #define CAPABILITY_ORDINARY (SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT) #define CAPABILITY_READONLY SANE_CAP_SOFT_DETECT @@ -440,6 +121,9 @@ enum sane_option_id cap |= can_read ? SANE_CAP_SOFT_DETECT | CAPABILITY_ORDINARY : CAPABILITY_ORDINARY;\ } + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// 接口 #ifdef __cplusplus extern "C" { #endif @@ -920,17 +604,4 @@ extern "C" { } #endif -//#include -// -//template -//std::string format_string(int level, const char* fmt, Args ... args) -//{ -// size_t size = snprintf(nullptr, 0, fmt, args ...) + 2; -// std::string str(size); -// -// snprintf(&str[0], size, fmt, args ...); -// -// return std::move(str); -//} - #endif /* sane_ex_h */ diff --git a/sdk/sane/sane_name.h b/sdk/sane/sane_name.h new file mode 100644 index 0000000..797bd2d --- /dev/null +++ b/sdk/sane/sane_name.h @@ -0,0 +1,320 @@ +// sane option names && fixed-id definitions +// +// Date: 2024-01-31 +#pragma once + +#define SANE_OPT_NAME(name) SANE_STD_OPT_NAME_##name +#define SANE_OPT_FIXED_ID(id) SANE_OPT_ID_##id +#define MAX_OPT_NAME_LEN 64 +#define JSON_SANE_TYPE_BOOL "bool" +#define JSON_SANE_TYPE_INT "int" +#define JSON_SANE_TYPE_FIXED "float" +#define JSON_SANE_TYPE_STRING "string" +#define JSON_SANE_TYPE_GROUP "group" +#define JSON_SANE_TYPE_BUTTON "button" + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Names ... +// +// PART I: 参数类型与华高一致,可直接通过改name字段为标准值实现 +#define SANE_STD_OPT_NAME_RESTORE "restore" // OPTION_TITLE_HFMRSZ +#define SANE_STD_OPT_NAME_HELP "help" // OPTION_TITLE_BZ +#define SANE_STD_OPT_NAME_IS_MULTI_OUT "is-multiout" // OPTION_TITLE_DLSC +#define SANE_STD_OPT_NAME_MULTI_OUT_TYPE "multiout-type" // OPTION_TITLE_DLSCLX +#define SANE_STD_OPT_NAME_COLOR_MODE "mode" // OPTION_TITLE_YSMS +#define SANE_STD_OPT_NAME_BINARY_THRESHOLD "binary-threshold" // OPTION_TITLE_HBTXYZ +#define SANE_STD_OPT_NAME_REVERSE_01 "reverse-bw" // OPTION_TITLE_HBTXFSSC +#define SANE_STD_OPT_NAME_FILTER "filter" // OPTION_TITLE_HDHHBTX_CSYZQ +#define SANE_STD_OPT_NAME_RID_MULTIOUT_RED "is-rid-multiout-red" // OPTION_TITLE_24WCSTX_DLSCCH +#define SANE_STD_OPT_NAME_RID_ANSWER_SHEET_RED "is-rid-answer-sheet-red" // OPTION_TITLE_24WCSTX_DTKCH +#define SANE_STD_OPT_NAME_ERASE_BACKGROUND "is-erase-bkg" // OPTION_TITLE_BJYC +#define SANE_STD_OPT_NAME_BKG_COLOR_RANGE "bkg-color-range" // OPTION_TITLE_BJSCFDFW +#define SANE_STD_OPT_NAME_SHARPEN "sharpen" // OPTION_TITLE_RHYMH +#define SANE_STD_OPT_NAME_RID_MORR "is-rid-morr" // OPTION_TITLE_QCMW +#define SANE_STD_OPT_NAME_RID_GRID "is-rid-grid" // OPTION_TITLE_CWW +#define SANE_STD_OPT_NAME_ERROR_EXTENSION "is-err-extension" // OPTION_TITLE_CWKS +#define SANE_STD_OPT_NAME_NOISE_OPTIMIZE "is-noise-optimize" // OPTION_TITLE_HBTXZDYH +#define SANE_STD_OPT_NAME_NOISE_SIZE "noise-size" // OPTION_TITLE_ZDYHCC +#define SANE_STD_OPT_NAME_PAPER "paper" // OPTION_TITLE_ZZCC +#define SANE_STD_OPT_NAME_PAPER_W "paper-w" // 纸张宽度 +#define SANE_STD_OPT_NAME_PAPER_H "paper-h" // 纸张高度 +#define SANE_STD_OPT_NAME_LATERAL "lateral" // 纸张横向标志 +#define SANE_STD_OPT_NAME_CUSTOM_AREA "is-custom-area" // OPTION_TITLE_ZDYSMQY +#define SANE_STD_OPT_NAME_CUSTOM_AREA_LEFT "tl-x" // OPTION_TITLE_SMQYZCmm +#define SANE_STD_OPT_NAME_CUSTOM_AREA_RIGHT "br-x" // OPTION_TITLE_SMQYYCmm +#define SANE_STD_OPT_NAME_CUSTOM_AREA_TOP "tl-y" // OPTION_TITLE_SMQYSCmm +#define SANE_STD_OPT_NAME_CUSTOM_AREA_BOTTOM "br-y" // OPTION_TITLE_SMQYXCmm +#define SANE_STD_OPT_NAME_SIZE_CHECK "is-size-check" // OPTION_TITLE_CCJC +#define SANE_STD_OPT_NAME_PAGE "page" // OPTION_TITLE_SMYM +#define SANE_STD_OPT_NAME_DISCARD_BLANK_SENS "blank-sensitivity" // OPTION_TITLE_TGKBYLMD +#define SANE_STD_OPT_NAME_RESOLUTION "resolution" // OPTION_TITLE_FBL +#define SANE_STD_OPT_NAME_TIME_TO_SLEEP "time-to-sleep" // OPTION_TITLE_XMSJ +#define SANE_STD_OPT_NAME_IMAGE_QUALITY "image-quality" // OPTION_TITLE_HZ +#define SANE_STD_OPT_NAME_EXCHANGE "is-exchange" // OPTION_TITLE_JHZFM +#define SANE_STD_OPT_NAME_SPLIT "is-split" // OPTION_TITLE_TXCF +#define SANE_STD_OPT_NAME_ANTI_SKEW "is-anti-skew" // OPTION_TITLE_ZDJP +#define SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA "is-custom-gamma" // OPTION_TITLE_QYSDQX +#define SANE_STD_OPT_NAME_GAMMA "gamma" // OPTION_TITLE_JMZ +#define SANE_STD_OPT_NAME_CUSTOM_GAMMA "custom-gamma" // OPTION_TITLE_CUSTOM_JMZ; data - SANE_Gamma* +#define SANE_STD_OPT_NAME_GRAY_GAMMA "gray-gamma-table" +#define SANE_STD_OPT_NAME_COLOR_GAMMA "color-gamma-table" +#define SANE_STD_OPT_NAME_RED_GAMMA "red-gamma-table" +#define SANE_STD_OPT_NAME_GREEN_GAMMA "green-gamma-table" +#define SANE_STD_OPT_NAME_BLUE_GAMMA "blue-gamma-table" +#define SANE_STD_OPT_NAME_BRIGHTNESS "brightness" // OPTION_TITLE_LDZ +#define SANE_STD_OPT_NAME_CONTRAST "contrast" // OPTION_TITLE_DBD +#define SANE_STD_OPT_NAME_IS_PHOTO_MODE "is-photo-mode" // OPTION_TITLE_ZPMS +#define SANE_STD_OPT_NAME_ERASE_BLACK_FRAME "is-erase-black-frame" // OPTION_TITLE_XCHK +#define SANE_STD_OPT_NAME_DARK_SAMPLE "is-dark-sample" // OPTION_TITLE_SSYZ +#define SANE_STD_OPT_NAME_THRESHOLD "threshold" // OPTION_TITLE_YZ +#define SANE_STD_OPT_NAME_ANTI_NOISE_LEVEL "anti-noise-level" // OPTION_TITLE_BJKZDJ +#define SANE_STD_OPT_NAME_MARGIN "margin" // OPTION_TITLE_BYSJ +#define SANE_STD_OPT_NAME_FILL_BKG_MODE "bkg-fill-mode" // OPTION_TITLE_BJTCFS +#define SANE_STD_OPT_NAME_IS_ANTI_PERMEATE "is-anti-permeate" // OPTION_TITLE_FZST +#define SANE_STD_OPT_NAME_ANTI_PERMEATE_LEVEL "permeate-level" // OPTION_TITLE_FZSTDJ +#define SANE_STD_OPT_NAME_RID_HOLE "is-rid-hole" // OPTION_TITLE_CKYC +#define SANE_STD_OPT_NAME_HOLE_THRESHOLD "hole-threshold" // +#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE "search-hole-range" // OPTION_TITLE_CKSSFWZFMBL +#define SANE_STD_OPT_NAME_RID_HOLE_L "is-rid-hole-l" // OPTION_TITLE_CKYCZC +#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_L "search-hole-range-l" // OPTION_TITLE_ZCCKSSFWZFMBL +#define SANE_STD_OPT_NAME_RID_HOLE_R "is-rid-hole-r" // OPTION_TITLE_CKYCYC +#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_R "search-hole-range-r" // OPTION_TITLE_YCCKSSFWZFMBL +#define SANE_STD_OPT_NAME_RID_HOLE_T "is-rid-hole-t" // OPTION_TITLE_CKYCSC +#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_T "search-hole-range-t" // OPTION_TITLE_SCCKSSFWZFMBL +#define SANE_STD_OPT_NAME_RID_HOLE_B "is-rid-hole-b" // OPTION_TITLE_CKYCXC +#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_B "search-hole-range-b" // OPTION_TITLE_XCCKSSFWZFMBL +#define SANE_STD_OPT_NAME_IS_FILL_COLOR "is-fill-color" // OPTION_TITLE_SCTC +#define SANE_STD_OPT_NAME_IS_ULTROSONIC_CHECK "is-ultrosonic" // OPTION_TITLE_CSBJC +#define SANE_STD_OPT_NAME_DOUBLE_CHECK "double-chk" +#define SANE_STD_OPT_NAME_DOUBLE_FEED_HANDLE "double-feed" // OPTION_TITLE_SZTPCL +#define SANE_STD_OPT_NAME_IS_CHECK_STAPLE "is-staple" // OPTION_TITLE_ZDJC +#define SANE_STD_OPT_NAME_SCAN_MODE "scan-mode" // OPTION_TITLE_SMZS +#define SANE_STD_OPT_NAME_SCAN_COUNT "scan-count" // OPTION_TITLE_SMSL +#define SANE_STD_OPT_NAME_TEXT_DIRECTION "direction" // OPTION_TITLE_WGFX +#define SANE_STD_OPT_NAME_IS_ROTATE_BKG_180 "is-rotate-bkg-180" // OPTION_TITLE_BMXZ180 +#define SANE_STD_OPT_NAME_IS_CHECK_DOG_EAR "is-check-dog-ear" // OPTION_TITLE_ZJJC +#define SANE_STD_OPT_NAME_DOG_EAR_SIZE "dog-ear-size" // OPTION_TITLE_ZJDX +#define SANE_STD_OPT_NAME_IS_CHECK_ASKEW "is-check-askew" // OPTION_TITLE_WXJC +#define SANE_STD_OPT_NAME_ASKEW_RANGE "askew-range" // OPTION_TITLE_WXRRD +#define SANE_STD_OPT_NAME_FEED_STRENGTH "feed-strength" // OPTION_TITLE_FZQD +#define SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH "is-auto-strength" // OPTION_TITLE_ZDFZQD +#define SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE "feed-strength-value" // OPTION_TITLE_JZSBL +#define SANE_STD_OPT_NAME_WAIT_TO_SCAN "is-wait-scan" // OPTION_TITLE_DZSM +#define SANE_STD_OPT_NAME_FOLD_TYPE "fold-type" // OPTION_TITLE_DZMS +#define SANE_STD_OPT_NAME_COLOR_CORRECTION "color-correction" // OPTION_TITLE_SPJZ +#define SANE_STD_OPT_NAME_WAIT_SCAN_EXIT "wait-scan-exit" // OPTION_TITLE_DZSMTCSJ +#define SANE_STD_OPT_NAME_DISCARDBLANK "discardblank" // OPTION_TITLE_TGKBY + +#define SANE_STD_OPT_NAME_DEVICE_NAME "dev-name" // 设备名称 +#define SANE_STD_OPT_NAME_DEVICE_VID "dev-vid" // 设备VID +#define SANE_STD_OPT_NAME_DEVICE_PID "dev-pid" // 设备PID +#define SANE_STD_OPT_NAME_DEVICE_MODEL "dev-model" // 设备系列 +#define SANE_STD_OPT_NAME_DEV_NAME SANE_STD_OPT_NAME_DEVICE_NAME +#define SANE_STD_OPT_NAME_VID SANE_STD_OPT_NAME_DEVICE_VID +#define SANE_STD_OPT_NAME_PID SANE_STD_OPT_NAME_DEVICE_PID +#define SANE_STD_OPT_NAME_DEV_FAMILY SANE_STD_OPT_NAME_DEVICE_MODEL +#define SANE_STD_OPT_NAME_DEVICE_TYPE "dev-type" // 设备型号 +#define SANE_STD_OPT_NAME_DEVICE_SERIAL_NO "dev-sn" // 设备序列号 +#define SANE_STD_OPT_NAME_FIRMWARE_VERSION "fmw-ver" // 固件版本 +#define SANE_STD_OPT_NAME_DEVICE_IP_ADDR "ip-addr" // 设备IP地址 +#define SANE_STD_OPT_NAME_DEVICE_MAC_ADDR "mac-addr" // 设备MAC地址 +#define SANE_STD_OPT_NAME_ROLLER_COUNT "roll-cnt" // 滚轴张数 +#define SANE_STD_OPT_NAME_TOTAL_COUNT "total-cnt" // 历史总张数 +#define SANE_STD_OPT_NAME_HISTORY_COUNT SANE_STD_OPT_NAME_TOTAL_COUNT +#define SANE_STD_OPT_NAME_GET_DEVS_L0G "devs-log" // 获取设备日志 +#define SANE_STD_OPT_NAME_DRIVER_VERSION "drv-ver" // 设备VID +#define SANE_STD_OPT_NAME_MANUFACTURER "company" // 公司名称 +#define SANE_STD_OPT_NAME_COPYRIGHT "copyright" // 版权 +#define SANE_STD_OPT_NAME_CO_URL "co-url" // 公司网址 +#define SANE_STD_OPT_NAME_CO_TEL "co-tel" // 公司电话 +#define SANE_STD_OPT_NAME_CO_ADDR "co-addr" // 公司地址 +#define SANE_STD_OPT_NAME_CO_GPS "co-gps" // 公司地图定位 +#define SANE_STD_OPT_NAME_USER_NAME "user-name" // 登录账号 +#define SANE_STD_OPT_NAME_USER_PASSWORD "user-pwd" // 登录密码 +#define SANE_STD_OPT_NAME_LOGIN "login" // 登录 +#define SANE_STD_OPT_NAME_LOGOUT "logout" // 登出 +#define SANE_STD_OPT_NAME_DRIVER_LOG "drv-log" // 驱动日志 +#define SANE_STD_OPT_NAME_DEVICE_LOG SANE_STD_OPT_NAME_GET_DEVS_L0G +#define SANE_STD_OPT_NAME_ROLLER_LIFE "roller-life" // 滚轴最大寿命(过纸张数) +#define SANE_STD_OPT_NAME_LANGUAGE "language" // 语言 +#define SANE_STD_OPT_NAME_MOTOR_VER "motor-ver" // 电机固件版本, data = char* +#define SANE_STD_OPT_NAME_FPGA_VER "fpga-ver" // CIS控制器(FPGA)版本, data = char* +#define SANE_STD_OPT_NAME_TRANSFORM_IMAGE_FORMAT "trans-img-fmt" // 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放 +#define SANE_STD_OPT_NAME_FREE_BUFFER "free-buf" // 释放由驱动返回的内存, data - (void**)&buf +#define SANE_STD_OPT_NAME_PAPER_ON "paper-on" // check whether paper is on +#define SANE_STD_OPT_NAME_INITIAL_BOOT_TIME "initial-boot-time" // 设备的初始开机时间 +#define SANE_STD_OPT_NAME_DUMP_IMG "dump-img" // 是否输出算法各阶段中间图像 +#define SANE_STD_OPT_NAME_DUMP_IMG_PATH "dump-path" // 中间图像输出路径 +#define SANE_STD_OPT_NAME_CIS_LENGTH "cis-len" // CIS 长度(采集图像的最大宽度) +#define SANE_STD_OPT_NAME_CIS_REBUILD "rebuild" // 复原从CIS出来的数据流为原始图像 + +// PART II: 参数类型与华高不一致,需要通过“hgsane”组件在中间转换 +#define SANE_STD_OPT_NAME_PAGE_W "page-width" // OPTION_TITLE_ZZCC +#define SANE_STD_OPT_NAME_PAGE_H "page-height" // OPTION_TITLE_ZZCC +#define SANE_STD_OPT_NAME_DUPLEX "duplex" // OPTION_TITLE_SMYM +// END for sane-standard-option-name defined by third-app +// + +// PART III: inner option on device +#define SANE_STD_OPT_NAME_CIS_MODE "cis-mode" +#define SANE_STD_OPT_NAME_CIS_DPI "cis-dpi" +#define SANE_STD_OPT_NAME_Y_DPI "y-dpi" +#define SANE_STD_OPT_NAME_CIS_BAUD "baud" +#define SANE_STD_OPT_NAME_CIS_DELAY "act-after" +#define SANE_STD_OPT_NAME_CIS_FRAME_H "frame-h" +#define SANE_STD_OPT_NAME_CIS_SAMPLE "sample" +#define SANE_STD_OPT_NAME_CIS_SP "cis-sp" +#define SANE_STD_OPT_NAME_CIS_LED "cis-led" +#define SANE_STD_OPT_NAME_CIS_REBUILD "cis-rebuild" +#define SANE_STD_OPT_NAME_CIS_STRETCH "stretch" +#define SANE_STD_OPT_NAME_CIS_EXPO_FB "expo-fb" +#define SANE_STD_OPT_NAME_CIS_EXPO_FG "expo-fg" +#define SANE_STD_OPT_NAME_CIS_EXPO_FR "expo-fr" +#define SANE_STD_OPT_NAME_CIS_EXPO_BB "expo-bb" +#define SANE_STD_OPT_NAME_CIS_EXPO_BG "expo-bg" +#define SANE_STD_OPT_NAME_CIS_EXPO_BR "expo-br" +#define SANE_STD_OPT_NAME_CIS_GAIN_FRONT "gain-f" +#define SANE_STD_OPT_NAME_CIS_GAIN_BACK "gain-b" +#define SANE_STD_OPT_NAME_CIS_OFFSET_FRONT "off-f" +#define SANE_STD_OPT_NAME_CIS_OFFSET_BACK "off-b" +#define SANE_STD_OPT_NAME_CIS_STRETCH_H "stretch-h" +#define SANE_STD_OPT_NAME_CIS_STRETCH_V "stretch-v" +#define SANE_STD_OPT_NAME_MOTOR_SPEED "motor-speed" +#define SANE_STD_OPT_NAME_COLOR_CORRECT "clr-correct" +#define SANE_STD_OPT_NAME_LUT_FILE "lut-file" +#define SANE_STD_OPT_NAME_PHASE_FRONT "phase-f" +#define SANE_STD_OPT_NAME_PHASE_BACK "phase-b" + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// fixed-ids ... +// +// 借鉴TWAIN协议固定ID的做法,定义SANE属性的固定ID - 这里与TWAIN中的ID保持一致,以方便TWAIN的调用 +enum sane_option_id +{ + SANE_OPT_ID_BASE = 0x8800, + SANE_OPT_ID_IS_MULTI_OUT = 0x8801, + SANE_OPT_ID_MULTI_OUT_TYPE = 0x8802, + SANE_OPT_ID_COLOR_MODE = 0x8803, + SANE_OPT_ID_FILTER = 0x8804, + SANE_OPT_ID_RID_MULTIOUT_RED = 0x8805, + SANE_OPT_ID_RID_ANSWER_SHEET_RED = 0x8806, + SANE_OPT_ID_ERASE_BACKGROUND = 0x8807, + SANE_OPT_ID_BKG_COLOR_RANGE = 0x8808, + SANE_OPT_ID_SHARPEN = 0x8809, + SANE_OPT_ID_RID_MORR = 0x880A, + SANE_OPT_ID_RID_GRID = 0x880B, + SANE_OPT_ID_ERROR_EXTENSION = 0x880C, + SANE_OPT_ID_NOISE_OPTIMIZE = 0x880D, + SANE_OPT_ID_NOISE_SIZE = 0x880E, + SANE_OPT_ID_PAPER = 0x880F, + SANE_OPT_ID_CUSTOM_AREA = 0x8810, + SANE_OPT_ID_CUSTOM_AREA_LEFT = 0x8811, + SANE_OPT_ID_CUSTOM_AREA_RIGHT = 0x8812, + SANE_OPT_ID_CUSTOM_AREA_TOP = 0x8813, + SANE_OPT_ID_CUSTOM_AREA_BOTTOM = 0x8814, + SANE_OPT_ID_SIZE_CHECK = 0x8815, + SANE_OPT_ID_PAGE = 0x8816, + SANE_OPT_ID_DISCARD_BLANK_SENS = 0x8817, + SANE_OPT_ID_RESOLUTION = 0x8818, + SANE_OPT_ID_IMAGE_QUALITY = 0x8819, + SANE_OPT_ID_EXCHANGE = 0x881A, + SANE_OPT_ID_SPLIT = 0x881B, + SANE_OPT_ID_ANTI_SKEW = 0x881C, + SANE_OPT_ID_IS_CUSTOM_GAMMA = 0x881D, + SANE_OPT_ID_BRIGHTNESS = 0x881E, + SANE_OPT_ID_CONTRAST = 0x881F, + SANE_OPT_ID_GAMMA = 0x8820, + SANE_OPT_ID_ERASE_BLACK_FRAME = 0x8821, + SANE_OPT_ID_DARK_SAMPLE = 0x8822, + SANE_OPT_ID_THRESHOLD = 0x8823, + SANE_OPT_ID_ANTI_NOISE_LEVEL = 0x8824, + SANE_OPT_ID_MARGIN = 0x8825, + SANE_OPT_ID_FILL_BKG_MODE = 0x8826, + SANE_OPT_ID_IS_ANTI_PERMEATE = 0x8827, + SANE_OPT_ID_ANTI_PERMEATE_LEVEL = 0x8828, + SANE_OPT_ID_RID_HOLE = 0x8829, + SANE_OPT_ID_SEARCH_HOLE_RANGE = 0x882A, + SANE_OPT_ID_IS_FILL_COLOR = 0x882B, + SANE_OPT_ID_IS_ULTROSONIC_CHECK = 0x882C, + SANE_OPT_ID_IS_CHECK_STAPLE = 0x882D, + SANE_OPT_ID_SCAN_MODE = 0x882E, + SANE_OPT_ID_SCAN_COUNT = 0x882F, + SANE_OPT_ID_TEXT_DIRECTION = 0x8830, + SANE_OPT_ID_IS_ROTATE_BKG_180 = 0x8831, + SANE_OPT_ID_IS_CHECK_DOG_EAR = 0x8832, + SANE_OPT_ID_DOG_EAR_SIZE = 0x8833, + SANE_OPT_ID_IS_CHECK_ASKEW = 0x8834, + SANE_OPT_ID_ASKEW_RANGE = 0x8835, + SANE_OPT_ID_BINARY_THRESHOLD = 0x8836, + SANE_OPT_ID_IS_PHOTO_MODE = 0x8837, + SANE_OPT_ID_DOUBLE_FEED_HANDLE = 0x8838, + SANE_OPT_ID_WAIT_TO_SCAN = 0x8839, + SANE_OPT_ID_FEED_STRENGTH = 0x883A, + SANE_OPT_ID_TIME_TO_SLEEP = 0x883B, + SANE_OPT_ID_IS_AUTO_FEED_STRENGTH = 0x883C, + SANE_OPT_ID_FEED_STRENGTH_VALUE = 0x883D, + SANE_OPT_ID_REVERSE_01 = 0x883E, + SANE_OPT_ID_RID_HOLE_L = 0x883F, + SANE_OPT_ID_SEARCH_HOLE_RANGE_L = 0x8840, + SANE_OPT_ID_RID_HOLE_R = 0x8841, + SANE_OPT_ID_SEARCH_HOLE_RANGE_R = 0x8842, + SANE_OPT_ID_RID_HOLE_T = 0x8843, + SANE_OPT_ID_SEARCH_HOLE_RANGE_T = 0x8844, + SANE_OPT_ID_RID_HOLE_B = 0x8845, + SANE_OPT_ID_SEARCH_HOLE_RANGE_B = 0x8846, + SANE_OPT_ID_FOLD_TYPE = 0x8847, + SANE_OPT_ID_COLOR_CORRECTION = 0x8848, + SANE_OPT_ID_HISTORY_COUNT = 0x8849, + SANE_OPT_ID_DRIVER_VERSION = 0x884A, + SANE_OPT_ID_MANUFACTURER = 0x884B, + SANE_OPT_ID_COPYRIGHT = 0x884C, + SANE_OPT_ID_CO_URL = 0x884D, + SANE_OPT_ID_CO_TEL = 0x884E, + SANE_OPT_ID_CO_ADDR = 0x884F, + SANE_OPT_ID_CO_GPS = 0x8850, + SANE_OPT_ID_HELP = 0x8851, + SANE_OPT_ID_VID = 0x8852, + SANE_OPT_ID_PID = 0x8853, + SANE_OPT_ID_DEV_NAME = 0x8854, + SANE_OPT_ID_DEV_FAMILY = 0x8855, + SANE_OPT_ID_DEVICE_SERIAL_NO = 0x8856, + SANE_OPT_ID_FIRMWARE_VERSION = 0x8857, + SANE_OPT_ID_DEVICE_IP_ADDR = 0x8858, + SANE_OPT_ID_DEVICE_MAC_ADDR = 0x8859, + SANE_OPT_ID_CUSTOM_GAMMA = 0x885A, // data: SANE_Gamma* + SANE_OPT_ID_ROLLER_LIFE = 0x885B, // data: uint32_t* + SANE_OPT_ID_LANGUAGE = 0x885C, // data: char* + SANE_OPT_ID_MOTOR_VER = 0x885D, // 电机固件版本, data - char* + SANE_OPT_ID_TRANSFORM_IMAGE_FORMAT = 0x885E,// 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放 + SANE_OPT_ID_FREE_BUFFER = 0x885F, // 释放由驱动返回的内存, data - (void**)&buf + SANE_OPT_ID_PAPER_ON = 0x8860, // 是否有纸张, data - SANE_Bool* + + SANE_OPT_ID_GRAY_GAMMA = 0x8861, // gray-gamma-table + SANE_OPT_ID_COLOR_GAMMA = 0x8862, // color-gamma-table + SANE_OPT_ID_RED_GAMMA = 0x8863, // red-gamma-table + SANE_OPT_ID_GREEN_GAMMA = 0x8864, // green-gamma-table + SANE_OPT_ID_BLUE_GAMMA = 0x8865, // blue-gamma-table + SANE_OPT_ID_INITIAL_BOOT_TIME = 0x8866, + SANE_OPT_ID_DISCARDBLANK = 0x8867, + SANE_OPT_ID_WAIT_SCAN_EXIT = 0x8868, + SANE_OPT_ID_RESTORE = 0x8869, + SANE_OPT_ID_PAPER_W = 0x886A, // 纸张宽度,单位为mm + SANE_OPT_ID_PAPER_H = 0x886B, // 纸张高度,单位为mm + SANE_OPT_ID_LATERAL = 0x886C, // 纸张横向标志,bool + + SANE_OPT_ID_LOGIN = 0x9900, + SANE_OPT_ID_LOGOUT = 0x9901, + SANE_OPT_ID_ROLLER_COUNT = 0x9902, + SANE_OPT_ID_DRIVER_LOG = 0x9903, + SANE_OPT_ID_DEVICE_LOG = 0x9904, + SANE_OPT_ID_USER_NAME = 0x9905, + SANE_OPT_ID_USER_PASSWORD = 0x9906, +}; diff --git a/sdk/sane_opt_json/user.cpp b/sdk/sane_opt_json/user.cpp index 398d97d..9d59849 100644 --- a/sdk/sane_opt_json/user.cpp +++ b/sdk/sane_opt_json/user.cpp @@ -100,23 +100,23 @@ int user_priv::set_value(const char* name, void* val) { int ret = SCANNER_ERR_OK; - if(strcmp(name, SANE_FULL_NAME(USER_NAME)) == 0) + if(strcmp(name, SANE_OPT_NAME(USER_NAME)) == 0) { name_ = (char*)val; priv_ = USER_PRIVILEGE_COMMON; } - else if(strcmp(name, SANE_FULL_NAME(USER_PASSWORD)) == 0) + else if(strcmp(name, SANE_OPT_NAME(USER_PASSWORD)) == 0) { pwd_ = (char*)val; priv_ = USER_PRIVILEGE_COMMON; } - else if(strcmp(name, SANE_FULL_NAME(DEVICE_SERIAL_NO)) == 0) + else if(strcmp(name, SANE_OPT_NAME(DEVICE_SERIAL_NO)) == 0) { dev_sn_ = (char*)val; utils::to_log(LOG_LEVEL_DEBUG, "set user device SN: %s\n", dev_sn_.c_str()); priv_ = USER_PRIVILEGE_COMMON; } - else if(strcmp(name, SANE_FULL_NAME(LOGIN)) == 0) + else if(strcmp(name, SANE_OPT_NAME(LOGIN)) == 0) { // login ... if(login_times_.count(name) == 0) @@ -140,7 +140,7 @@ int user_priv::set_value(const char* name, void* val) } } } - else if(strcmp(name, SANE_FULL_NAME(LOGOUT)) == 0) + else if(strcmp(name, SANE_OPT_NAME(LOGOUT)) == 0) { name_ = pwd_ = ""; reset_privilege(); diff --git a/xmake.lua b/xmake.lua index 006cad8..afd4578 100644 --- a/xmake.lua +++ b/xmake.lua @@ -60,8 +60,8 @@ add_packagedirs("sdk") add_defines("BUILD_AS_DEVICE") add_defines("VER_MAIN=2") add_defines("VER_FAMILY=200") -add_defines("VER_DATE=20240130") -add_defines("VER_BUILD=20") +add_defines("VER_DATE=20240131") +add_defines("VER_BUILD=1") target("conf") set_kind("phony")