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

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");
char* buf = NULL;
int size = 0;
long size = 0;
setting_jsn_.at(name).at("size").get_to(size);
buf = (char*)malloc(size + 4);
@ -932,7 +932,7 @@ int hg_scanner::restore(const char* name)
{
bzero(buf, size + 4);
strcpy(buf, val.c_str());
ret = set_setting(name, buf, val.length());
ret = set_setting(name, buf, &size);
free(buf);
}
else
@ -941,20 +941,23 @@ int hg_scanner::restore(const char* name)
else if (val == "int")
{
int v = 0;
long size = sizeof(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")
{
double v = .0f;
long size = sizeof(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")
{
bool v = false;
long size = sizeof(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;
@ -1356,7 +1359,7 @@ int hg_scanner::hgpaper_to_devspaper(Paper_Map papermap[], int len, int& paper,
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;
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)
{
ret = set_setting(it->first.c_str(), data, 0);
ret = set_setting(it->first.c_str(), data, len);
break;
}
++it;
@ -1372,7 +1375,7 @@ int hg_scanner::invoke_setting_xxx(int(hg_scanner::*func)(void*), void* data)
return ret;
}
int hg_scanner::setting_restore(void* data)
int hg_scanner::setting_restore(void* data, long* len)
{
// restore ...
notify_setting_result_ = false;
@ -1390,7 +1393,7 @@ int hg_scanner::setting_restore(void* data)
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;
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());
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);
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;
}
int hg_scanner::setting_multi_out(void* data)
int hg_scanner::setting_multi_out(void* data, long* len)
{
is_multiout = *((bool*)data);
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;
}
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;
@ -1500,7 +1503,7 @@ int hg_scanner::setting_multi_out_type(void* data)
on_color_mode_changed(color);*/
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);
int ret = SCANNER_ERR_OK,
@ -1520,25 +1523,25 @@ int hg_scanner::setting_rid_color(void* data)
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);
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);
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);
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;
@ -1551,13 +1554,13 @@ int hg_scanner::setting_erase_background_range(void* data)
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);
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;
@ -1570,7 +1573,7 @@ int hg_scanner::setting_noise_optimize_range(void* data)
return ret;
}
int hg_scanner::setting_paper(void* data)
int hg_scanner::setting_paper(void* data, long* len)
{
std::string paper((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_PAPER, paper);
@ -1606,7 +1609,8 @@ int hg_scanner::setting_paper(void* data)
if (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));
@ -1618,7 +1622,7 @@ int hg_scanner::setting_paper(void* data)
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);
@ -1630,7 +1634,7 @@ int hg_scanner::setting_paper_check(void* data)
return ret;
}
int hg_scanner::setting_page(void* data)
int hg_scanner::setting_page(void* data, long* len)
{
std::string val((char*)data);
bool exact = check_range(SANE_STD_OPT_NAME_PAGE, val);
@ -1643,7 +1647,7 @@ int hg_scanner::setting_page(void* data)
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;
@ -1656,7 +1660,7 @@ int hg_scanner::setting_page_omit_empty(void* data)
return ret;
}
int hg_scanner::setting_resolution(void* data)
int hg_scanner::setting_resolution(void* data, long* len)
{
int ret = SCANNER_ERR_OK,
old = resolution_,
@ -1708,32 +1712,32 @@ int hg_scanner::setting_resolution(void* data)
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);
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);
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);
image_prc_param_.bits.automatic_skew = *((bool*)data);
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);
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;
@ -1748,7 +1752,7 @@ int hg_scanner::setting_rid_hoe_range(void* data)
return ret;
}
int hg_scanner::setting_bright(void* data)
int hg_scanner::setting_bright(void* data, long* len)
{
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_);
return ret;
}
int hg_scanner::setting_contrast(void* data)
int hg_scanner::setting_contrast(void* data, long* len)
{
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_);
return ret;
}
int hg_scanner::setting_gamma(void* data)
int hg_scanner::setting_gamma(void* data, long* len)
{
int ret = SCANNER_ERR_OK;
@ -1787,7 +1791,7 @@ int hg_scanner::setting_gamma(void* data)
return ret;
}
int hg_scanner::setting_sharpen(void* data)
int hg_scanner::setting_sharpen(void* data, long* len)
{
std::string str((char*)data);
int ret = SCANNER_ERR_OK;
@ -1805,19 +1809,19 @@ int hg_scanner::setting_sharpen(void* data)
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);
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);
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;
@ -1830,7 +1834,7 @@ int hg_scanner::setting_threshold(void* data)
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;
@ -1843,7 +1847,7 @@ int hg_scanner::setting_anti_noise(void* data)
return ret;
}
int hg_scanner::setting_margin(void* data)
int hg_scanner::setting_margin(void* data, long* len)
{
int ret = SCANNER_ERR_OK;
@ -1856,7 +1860,7 @@ int hg_scanner::setting_margin(void* data)
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);
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;
}
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);
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;
std::string str((char*)data);
@ -1895,25 +1899,25 @@ int hg_scanner::setting_is_permeate_lv(void* data)
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);
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);
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);
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);
int ret = on_ultrasonic_check_changed(use);
@ -1923,7 +1927,7 @@ int hg_scanner::setting_ultrasonic_check(void* data)
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;
@ -1950,7 +1954,7 @@ int hg_scanner::setting_go_on_when_double_checked(void* data)
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);
int ret = on_staple_check_changed(use);
@ -1960,7 +1964,7 @@ int hg_scanner::setting_staple_check(void* data)
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);
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;
}
int hg_scanner::setting_scan_count(void* data)
int hg_scanner::setting_scan_count(void* data, long* len)
{
int ret = SCANNER_ERR_OK;
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;
}
int hg_scanner::setting_text_direction(void* data)
int hg_scanner::setting_text_direction(void* data, long* len)
{
std::string str((char*)data);
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;
}
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);
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);
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;
@ -2043,7 +2047,7 @@ int hg_scanner::setting_fractate_check_level(void* data)
return ret;
}
int hg_scanner::setting_skew_check(void* data)
int hg_scanner::setting_skew_check(void* data, long* len)
{
bool use = *((bool*)data);
int ret = on_skew_check_changed(use);
@ -2053,7 +2057,7 @@ int hg_scanner::setting_skew_check(void* data)
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);
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;
}
int hg_scanner::setting_is_custom_gamma(void* data)
int hg_scanner::setting_is_custom_gamma(void* data, long* len)
{
custom_gamma_ = *((bool*)data);
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;
@ -2083,13 +2087,13 @@ int hg_scanner::setting_custom_gamma_data(void* data)
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);
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;
@ -2097,7 +2101,7 @@ int hg_scanner::setting_custom_area_left(void* data)
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;
@ -2105,7 +2109,7 @@ int hg_scanner::setting_custom_area_top(void* data)
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;
@ -2113,7 +2117,7 @@ int hg_scanner::setting_custom_area_right(void* data)
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;
@ -2122,7 +2126,7 @@ int hg_scanner::setting_custom_area_bottom(void* data)
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);
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;
}
int hg_scanner::setting_color_fill(void* data)
int hg_scanner::setting_color_fill(void* data, long* len)
{
is_color_fill = *((bool *)data);
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;
on_pic_type(keep_watermark_);
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);
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;
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);
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));
return ret;
}
int hg_scanner::setting_sleeptime(void* data)
int hg_scanner::setting_sleeptime(void* data, long* len)
{
std::string str((char *)data);
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));
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;
bool isautopic = *((bool *)data);
@ -2233,7 +2237,7 @@ int hg_scanner::setting_auto_pick_paper(void* data)
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;
double threshold = *((double*)data);
@ -2241,7 +2245,7 @@ int hg_scanner::setting_auto_pick_paper_threshold(void* data)
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);
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;
}
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);
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);
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);
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);
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);
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);
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);
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);
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);
bool exact = NULL;
@ -2305,7 +2309,7 @@ int hg_scanner::setting_fold_type(void* data)
fold_type_ = val;
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);
if (pid_ == 0x239)
@ -2319,7 +2323,7 @@ int hg_scanner::setting_color_correction(void* data)
}
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);
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);
return 0;
}
int hg_scanner::setting_get_dev_vid(void* data)
int hg_scanner::setting_get_dev_vid(void* data, long* len)
{
if (io_)
{
*(int*)data = io_->get_vid();
if (len)
*len = sizeof(int);
return SCANNER_ERR_OK;
}
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_)
{
*(int*)data = io_->get_pid();
if (len)
*len = sizeof(int);
return SCANNER_ERR_OK;
}
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());
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());
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)
{
@ -2383,7 +2391,7 @@ int hg_scanner::setting_get_dev_sn(void* data)
strcpy((char*)data, get_serial_num().c_str());
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)
{
@ -2392,7 +2400,7 @@ int hg_scanner::setting_get_dev_fmver(void* data)
strcpy((char*)data, get_firmware_version().c_str());
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)
{
@ -2401,23 +2409,27 @@ int hg_scanner::setting_get_dev_ip(void* data)
strcpy((char*)data, get_ip().c_str());
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)
{
return SCANNER_ERR_NO_DATA;
}
if (len)
*len = sizeof(int);
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)
{
return SCANNER_ERR_NO_DATA;
}
if (len)
*len = sizeof(int);
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)
{
@ -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());
}
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;
}
@ -2624,32 +2636,35 @@ void hg_scanner::init_settings(const char* json_setting_text)
val = get_setting_item_string(v.c_str(), "default");
char* buf = NULL;
int size = 0;
long size = 0;
setting_jsn_.at(v.c_str()).at("size").get_to(size);
buf = (char*)malloc(size + 4);
bzero(buf, size + 4);
strcpy(buf, val.c_str());
set_setting(v.c_str(), buf, val.length());
set_setting(v.c_str(), buf, &size);
free(buf);
}
else if (val == "int")
{
int n = 0;
long size = sizeof(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")
{
double d = .0f;
long size = sizeof(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")
{
bool b = false;
long size = sizeof(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);
@ -3121,7 +3136,7 @@ int hg_scanner::close(bool force)
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;
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;
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
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)
{
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)
{
ret = SCANNER_ERR_CONFIGURATION_CHANGED;
}
if (len)
*len = l;
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)
{
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)
{
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)
{

View File

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

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_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_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_stop(scanner_handle h);
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);
}
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);
}

View File

@ -1791,7 +1791,7 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA
void* pass = value;
double dv = .0f;
bool bv = false;
int size = desc->size;
long size = desc->size;
prev = hg_sane_middleware::option_value_2_string(desc->type, value);
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);
}
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)
{

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);
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)
to_known_opt_value(op, data, buf);
if (data)

View File

@ -347,13 +347,13 @@ extern "C"{
// float: (float*)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
//
// NOTE: 如果传入的参数不精确则由驱动选择合适的参数设置并写入到data中返回 E_NOTEXACT 的错误码。用户需要根据该参数更新UI
// 以共享方式打开的设备,没有设置权限,会返回 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: 启动设备工作
//