将属性设置函数的最后一个长度参数,修改为指针,以在传入的数据不准确的情况下,返回实际的数据长度

This commit is contained in:
gb 2023-05-16 11:06:07 +08:00
parent cf2673f2b1
commit 6de4f0fc68
10 changed files with 240 additions and 207 deletions

View File

@ -924,7 +924,7 @@ int hg_scanner::restore(const char* name)
val = get_setting_item_string(name, "default"); val = get_setting_item_string(name, "default");
char* buf = NULL; char* buf = NULL;
int size = 0; long size = 0;
setting_jsn_.at(name).at("size").get_to(size); setting_jsn_.at(name).at("size").get_to(size);
buf = (char*)malloc(size + 4); buf = (char*)malloc(size + 4);
@ -932,7 +932,7 @@ int hg_scanner::restore(const char* name)
{ {
bzero(buf, size + 4); bzero(buf, size + 4);
strcpy(buf, val.c_str()); strcpy(buf, val.c_str());
ret = set_setting(name, buf, val.length()); ret = set_setting(name, buf, &size);
free(buf); free(buf);
} }
else else
@ -941,20 +941,23 @@ int hg_scanner::restore(const char* name)
else if (val == "int") else if (val == "int")
{ {
int v = 0; int v = 0;
long size = sizeof(v);
setting_jsn_.at(name).at("default").get_to(v); setting_jsn_.at(name).at("default").get_to(v);
ret = set_setting(name, (char*)&v, sizeof(v)); ret = set_setting(name, (char*)&v, &size);
} }
else if (val == "float") else if (val == "float")
{ {
double v = .0f; double v = .0f;
long size = sizeof(v);
setting_jsn_.at(name).at("default").get_to(v); setting_jsn_.at(name).at("default").get_to(v);
ret = set_setting(name, (char*)&v, sizeof(v)); ret = set_setting(name, (char*)&v, &size);
} }
else if (val == "bool") else if (val == "bool")
{ {
bool v = false; bool v = false;
long size = sizeof(v);
setting_jsn_.at(name).at("default").get_to(v); setting_jsn_.at(name).at("default").get_to(v);
ret = set_setting(name, (char*)&v, sizeof(v)); ret = set_setting(name, (char*)&v, &size);
} }
return ret; return ret;
@ -1356,7 +1359,7 @@ int hg_scanner::hgpaper_to_devspaper(Paper_Map papermap[], int len, int& paper,
return ind; return ind;
} }
int hg_scanner::invoke_setting_xxx(int(hg_scanner::*func)(void*), void* data) int hg_scanner::invoke_setting_xxx(int(hg_scanner::*func)(void*, long*), void* data, long* len)
{ {
int ret = SCANNER_ERR_DEVICE_NOT_SUPPORT; int ret = SCANNER_ERR_DEVICE_NOT_SUPPORT;
auto it = setting_map_.begin(); auto it = setting_map_.begin();
@ -1364,7 +1367,7 @@ int hg_scanner::invoke_setting_xxx(int(hg_scanner::*func)(void*), void* data)
{ {
if (it->second == func) if (it->second == func)
{ {
ret = set_setting(it->first.c_str(), data, 0); ret = set_setting(it->first.c_str(), data, len);
break; break;
} }
++it; ++it;
@ -1372,7 +1375,7 @@ int hg_scanner::invoke_setting_xxx(int(hg_scanner::*func)(void*), void* data)
return ret; return ret;
} }
int hg_scanner::setting_restore(void* data) int hg_scanner::setting_restore(void* data, long* len)
{ {
// restore ... // restore ...
notify_setting_result_ = false; notify_setting_result_ = false;
@ -1390,7 +1393,7 @@ int hg_scanner::setting_restore(void* data)
return SCANNER_ERR_CONFIGURATION_CHANGED; return SCANNER_ERR_CONFIGURATION_CHANGED;
} }
int hg_scanner::setting_help(void* data) int hg_scanner::setting_help(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
std::string helpfile = helpfile_; std::string helpfile = helpfile_;
@ -1423,7 +1426,7 @@ int hg_scanner::setting_help(void* data)
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"App_Help_pdf path is:%s system is:%d\r\n",helpfile.c_str()); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"App_Help_pdf path is:%s system is:%d\r\n",helpfile.c_str());
return ret; return ret;
} }
int hg_scanner::setting_color_mode(void* data) int hg_scanner::setting_color_mode(void* data, long* len)
{ {
std::string str((char*)data); std::string str((char*)data);
int old = image_prc_param_.bits.color_mode, int old = image_prc_param_.bits.color_mode,
@ -1462,7 +1465,7 @@ int hg_scanner::setting_color_mode(void* data)
return SCANNER_ERR_RELOAD_OPT_PARAM; // ret; return SCANNER_ERR_RELOAD_OPT_PARAM; // ret;
} }
int hg_scanner::setting_multi_out(void* data) int hg_scanner::setting_multi_out(void* data, long* len)
{ {
is_multiout = *((bool*)data); is_multiout = *((bool*)data);
int val = image_prc_param_.bits.color_mode; int val = image_prc_param_.bits.color_mode;
@ -1479,7 +1482,7 @@ int hg_scanner::setting_multi_out(void* data)
return SCANNER_ERR_RELOAD_OPT_PARAM; // SCANNER_ERR_OK; return SCANNER_ERR_RELOAD_OPT_PARAM; // SCANNER_ERR_OK;
} }
int hg_scanner::setting_multi_out_type(void* data) int hg_scanner::setting_multi_out_type(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1500,7 +1503,7 @@ int hg_scanner::setting_multi_out_type(void* data)
on_color_mode_changed(color);*/ on_color_mode_changed(color);*/
return SCANNER_ERR_RELOAD_OPT_PARAM; // ret; return SCANNER_ERR_RELOAD_OPT_PARAM; // ret;
} }
int hg_scanner::setting_rid_color(void* data) int hg_scanner::setting_rid_color(void* data, long* len)
{ {
std::string str((char*)data); std::string str((char*)data);
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
@ -1520,25 +1523,25 @@ int hg_scanner::setting_rid_color(void* data)
return ret; return ret;
} }
int hg_scanner::setting_rid_multi_red(void* data) int hg_scanner::setting_rid_multi_red(void* data, long* len)
{ {
image_prc_param_.bits.rid_red = *((bool*)data); image_prc_param_.bits.rid_red = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_rid_answer_red(void* data) int hg_scanner::setting_rid_answer_red(void* data, long* len)
{ {
image_prc_param_.bits.rid_answer_red = *((bool*)data); image_prc_param_.bits.rid_answer_red = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_erase_background(void* data) int hg_scanner::setting_erase_background(void* data, long* len)
{ {
image_prc_param_.bits.erase_bakground = *((bool*)data); image_prc_param_.bits.erase_bakground = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_erase_background_range(void* data) int hg_scanner::setting_erase_background_range(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1551,13 +1554,13 @@ int hg_scanner::setting_erase_background_range(void* data)
return ret; return ret;
} }
int hg_scanner::setting_noise_optimize(void* data) int hg_scanner::setting_noise_optimize(void* data, long* len)
{ {
image_prc_param_.bits.noise_optimize = *((bool*)data); image_prc_param_.bits.noise_optimize = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_noise_optimize_range(void* data) int hg_scanner::setting_noise_optimize_range(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1570,7 +1573,7 @@ int hg_scanner::setting_noise_optimize_range(void* data)
return ret; return ret;
} }
int hg_scanner::setting_paper(void* data) int hg_scanner::setting_paper(void* data, long* len)
{ {
std::string paper((char*)data); std::string paper((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_PAPER, paper); bool exact = check_range(SANE_STD_OPT_NAME_PAPER, paper);
@ -1606,7 +1609,8 @@ int hg_scanner::setting_paper(void* data)
if (save_sizecheck) if (save_sizecheck)
{ {
//setting_paper_check(0,(void*)&save_sizecheck); //setting_paper_check(0,(void*)&save_sizecheck);
invoke_setting_xxx(&hg_scanner::setting_paper_check, &save_sizecheck); long l = sizeof(save_sizecheck);
invoke_setting_xxx(&hg_scanner::setting_paper_check, &save_sizecheck, &l);
} }
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "Change paper from %s to %s = %s\n", paper_string(old).c_str(), (char*)data, hg_scanner_err_name(ret)); VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "Change paper from %s to %s = %s\n", paper_string(old).c_str(), (char*)data, hg_scanner_err_name(ret));
@ -1618,7 +1622,7 @@ int hg_scanner::setting_paper(void* data)
return SCANNER_ERR_RELOAD_OPT_PARAM; // ret; return SCANNER_ERR_RELOAD_OPT_PARAM; // ret;
} }
int hg_scanner::setting_paper_check(void* data) int hg_scanner::setting_paper_check(void* data, long* len)
{ {
bool use = *((bool*)data); bool use = *((bool*)data);
@ -1630,7 +1634,7 @@ int hg_scanner::setting_paper_check(void* data)
return ret; return ret;
} }
int hg_scanner::setting_page(void* data) int hg_scanner::setting_page(void* data, long* len)
{ {
std::string val((char*)data); std::string val((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_PAGE, val); bool exact = check_range(SANE_STD_OPT_NAME_PAGE, val);
@ -1643,7 +1647,7 @@ int hg_scanner::setting_page(void* data)
return ret; return ret;
} }
int hg_scanner::setting_page_omit_empty(void* data) int hg_scanner::setting_page_omit_empty(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1656,7 +1660,7 @@ int hg_scanner::setting_page_omit_empty(void* data)
return ret; return ret;
} }
int hg_scanner::setting_resolution(void* data) int hg_scanner::setting_resolution(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
old = resolution_, old = resolution_,
@ -1708,32 +1712,32 @@ int hg_scanner::setting_resolution(void* data)
return SCANNER_ERR_RELOAD_OPT_PARAM; // ret; return SCANNER_ERR_RELOAD_OPT_PARAM; // ret;
} }
int hg_scanner::setting_exchagnge(void* data) int hg_scanner::setting_exchagnge(void* data, long* len)
{ {
image_prc_param_.bits.exchange = *((bool*)data); image_prc_param_.bits.exchange = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_split_image(void* data) int hg_scanner::setting_split_image(void* data, long* len)
{ {
image_prc_param_.bits.split = *((bool*)data); image_prc_param_.bits.split = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_automatic_skew(void* data) int hg_scanner::setting_automatic_skew(void* data, long* len)
{ {
// automatic_skew_detection_ = *((bool*)data); // automatic_skew_detection_ = *((bool*)data);
image_prc_param_.bits.automatic_skew = *((bool*)data); image_prc_param_.bits.automatic_skew = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_rid_hole(void* data) int hg_scanner::setting_rid_hole(void* data, long* len)
{ {
image_prc_param_.bits.rid_hole = *((bool*)data); image_prc_param_.bits.rid_hole = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_rid_hoe_range(void* data) int hg_scanner::setting_rid_hoe_range(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1748,7 +1752,7 @@ int hg_scanner::setting_rid_hoe_range(void* data)
return ret; return ret;
} }
int hg_scanner::setting_bright(void* data) int hg_scanner::setting_bright(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1761,7 +1765,7 @@ int hg_scanner::setting_bright(void* data)
VLOG_MINI_1(LOG_LEVEL_WARNING, "set bright_ = %d\r\n", bright_); VLOG_MINI_1(LOG_LEVEL_WARNING, "set bright_ = %d\r\n", bright_);
return ret; return ret;
} }
int hg_scanner::setting_contrast(void* data) int hg_scanner::setting_contrast(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1774,7 +1778,7 @@ int hg_scanner::setting_contrast(void* data)
VLOG_MINI_1(LOG_LEVEL_WARNING, "set contrast_ = %d\r\n", contrast_); VLOG_MINI_1(LOG_LEVEL_WARNING, "set contrast_ = %d\r\n", contrast_);
return ret; return ret;
} }
int hg_scanner::setting_gamma(void* data) int hg_scanner::setting_gamma(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1787,7 +1791,7 @@ int hg_scanner::setting_gamma(void* data)
return ret; return ret;
} }
int hg_scanner::setting_sharpen(void* data) int hg_scanner::setting_sharpen(void* data, long* len)
{ {
std::string str((char*)data); std::string str((char*)data);
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1805,19 +1809,19 @@ int hg_scanner::setting_sharpen(void* data)
return ret; return ret;
} }
int hg_scanner::setting_dark_sample(void* data) int hg_scanner::setting_dark_sample(void* data, long* len)
{ {
image_prc_param_.bits.dark_sample = *((bool*)data); image_prc_param_.bits.dark_sample = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_erase_black_frame(void* data) int hg_scanner::setting_erase_black_frame(void* data, long* len)
{ {
image_prc_param_.bits.erase_black_frame = *((bool*)data); image_prc_param_.bits.erase_black_frame = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_threshold(void* data) int hg_scanner::setting_threshold(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1830,7 +1834,7 @@ int hg_scanner::setting_threshold(void* data)
return ret; return ret;
} }
int hg_scanner::setting_anti_noise(void* data) int hg_scanner::setting_anti_noise(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1843,7 +1847,7 @@ int hg_scanner::setting_anti_noise(void* data)
return ret; return ret;
} }
int hg_scanner::setting_margin(void* data) int hg_scanner::setting_margin(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1856,7 +1860,7 @@ int hg_scanner::setting_margin(void* data)
return ret; return ret;
} }
int hg_scanner::setting_filling_background(void* data) int hg_scanner::setting_filling_background(void* data, long* len)
{ {
std::string str((char*)data); std::string str((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_FILL_BKG_MODE, str); bool exact = check_range(SANE_STD_OPT_NAME_FILL_BKG_MODE, str);
@ -1871,12 +1875,12 @@ int hg_scanner::setting_filling_background(void* data)
return ret; return ret;
} }
int hg_scanner::setting_is_permeate(void* data) int hg_scanner::setting_is_permeate(void* data, long* len)
{ {
image_prc_param_.bits.is_permeate = *((bool*)data); image_prc_param_.bits.is_permeate = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_is_permeate_lv(void* data) int hg_scanner::setting_is_permeate_lv(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
std::string str((char*)data); std::string str((char*)data);
@ -1895,25 +1899,25 @@ int hg_scanner::setting_is_permeate_lv(void* data)
return ret; return ret;
} }
int hg_scanner::setting_remove_morr(void* data) int hg_scanner::setting_remove_morr(void* data, long* len)
{ {
image_prc_param_.bits.remove_morr = *((bool*)data); image_prc_param_.bits.remove_morr = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_error_extention(void* data) int hg_scanner::setting_error_extention(void* data, long* len)
{ {
image_prc_param_.bits.error_extention = *((bool*)data); image_prc_param_.bits.error_extention = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_remove_texture(void* data) int hg_scanner::setting_remove_texture(void* data, long* len)
{ {
image_prc_param_.bits.remove_txtture = *((bool*)data); image_prc_param_.bits.remove_txtture = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_ultrasonic_check(void* data) int hg_scanner::setting_ultrasonic_check(void* data, long* len)
{ {
bool use = *((bool*)data); bool use = *((bool*)data);
int ret = on_ultrasonic_check_changed(use); int ret = on_ultrasonic_check_changed(use);
@ -1923,7 +1927,7 @@ int hg_scanner::setting_ultrasonic_check(void* data)
return ret; return ret;
} }
int hg_scanner::setting_go_on_when_double_checked(void* data) int hg_scanner::setting_go_on_when_double_checked(void* data, long* len)
{ {
bool ok = true; bool ok = true;
@ -1950,7 +1954,7 @@ int hg_scanner::setting_go_on_when_double_checked(void* data)
return SCANNER_ERR_NOT_EXACT; return SCANNER_ERR_NOT_EXACT;
} }
} }
int hg_scanner::setting_staple_check(void* data) int hg_scanner::setting_staple_check(void* data, long* len)
{ {
bool use = *((bool*)data); bool use = *((bool*)data);
int ret = on_staple_check_changed(use); int ret = on_staple_check_changed(use);
@ -1960,7 +1964,7 @@ int hg_scanner::setting_staple_check(void* data)
return ret; return ret;
} }
int hg_scanner::setting_scan_mode(void* data) int hg_scanner::setting_scan_mode(void* data, long* len)
{ {
std::string str((char*)data); std::string str((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_SCAN_MODE, str); bool exact = check_range(SANE_STD_OPT_NAME_SCAN_MODE, str);
@ -1979,7 +1983,7 @@ int hg_scanner::setting_scan_mode(void* data)
return ret; return ret;
} }
int hg_scanner::setting_scan_count(void* data) int hg_scanner::setting_scan_count(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
std::string val(get_setting_item_string(SANE_STD_OPT_NAME_SCAN_MODE, "cur")); std::string val(get_setting_item_string(SANE_STD_OPT_NAME_SCAN_MODE, "cur"));
@ -1996,7 +2000,7 @@ int hg_scanner::setting_scan_count(void* data)
return ret; return ret;
} }
int hg_scanner::setting_text_direction(void* data) int hg_scanner::setting_text_direction(void* data, long* len)
{ {
std::string str((char*)data); std::string str((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_TEXT_DIRECTION, str); bool exact = check_range(SANE_STD_OPT_NAME_TEXT_DIRECTION, str);
@ -2018,19 +2022,19 @@ int hg_scanner::setting_text_direction(void* data)
} }
return ret; return ret;
} }
int hg_scanner::setting_rotate_bkg_180(void* data) int hg_scanner::setting_rotate_bkg_180(void* data, long* len)
{ {
image_prc_param_.bits.rotate_back_180 = *((bool*)data); image_prc_param_.bits.rotate_back_180 = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_fractate_check(void* data) int hg_scanner::setting_fractate_check(void* data, long* len)
{ {
image_prc_param_.bits.fractate_check = *((bool*)data); image_prc_param_.bits.fractate_check = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_fractate_check_level(void* data) int hg_scanner::setting_fractate_check_level(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -2043,7 +2047,7 @@ int hg_scanner::setting_fractate_check_level(void* data)
return ret; return ret;
} }
int hg_scanner::setting_skew_check(void* data) int hg_scanner::setting_skew_check(void* data, long* len)
{ {
bool use = *((bool*)data); bool use = *((bool*)data);
int ret = on_skew_check_changed(use); int ret = on_skew_check_changed(use);
@ -2053,7 +2057,7 @@ int hg_scanner::setting_skew_check(void* data)
return ret; return ret;
} }
int hg_scanner::setting_skew_check_level(void* data) int hg_scanner::setting_skew_check_level(void* data, long* len)
{ {
int level = *((int*)data); int level = *((int*)data);
bool exact = check_range(SANE_STD_OPT_NAME_ASKEW_RANGE, level); bool exact = check_range(SANE_STD_OPT_NAME_ASKEW_RANGE, level);
@ -2069,13 +2073,13 @@ int hg_scanner::setting_skew_check_level(void* data)
return ret; return ret;
} }
int hg_scanner::setting_is_custom_gamma(void* data) int hg_scanner::setting_is_custom_gamma(void* data, long* len)
{ {
custom_gamma_ = *((bool*)data); custom_gamma_ = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_custom_gamma_data(void* data) int hg_scanner::setting_custom_gamma_data(void* data, long* len)
{ {
SANE_Gamma* gamma = (SANE_Gamma*)data; SANE_Gamma* gamma = (SANE_Gamma*)data;
@ -2083,13 +2087,13 @@ int hg_scanner::setting_custom_gamma_data(void* data)
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_is_custom_area(void* data) int hg_scanner::setting_is_custom_area(void* data, long* len)
{ {
custom_area_ = *((bool*)data); custom_area_ = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_custom_area_left(void* data) int hg_scanner::setting_custom_area_left(void* data, long* len)
{ {
SANE_Fixed* v = (SANE_Fixed*)data; SANE_Fixed* v = (SANE_Fixed*)data;
@ -2097,7 +2101,7 @@ int hg_scanner::setting_custom_area_left(void* data)
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_custom_area_top(void* data) int hg_scanner::setting_custom_area_top(void* data, long* len)
{ {
SANE_Fixed* v = (SANE_Fixed*)data; SANE_Fixed* v = (SANE_Fixed*)data;
@ -2105,7 +2109,7 @@ int hg_scanner::setting_custom_area_top(void* data)
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_custom_area_right(void* data) int hg_scanner::setting_custom_area_right(void* data, long* len)
{ {
SANE_Fixed* v = (SANE_Fixed*)data; SANE_Fixed* v = (SANE_Fixed*)data;
@ -2113,7 +2117,7 @@ int hg_scanner::setting_custom_area_right(void* data)
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_custom_area_bottom(void* data) int hg_scanner::setting_custom_area_bottom(void* data, long* len)
{ {
SANE_Fixed* v = (SANE_Fixed*)data; SANE_Fixed* v = (SANE_Fixed*)data;
@ -2122,7 +2126,7 @@ int hg_scanner::setting_custom_area_bottom(void* data)
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_img_quality(void* data) int hg_scanner::setting_img_quality(void* data, long* len)
{ {
std::string str((char*)data); std::string str((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_IMAGE_QUALITY, str); bool exact = check_range(SANE_STD_OPT_NAME_IMAGE_QUALITY, str);
@ -2141,30 +2145,30 @@ int hg_scanner::setting_img_quality(void* data)
}*/ }*/
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_color_fill(void* data) int hg_scanner::setting_color_fill(void* data, long* len)
{ {
is_color_fill = *((bool *)data); is_color_fill = *((bool *)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_keep_watermark(void* data) int hg_scanner::setting_keep_watermark(void* data, long* len)
{ {
keep_watermark_ = *(bool*)data; keep_watermark_ = *(bool*)data;
on_pic_type(keep_watermark_); on_pic_type(keep_watermark_);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_black_white_threshold(void* data) int hg_scanner::setting_black_white_threshold(void* data, long* len)
{ {
bw_threshold_ = (unsigned char)(*(SANE_Int*)data); bw_threshold_ = (unsigned char)(*(SANE_Int*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_white_pixel_0(void* data) int hg_scanner::setting_white_pixel_0(void* data, long* len)
{ {
is_white_0_ = *(bool*)data; is_white_0_ = *(bool*)data;
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_feedmode(void* data) int hg_scanner::setting_feedmode(void* data, long* len)
{ {
std::string str((char *)data); std::string str((char *)data);
int val = match_best_paper_strength(str,NULL); int val = match_best_paper_strength(str,NULL);
@ -2180,7 +2184,7 @@ int hg_scanner::setting_feedmode(void* data)
, (char*)data, hg_scanner_err_name(ret)); , (char*)data, hg_scanner_err_name(ret));
return ret; return ret;
} }
int hg_scanner::setting_sleeptime(void* data) int hg_scanner::setting_sleeptime(void* data, long* len)
{ {
std::string str((char *)data); std::string str((char *)data);
int val = match_best_sleep_time(str,0); int val = match_best_sleep_time(str,0);
@ -2225,7 +2229,7 @@ int hg_scanner::setting_sleeptime(void* data)
, (char*)data, hg_scanner_err_name(ret)); , (char*)data, hg_scanner_err_name(ret));
return ret; return ret;
} }
int hg_scanner::setting_auto_pick_paper(void* data) int hg_scanner::setting_auto_pick_paper(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
bool isautopic = *((bool *)data); bool isautopic = *((bool *)data);
@ -2233,7 +2237,7 @@ int hg_scanner::setting_auto_pick_paper(void* data)
return ret; return ret;
} }
int hg_scanner::setting_auto_pick_paper_threshold(void* data) int hg_scanner::setting_auto_pick_paper_threshold(void* data, long* len)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
double threshold = *((double*)data); double threshold = *((double*)data);
@ -2241,7 +2245,7 @@ int hg_scanner::setting_auto_pick_paper_threshold(void* data)
return ret; return ret;
} }
int hg_scanner::setting_auto_paper_scan(void* data) int hg_scanner::setting_auto_paper_scan(void* data, long* len)
{ {
is_auto_paper_scan = *((bool *)data); is_auto_paper_scan = *((bool *)data);
if (!is_kernelsnap_220430_ && is_auto_paper_scan) if (!is_kernelsnap_220430_ && is_auto_paper_scan)
@ -2257,47 +2261,47 @@ int hg_scanner::setting_auto_paper_scan(void* data)
} }
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_left_hole(void* data) int hg_scanner::setting_isremove_left_hole(void* data, long* len)
{ {
isremove_left_hole = *((bool*)data); isremove_left_hole = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_right_hole(void* data) int hg_scanner::setting_isremove_right_hole(void* data, long* len)
{ {
isremove_right_hole = *((bool*)data); isremove_right_hole = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_top_hole(void* data) int hg_scanner::setting_isremove_top_hole(void* data, long* len)
{ {
isremove_top_hole = *((bool*)data); isremove_top_hole = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_low_hole(void* data) int hg_scanner::setting_isremove_low_hole(void* data, long* len)
{ {
isremove_low_hole = *((bool*)data); isremove_low_hole = *((bool*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_left_hole_threshold(void* data) int hg_scanner::setting_isremove_left_hole_threshold(void* data, long* len)
{ {
isremove_left_hole_threshold = *((double*)data); isremove_left_hole_threshold = *((double*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_right_hole_threshold(void* data) int hg_scanner::setting_isremove_right_hole_threshold(void* data, long* len)
{ {
isremove_right_hole_threshold = *((double*)data); isremove_right_hole_threshold = *((double*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_top_hole_threshold(void* data) int hg_scanner::setting_isremove_top_hole_threshold(void* data, long* len)
{ {
isremove_top_hole_threshold = *((double*)data); isremove_top_hole_threshold = *((double*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_isremove_low_hole_threshold(void* data) int hg_scanner::setting_isremove_low_hole_threshold(void* data, long* len)
{ {
isremove_low_hole_threshold = *((double*)data); isremove_low_hole_threshold = *((double*)data);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_fold_type(void* data) int hg_scanner::setting_fold_type(void* data, long* len)
{ {
string str((char*)data); string str((char*)data);
bool exact = NULL; bool exact = NULL;
@ -2305,7 +2309,7 @@ int hg_scanner::setting_fold_type(void* data)
fold_type_ = val; fold_type_ = val;
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_color_correction(void* data) int hg_scanner::setting_color_correction(void* data, long* len)
{ {
color_correction_ = *((bool*)data); color_correction_ = *((bool*)data);
if (pid_ == 0x239) if (pid_ == 0x239)
@ -2319,7 +2323,7 @@ int hg_scanner::setting_color_correction(void* data)
} }
return 0; return 0;
} }
int hg_scanner::setting_auto_paper_scan_exit_time(void* data) int hg_scanner::setting_auto_paper_scan_exit_time(void* data, long* len)
{ {
string str((char*)data); string str((char*)data);
if (str.compare("15s") == 0) if (str.compare("15s") == 0)
@ -2340,41 +2344,45 @@ int hg_scanner::setting_auto_paper_scan_exit_time(void* data)
//VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "set paper_scan_exit_time from (%d)min to (%s)min = %d\n", is_auto_paper_scan_exit_time, (char*)data); //VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "set paper_scan_exit_time from (%d)min to (%s)min = %d\n", is_auto_paper_scan_exit_time, (char*)data);
return 0; return 0;
} }
int hg_scanner::setting_get_dev_vid(void* data) int hg_scanner::setting_get_dev_vid(void* data, long* len)
{ {
if (io_) if (io_)
{ {
*(int*)data = io_->get_vid(); *(int*)data = io_->get_vid();
if (len)
*len = sizeof(int);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
return SCANNER_ERR_NOT_OPEN; return SCANNER_ERR_NOT_OPEN;
} }
int hg_scanner::setting_get_dev_pid(void* data) int hg_scanner::setting_get_dev_pid(void* data, long* len)
{ {
if (io_) if (io_)
{ {
*(int*)data = io_->get_pid(); *(int*)data = io_->get_pid();
if (len)
*len = sizeof(int);
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
return SCANNER_ERR_NOT_OPEN; return SCANNER_ERR_NOT_OPEN;
} }
int hg_scanner::setting_get_dev_family(void* data) int hg_scanner::setting_get_dev_family(void* data, long* len)
{ {
strcpy((char*)data, family_.c_str()); strcpy((char*)data, family_.c_str());
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_get_dev_name(void* data) int hg_scanner::setting_get_dev_name(void* data, long* len)
{ {
strcpy((char*)data, name_.c_str()); strcpy((char*)data, name_.c_str());
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_get_dev_sn(void* data) int hg_scanner::setting_get_dev_sn(void* data, long* len)
{ {
if (!data) if (!data)
{ {
@ -2383,7 +2391,7 @@ int hg_scanner::setting_get_dev_sn(void* data)
strcpy((char*)data, get_serial_num().c_str()); strcpy((char*)data, get_serial_num().c_str());
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_get_dev_fmver(void* data) int hg_scanner::setting_get_dev_fmver(void* data, long* len)
{ {
if (!data) if (!data)
{ {
@ -2392,7 +2400,7 @@ int hg_scanner::setting_get_dev_fmver(void* data)
strcpy((char*)data, get_firmware_version().c_str()); strcpy((char*)data, get_firmware_version().c_str());
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_get_dev_ip(void* data) int hg_scanner::setting_get_dev_ip(void* data, long* len)
{ {
if (!data) if (!data)
{ {
@ -2401,23 +2409,27 @@ int hg_scanner::setting_get_dev_ip(void* data)
strcpy((char*)data, get_ip().c_str()); strcpy((char*)data, get_ip().c_str());
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
int hg_scanner::setting_get_roller_count(void* data) int hg_scanner::setting_get_roller_count(void* data, long* len)
{ {
if (!data) if (!data)
{ {
return SCANNER_ERR_NO_DATA; return SCANNER_ERR_NO_DATA;
} }
if (len)
*len = sizeof(int);
return get_roller_num(*((int*)data)); return get_roller_num(*((int*)data));
} }
int hg_scanner::setting_get_history_count(void* data) int hg_scanner::setting_get_history_count(void* data, long* len)
{ {
if (!data) if (!data)
{ {
return SCANNER_ERR_NO_DATA; return SCANNER_ERR_NO_DATA;
} }
if (len)
*len = sizeof(int);
return get_history_scan_count(*((int*)data)); return get_history_scan_count(*((int*)data));
} }
int hg_scanner::setting_get_devs_log(void* data) int hg_scanner::setting_get_devs_log(void* data, long* len)
{ {
if (!data) if (!data)
{ {
@ -2494,7 +2506,7 @@ void hg_scanner::on_device_reconnected(void)
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "%04x:%04x reconnected.\n", io_->get_vid(), io_->get_pid()); VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "%04x:%04x reconnected.\n", io_->get_vid(), io_->get_pid());
} }
int hg_scanner::set_setting_value(const char* name, void* data, int len) int hg_scanner::set_setting_value(const char* name, void* data, long* len)
{ {
return SCANNER_ERR_DEVICE_NOT_SUPPORT; return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }
@ -2624,32 +2636,35 @@ void hg_scanner::init_settings(const char* json_setting_text)
val = get_setting_item_string(v.c_str(), "default"); val = get_setting_item_string(v.c_str(), "default");
char* buf = NULL; char* buf = NULL;
int size = 0; long size = 0;
setting_jsn_.at(v.c_str()).at("size").get_to(size); setting_jsn_.at(v.c_str()).at("size").get_to(size);
buf = (char*)malloc(size + 4); buf = (char*)malloc(size + 4);
bzero(buf, size + 4); bzero(buf, size + 4);
strcpy(buf, val.c_str()); strcpy(buf, val.c_str());
set_setting(v.c_str(), buf, val.length()); set_setting(v.c_str(), buf, &size);
free(buf); free(buf);
} }
else if (val == "int") else if (val == "int")
{ {
int n = 0; int n = 0;
long size = sizeof(n);
setting_jsn_.at(v.c_str()).at("default").get_to(n); setting_jsn_.at(v.c_str()).at("default").get_to(n);
set_setting(v.c_str(), (char*)&n, sizeof(n)); set_setting(v.c_str(), (char*)&n, &size);
} }
else if (val == "float") else if (val == "float")
{ {
double d = .0f; double d = .0f;
long size = sizeof(d);
setting_jsn_.at(v.c_str()).at("default").get_to(d); setting_jsn_.at(v.c_str()).at("default").get_to(d);
set_setting(v.c_str(), (char*)&d, sizeof(d)); set_setting(v.c_str(), (char*)&d, &size);
} }
else if (val == "bool") else if (val == "bool")
{ {
bool b = false; bool b = false;
long size = sizeof(b);
setting_jsn_.at(v.c_str()).at("default").get_to(b); setting_jsn_.at(v.c_str()).at("default").get_to(b);
set_setting(v.c_str(), (char*)&b, sizeof(b)); set_setting(v.c_str(), (char*)&b, &size);
} }
} }
VLOG_MINI_1(LOG_LEVEL_ALL, "Initialize %d settings ... OK\n", jsn_children_.size() - 1); VLOG_MINI_1(LOG_LEVEL_ALL, "Initialize %d settings ... OK\n", jsn_children_.size() - 1);
@ -3121,7 +3136,7 @@ int hg_scanner::close(bool force)
return ret; return ret;
} }
int hg_scanner::set_setting(const char* name, void* data, int len) int hg_scanner::set_setting(const char* name, void* data, long* len)
{ {
int ret = SCANNER_ERR_OUT_OF_RANGE; int ret = SCANNER_ERR_OUT_OF_RANGE;
bool hit = false; bool hit = false;
@ -3133,7 +3148,7 @@ int hg_scanner::set_setting(const char* name, void* data, int len)
hit = setting_map_.count(real_n) > 0; hit = setting_map_.count(real_n) > 0;
if (hit) if (hit)
{ {
ret = (this->*setting_map_[real_n])(data); ret = (this->*setting_map_[real_n])(data, len);
if (!setting_jsn_.contains(real_n)) // non-json value, return immediately if (!setting_jsn_.contains(real_n)) // non-json value, return immediately
return ret; return ret;
} }
@ -3435,10 +3450,15 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
//} //}
if (code == IO_CTRL_CODE_RESTORE_SETTINGS) if (code == IO_CTRL_CODE_RESTORE_SETTINGS)
{ {
int ret = invoke_setting_xxx(&hg_scanner::setting_restore, data); long l = len ? *len : 0;
int ret = invoke_setting_xxx(&hg_scanner::setting_restore, data, &l);
if (ret == SCANNER_ERR_OK) if (ret == SCANNER_ERR_OK)
{
ret = SCANNER_ERR_CONFIGURATION_CHANGED; ret = SCANNER_ERR_CONFIGURATION_CHANGED;
}
if (len)
*len = l;
return ret; return ret;
} }
@ -3817,11 +3837,22 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
} }
else if (code == IO_CTRL_CODE_SET_COLOR) else if (code == IO_CTRL_CODE_SET_COLOR)
{ {
return setting_color_mode(data); long l = len ? *len : 0;
int err = setting_color_mode(data, &l);
if (len)
*len = l;
return err;
} }
else if (code == IO_CTRL_CODE_SET_DPI) else if (code == IO_CTRL_CODE_SET_DPI)
{ {
return setting_resolution(data); long l = len ? *len : sizeof(int);
int err = setting_resolution(data, &l);
if (len)
*len = l;
return err;
} }
else if (code == IO_CTRL_CODE_SET_VIDPID) else if (code == IO_CTRL_CODE_SET_VIDPID)
{ {

View File

@ -188,95 +188,95 @@ protected:
// 2022-06-28: 属性处理函数改用map结构存储只须处理set_setting_map函数即可 // 2022-06-28: 属性处理函数改用map结构存储只须处理set_setting_map函数即可
// int setting_map_[HG_BASE_SETTING_INDEX_MAX]; // int setting_map_[HG_BASE_SETTING_INDEX_MAX];
//virtual void init_setting_map(int* setting_map, int count); //virtual void init_setting_map(int* setting_map, int count);
std::map<std::string, int (hg_scanner::*)(void*)> setting_map_; std::map<std::string, int (hg_scanner::*)(void*, long*)> setting_map_;
int invoke_setting_xxx(int(hg_scanner::* func)(void*), void* data); int invoke_setting_xxx(int(hg_scanner::* func)(void*, long*), void* data, long* len);
int setting_restore(void* data); int setting_restore(void* data, long* len);
int setting_help(void* data); int setting_help(void* data, long* len);
int setting_color_mode(void* data); int setting_color_mode(void* data, long* len);
int setting_multi_out(void* data); int setting_multi_out(void* data, long* len);
int setting_multi_out_type(void* data); int setting_multi_out_type(void* data, long* len);
int setting_rid_color(void* data); int setting_rid_color(void* data, long* len);
int setting_rid_multi_red(void* data); int setting_rid_multi_red(void* data, long* len);
int setting_rid_answer_red(void* data); int setting_rid_answer_red(void* data, long* len);
int setting_erase_background(void* data); int setting_erase_background(void* data, long* len);
int setting_erase_background_range(void* data); int setting_erase_background_range(void* data, long* len);
int setting_noise_optimize(void* data); int setting_noise_optimize(void* data, long* len);
int setting_noise_optimize_range(void* data); int setting_noise_optimize_range(void* data, long* len);
int setting_paper(void* data); int setting_paper(void* data, long* len);
int setting_paper_check(void* data); int setting_paper_check(void* data, long* len);
int setting_page(void* data); int setting_page(void* data, long* len);
int setting_page_omit_empty(void* data); int setting_page_omit_empty(void* data, long* len);
int setting_resolution(void* data); int setting_resolution(void* data, long* len);
int setting_exchagnge(void* data); int setting_exchagnge(void* data, long* len);
int setting_split_image(void* data); int setting_split_image(void* data, long* len);
int setting_automatic_skew(void* data); int setting_automatic_skew(void* data, long* len);
int setting_rid_hole(void* data); int setting_rid_hole(void* data, long* len);
int setting_rid_hoe_range(void* data); int setting_rid_hoe_range(void* data, long* len);
int setting_bright(void* data); int setting_bright(void* data, long* len);
int setting_contrast(void* data); int setting_contrast(void* data, long* len);
int setting_gamma(void* data); int setting_gamma(void* data, long* len);
int setting_sharpen(void* data); int setting_sharpen(void* data, long* len);
int setting_dark_sample(void* data); int setting_dark_sample(void* data, long* len);
int setting_erase_black_frame(void* data); int setting_erase_black_frame(void* data, long* len);
int setting_threshold(void* data); int setting_threshold(void* data, long* len);
int setting_anti_noise(void* data); int setting_anti_noise(void* data, long* len);
int setting_margin(void* data); int setting_margin(void* data, long* len);
int setting_filling_background(void* data); int setting_filling_background(void* data, long* len);
int setting_is_permeate(void* data); int setting_is_permeate(void* data, long* len);
int setting_is_permeate_lv(void* data); int setting_is_permeate_lv(void* data, long* len);
int setting_remove_morr(void* data); int setting_remove_morr(void* data, long* len);
int setting_error_extention(void* data); int setting_error_extention(void* data, long* len);
int setting_remove_texture(void* data); int setting_remove_texture(void* data, long* len);
int setting_ultrasonic_check(void* data); int setting_ultrasonic_check(void* data, long* len);
int setting_go_on_when_double_checked(void* data); int setting_go_on_when_double_checked(void* data, long* len);
int setting_staple_check(void* data); int setting_staple_check(void* data, long* len);
int setting_scan_mode(void* data); int setting_scan_mode(void* data, long* len);
int setting_scan_count(void* data); int setting_scan_count(void* data, long* len);
int setting_text_direction(void* data); int setting_text_direction(void* data, long* len);
int setting_rotate_bkg_180(void* data); int setting_rotate_bkg_180(void* data, long* len);
int setting_fractate_check(void* data); int setting_fractate_check(void* data, long* len);
int setting_fractate_check_level(void* data); int setting_fractate_check_level(void* data, long* len);
int setting_skew_check(void* data); int setting_skew_check(void* data, long* len);
int setting_skew_check_level(void* data); int setting_skew_check_level(void* data, long* len);
int setting_is_custom_gamma(void* data); int setting_is_custom_gamma(void* data, long* len);
int setting_custom_gamma_data(void* data); int setting_custom_gamma_data(void* data, long* len);
int setting_is_custom_area(void* data); int setting_is_custom_area(void* data, long* len);
int setting_custom_area_left(void* data); int setting_custom_area_left(void* data, long* len);
int setting_custom_area_top(void* data); int setting_custom_area_top(void* data, long* len);
int setting_custom_area_right(void* data); int setting_custom_area_right(void* data, long* len);
int setting_custom_area_bottom(void* data); int setting_custom_area_bottom(void* data, long* len);
int setting_img_quality(void* data); int setting_img_quality(void* data, long* len);
int setting_color_fill(void* data); int setting_color_fill(void* data, long* len);
int setting_keep_watermark(void* data); int setting_keep_watermark(void* data, long* len);
int setting_black_white_threshold(void* data); int setting_black_white_threshold(void* data, long* len);
int setting_white_pixel_0(void* data); int setting_white_pixel_0(void* data, long* len);
int setting_feedmode(void* data); int setting_feedmode(void* data, long* len);
int setting_sleeptime(void* data); int setting_sleeptime(void* data, long* len);
int setting_auto_pick_paper(void* data); int setting_auto_pick_paper(void* data, long* len);
int setting_auto_pick_paper_threshold(void* data); int setting_auto_pick_paper_threshold(void* data, long* len);
int setting_auto_paper_scan(void* data); int setting_auto_paper_scan(void* data, long* len);
int setting_isremove_left_hole(void* data); int setting_isremove_left_hole(void* data, long* len);
int setting_isremove_right_hole(void* data); int setting_isremove_right_hole(void* data, long* len);
int setting_isremove_top_hole(void* data); int setting_isremove_top_hole(void* data, long* len);
int setting_isremove_low_hole(void* data); int setting_isremove_low_hole(void* data, long* len);
int setting_isremove_left_hole_threshold(void* data); int setting_isremove_left_hole_threshold(void* data, long* len);
int setting_isremove_right_hole_threshold(void* data); int setting_isremove_right_hole_threshold(void* data, long* len);
int setting_isremove_top_hole_threshold(void* data); int setting_isremove_top_hole_threshold(void* data, long* len);
int setting_isremove_low_hole_threshold(void* data); int setting_isremove_low_hole_threshold(void* data, long* len);
int setting_fold_type(void* data); int setting_fold_type(void* data, long* len);
int setting_color_correction(void* data); int setting_color_correction(void* data, long* len);
int setting_auto_paper_scan_exit_time(void* data); int setting_auto_paper_scan_exit_time(void* data, long* len);
int setting_get_dev_vid(void* data); int setting_get_dev_vid(void* data, long* len);
int setting_get_dev_pid(void* data); int setting_get_dev_pid(void* data, long* len);
int setting_get_dev_family(void* data); int setting_get_dev_family(void* data, long* len);
int setting_get_dev_name(void* data); int setting_get_dev_name(void* data, long* len);
int setting_get_dev_sn(void* data); int setting_get_dev_sn(void* data, long* len);
int setting_get_dev_fmver(void* data); int setting_get_dev_fmver(void* data, long* len);
int setting_get_dev_ip(void* data); int setting_get_dev_ip(void* data, long* len);
int setting_get_roller_count(void* data); int setting_get_roller_count(void* data, long* len);
int setting_get_history_count(void* data); int setting_get_history_count(void* data, long* len);
int setting_get_devs_log(void* data); int setting_get_devs_log(void* data, long* len);
virtual void on_device_reconnected(void); virtual void on_device_reconnected(void);
@ -299,7 +299,7 @@ protected:
virtual int on_cis_get_image(bool type) = 0; virtual int on_cis_get_image(bool type) = 0;
protected: protected:
virtual int set_setting_value(const char* name, void* data, int len); virtual int set_setting_value(const char* name, void* data, long* len);
virtual void thread_handle_usb_read(void) = 0; virtual void thread_handle_usb_read(void) = 0;
virtual void thread_handle_islock_read(); virtual void thread_handle_islock_read();
@ -471,7 +471,7 @@ public:
int get_pid(void); int get_pid(void);
int get_vid(void); int get_vid(void);
int close(bool force); int close(bool force);
int set_setting(const char* name, void* data, int len); int set_setting(const char* name, void* data, long* len);
int get_setting(const char* name, char* json_txt_buf, int* len, int* id); 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 hgpaper_to_devspaper(Paper_Map papermap[], int len, int& paper, bool* exact, TwSS* type);
int image_configuration(SCANCONF &ic); int image_configuration(SCANCONF &ic);

View File

@ -1460,7 +1460,8 @@ int hg_scanner_239::device_io_control(unsigned long code, void* data, unsigned*
if (opten->name == SANE_STD_OPT_NAME_ANTI_SKEW && !opten->enabled) // for BUG-20 modified by Gongbing on 2022-03-12 if (opten->name == SANE_STD_OPT_NAME_ANTI_SKEW && !opten->enabled) // for BUG-20 modified by Gongbing on 2022-03-12
{ {
bool enable = true; bool enable = true;
setting_automatic_skew(&enable); long l = sizeof(enable);
setting_automatic_skew(&enable, &l);
} }
} }
else if (IO_CTRL_CODE_TEST_SINGLE == code) else if (IO_CTRL_CODE_TEST_SINGLE == code)

View File

@ -1117,7 +1117,8 @@ int hg_scanner_302::device_io_control(unsigned long code, void* data, unsigned*
if (opten->name == SANE_STD_OPT_NAME_ANTI_SKEW && !opten->enabled) // for BUG-20 modified by Gongbing on 2022-03-12 if (opten->name == SANE_STD_OPT_NAME_ANTI_SKEW && !opten->enabled) // for BUG-20 modified by Gongbing on 2022-03-12
{ {
bool enable = true; bool enable = true;
setting_automatic_skew(&enable); long l = sizeof(enable);
setting_automatic_skew(&enable, &l);
} }
} }
else if (IO_CTRL_CODE_TEST_SINGLE == code) else if (IO_CTRL_CODE_TEST_SINGLE == code)

View File

@ -813,7 +813,7 @@ scanner_err hg_scanner_mgr::hg_scanner_get_parameter(scanner_handle h, const cha
strcmp(SANE_STD_OPT_NAME_ROLLER_COUNT, name) == 0 || strcmp(SANE_STD_OPT_NAME_ROLLER_COUNT, name) == 0 ||
strcmp(SANE_STD_OPT_NAME_TOTAL_COUNT, name) == 0 || strcmp(SANE_STD_OPT_NAME_TOTAL_COUNT, name) == 0 ||
strcmp(SANE_STD_OPT_NAME_GET_DEVS_L0G, name) == 0) strcmp(SANE_STD_OPT_NAME_GET_DEVS_L0G, name) == 0)
return (scanner_err)SCAN_PTR(h)->set_setting(name, data, *len); return (scanner_err)SCAN_PTR(h)->set_setting(name, data, len);
} }
if (strcmp(SANE_STD_OPT_NAME_DRIVER_LOG, name) == 0) if (strcmp(SANE_STD_OPT_NAME_DRIVER_LOG, name) == 0)
@ -876,7 +876,7 @@ scanner_err hg_scanner_mgr::hg_scanner_get_parameter(scanner_handle h, const cha
return (scanner_err)err; return (scanner_err)err;
} }
scanner_err hg_scanner_mgr::hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long len) scanner_err hg_scanner_mgr::hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long* len)
{ {
if (!IS_PTR_NUMBER(name)) if (!IS_PTR_NUMBER(name))
{ {
@ -938,7 +938,7 @@ scanner_err hg_scanner_mgr::hg_scanner_set_parameter(scanner_handle h, const cha
{ {
if (user_ == ADMIN_NAME && pwd_ == ADMIN_PWD) if (user_ == ADMIN_NAME && pwd_ == ADMIN_PWD)
{ {
return (scanner_err)SCAN_PTR(h)->device_io_control(IO_CTRL_CODE_SET_CLEAR_ROLLER_COUNT, data, (unsigned*)&len); return (scanner_err)SCAN_PTR(h)->device_io_control(IO_CTRL_CODE_SET_CLEAR_ROLLER_COUNT, data, (unsigned*)len);
} }
return SCANNER_ERR_ACCESS_DENIED; return SCANNER_ERR_ACCESS_DENIED;

View File

@ -122,7 +122,7 @@ public:
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_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_close(scanner_handle h, bool force);
scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len, SANE_Int* id); 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_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_start(scanner_handle h, void* async_event, int num);
scanner_err hg_scanner_stop(scanner_handle h); scanner_err hg_scanner_stop(scanner_handle h);
scanner_err hg_scanner_get_img_info(scanner_handle h, SANE_Parameters* bmi, long len); scanner_err hg_scanner_get_img_info(scanner_handle h, SANE_Parameters* bmi, long len);

View File

@ -144,7 +144,7 @@ extern "C"
return hg_scanner_mgr::instance()->hg_scanner_get_parameter(h, name, data, len, id); 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) scanner_err hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long* len)
{ {
return hg_scanner_mgr::instance()->hg_scanner_set_parameter(h, name, data, len); return hg_scanner_mgr::instance()->hg_scanner_set_parameter(h, name, data, len);
} }

View File

@ -1791,7 +1791,7 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA
void* pass = value; void* pass = value;
double dv = .0f; double dv = .0f;
bool bv = false; bool bv = false;
int size = desc->size; long size = desc->size;
prev = hg_sane_middleware::option_value_2_string(desc->type, value); prev = hg_sane_middleware::option_value_2_string(desc->type, value);
if (desc->type == SANE_TYPE_BOOL) if (desc->type == SANE_TYPE_BOOL)
@ -1807,7 +1807,7 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA
size = sizeof(dv); size = sizeof(dv);
} }
err = hg_scanner_set_parameter(handle, (const char*)option, pass, size); err = hg_scanner_set_parameter(handle, (const char*)option, pass, &size);
if (desc->type == SANE_TYPE_BOOL) if (desc->type == SANE_TYPE_BOOL)
{ {

View File

@ -389,7 +389,7 @@ scanner_err sane_std_opts::set_value(scanner_handle h, int opt, void* buf)
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "%d->%d: %s\n", opt, op->user.opt, (char*)data); VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "%d->%d: %s\n", opt, op->user.opt, (char*)data);
statu = hg_scanner_set_parameter(h, (const char*)op->user.opt, data, len); statu = hg_scanner_set_parameter(h, (const char*)op->user.opt, data, &len);
if (statu == SCANNER_ERR_NOT_EXACT) if (statu == SCANNER_ERR_NOT_EXACT)
to_known_opt_value(op, data, buf); to_known_opt_value(op, data, buf);
if (data) if (data)

View File

@ -347,13 +347,13 @@ extern "C"{
// float: (float*)data // float: (float*)data
// string: (char*)data // string: (char*)data
// //
// len - 'data' 大小 // len - [in] - 'data' 大小, [out] - exact data size in 'data' if E_NOTEXACT returned
// //
// Return: 错误代码E_OK or E_NOTEXACT or E_ACCESSDENIED or E_NEEDRELOADPARAM // Return: 错误代码E_OK or E_NOTEXACT or E_ACCESSDENIED or E_NEEDRELOADPARAM
// //
// NOTE: 如果传入的参数不精确则由驱动选择合适的参数设置并写入到data中返回 E_NOTEXACT 的错误码。用户需要根据该参数更新UI // NOTE: 如果传入的参数不精确则由驱动选择合适的参数设置并写入到data中返回 E_NOTEXACT 的错误码。用户需要根据该参数更新UI
// 以共享方式打开的设备,没有设置权限,会返回 E_ACCESSDENIED 错误。 // 以共享方式打开的设备,没有设置权限,会返回 E_ACCESSDENIED 错误。
scanner_err hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long len); scanner_err hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long* len);
// Function: 启动设备工作 // Function: 启动设备工作
// //