From d3e8b91233867e55167d73757f89169684a961f8 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 30 May 2023 09:45:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=93=8D=E5=BA=94=E8=8E=B7=E5=8F=96=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=E5=91=BD=E4=BB=A4=EF=BC=9Bbutton=20&=20group?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E4=B8=8D=E6=94=AF=E6=8C=81=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=80=BC=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgsane/sane_hg_mdw.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index d0190e9..8f35bf0 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -1738,7 +1738,11 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA else { SANE_Int id = -1; - find_stored_descriptor(handle, option, &id); + SANE_Option_Descriptor* desc = find_stored_descriptor(handle, option); + if (desc && + (desc->type == SANE_TYPE_BUTTON || desc->type == SANE_TYPE_GROUP)) + return SANE_STATUS_UNSUPPORTED; + if (dev->std_opt && dev->std_opt->is_known_option(id)) { dev->std_opt->get_value(h, id, value); @@ -1750,7 +1754,24 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA return ret; } - else + else if (action == SANE_ACTION_GET_DEFAULT_VALUE) + { + SANE_Option_Descriptor* desc = find_stored_descriptor(handle, option); + if (desc && + (desc->type == SANE_TYPE_BUTTON || desc->type == SANE_TYPE_GROUP)) + return SANE_STATUS_UNSUPPORTED; + + int len = 0; + void* val = get_default_value(handle, option, &len); + if (!val) + return SANE_STATUS_UNSUPPORTED; + + memcpy(value, val, len); + local_utility::free_memory(val); + + return SANE_STATUS_GOOD; + } + else if(action == SANE_ACTION_SET_AUTO || action == SANE_ACTION_SET_VALUE) { SANE_Int id = -1; SANE_Option_Descriptor* desc = find_stored_descriptor(handle, option, &id); @@ -1897,6 +1918,8 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA return status; } + + return SANE_STATUS_INVAL; } bool hg_sane_middleware::get_cur_value(SANE_Handle handle, void* option, void* value, SANE_Value_Type* type) {