TWAIN日志分级处理

This commit is contained in:
gb 2023-05-20 12:02:26 +08:00
parent df75ae1e18
commit 87b0fbb5a0
3 changed files with 69 additions and 33 deletions

View File

@ -140,7 +140,7 @@ void mapping_buf::init_map(const char* file, unsigned long long size)
wchar_t buf[80] = { 0 }; wchar_t buf[80] = { 0 };
swprintf_s(buf, _countof(buf) - 1, L"Mapping %u bytes to file: ", size); swprintf_s(buf, _countof(buf) - 1, L"Mapping %u bytes to file: ", size);
log_info((buf + info + L"\r\n").c_str(), 0); log_info((buf + info + L"\r\n").c_str(), 1);
} }
} }
else else

View File

@ -100,7 +100,7 @@ namespace callback
{ {
wchar_t msg[218] = { 0 }; wchar_t msg[218] = { 0 };
swprintf_s(msg, _countof(msg) - 1, L"Lost device(0x%08X) when event(%u) occurs!\r\n", hdev, code); swprintf_s(msg, _countof(msg) - 1, L"Lost device(0x%08X) when event(%u) occurs!\r\n", hdev, code);
log_info(msg, 0); log_info(msg, 1);
return 0; return 0;
} }
@ -343,6 +343,7 @@ namespace callback
// SANE_EVENT_SCAN_FINISHED - void*: (utf8*)message, flag - error code (0 is success) // SANE_EVENT_SCAN_FINISHED - void*: (utf8*)message, flag - error code (0 is success)
// SANE_EVENT_USB_DATA_RECEIVED- void* unused, be NULL, flag - unused, be 0 // SANE_EVENT_USB_DATA_RECEIVED- void* unused, be NULL, flag - unused, be 0
// SANE_EVENT_IMAGE_OK - void* unused, be NULL, flag - unused, be 0 // SANE_EVENT_IMAGE_OK - void* unused, be NULL, flag - unused, be 0
static HMODULE hui = NULL;
int (*choose_scanner)(const std::vector<DEVQUEUI>& devs) = NULL; // blocked. return selected DEVQUE::id or -1 if user cancelled int (*choose_scanner)(const std::vector<DEVQUEUI>& devs) = NULL; // blocked. return selected DEVQUE::id or -1 if user cancelled
int (*apply_current_config)(const char* dev_name, SANE_Handle device, LPSANEAPI api) = NULL; // 应用设备的当前配<E5898D>? int (*apply_current_config)(const char* dev_name, SANE_Handle device, LPSANEAPI api) = NULL; // 应用设备的当前配<E5898D>?
int (*show_setting_ui)(SANE_Handle device, HWND parent, LPSANEAPI api, const char* devname, bool with_scan, std::function<void(ui_result)> callback) = NULL; int (*show_setting_ui)(SANE_Handle device, HWND parent, LPSANEAPI api, const char* devname, bool with_scan, std::function<void(ui_result)> callback) = NULL;
@ -354,24 +355,22 @@ namespace callback
static void init_ui(void) static void init_ui(void)
{ {
std::string root(hg_sane_middleware::sane_path()); std::string root(hg_sane_middleware::sane_path());
HMODULE mod = NULL;
root += "HGTwainUI.dll"; root += "HGTwainUI.dll";
hui = LoadLibraryExA(root.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
mod = LoadLibraryExA(root.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH); if (!hui)
if (!mod)
{ {
std::wstring info(L"Load '" + local_trans::a2u(root.c_str(), CP_UTF8)); std::wstring info(L"Load '" + local_trans::a2u(root.c_str(), CP_UTF8));
info += L"' failed: " + std::to_wstring(GetLastError()) + L"\r\n"; info += L"' failed: " + std::to_wstring(GetLastError()) + L"\r\n";
log_info(info.c_str(), 0); log_info(info.c_str(), 1);
} }
else else
{ {
#define GET_API(api) \ #define GET_API(api) \
proc = (FARPROC*)&api; \ proc = (FARPROC*)&api; \
*proc = GetProcAddress(mod, #api); *proc = GetProcAddress(hui, #api);
FARPROC* proc = NULL; FARPROC* proc = NULL;
@ -383,6 +382,20 @@ namespace callback
GET_API(close_ui); GET_API(close_ui);
} }
} }
static void unint_ui(void)
{
choose_scanner = NULL;
apply_current_config = NULL;
show_setting_ui = NULL;
show_progress_ui = NULL;
show_messagebox_ui = NULL;
close_ui = NULL;
if (hui)
{
FreeLibrary(hui);
hui = NULL;
}
}
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -653,7 +666,7 @@ void scanner::transport_config_file(void)
old += pid; old += pid;
if (PathFileExistsW((cfg_path_ + old).c_str())) if (PathFileExistsW((cfg_path_ + old).c_str()))
{ {
log_info((L"Rename config file '" + old + L"' to '" + scanner_name_.substr(0, pos) + L"'\r\n").c_str(), 0); log_info((L"Rename config file '" + old + L"' to '" + scanner_name_.substr(0, pos) + L"'\r\n").c_str(), 1);
MoveFileW((cfg_path_ + old).c_str(), (cfg_path_ + scanner_name_.substr(0, pos)).c_str()); MoveFileW((cfg_path_ + old).c_str(), (cfg_path_ + scanner_name_.substr(0, pos)).c_str());
} }
} }
@ -1375,7 +1388,7 @@ void scanner::apply_scheme(gb::sane_config_schm* schm)
{ {
wchar_t info[128] = { 0 }; wchar_t info[128] = { 0 };
swprintf_s(info, _countof(info) - 1, L"ERROR: custom gamma data length is %u, but we expect %u.\r\n", v.length(), sizeof(SANE_Gamma)); swprintf_s(info, _countof(info) - 1, L"ERROR: custom gamma data length is %u, but we expect %u.\r\n", v.length(), sizeof(SANE_Gamma));
log_info(info, 0); log_info(info, 1);
} }
} }
} }
@ -2530,7 +2543,7 @@ COM_API_IMPLEMENT(scanner, int, get_scanned_images(DWORD milliseconds))
{ {
wchar_t msg[128] = { 0 }; wchar_t msg[128] = { 0 };
swprintf_s(msg, _countof(msg) - 1, L"Wait image count = %d\r\n", count); swprintf_s(msg, _countof(msg) - 1, L"Wait image count = %d\r\n", count);
log_info(msg, 0); log_info(msg, 1);
} }
return count; return count;
@ -3198,7 +3211,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
else if (callback::show_progress_ui && is_bIndicator) else if (callback::show_progress_ui && is_bIndicator)
ui_notify(ev_code, data, *len); ui_notify(ev_code, data, *len);
on_ui_event(ev_code, (void*)ev_code); on_ui_event(ev_code, (void*)ev_code);
log_info(L"Scanning ...\r\n", 0); log_info(L"Scanning ...\r\n", 1);
} }
else if (ev_code == SANE_EVENT_IMAGE_OK) else if (ev_code == SANE_EVENT_IMAGE_OK)
{ {
@ -3222,7 +3235,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
images_.count(&bytes); images_.count(&bytes);
bytes /= 1024 * 1024; bytes /= 1024 * 1024;
if (times == 1) if (times == 1)
log_info(L"Memory usage upto limit! wait up to 100 ms ...\r\n", 0); log_info(L"Memory usage upto limit! wait up to 100 ms ...\r\n", 1);
} }
images_.save(img, img->bytes()); images_.save(img, img->bytes());
} }
@ -3238,7 +3251,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
{ {
wchar_t msg[128] = { 0 }; wchar_t msg[128] = { 0 };
swprintf_s(msg, _countof(msg) - 1, L"New image(%u) received with %u bytes\r\n", img_ind_, simg->bytes); swprintf_s(msg, _countof(msg) - 1, L"New image(%u) received with %u bytes\r\n", img_ind_, simg->bytes);
log_info(msg, 0); log_info(msg, 1);
} }
} }
else if (ev_code == SANE_EVENT_USB_DATA_RECEIVED) else if (ev_code == SANE_EVENT_USB_DATA_RECEIVED)
@ -3278,7 +3291,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
{ {
wchar_t msg[128] = { 0 }; wchar_t msg[128] = { 0 };
swprintf_s(msg, _countof(msg) - 1, L"Scan finished with error: %u\r\n", *len); swprintf_s(msg, _countof(msg) - 1, L"Scan finished with error: %u\r\n", *len);
log_info(msg, 0); log_info(msg, 1);
} }
} }
else if (ev_code == SANE_EVENT_ERROR) else if (ev_code == SANE_EVENT_ERROR)
@ -3321,7 +3334,27 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
std::mutex g_lock_; std::mutex g_lock_;
std::string g_path_file_(""); std::string g_path_file_("");
FILE* g_file_ = NULL; FILE* g_file_ = NULL;
static int g_log_level = 1;
static int get_log_level(const char* log_file)
{
std::string cfg(log_file);
size_t pos = cfg.rfind('\\');
cfg.erase(pos);
pos = cfg.rfind('\\');
if (pos != std::string::npos)
{
if (stricmp(cfg.substr(pos).c_str(), "\\log") == 0)
{
cfg.erase(pos);
cfg += "\\config";
}
}
cfg += "\\debug.cfg";
return GetPrivateProfileIntA("log", "twain_level", 1, cfg.c_str());
}
void init_log(void) void init_log(void)
{ {
char* tmp = getenv("LOCALAPPDATA"); char* tmp = getenv("LOCALAPPDATA");
@ -3368,8 +3401,10 @@ void init_log(void)
wchar_t ts[128] = { 0 }, now[40] = { 0 }; wchar_t ts[128] = { 0 }, now[40] = { 0 };
hg_get_current_time_w(now); hg_get_current_time_w(now);
swprintf_s(ts, _countof(ts) - 1, L"==================%s==================\r\n", now); g_log_level = get_log_level(g_path_file_.c_str());
swprintf_s(ts, _countof(ts) - 1, L"==================%s - %d==================\r\n", now, g_log_level);
fwrite(ts, 2, lstrlenW(ts), g_file_); fwrite(ts, 2, lstrlenW(ts), g_file_);
} }
} }
void close_log(void) void close_log(void)
@ -3503,6 +3538,7 @@ extern "C"
hg_sane_middleware::set_callback(NULL, NULL); hg_sane_middleware::set_callback(NULL, NULL);
hg_sane_middleware::clear(); hg_sane_middleware::clear();
close_log(); close_log();
callback::unint_ui();
return 0; return 0;
} }
@ -3513,7 +3549,8 @@ extern "C"
#endif #endif
void __stdcall log_info(const wchar_t* info, int level) void __stdcall log_info(const wchar_t* info, int level)
{ {
log(info); if(level >= g_log_level)
log(info);
} }
} }

View File

@ -761,7 +761,7 @@ static void log_attr_access(int attr, int method)
else METHOD_DESC(GetDefault) else METHOD_DESC(GetDefault)
swprintf_s(msg, _countof(msg) - 1, L"%s %04x\r\n", op, attr); swprintf_s(msg, _countof(msg) - 1, L"%s %04x\r\n", op, attr);
load_sane_util::log_info(msg, 0); load_sane_util::log_info(msg, method == (int)Msg::Set || method == (int)Msg::Reset);
} }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -970,7 +970,7 @@ Result huagao_ds::identityOpenDs(const Identity& id)
{ {
if (attempt == 1) if (attempt == 1)
{ {
load_sane_util::log_info(L"Driver is not ready, we wait ... \r\n", 0); load_sane_util::log_info(L"Driver is not ready, we wait ... \r\n", 1);
} }
std::this_thread::sleep_for(std::chrono::milliseconds(5)); std::this_thread::sleep_for(std::chrono::milliseconds(5));
err = 0; err = 0;
@ -982,7 +982,7 @@ Result huagao_ds::identityOpenDs(const Identity& id)
//singleton_ = NULL; //singleton_ = NULL;
wchar_t info[128] = { 0 }; wchar_t info[128] = { 0 };
swprintf_s(info, _countof(info) - 1, L"OpenDS error: %d\r\n", err); swprintf_s(info, _countof(info) - 1, L"OpenDS error: %d\r\n", err);
load_sane_util::log_info(info, 0); load_sane_util::log_info(info, 2);
load_sane_util::uninitialize(); load_sane_util::uninitialize();
return { ReturnCode::Failure, huagao_ds::condition_code_from_hg_error(err) }; return { ReturnCode::Failure, huagao_ds::condition_code_from_hg_error(err) };
@ -1234,7 +1234,7 @@ Result huagao_ds::imageInfoGet(const Identity&, ImageInfo& data)
} }
else else
{ {
load_sane_util::log_info(L" imageInfoGet is false\r\n", 0); load_sane_util::log_info(L" imageInfoGet is false\r\n", 1);
data.setHeight(0); data.setHeight(0);
@ -1250,7 +1250,7 @@ Result huagao_ds::imageInfoGet(const Identity&, ImageInfo& data)
bool planar = data.planar(); bool planar = data.planar();
Fix32 xr = data.xResolution(); Fix32 xr = data.xResolution();
swprintf_s(buf, _countof(buf) - 1,L"imageInfoGet: h-->%d w-->%d bitsPerPixel-->%d compression-->%d pixelType-->%d planar-->%d\r\n", h, w, bitsPerPixel, compression, pixelType, planar); swprintf_s(buf, _countof(buf) - 1,L"imageInfoGet: h-->%d w-->%d bitsPerPixel-->%d compression-->%d pixelType-->%d planar-->%d\r\n", h, w, bitsPerPixel, compression, pixelType, planar);
load_sane_util::log_info(buf, 0); load_sane_util::log_info(buf, 1);
return success(); return success();
} }
Result huagao_ds::imageLayoutGet(const Identity&, ImageLayout& data) Result huagao_ds::imageLayoutGet(const Identity&, ImageLayout& data)
@ -1462,13 +1462,13 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin)
swprintf_s(msg, _countof(msg) - 1, L") = %d\r\n", GetLastError()); swprintf_s(msg, _countof(msg) - 1, L") = %d\r\n", GetLastError());
f += msg; f += msg;
load_sane_util::log_info(f.c_str(), 0); load_sane_util::log_info(f.c_str(), 3);
} }
img->release(); img->release();
} }
else else
{ {
load_sane_util::log_info((L"Map file to " + load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str()) + L"\r\n").c_str(), 0); load_sane_util::log_info((L"Map file to " + load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str()) + L"\r\n").c_str(), 1);
img->keep_file(true); img->keep_file(true);
img->release(); img->release();
@ -1507,7 +1507,7 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin)
swprintf_s(buf, _countof(buf) - 1, L"%d\r\n", GetLastError()); swprintf_s(buf, _countof(buf) - 1, L"%d\r\n", GetLastError());
info += load_sane_util::ansi2unic(target.c_str()) + L"' to '" + load_sane_util::ansi2unic(file.c_str()) + L"' failed: "; info += load_sane_util::ansi2unic(target.c_str()) + L"' to '" + load_sane_util::ansi2unic(file.c_str()) + L"' failed: ";
load_sane_util::log_info((info + buf).c_str(), 0); load_sane_util::log_info((info + buf).c_str(), 3);
} }
if (++cv_e >= 9) if (++cv_e >= 9)
break; break;
@ -1541,7 +1541,7 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin)
std::wstring info(load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str())); std::wstring info(load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str()));
wchar_t r[80] = { 0 }; wchar_t r[80] = { 0 };
swprintf_s(r, _countof(r) - 1, L": status = %d(Fail: 0x%x)\r\n", (int)ret.status(), cv_e); swprintf_s(r, _countof(r) - 1, L": status = %d(Fail: 0x%x)\r\n", (int)ret.status(), cv_e);
load_sane_util::log_info((info + r).c_str(), 0); load_sane_util::log_info((info + r).c_str(), 1);
} }
} }
@ -1806,7 +1806,6 @@ void huagao_ds::init_support_caps(void)
load_sane_util::log_info(m_bIndicator ? L"Set show indicator: true\r\n" : L"Set show indicator: false\r\n", 0); load_sane_util::log_info(m_bIndicator ? L"Set show indicator: true\r\n" : L"Set show indicator: false\r\n", 0);
return success(); return success();
} }
load_sane_util::log_info(m_bIndicator ? L"Set show indicator: true\r\n" : L"Set show indicator: false\r\n", 0);
// data.type // data.type
if (!data.operator bool()) //具有风险æ€?(和气) Twain sample app ,data.m_cont is null,but DotNet(åŒæ°”) data.m_cont not is null . if (!data.operator bool()) //具有风险æ€?(和气) Twain sample app ,data.m_cont is null,but DotNet(åŒæ°”) data.m_cont not is null .
{ {
@ -3645,7 +3644,7 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc)
{ {
wchar_t msg[128] = { 0 }, unk[20] = { 0 }; wchar_t msg[128] = { 0 }, unk[20] = { 0 };
swprintf_s(msg, _countof(msg) - 1, L"[%x - %s]Fatal: start scanning from setting UI failed with error %d\r\n", GetCurrentThreadId(), desc_state(state(), unk), ret); swprintf_s(msg, _countof(msg) - 1, L"[%x - %s]Fatal: start scanning from setting UI failed with error %d\r\n", GetCurrentThreadId(), desc_state(state(), unk), ret);
load_sane_util::log_info(msg, 0); load_sane_util::log_info(msg, 1);
scanner_status_ = SCANNER_STATUS_STOPPED; scanner_status_ = SCANNER_STATUS_STOPPED;
if(bUiOnly_) if(bUiOnly_)
@ -3657,7 +3656,7 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc)
else else
{ {
swprintf_s(msg, _countof(msg) - 1, L"[%x - %s]Warning: notifyCloseCancel failed with error %d after start scanning failed\r\n", GetCurrentThreadId(), desc_state(state(), unk), rc); swprintf_s(msg, _countof(msg) - 1, L"[%x - %s]Warning: notifyCloseCancel failed with error %d after start scanning failed\r\n", GetCurrentThreadId(), desc_state(state(), unk), rc);
load_sane_util::log_info(msg, 0); load_sane_util::log_info(msg, 1);
} }
} }
else else
@ -3701,7 +3700,7 @@ void huagao_ds::trigger_ProcessEvent(Twpp::DataGroup dg, Twpp::Dat dat, Twpp::Ms
{ {
wchar_t info[128] = { 0 }, unk[20] = { 0 }; wchar_t info[128] = { 0 }, unk[20] = { 0 };
swprintf_s(info, _countof(info) - 1, L"[%x]Warning: notifyCloseCancel failed with error %s!\r\n", GetCurrentThreadId(), desc_return_code(rc, unk)); swprintf_s(info, _countof(info) - 1, L"[%x]Warning: notifyCloseCancel failed with error %s!\r\n", GetCurrentThreadId(), desc_return_code(rc, unk));
load_sane_util::log_info(info, 0); load_sane_util::log_info(info, 1);
} }
} }
else else
@ -3710,14 +3709,14 @@ void huagao_ds::trigger_ProcessEvent(Twpp::DataGroup dg, Twpp::Dat dat, Twpp::Ms
if (dg == DataGroup::Control && dat == Dat::Event && msg == Msg::ProcessEvent && scanner_status_ == SCANNER_STATUS_SCAN_1) if (dg == DataGroup::Control && dat == Dat::Event && msg == Msg::ProcessEvent && scanner_status_ == SCANNER_STATUS_SCAN_1)
{ {
app_trigger_event_ = true; // nothing else to do app_trigger_event_ = true; // nothing else to do
load_sane_util::log_info(L"Good! first event is (Control, Event, ProcessEvent) after start scanning ^_^.\r\n", 0); load_sane_util::log_info(L"Good! first event is (Control, Event, ProcessEvent) after start scanning ^_^.\r\n", 1);
} }
else if(!app_trigger_event_) else if(!app_trigger_event_)
{ {
int ev = 0; int ev = 0;
if (scanner_status_ == SCANNER_STATUS_SCAN_1) if (scanner_status_ == SCANNER_STATUS_SCAN_1)
load_sane_util::log_info(L"Sorry, first event is not (Control, Event, ProcessEvent) after start scanning, we takeover it!\r\n", 0); load_sane_util::log_info(L"Sorry, first event is not (Control, Event, ProcessEvent) after start scanning, we takeover it!\r\n", 1);
if (scanner_.get()) if (scanner_.get())
{ {
ev = scanner_->get_event(); ev = scanner_->get_event();
@ -3737,7 +3736,7 @@ void huagao_ds::trigger_ProcessEvent(Twpp::DataGroup dg, Twpp::Dat dat, Twpp::Ms
{ {
wchar_t info[128] = { 0 }, unk[20] = { 0 }; wchar_t info[128] = { 0 }, unk[20] = { 0 };
swprintf_s(info, _countof(info) - 1, L"[%x]Warning: notifyCloseCancel failed with error %s when scanner is stopped!\r\n", GetCurrentThreadId(), desc_return_code(rc, unk)); swprintf_s(info, _countof(info) - 1, L"[%x]Warning: notifyCloseCancel failed with error %s when scanner is stopped!\r\n", GetCurrentThreadId(), desc_return_code(rc, unk));
load_sane_util::log_info(info, 0); load_sane_util::log_info(info, 1);
} }
} }
} }