From 55623ecdfc757950ade08ebbcc88f6be70013902 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Thu, 19 Jan 2023 15:43:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81=E6=94=B9?= =?UTF-8?q?=E5=8F=98=E8=AF=AD=E8=A8=80=E5=8C=85=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/common_setting.cpp | 184 ++++++++++++--------- hgdriver/hgdev/common_setting.h | 3 + hgdriver/hgdev/hg_scanner.cpp | 1 - hgdriver/wrapper/huagaoxxx_warraper_ex.cpp | 19 ++- hgsane/sane_hg_mdw.cpp | 28 +++- hgsane/sane_hg_mdw.h | 3 + 6 files changed, 155 insertions(+), 83 deletions(-) diff --git a/hgdriver/hgdev/common_setting.cpp b/hgdriver/hgdev/common_setting.cpp index 1637f72..399f60b 100644 --- a/hgdriver/hgdev/common_setting.cpp +++ b/hgdriver/hgdev/common_setting.cpp @@ -1,8 +1,11 @@ #include "common_setting.h" #include "sane/sane_option_definitions.h" #include "hg_log.h" + +#define MAKE_ID_AND_STR(id) id, hg_log::lang_load(id) static struct _fixed_option { + int str_id; std::string str; int enum_val; } @@ -10,130 +13,130 @@ static struct _fixed_option g_color_mode[] = { - {hg_log::lang_load(ID_OPTION_VALUE_YSMS_HB), COLOR_MODE_BLACK_WHITE }, - {hg_log::lang_load(ID_OPTION_VALUE_YSMS_256JHD), COLOR_MODE_256_GRAY}, - {hg_log::lang_load(ID_OPTION_VALUE_YSMS_24WCS), COLOR_MODE_24_BITS}, - {hg_log::lang_load(ID_OPTION_VALUE_YSMS_YSZDSB), COLOR_MODE_AUTO_MATCH} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_HB), COLOR_MODE_BLACK_WHITE }, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_256JHD), COLOR_MODE_256_GRAY}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_24WCS), COLOR_MODE_24_BITS}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_YSMS_YSZDSB), COLOR_MODE_AUTO_MATCH} }, g_multi_out[] = { - {hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_CS_HD_HB), MULTI_OUT_ALL}, - {hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_CS_HD), MULTI_COLOR_AND_GRAY}, - {hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_CS_HB), MULTI_COLOR_AND_BW}, - {hg_log::lang_load(ID_OPTION_VALUE_DLSCLX_HD_HB), MULTI_GRAY_AND_BW} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_CS_HD_HB), MULTI_OUT_ALL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_CS_HD), MULTI_COLOR_AND_GRAY}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_CS_HB), MULTI_COLOR_AND_BW}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_DLSCLX_HD_HB), MULTI_GRAY_AND_BW} }, g_rid_color[] = { - {hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_BCS), RID_COLOR_NONE}, - {hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHS), RID_COLOR_RID_RED}, - {hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CLS), RID_COLOR_RID_GREEN}, - {hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHULANSE), RID_COLOR_RID_BLUE}, - {hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_HSZQ), RID_COLOR_ENHANCE_RED}, - {hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LSZQ), RID_COLOR_ENHANCE_GREEN}, - {hg_log::lang_load(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LANSEZENGQIANG), RID_COLOR_ENHANCE_BLUE} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_BCS), RID_COLOR_NONE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHS), RID_COLOR_RID_RED}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CLS), RID_COLOR_RID_GREEN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_CHULANSE), RID_COLOR_RID_BLUE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_HSZQ), RID_COLOR_ENHANCE_RED}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LSZQ), RID_COLOR_ENHANCE_GREEN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HDHHBTX_CSYZQ_LANSEZENGQIANG), RID_COLOR_ENHANCE_BLUE} }, g_paper[] = { - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A3), PAPER_A3}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A4), PAPER_A4}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A5), PAPER_A5}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A6), PAPER_A6}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B4), PAPER_B4}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B5), PAPER_B5}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B6), PAPER_B6}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_8K), PAPER_8K}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_16K), PAPER_16K}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_Letter), PAPER_LETTER}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A4HX), PAPER_A4_LATERAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A5HX), PAPER_A5_LATERAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_A6HX), PAPER_A6_LATERAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B5HX), PAPER_B5_LATERAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_B6HX), PAPER_B6_LATERAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_16KHX), PAPER_16K_LATERAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_LetterHX), PAPER_LETTER_LATERAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_DoubleLetter), PAPER_DOUBLE_LETTER}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_LEGAL), PAPER_LEGAL}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_PPYSCC), PAPER_AUTO_MATCH}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_ZDSMCC), PAPER_MAX_SIZE}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_ZDSMCCZDCQ), PAPER_MAX_SIZE_CLIP}, - {hg_log::lang_load(ID_OPTION_VALUE_ZZCC_SLSJ), PAPER_TRIGEMINY} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A3), PAPER_A3}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A4), PAPER_A4}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A5), PAPER_A5}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A6), PAPER_A6}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B4), PAPER_B4}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B5), PAPER_B5}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B6), PAPER_B6}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_8K), PAPER_8K}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_16K), PAPER_16K}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_Letter), PAPER_LETTER}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A4HX), PAPER_A4_LATERAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A5HX), PAPER_A5_LATERAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_A6HX), PAPER_A6_LATERAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B5HX), PAPER_B5_LATERAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_B6HX), PAPER_B6_LATERAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_16KHX), PAPER_16K_LATERAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_LetterHX), PAPER_LETTER_LATERAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_DoubleLetter), PAPER_DOUBLE_LETTER}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_LEGAL), PAPER_LEGAL}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_PPYSCC), PAPER_AUTO_MATCH}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_ZDSMCC), PAPER_MAX_SIZE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_ZDSMCCZDCQ), PAPER_MAX_SIZE_CLIP}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZZCC_SLSJ), PAPER_TRIGEMINY} }, g_page[] = { - {hg_log::lang_load(ID_OPTION_VALUE_SMYM_DM), PAGE_SINGLE}, - {hg_log::lang_load(ID_OPTION_VALUE_SMYM_SM), PAGE_DOUBLE}, - {hg_log::lang_load(ID_OPTION_VALUE_SMYM_TGKBYTY), PAGE_OMIT_EMPTY}, - {hg_log::lang_load(ID_OPTION_VALUE_SMYM_TGKBYFPZ), PAGE_OMIT_EMPTY_RECEIPT}, - {hg_log::lang_load(ID_OPTION_VALUE_SMYM_DZ), PAGE_FOLIO} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_DM), PAGE_SINGLE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_SM), PAGE_DOUBLE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_TGKBYTY), PAGE_OMIT_EMPTY}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_TGKBYFPZ), PAGE_OMIT_EMPTY_RECEIPT}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SMYM_DZ), PAGE_FOLIO} }, g_sharpen[] = { - {hg_log::lang_load(ID_OPTION_VALUE_RHYMH_W), SHARPEN_NONE}, - {hg_log::lang_load(ID_OPTION_VALUE_RHYMH_RH), SHARPEN_SHARPEN}, - {hg_log::lang_load(ID_OPTION_VALUE_RHYMH_JYBRH), SHARPEN_SHARPEN_MORE}, - {hg_log::lang_load(ID_OPTION_VALUE_RHYMH_MH), SHARPEN_HAZY}, - {hg_log::lang_load(ID_OPTION_VALUE_RHYMH_JYBMH), SHARPEN_HAZY_MORE} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_W), SHARPEN_NONE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_RH), SHARPEN_SHARPEN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_JYBRH), SHARPEN_SHARPEN_MORE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_MH), SHARPEN_HAZY}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_RHYMH_JYBMH), SHARPEN_HAZY_MORE} }, g_fill_bkg[] = { - {hg_log::lang_load(ID_OPTION_VALUE_BJTCFS_TDBX), FILL_BKG_CONVEX_POLYGON}, - {hg_log::lang_load(ID_OPTION_VALUE_BJTCFS_ADBX), FILL_BKG_CONCAVE_POLYGON} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_BJTCFS_TDBX), FILL_BKG_CONVEX_POLYGON}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_BJTCFS_ADBX), FILL_BKG_CONCAVE_POLYGON} }, g_scan_mode[] = { - {hg_log::lang_load(ID_OPTION_VALUE_SMZS_LXSM), SCAN_MODE_CONTINUOUS}, - {hg_log::lang_load(ID_OPTION_VALUE_SMZS_SMZDZS), SCAN_MODE_GIVEN_COUNT} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SMZS_LXSM), SCAN_MODE_CONTINUOUS}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SMZS_SMZDZS), SCAN_MODE_GIVEN_COUNT} }, g_text_direction[] = { - {hg_log::lang_load(ID_OPTION_VALUE_WGFX_0), TEXT_DIRECTION_0}, - {hg_log::lang_load(ID_OPTION_VALUE_WGFX_90), TEXT_DIRECTION_90}, - {hg_log::lang_load(ID_OPTION_VALUE_WGFX_180), TEXT_DIRECTION_180}, - {hg_log::lang_load(ID_OPTION_VALUE_WGFX__90), TEXT_DIRECTION_270}, - {hg_log::lang_load(ID_OPTION_VALUE_WGFX_ZDWBFXSB), TEXT_DIRECTION_AUTO} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_0), TEXT_DIRECTION_0}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_90), TEXT_DIRECTION_90}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_180), TEXT_DIRECTION_180}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX__90), TEXT_DIRECTION_270}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_WGFX_ZDWBFXSB), TEXT_DIRECTION_AUTO} }, g_permeate_lv[] = { - {hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_JR), PERMAEATE_WEAKER}, - {hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_R), PERMAEATE_WEAK}, - {hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_YB), PERMAEATE_ORDINARY}, - {hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_Q), PERMAEATE_STRONG}, - {hg_log::lang_load(ID_OPTION_VALUE_FZSTDJ_JQ), PERMAEATE_STRONGER} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_JR), PERMAEATE_WEAKER}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_R), PERMAEATE_WEAK}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_YB), PERMAEATE_ORDINARY}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_Q), PERMAEATE_STRONG}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZSTDJ_JQ), PERMAEATE_STRONGER} }, g_img_quality[] = { - {hg_log::lang_load(ID_OPTION_VALUE_HZ_W), IMG_NONE}, - {hg_log::lang_load(ID_OPTION_VALUE_HZ_SDYX), IMG_SPEED}, - {hg_log::lang_load(ID_OPTION_VALUE_HZ_HZYX), IMG_QUALITY} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HZ_W), IMG_NONE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HZ_SDYX), IMG_SPEED}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_HZ_HZYX), IMG_QUALITY} }, g_paper_strenght[]= { - {hg_log::lang_load(ID_OPTION_VALUE_FZQD_R),PAPER_WEAK}, - {hg_log::lang_load(ID_OPTION_VALUE_FZQD_YB),PAPER_AVERAGE}, - {hg_log::lang_load(ID_OPTION_VALUE_FZQD_Q),PAPER_STRONG} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZQD_R),PAPER_WEAK}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZQD_YB),PAPER_AVERAGE}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_FZQD_Q),PAPER_STRONG} }, g_sleep_time[]= { - {hg_log::lang_load(ID_OPTION_VALUE_XMSJ_BXM),SLEEP_TIME_0MIN}, - {hg_log::lang_load(ID_OPTION_VALUE_XMSJ_WFZ),SLEEP_TIME_5MIN}, - {hg_log::lang_load(ID_OPTION_VALUE_XMSJ_SFZ),SLEEP_TIME_10MIN}, - {hg_log::lang_load(ID_OPTION_VALUE_XMSJ_BXS),SLEEP_TIME_30MIN}, - {hg_log::lang_load(ID_OPTION_VALUE_XMSJ_YXS),SLEEP_TIME_60MIN}, - {hg_log::lang_load(ID_OPTION_VALUE_XMSJ_LXS),SLEEP_TIME_120MIN}, - {hg_log::lang_load(ID_OPTION_VALUE_XMSJ_SXS),SLEEP_TIME_240MIN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_BXM),SLEEP_TIME_0MIN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_WFZ),SLEEP_TIME_5MIN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_SFZ),SLEEP_TIME_10MIN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_BXS),SLEEP_TIME_30MIN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_YXS),SLEEP_TIME_60MIN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_LXS),SLEEP_TIME_120MIN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_XMSJ_SXS),SLEEP_TIME_240MIN}, }, g_fold_type[] = { - {hg_log::lang_load(ID_OPTION_VALUE_ZYDZ),FOLD_TYPE_LEFT_RIGHT}, - {hg_log::lang_load(ID_OPTION_VALUE_SXDZ),FOLD_TYPE_UP_DOWN}, - {hg_log::lang_load(ID_OPTION_VALUE_ZDDZ),FOLD_TYPE_AUTO} + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZYDZ),FOLD_TYPE_LEFT_RIGHT}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_SXDZ),FOLD_TYPE_UP_DOWN}, + {MAKE_ID_AND_STR(ID_OPTION_VALUE_ZDDZ),FOLD_TYPE_AUTO} }; static struct paper_size @@ -245,7 +248,13 @@ static std::string get_str(struct _fixed_option* arr, int num, int enm, int defa else return arr[default_v].str; } +static void reload_string(struct _fixed_option* arr, int num) +{ + for (int i = 0; i < num; ++i) + arr[i].str = hg_log::lang_load(arr[i].str_id); +} +#define RELOAD_STRING(arr) reload_string(arr, ARRAY_SIZE(arr)) #define INVOKE_MATCH(arr, val, yes) match_best(arr, ARRAY_SIZE(arr), val, yes) #define INVOKE_STR(arr, val, def) get_str(arr, ARRAY_SIZE(arr), val, def) #define SET_DEFAULT_ON_FAIL(map_array, ind, val, def) \ @@ -530,3 +539,22 @@ bool is_save_img_when_double_paper(int flag) { return flag& DOUBLE_PAPER_SAVE_IMG; } + + +void reload_setting_string_from_pak(int cp, void* param) +{ + RELOAD_STRING(g_color_mode); + RELOAD_STRING(g_multi_out); + RELOAD_STRING(g_rid_color); + RELOAD_STRING(g_paper); + RELOAD_STRING(g_page); + RELOAD_STRING(g_sharpen); + RELOAD_STRING(g_fill_bkg); + RELOAD_STRING(g_scan_mode); + RELOAD_STRING(g_text_direction); + RELOAD_STRING(g_permeate_lv); + RELOAD_STRING(g_img_quality); + RELOAD_STRING(g_paper_strenght); + RELOAD_STRING(g_sleep_time); + RELOAD_STRING(g_fold_type); +} diff --git a/hgdriver/hgdev/common_setting.h b/hgdriver/hgdev/common_setting.h index 4f887d6..cb24cc9 100644 --- a/hgdriver/hgdev/common_setting.h +++ b/hgdriver/hgdev/common_setting.h @@ -311,6 +311,9 @@ enum int match_best_fold_type(std::string& val, bool* exact); std::string is_fold_type(int fold_type); +// call me when language changed in multi-language - added on 2023-01-19 +void reload_setting_string_from_pak(int cp, void* param); + typedef union _img_proc_fixed_param { unsigned long long value; diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 9be8d14..134377e 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -161,7 +161,6 @@ hg_scanner::hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io,in #if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64) isx86_Advan_ = false; #endif - lang_initialize(); init_setting_func_map(); final_path_ = hg_log::ini_get("path", "final_img"); if(final_path_.empty()) diff --git a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp index 5508c37..6665d4a 100644 --- a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp +++ b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp @@ -3,6 +3,9 @@ #include "../hgdev/scanner_manager.h" #include +#include +#include "../hgdev/common_setting.h" + #if defined(WIN32) || defined(_WIN64) #include #else @@ -90,6 +93,13 @@ extern "C" VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Module sane : [%s] - %s\n", g_sane_ver.c_str(), sane.c_str()); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Module exe : %s\n", (pe + path + name).c_str()); + if (lang_initialize() == -1) + { + VLOG_MINI_1(LOG_LEVEL_FATAL, "No language package found(%d)!\n", -1); + return SCANNER_ERR_LANG_PAK_LOST; + } + register_language_changed_notify(reload_setting_string_from_pak, true); + hg_scanner_mgr::set_version(VERSION_MAJOR, VERSION_MINOR, VERSION_YEAR, GET_BUILD_VER); hg_scanner_mgr::set_exe_name(pe.c_str(), name.c_str()); hg_scanner_mgr::instance(callback); @@ -98,6 +108,7 @@ extern "C" } void hg_scanner_uninitialize(void) { + register_language_changed_notify(reload_setting_string_from_pak, false); hg_scanner_mgr::clear(); hg_log::unint(); } @@ -230,9 +241,12 @@ extern "C" RETURN_IF(err, SCANNER_ERR_DEVICE_PC_BUSY); RETURN_IF(err, SCANNER_ERR_DEVICE_ISLOCK); + if (err == SCANNER_ERR_LANG_PAK_LOST) + return "SCANNER_ERR_LANG_PAK_LOST"; + // NOTE: multi-thread unsafe here static char g_unk_err[80] = { 0 }; - sprintf(g_unk_err, "\346\234\252\347\237\245\351\224\231\350\257\257\357\274\2320x%X", err); + sprintf(g_unk_err, "Unknown error: 0x%X", err); return g_unk_err; } @@ -295,6 +309,9 @@ extern "C" RETURN_DESC_IF(err, SCANNER_ERR_DEVICE_PC_BUSY); RETURN_DESC_IF(err, SCANNER_ERR_DEVICE_ISLOCK); + if (err == SCANNER_ERR_LANG_PAK_LOST) + return "SCANNER_ERR_LANG_PAK_LOST"; + // NOTE: multi-thread unsafe here static char g_unk_err[80] = { 0 }; strcpy(g_unk_err, hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_UNKNOWN_ERROR)); diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 1763fcf..ec33466 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -19,6 +19,7 @@ #include "../../sdk/include/sane/sane_option_definitions.h" #include "sane_option.h" +#include #ifndef SIGUSR1 #define SIGUSR1 10 @@ -338,10 +339,18 @@ namespace local_utility hg_sane_middleware* hg_sane_middleware::inst_ = NULL; const SANE_Device** hg_sane_middleware::dev_list_ = NULL; -hg_sane_middleware::hg_sane_middleware(void) : opt_0_(nullptr), std_opt_(nullptr) +hg_sane_middleware::hg_sane_middleware(void) : opt_0_(nullptr), std_opt_(nullptr), init_ok_(false) { + if (lang_initialize() == -1) + { + return; + } + char sane_ver[40] = { 0 }; + init_ok_ = true; + register_language_changed_notify(&hg_sane_middleware::language_changed, true); + sprintf(sane_ver, "%u.%u.%u", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, VERSION_BUILD); signal(SIGUSR1, &hg_sane_middleware::device_pnp); hg_scanner_set_sane_info(g_sane_name.c_str(), sane_ver); @@ -359,6 +368,7 @@ hg_sane_middleware::hg_sane_middleware(void) : opt_0_(nullptr), std_opt_(nullptr } hg_sane_middleware::~hg_sane_middleware() { + register_language_changed_notify(&hg_sane_middleware::language_changed, false); for (size_t i = 0; i < opts_.size(); ++i) { local_utility::free_memory(opts_[i].desc); @@ -372,6 +382,10 @@ hg_sane_middleware::~hg_sane_middleware() delete std_opt_; } +void hg_sane_middleware::language_changed(int cp, void* param) +{ + +} const SANE_Device** hg_sane_middleware::to_sane_device(ScannerInfo* hgscanner, int count) { // 将多级指针安排在一个连续的内存空间存放 @@ -1624,6 +1638,10 @@ SANE_Status hg_sane_middleware::io_control(SANE_Handle h, unsigned long code, vo return local_utility::scanner_err_2_sane_statu(ret); } +bool hg_sane_middleware::is_ready(void) +{ + return init_ok_; +} /// /// 关联项处? @@ -2025,7 +2043,9 @@ extern "C" { // avoid compiler exporting name in C++ style !!! SANE_Status inner_sane_init(SANE_Int* version_code, SANE_Auth_Callback authorize) { local_utility::cb_auth_ = authorize; - hg_sane_middleware::instance(); + if (!hg_sane_middleware::instance()->is_ready()) + return (SANE_Status)SCANNER_ERR_LANG_PAK_LOST; + local_utility::get_version(version_code); std::this_thread::sleep_for(std::chrono::milliseconds(500)); return SANE_STATUS_GOOD; @@ -2100,7 +2120,9 @@ extern "C" { // avoid compiler exporting name in C++ style !!! SANE_Status inner_sane_init_ex(SANE_Int* version_code, sane_callback cb, void* param) { local_utility::set_callback(cb, param); - hg_sane_middleware::instance(); + if (!hg_sane_middleware::instance()->is_ready()) + return (SANE_Status)SCANNER_ERR_LANG_PAK_LOST; + local_utility::get_version(version_code); return SANE_STATUS_GOOD; diff --git a/hgsane/sane_hg_mdw.h b/hgsane/sane_hg_mdw.h index acf8474..1557361 100644 --- a/hgsane/sane_hg_mdw.h +++ b/hgsane/sane_hg_mdw.h @@ -38,6 +38,7 @@ class hg_sane_middleware std::vector opts_; SANE_Option_Descriptor* opt_0_; sane_std_opts* std_opt_; + bool init_ok_; typedef struct _openning_scanner_option { @@ -66,6 +67,7 @@ class hg_sane_middleware static hg_sane_middleware *inst_; static const SANE_Device** dev_list_; + static void language_changed(int cp, void* param); static const SANE_Device** to_sane_device(ScannerInfo* hgscanner, int count); // 将驱动层传回的设备列表数据,转换为标准SANE协议的设备列表 static void free_sane_device(SANE_Device** dev); // 释放由to_sane_device返回的指针 static void device_pnp(int sig); // 热插拔事件监控 @@ -195,6 +197,7 @@ public: SANE_Status io_control(SANE_Handle h, unsigned long code, void* data, unsigned* len); public: + bool is_ready(void); }; namespace local_utility