From dcf2c0215a23471149ea559f9d47c781c8148d85 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Sat, 13 Jan 2024 10:57:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E2=80=9Cbind=E2=80=9D?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=EF=BC=8C=E5=BD=93=E9=BB=98=E8=AE=A4=E5=80=BC?= =?UTF-8?q?=E6=94=B9=E5=8F=98=E6=97=B6=EF=BC=8C=E5=8F=AF=E5=8D=B3=E6=97=B6?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=B0=E5=BD=93=E5=89=8D=E5=80=BC=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 2 +- sdk/base/plat_types.h | 2 +- sdk/base/utils.cpp | 2 +- sdk/sane_opt_json/device_opt.cpp | 100 +++++++++++++++++++++---------- sdk/sane_opt_json/device_opt.h | 1 + 5 files changed, 71 insertions(+), 36 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 4537fec..0749adb 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -185,7 +185,7 @@ void hg_scanner::init(void) auto on_image_received = [this](LPPACKIMAGE pimg, uint64_t size) ->data_holder_ptr { data_holder_ptr pdh = nullptr; - + return pdh; }; diff --git a/sdk/base/plat_types.h b/sdk/base/plat_types.h index de53859..61582d6 100644 --- a/sdk/base/plat_types.h +++ b/sdk/base/plat_types.h @@ -55,7 +55,7 @@ typedef struct BITMAPINFOHEADER u_int32_t biYPelsPerMeter; u_int32_t biClrUsed; u_int32_t biClrImportant; -}BITMAPINFODEADER; +}BITMAPINFOHEADER; #pragma pack(pop) #define BI_RGB 0 #define MAKEWORD(a, b) (((a) & 0x0ff) | (((b) & 0x0ff) << 8)) diff --git a/sdk/base/utils.cpp b/sdk/base/utils.cpp index b0d7731..0875734 100644 --- a/sdk/base/utils.cpp +++ b/sdk/base/utils.cpp @@ -1245,7 +1245,7 @@ namespace utils std::string bitmap_info_header(int pixel_w, int pixel_h, int bpp, int dpix, int dpiy) { - BITMAPINFODEADER bih = {0}; + BITMAPINFOHEADER bih = {0}; std::string stream(""); if(dpiy == 0) diff --git a/sdk/sane_opt_json/device_opt.cpp b/sdk/sane_opt_json/device_opt.cpp index 9f43d4b..dc7da46 100644 --- a/sdk/sane_opt_json/device_opt.cpp +++ b/sdk/sane_opt_json/device_opt.cpp @@ -1377,16 +1377,50 @@ gb_json* device_option::copy_opt(gb_json* from) { std::string val(init_value_[to->key()]->value(&device_option::calc_simple_logic_expression, this)); std::string type(""); - to->get_value("type", type); + bool apply_cur = false, rdo = false; + // should we change current value ??? - answer: add boolean field "bind" to specify + if (!from->get_value("bind", apply_cur)) + apply_cur = false; + if (!from->get_value("readonly", rdo)) + rdo = false; + to->get_value("type", type); if (type == JSON_SANE_TYPE_BOOL) + { to->set_value("default", *(bool*)val.c_str()); - else if(type == JSON_SANE_TYPE_INT) + if (apply_cur) + { + to->set_value("cur", *(bool*)val.c_str()); + update_provider_value(to->key().c_str(), &val[0], rdo); + } + } + else if (type == JSON_SANE_TYPE_INT) + { to->set_value("default", *(int*)val.c_str()); - else if(type == JSON_SANE_TYPE_FIXED) + if (apply_cur) + { + to->set_value("cur", *(int*)val.c_str()); + update_provider_value(to->key().c_str(), &val[0], rdo); + } + } + else if (type == JSON_SANE_TYPE_FIXED) + { to->set_value("default", *(double*)val.c_str()); - else if(type == JSON_SANE_TYPE_STRING) - to->set_value("default", (const wchar_t*)val.c_str()); + if (apply_cur) + { + to->set_value("cur", *(double*)val.c_str()); + update_provider_value(to->key().c_str(), &val[0], rdo); + } + } + else if (type == JSON_SANE_TYPE_STRING) + { + to->set_value("default", val.c_str()); + if (apply_cur) + { + to->set_value("cur", val.c_str()); + update_provider_value(to->key().c_str(), &val[0], rdo); + } + } } // 4: range value ... @@ -1626,6 +1660,32 @@ bool device_option::to_now(bool init, bool* changed) return now_ != nullptr; } +void device_option::update_provider_value(const char* name, void* value, bool skip_first) +{ + if (src_.count(name)) + { + sane_opt_provider* opt = nullptr; + + if (skip_first) + { + opt = src_[name]->get_following(name); + } + else + { + opt = src_[name]; + opt->add_ref(); + } + + while (opt) + { + opt->set_value(name, value); + + sane_opt_provider* next = opt->get_following(name); + opt->release(); + opt = next; + } + } +} std::string device_option::option_value(gb_json* jsn, bool def_val) { @@ -1787,18 +1847,7 @@ int device_option::update_data(const char* name, void* value, bool reorder_if_ne err = SCANNER_ERR_ACCESS_DENIED; // following ... - if (src_.count(name)) - { - sane_opt_provider* opt = src_[name]->get_following(name); - while(opt) - { - opt->set_value(name, value); - - sane_opt_provider* next = opt->get_following(name); - opt->release(); - opt = next; - } - } + update_provider_value(name, value, true); } else { @@ -1807,22 +1856,7 @@ int device_option::update_data(const char* name, void* value, bool reorder_if_ne // pass to sane_opt_provider ... err = SCANNER_ERR_OK; - if (src_.count(name)) - { - sane_opt_provider* opt = src_[name]; - opt->add_ref(); - - while (opt) - { - int r = opt->set_value(name, value); - if (r) - err = r; - - sane_opt_provider* next = opt->get_following(name); - opt->release(); - opt = next; - } - } + update_provider_value(name, value); child->get_value("type", type); utils::to_log(LOG_LEVEL_DEBUG, "set option '%s' value to '%s' = %d.\n", name, sane_opt_provider::sane_value_2_text(type.c_str(), value).c_str(), err); diff --git a/sdk/sane_opt_json/device_opt.h b/sdk/sane_opt_json/device_opt.h index 6821c62..54a018a 100644 --- a/sdk/sane_opt_json/device_opt.h +++ b/sdk/sane_opt_json/device_opt.h @@ -184,6 +184,7 @@ class device_option : public refer gb_json* copy_opt(gb_json* from); int visibility(gb_json* jsn); bool to_now(bool init, bool* changed); + void update_provider_value(const char* name, void* value, bool skip_first = false/*readonly value should skip first*/); protected: static std::string option_value(gb_json* jsn, bool def_val);