From 22009727c516bf7f94cba2fc69a91d050a9540f3 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Mon, 12 Sep 2022 14:45:07 +0800 Subject: [PATCH] =?UTF-8?q?v4.24:=20=E6=9B=B4=E6=96=B0=E7=A9=BF=E5=AD=94?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- device/scanner.rc | 8 ++--- sane/sane.rc | 8 ++--- sane/scanner.cpp | 84 +++++++++++++++++++++++++++++++++++++++++++++-- sane/scanner.h | 2 ++ 4 files changed, 92 insertions(+), 10 deletions(-) diff --git a/device/scanner.rc b/device/scanner.rc index e7339c9..382f6da 100644 --- a/device/scanner.rc +++ b/device/scanner.rc @@ -51,8 +51,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,23,10000,22238 - PRODUCTVERSION 4,23,10000,22238 + FILEVERSION 4,24,10000,22255 + PRODUCTVERSION 4,24,10000,22255 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -69,12 +69,12 @@ BEGIN BEGIN VALUE "CompanyName", "宁波华高信息科技有限公司" VALUE "FileDescription", "华高扫描仪应用程序" - VALUE "FileVersion", "4.23.10000.22238" + VALUE "FileVersion", "4.24.10000.22255" VALUE "InternalName", "scanner.dll" VALUE "LegalCopyright", "Copyright (C) HUAGOScan 2022" VALUE "OriginalFilename", "scanner.dll" VALUE "ProductName", "HUAGOScan" - VALUE "ProductVersion", "4.23.10000.22238" + VALUE "ProductVersion", "4.24.10000.22255" END END BLOCK "VarFileInfo" diff --git a/sane/sane.rc b/sane/sane.rc index ee9e7f7..f935426 100644 --- a/sane/sane.rc +++ b/sane/sane.rc @@ -248,8 +248,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,23,10000,22238 - PRODUCTVERSION 4,23,10000,22238 + FILEVERSION 4,24,10000,22255 + PRODUCTVERSION 4,24,10000,22255 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -266,12 +266,12 @@ BEGIN BEGIN VALUE "CompanyName", "宁波华高信息科技有限公司" VALUE "FileDescription", "华高扫描仪应用程序" - VALUE "FileVersion", "4.23.10000.22238" + VALUE "FileVersion", "4.24.10000.22255" VALUE "InternalName", "sane.dll" VALUE "LegalCopyright", "Copyright (C) HUAGOScan 2022" VALUE "OriginalFilename", "sane.dll" VALUE "ProductName", "HUAGOScan" - VALUE "ProductVersion", "4.23.10000.22238" + VALUE "ProductVersion", "4.24.10000.22255" END END BLOCK "VarFileInfo" diff --git a/sane/scanner.cpp b/sane/scanner.cpp index fdd0b2e..5385253 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -358,8 +358,8 @@ int scanner::init_options_id(void) else SET_OPT_ID(fill_background, BJTCFS, extension_fill_bkg_method) else SET_OPT_ID(is_anti_permeate, FZST, extension_none) else SET_OPT_ID(anti_permeate_level, FZSTDJ, extension_none) -// else SET_OPT_ID(is_erase_hole, CKYC, extension_none) -// else SET_OPT_ID(search_hole_range, CKSSFWZFMBL, extension_none) + else SET_OPT_ID(is_erase_hole, CKYC, extension_none) + else SET_OPT_ID(search_hole_range, CKSSFWZFMBL, extension_none) else SET_OPT_ID(is_filling_color, SCTC, extension_none) else SET_OPT_ID(is_ultrasonic_check, CSBJC, extension_none) else SET_OPT_ID(is_check_staple, ZDJC, extension_none) @@ -411,6 +411,19 @@ int scanner::init_options_id(void) if (black_white_threshold_id_ == -1) black_white_threshold_id_ = 0x8836; + if (is_erase_hole_id_ == -1) + { + // 鍏煎鑰佺殑闄ゅ瓟绠楁硶 + EXAPI ea; + + ea.ind = is_erase_hole_id_ = ex_id_++; + ea.ex_api = &scanner::handle_ex_erase_hole; + ex_opts_.push_back(ea); + + ea.ind = search_hole_range_id_ = ex_id_++; + ea.ex_api = &scanner::handle_ex_search_hole_range; + ex_opts_.push_back(ea); + } return ret; } int scanner::control_read_string(int code, std::string& ret) @@ -1557,6 +1570,73 @@ EX_OPTION_HANDLER_IMPL(ip) return ret; } +EX_OPTION_HANDLER_IMPL(erase_hole) +{ + int ret = SCANNER_ERR_DEVICE_NOT_SUPPORT; + if (is_erase_hole_l_id_ != -1 || is_erase_hole_r_id_ != -1) + { + SANE_Bool yes = SANE_FALSE; + SANE_Int after = 0; + if (setv) + { + if (is_erase_hole_l_id_ != -1) + hg_sane_middleware::instance()->set_option(handle_, is_erase_hole_l_id_, SANE_ACTION_GET_VALUE, &yes, &after); + if (!yes && is_erase_hole_r_id_ != -1) + hg_sane_middleware::instance()->set_option(handle_, is_erase_hole_r_id_, SANE_ACTION_GET_VALUE, &yes, &after); + + bool v = yes == SANE_TRUE; + setv(&v, VAL_ROLE_CURRENT, data); + ret = SCANNER_ERR_OK; + } + else + { + yes = *(bool*)data ? SANE_TRUE : SANE_FALSE; + if (is_erase_hole_l_id_ != -1) + ret = hg_sane_middleware::instance()->set_option(handle_, is_erase_hole_l_id_, SANE_ACTION_SET_VALUE, &yes, &after); + yes = *(bool*)data ? SANE_TRUE : SANE_FALSE; + if (is_erase_hole_r_id_ != -1) + ret = hg_sane_middleware::instance()->set_option(handle_, is_erase_hole_r_id_, SANE_ACTION_SET_VALUE, &yes, &after); + } + } + + return ret; +} +EX_OPTION_HANDLER_IMPL(search_hole_range) +{ + int ret = SCANNER_ERR_DEVICE_NOT_SUPPORT; + if (search_hole_range_l_id_ != -1 || search_hole_range_r_id_ != -1) + { + SANE_Fixed val = 0; + SANE_Int after = 0; + double rv = .0f; + if (setv) + { + if (search_hole_range_l_id_ != -1) + hg_sane_middleware::instance()->set_option(handle_, search_hole_range_l_id_, SANE_ACTION_GET_VALUE, &val, &after); + rv = SANE_UNFIX(val); + if (search_hole_range_r_id_ != -1) + { + hg_sane_middleware::instance()->set_option(handle_, search_hole_range_r_id_, SANE_ACTION_GET_VALUE, &val, &after); + if (rv < SANE_UNFIX(val)) + rv = SANE_UNFIX(val); + } + + setv(&rv, VAL_ROLE_CURRENT, data); + ret = SCANNER_ERR_OK; + } + else + { + val = SANE_FIX(*(double*)data); + if (search_hole_range_l_id_ != -1) + ret = hg_sane_middleware::instance()->set_option(handle_, search_hole_range_l_id_, SANE_ACTION_SET_VALUE, &val, &after); + val = SANE_FIX(*(double*)data); + if (search_hole_range_r_id_ != -1) + ret = hg_sane_middleware::instance()->set_option(handle_, search_hole_range_r_id_, SANE_ACTION_SET_VALUE, &val, &after); + } + } + + return ret; +} // ISaneInvoker COM_API_IMPLEMENT(scanner, int, start(void)) diff --git a/sane/scanner.h b/sane/scanner.h index def2d0e..cdaa365 100644 --- a/sane/scanner.h +++ b/sane/scanner.h @@ -114,6 +114,8 @@ class scanner : public ISaneInvoker, virtual public refer EX_OPTION_HANDLER_DECL(power); // int EX_OPTION_HANDLER_DECL(hardware_version); // std::string EX_OPTION_HANDLER_DECL(ip); // std::string + EX_OPTION_HANDLER_DECL(erase_hole); + EX_OPTION_HANDLER_DECL(search_hole_range); template