diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 818ba61..428b860 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -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) { diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index 4eb72f2..3ab94df 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -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 setting_map_; - int invoke_setting_xxx(int(hg_scanner::* func)(void*), void* data); + std::map 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); diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 1866ca3..971d2a1 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -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) diff --git a/hgdriver/hgdev/hg_scanner_302.cpp b/hgdriver/hgdev/hg_scanner_302.cpp index 8fe0ac3..a20f378 100644 --- a/hgdriver/hgdev/hg_scanner_302.cpp +++ b/hgdriver/hgdev/hg_scanner_302.cpp @@ -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) diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index 254aa2f..c7ff765 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -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; diff --git a/hgdriver/hgdev/scanner_manager.h b/hgdriver/hgdev/scanner_manager.h index 330fd4f..e127741 100644 --- a/hgdriver/hgdev/scanner_manager.h +++ b/hgdriver/hgdev/scanner_manager.h @@ -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); diff --git a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp index 6ad7ee1..f456d69 100644 --- a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp +++ b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp @@ -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); } diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 3ff23d4..883056e 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -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) { diff --git a/hgsane/sane_option.cpp b/hgsane/sane_option.cpp index e6bd57f..15c0103 100644 --- a/hgsane/sane_option.cpp +++ b/hgsane/sane_option.cpp @@ -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) diff --git a/sdk/hginclude/huagaoxxx_warraper_ex.h b/sdk/hginclude/huagaoxxx_warraper_ex.h index ca19437..f76b00b 100644 --- a/sdk/hginclude/huagaoxxx_warraper_ex.h +++ b/sdk/hginclude/huagaoxxx_warraper_ex.h @@ -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: 启动设备工作 //