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) {