From 2d46b7dd65ce1b43821d2e56a4368e8581418e2d Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 10 Jan 2023 14:21:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=85=8D=E7=BD=AE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AEID=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 13 ++++++++++--- hgdriver/hgdev/hg_scanner.h | 5 ++--- hgdriver/hgdev/scanner_manager.cpp | 4 ++-- hgdriver/hgdev/scanner_manager.h | 2 +- hgdriver/wrapper/huagaoxxx_warraper_ex.cpp | 4 ++-- sdk/hginclude/huagaoxxx_warraper_ex.h | 4 +++- 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 22cb15d..789a04c 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -600,15 +600,22 @@ void hg_scanner::init_setting_func_map(void) setting_map_[SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_B] = &hg_scanner::setting_isremove_low_hole_threshold; setting_map_[SANE_STD_OPT_NAME_FOLD_TYPE] = &hg_scanner::setting_fold_type; } -std::string hg_scanner::setting_name_from(const char* n_or_id) +std::string hg_scanner::setting_name_from(const char* n_or_id, int* id) { if (IS_PTR_NUMBER(n_or_id)) { + if (id) + *id = (int)n_or_id; + if ((unsigned long)n_or_id < jsn_children_.size()) return jsn_children_[(unsigned long)n_or_id]; else return ""; } + else if (id) + { + *id = std::distance(jsn_children_.begin(), std::find(jsn_children_.begin(), jsn_children_.end(), n_or_id)); + } return n_or_id; } @@ -2898,12 +2905,12 @@ int hg_scanner::set_setting(const char* name, void* data, int len) return ret; } -int hg_scanner::get_setting(const char* name, char* json_txt_buf, int* len) +int hg_scanner::get_setting(const char* name, char* json_txt_buf, int* len, int* id) { if (!len) return SCANNER_ERR_INVALID_PARAMETER; - std::string real_n(setting_name_from(name)); + std::string real_n(setting_name_from(name, id)); if (name == nullptr) { *len = setting_jsn_.size(); diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index 27d72f9..3eb537f 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -50,7 +50,6 @@ #define HGVERSION_LIBNANE "libCtsVersion.so" #endif #else - #define OEM_HUAGAO #ifdef WIN32 #define HGVERSION_LIBNANE "HGVersion.dll" #else @@ -131,7 +130,7 @@ class hg_scanner void dump_image_real(hg_imgproc::HIMGPRC himg, const char* desc); void init_setting_func_map(void); - std::string setting_name_from(const char* n_or_id); + std::string setting_name_from(const char* n_or_id, int* id = nullptr); void get_range(const char* name, std::vector& range, std::string& def_val, bool& is_range/*range or list*/); bool check_range(const char* name, bool& val); bool check_range(const char* name, int& val); @@ -417,7 +416,7 @@ public: int get_vid(void); int close(bool force); int set_setting(const char* name, void* data, int len); - int get_setting(const char* name, char* json_txt_buf, int* len); + int get_setting(const char* name, char* json_txt_buf, int* len, int* id); int hgpaper_to_devspaper(Paper_Map papermap[], int len, int& paper, bool* exact, TwSS* type); int image_configuration(SCANCONF &ic); std::string name(void); diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index d232cca..5c1d423 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -691,13 +691,13 @@ scanner_err hg_scanner_mgr::hg_scanner_close(scanner_handle h, bool force) return SCANNER_ERR_OK; } -scanner_err hg_scanner_mgr::hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len) +scanner_err hg_scanner_mgr::hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len, SANE_Int* id) { if (!len) return SCANNER_ERR_INVALID_PARAMETER; int l = *len, - err = SCAN_PTR(h)->get_setting(name, data, &l); + err = SCAN_PTR(h)->get_setting(name, data, &l, id); *len = l; diff --git a/hgdriver/hgdev/scanner_manager.h b/hgdriver/hgdev/scanner_manager.h index e156e5a..7cb22a8 100644 --- a/hgdriver/hgdev/scanner_manager.h +++ b/hgdriver/hgdev/scanner_manager.h @@ -110,7 +110,7 @@ public: scanner_err hg_scanner_enum(ScannerInfo* scanner_list, long* count, bool local_only); scanner_err hg_scanner_open(scanner_handle* h, const char* name, bool shared, const char* user, const char* pwd, const char* check, char* rsc); scanner_err hg_scanner_close(scanner_handle h, bool force); - scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len); + scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len, SANE_Int* id); scanner_err hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long len); scanner_err hg_scanner_start(scanner_handle h, void* async_event, int num); scanner_err hg_scanner_stop(scanner_handle h); diff --git a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp index 90efe25..24a3427 100644 --- a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp +++ b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp @@ -122,9 +122,9 @@ extern "C" return hg_scanner_mgr::instance()->hg_scanner_close(h, force); } - scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len) + scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len, SANE_Int* id) { - return hg_scanner_mgr::instance()->hg_scanner_get_parameter(h, name, data, len); + return hg_scanner_mgr::instance()->hg_scanner_get_parameter(h, name, data, len, id); } scanner_err hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long len) diff --git a/sdk/hginclude/huagaoxxx_warraper_ex.h b/sdk/hginclude/huagaoxxx_warraper_ex.h index edfc09e..8534210 100644 --- a/sdk/hginclude/huagaoxxx_warraper_ex.h +++ b/sdk/hginclude/huagaoxxx_warraper_ex.h @@ -327,11 +327,13 @@ extern "C"{ // 当'data'为NULL或者空间小于所需最小长度时,返回所需要的内存长度 // 如果“param_no==0”,则返回最大可配置的参数号 // 该参数必须非空,如果为NULL,则会返回 EPARAMETERINVAL 的错误 + // + // id - to receive the option ID if 'name' is the name of the option // // Return: 错误代码,E_OK or E_INSUFFICIENTMEM or E_PARAMETERINVAL or E_DEVICENOTFOUND or E_OUTOFRANGE // // NOTE: 'data'空间由用户分配,如果空间太小(包含传入NULL),会在len中返回所需要的最小空间字节数,并返回 EINSUFFICIENTMEM - scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* json_data, long* len); + scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* json_data, long* len, SANE_Int* id = nullptr); // Function: 设置设备的配置参数 //