扫描仪事件直接回调到APP,不再依赖APP调用;设置界面启动扫描流程添加notifyXferReady调用

This commit is contained in:
gb 2023-05-16 15:25:19 +08:00
parent 9c1fab4368
commit 51c732c008
2 changed files with 71 additions and 54 deletions

View File

@ -717,6 +717,18 @@ void scanner::on_ui_event(int uev, void* sender)
{
is_scanning_ = false;
}
int(__stdcall * h)(int, void*) = scanner_ev_handler_;
if (uev == SANE_EVENT_UI_CLOSE_CANCEL) // notify when following message SANE_EVENT_SCAN_FINISHED arrived
{
stop();
if (indicator_.get())
indicator_.reset();
}
else if (h)
{
h(uev, evh_param_);
}
return;
events_.save(uev, sizeof(uev));
@ -3170,7 +3182,7 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_progress(HWND parent, bool bIndicator))
{
callback::show_progress_ui(parent, ui_process,&ui_notify);
}
else
else if(bIndicator)
{
if (setting_.get() && IsWindowVisible(setting_->hwnd()))
parent = setting_->hwnd();
@ -3304,7 +3316,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(CONST_STRING_ERROR).c_str());
MessageBoxW(app_wnd_, msg.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_ERROR).c_str(), MB_OK);
}
on_ui_event(ev_code, (void*)ev_code);
// on_ui_event(ev_code, (void*)ev_code);
}
return 0;

View File

@ -911,13 +911,13 @@ Result huagao_ds::capabilitySet(const Identity& origin, Capability& data)
Result huagao_ds::eventProcess(const Identity&, Event& event)
{
const MSG* msg = (const MSG*)event.event();
if (scanner_.get())
{
int ev = scanner_->get_event();
if(ev)
handle_scanner_event(ev);
}
//if (scanner_.get())
//{
// int ev = scanner_->get_event();
//
// if(ev)
// handle_scanner_event(ev);
//}
event.setMessage(Msg::Null);
@ -1009,6 +1009,7 @@ Result huagao_ds::identityCloseDs(const Identity&)
if (scanner_.get())
{
scanner_->set_event_callback();
scanner_->ui_hide();
scanner_.reset();
}
if (singleton_)
@ -1574,41 +1575,41 @@ Result huagao_ds::call(const Identity& origin, DataGroup dg, Dat dat, Msg msg, v
static unsigned nested_events = 0;
bool calling = in_calling;
if (calling)
{
wchar_t buf[128] = { 0 }, dgs[20] = { 0 }, dts[20] = { 0 }, ms[20] = { 0 }, ss[20] = { 0 }, rcs[20] = { 0 }, cs[20] = { 0 };
if (dg == DataGroup::Control && dat == Dat::Event && msg == Msg::ProcessEvent)
{
if (is_getting_count_ && scanner_status_ == SCANNER_STATUS_SCAN_1)
{
// let it go ...
}
else
{
if(nested_events == 0)
load_sane_util::log_info(L"Nested Call: discard 'Msg::ProcessEvent'!\r\n", 0);
nested_events++;
return { ReturnCode::NotDsEvent, ConditionCode::Success };
}
}
else
{
swprintf_s(buf, _countof(buf) - 1, L"Nested Call: [%x - %s]DSEntry(%s, %s, %s) called in another operation! \r\n", GetCurrentThreadId(), desc_state(state(), ss),
desc_data_group(dg, dgs), desc_data(dat, dts), desc_msg(msg, ms));
load_sane_util::log_info(buf, 0);
}
}
else
{
in_calling = true;
}
if (nested_events > 1)
{
wchar_t buf[256] = { 0 };
swprintf_s(buf, _countof(buf) - 1, L"Discard %u nested Msg::ProcessEvent messages before.\r\n", nested_events);
load_sane_util::log_info(buf, 0);
}
//if (calling)
//{
// wchar_t buf[128] = { 0 }, dgs[20] = { 0 }, dts[20] = { 0 }, ms[20] = { 0 }, ss[20] = { 0 }, rcs[20] = { 0 }, cs[20] = { 0 };
//
// if (dg == DataGroup::Control && dat == Dat::Event && msg == Msg::ProcessEvent)
// {
// if (is_getting_count_ && scanner_status_ == SCANNER_STATUS_SCAN_1)
// {
// // let it go ...
// }
// else
// {
// if(nested_events == 0)
// load_sane_util::log_info(L"Nested Call: discard 'Msg::ProcessEvent'!\r\n", 0);
// nested_events++;
// return { ReturnCode::NotDsEvent, ConditionCode::Success };
// }
// }
// else
// {
// swprintf_s(buf, _countof(buf) - 1, L"Nested Call: [%x - %s]DSEntry(%s, %s, %s) called in another operation! \r\n", GetCurrentThreadId(), desc_state(state(), ss),
// desc_data_group(dg, dgs), desc_data(dat, dts), desc_msg(msg, ms));
// load_sane_util::log_info(buf, 0);
// }
//}
//else
//{
// in_calling = true;
//}
//if (nested_events > 1)
//{
// wchar_t buf[256] = { 0 };
// swprintf_s(buf, _countof(buf) - 1, L"Discard %u nested Msg::ProcessEvent messages before.\r\n", nested_events);
// load_sane_util::log_info(buf, 0);
//}
nested_events = 0;
try {
@ -1616,7 +1617,7 @@ Result huagao_ds::call(const Identity& origin, DataGroup dg, Dat dat, Msg msg, v
//FileTools::write_log("D:\\1.txt", "call:datagroup-"+to_string((int)dg)+"dat-"+to_string(int(dat))+"msg-"+to_string(int(msg)));
Result rt;
trigger_ProcessEvent(dg, dat, msg); // some APPs may be not trigger (Control, Event, ProcessEvent), we help them :( ... // 云阅卷扫描端不等状态改变,直接取图,此处设置一次状态 2022-11-07
//trigger_ProcessEvent(dg, dat, msg); // some APPs may be not trigger (Control, Event, ProcessEvent), we help them :( ... // 云阅卷扫描端不等状态改变,直接取图,此处设置一次状态 2022-11-07
rt = Base::call(origin, dg, dat, msg, data);
if (log_all_triple_ || ((int)rt.returnCode() && rt.returnCode() != ReturnCode::NotDsEvent))
@ -3555,16 +3556,16 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc)
{
case SANE_EVENT_WORKING:
scanner_status_ = SCANNER_STATUS_SCANNING;
rc = notifyXferReady();
if (!Twpp::success(rc))
{
wchar_t msg[128] = { 0 };
swprintf_s(msg, _countof(msg) - 1, L"[%x]Warning: change state to XferReady failed with error %d while in state(%d), STOP scanning ...\r\n", GetCurrentThreadId(), rc, state());
load_sane_util::log_info(msg, 0);
//rc = notifyXferReady();
//if (!Twpp::success(rc))
//{
// wchar_t msg[128] = { 0 };
// swprintf_s(msg, _countof(msg) - 1, L"[%x]Warning: change state to XferReady failed with error %d while in state(%d), STOP scanning ...\r\n", GetCurrentThreadId(), rc, state());
// load_sane_util::log_info(msg, 0);
// we stop scanning here ...
scanner_->stop();
}
// // we stop scanning here ...
// scanner_->stop();
//}
break;
case SANE_EVENT_UI_CLOSE_CANCEL:
scanner_->stop();
@ -3615,6 +3616,10 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc)
load_sane_util::log_info(msg, 0);
}
}
else
{
notifyXferReady(); // scan from UI, should notify this state mannually
}
break;
}