diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index 57a0355..d24bb79 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -1,4 +1,4 @@ -#include "hg_scanner_200.h" +#include "hg_scanner_200.h" #include "../wrapper/hg_log.h" #if defined(WIN32) || defined(_WIN64) diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index 09f3a76..6fd909d 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -134,6 +134,7 @@ int hg_scanner_mgr::ver_build_ = 0; int hg_scanner_mgr::ver_patch_ = 1; std::string hg_scanner_mgr::pe_path_(""); std::string hg_scanner_mgr::pe_name_(""); +std::string hg_scanner_mgr::last_open_msg_(""); bool hg_scanner_mgr::read_over_with_eof_ = true; uint32_t hg_scanner_mgr::unique_img_id_ = 0;; @@ -701,8 +702,8 @@ scanner_err hg_scanner_mgr::hg_scanner_open(scanner_handle* h, const char* name, it = std::find(devs.begin(), devs.end(), name); if (it != devs.end()) { - std::string msg(""); - ret = (scanner_err)usb_manager::instance()->open(it->dev, &io, &msg); + hg_scanner_mgr::last_open_msg_ = ""; + ret = (scanner_err)usb_manager::instance()->open(it->dev, &io, &hg_scanner_mgr::last_open_msg_); if (ret == SCANNER_ERR_OK) { hg_scanner* scanner = g_supporting_devices[it->ind].create_scanner(it->display_name.c_str(), io, h); @@ -763,8 +764,8 @@ scanner_err hg_scanner_mgr::hg_scanner_open(scanner_handle* h, const char* name, if (ptr != online_devices_.end()) ptr->scanner = (hg_scanner*)*h; } - else if(msg.length()) - hg_scanner_mgr::ui_default_callback(nullptr, SANE_EVENT_ERROR, (void*)msg.c_str(), (unsigned int*)&ret, nullptr); + else if(hg_scanner_mgr::last_open_msg_.length()) + hg_scanner_mgr::ui_default_callback(nullptr, SANE_EVENT_ERROR, (void*)hg_scanner_mgr::last_open_msg_.c_str(), (unsigned int*)&ret, nullptr); if(io) io->release(); @@ -1089,4 +1090,8 @@ void hg_scanner_mgr::on_language_changed(void) if (v.scanner) v.scanner->on_language_changed(); } -} \ No newline at end of file +} +const char* hg_scanner_mgr::last_open_message(void) +{ + return hg_scanner_mgr::last_open_msg_.c_str(); +} diff --git a/hgdriver/hgdev/scanner_manager.h b/hgdriver/hgdev/scanner_manager.h index 22692c8..f819455 100644 --- a/hgdriver/hgdev/scanner_manager.h +++ b/hgdriver/hgdev/scanner_manager.h @@ -70,6 +70,7 @@ class hg_scanner_mgr static sane_callback event_callback_; static bool async_io_enabled_; + static std::string last_open_msg_; static std::string pe_path_; static std::string pe_name_; static bool read_over_with_eof_; @@ -135,5 +136,6 @@ public: scanner_err hg_scanner_control(scanner_handle h, unsigned long code, void* data, unsigned* len); void on_language_changed(void); + const char* last_open_message(void); }; diff --git a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp index 6c29ff4..52a2f05 100644 --- a/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp +++ b/hgdriver/wrapper/huagaoxxx_warraper_ex.cpp @@ -266,6 +266,9 @@ extern "C" if (err < 0x100) err = err_map::sane_2_scanner(err); + if (err == SCANNER_ERR_OPENED_BY_OTHER_PROCESS && *hg_scanner_mgr::instance()->last_open_message()) + return hg_scanner_mgr::instance()->last_open_message(); + RETURN_DESC_IF(err, SCANNER_ERR_OK); RETURN_DESC_IF(err, SCANNER_ERR_DEVICE_NOT_SUPPORT); RETURN_DESC_IF(err, SCANNER_ERR_USER_CANCELED);