获取默认函数增加长度参数返回值

This commit is contained in:
gb 2022-10-28 10:47:57 +08:00
parent e6f800af7c
commit 3613d7ab5a
2 changed files with 16 additions and 8 deletions

View File

@ -1114,7 +1114,7 @@ bool hg_sane_middleware::get_current_value(scanner_handle handle, int option, vo
return ret;
}
void* hg_sane_middleware::get_default_value(scanner_handle handle, int option)
void* hg_sane_middleware::get_default_value(scanner_handle handle, int option, int* bytes)
{
std::string val(get_option_json(handle, option));
void* data = nullptr;
@ -1128,8 +1128,10 @@ void* hg_sane_middleware::get_default_value(scanner_handle handle, int option)
bool v = false;
jsn->get_value("default", v);
data = local_utility::acquire_memory(/*sizeof(v)*/4, "");
data = local_utility::acquire_memory(sizeof(SANE_Bool), "");
memcpy(data, &v, sizeof(v));
if (bytes)
*bytes = sizeof(SANE_Bool);
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "option %d default value is: %s\n", option, v ? "true" : "false");
}
else if (val == "int")
@ -1139,6 +1141,8 @@ void* hg_sane_middleware::get_default_value(scanner_handle handle, int option)
data = local_utility::acquire_memory(sizeof(v), "");
memcpy(data, &v, sizeof(v));
if (bytes)
*bytes = sizeof(v);
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "option %d default value is: %d\n", option, v);
}
else if (val == "float")
@ -1148,6 +1152,8 @@ void* hg_sane_middleware::get_default_value(scanner_handle handle, int option)
SANE_Fixed sd = hg_sane_middleware::double_2_sane_fixed(v);
data = local_utility::acquire_memory(sizeof(sd), "");
if (bytes)
*bytes = sizeof(sd);
memcpy(data, &sd, sizeof(sd));
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "option %d default value is: %f\n", option, v);
@ -1164,6 +1170,8 @@ void* hg_sane_middleware::get_default_value(scanner_handle handle, int option)
size = val.length();
data = local_utility::acquire_memory(size + 4, "");
strcpy((char*)data, val.c_str());
if (bytes)
*bytes = val.length();
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "option %d default value is: %s\n", option, (char*)data);
}
else
@ -1519,26 +1527,26 @@ bool hg_sane_middleware::get_cur_value(SANE_Handle handle, int option, void* val
return get_current_value(h, option, value, type);
}
void* hg_sane_middleware::get_def_value(SANE_Handle handle, int option)
void* hg_sane_middleware::get_def_value(SANE_Handle handle, int option, int* bytes)
{
scanner_handle h = find_openning_device(handle);
if (!h)
return NULL;
return get_default_value(h, option);
return get_default_value(h, option, bytes);
}
SANE_Status hg_sane_middleware::io_control(SANE_Handle h, unsigned long code, void* data, unsigned* len)
{
OPENDEV od;
scanner_handle handle = find_openning_device(h, false, &od);
int ret = SANE_STATUS_GOOD;
// commented at 2022-03-23 for getting app about info before open any device
//
//if (!handle)
// return SANE_STATUS_INVAL;
int ret = hg_scanner_control(handle, code, data, len);
ret = hg_scanner_control(handle, code, data, len);
if (ret == SCANNER_ERR_CONFIGURATION_CHANGED)
{
int nc = code;

View File

@ -82,7 +82,7 @@ class hg_sane_middleware
void reload_current_value(scanner_handle handle, std::vector<int>* changed = NULL);
bool get_current_value(scanner_handle handle, int option, void* value, SANE_Value_Type* type = NULL);
void* get_default_value(scanner_handle handle, int option); // caller should call local_utility::free_memory to free the returned value
void* get_default_value(scanner_handle handle, int option, int* bytes = nullptr); // caller should call local_utility::free_memory to free the returned value
/// <summary>
/// 关联项处理
@ -188,7 +188,7 @@ public:
SANE_Option_Descriptor* get_option_descriptor(SANE_Handle h, SANE_Int option);
SANE_Status set_option(SANE_Handle h, SANE_Int option, SANE_Action action, void* value, SANE_Int* after_do);
bool get_cur_value(SANE_Handle handle, int option, void* value, SANE_Value_Type* type = NULL); // SANE_type
void* get_def_value(SANE_Handle handle, int option); // caller should call local_utility::free_memory to free the returned value, SANE_type
void* get_def_value(SANE_Handle handle, int option, int* bytes = nullptr); // caller should call local_utility::free_memory to free the returned value, SANE_type
// extension ...
SANE_Status io_control(SANE_Handle h, unsigned long code, void* data, unsigned* len);