From 20ab0c7f80733549e5678924a387e0c1c5ecd008 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Mon, 4 Dec 2023 17:30:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=B0=83=E6=95=B4=EF=BC=9A?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=A6=BB=E7=BA=BF=E6=97=B6=E6=89=AB=E6=8F=8F?= =?UTF-8?q?=E5=8D=95=E5=BC=A0=EF=BC=8C=E7=8A=B6=E6=80=81=E6=A0=8F=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scanner2/mainwindow.cpp | 112 +++++++++++++++++++++++++++-- modules/twain_user/HGTwainImpl.cpp | 15 ++++ 2 files changed, 122 insertions(+), 5 deletions(-) diff --git a/app/scanner2/mainwindow.cpp b/app/scanner2/mainwindow.cpp index 8e0082a6..10d093fb 100644 --- a/app/scanner2/mainwindow.cpp +++ b/app/scanner2/mainwindow.cpp @@ -679,8 +679,27 @@ void MainWindow::on_AcquireInto2() HGResult ret = HGBASE_ERR_FAIL; if (nullptr != m_devUser) { + bool deviceIsOnline = true; ret = m_devUser->StartScan(); - if (HGBASE_ERR_OK != ret) +#if defined(HG_CMP_MSC) + + if (HGTWAIN_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#else + if (HGSANE_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#endif + + if (!deviceIsOnline) + { + deleteDevUser(); + } + + if (HGBASE_ERR_OK != ret && deviceIsOnline) { on_scanFinishEvent(); } @@ -1391,7 +1410,32 @@ void MainWindow::on_scanFinishEvent() else ret = m_devUser->StartScan(); - if (HGBASE_ERR_OK != ret) + bool deviceIsOnline = true; + ret = m_devUser->StartScan(); +#if defined(HG_CMP_MSC) + + if (HGTWAIN_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#else + if (HGSANE_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#endif + + if (!deviceIsOnline) + { + if (ScanType_SingleScanToCache == m_scanType) + { + QMessageBox::information(this, tr("Prompt"), tr("Device is offline")); + } + + deleteDevUser(); + } + + if (HGBASE_ERR_OK != ret && deviceIsOnline) { on_scanFinishEvent(); } @@ -3458,9 +3502,29 @@ void MainWindow::on_act_acquireSingle_triggered() HGResult ret = HGBASE_ERR_FAIL; if (nullptr != m_devUser) { + bool deviceIsOnline = true; ret = m_devUser->StartSingleScan(); + +#if defined(HG_CMP_MSC) - if (HGBASE_ERR_OK != ret) + if (HGTWAIN_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#else + if (HGSANE_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#endif + + if (!deviceIsOnline) + { + QMessageBox::information(this, tr("Prompt"), tr("Device is offline")); + deleteDevUser(); + } + + if (HGBASE_ERR_OK != ret && deviceIsOnline) { on_scanFinishEvent(); } @@ -3513,8 +3577,27 @@ void MainWindow::on_act_acquireInto_triggered() HGResult ret = HGBASE_ERR_FAIL; if (nullptr != m_devUser) { + bool deviceIsOnline = true; ret = m_devUser->StartScan(); - if (HGBASE_ERR_OK != ret) +#if defined(HG_CMP_MSC) + + if (HGTWAIN_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#else + if (HGSANE_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#endif + + if (!deviceIsOnline) + { + deleteDevUser(); + } + + if (HGBASE_ERR_OK != ret && deviceIsOnline) { on_scanFinishEvent(); } @@ -3582,8 +3665,27 @@ void MainWindow::on_act_insertFromScanner_triggered() HGResult ret = HGBASE_ERR_FAIL; if (nullptr != m_devUser) { + bool deviceIsOnline = true; ret = m_devUser->StartScan(); - if (HGBASE_ERR_OK != ret) +#if defined(HG_CMP_MSC) + + if (HGTWAIN_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#else + if (HGSANE_ERR_DEVICEOFFLINE == ret) + { + deviceIsOnline = false; + } +#endif + + if (!deviceIsOnline) + { + deleteDevUser(); + } + + if (HGBASE_ERR_OK != ret && deviceIsOnline) { on_scanFinishEvent(); } diff --git a/modules/twain_user/HGTwainImpl.cpp b/modules/twain_user/HGTwainImpl.cpp index 86cf7e86..bdc44500 100644 --- a/modules/twain_user/HGTwainImpl.cpp +++ b/modules/twain_user/HGTwainImpl.cpp @@ -664,12 +664,22 @@ HGResult HGTwainDSImpl::EnableWithSingleScan(HWND parent, HGDSEventFunc eventFun HGResult ret = GetCapInt(CAP_XFERCOUNT, &oldXferCount); if (HGBASE_ERR_OK != ret) { + TW_STATUS status; + m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_STATUS, MSG_GET, (TW_MEMREF)&status); + if (status.ConditionCode == TWCC_CHECKDEVICEONLINE) + return HGTWAIN_ERR_DEVICEOFFLINE; + return ret; } ret = SetCapInt(CAP_XFERCOUNT, TWTY_INT16, 1); if (HGBASE_ERR_OK != ret) { + TW_STATUS status; + m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_STATUS, MSG_GET, (TW_MEMREF)&status); + if (status.ConditionCode == TWCC_CHECKDEVICEONLINE) + return HGTWAIN_ERR_DEVICEOFFLINE; + return ret; } @@ -678,6 +688,11 @@ HGResult HGTwainDSImpl::EnableWithSingleScan(HWND parent, HGDSEventFunc eventFun twUI.hParent = (TW_HANDLE)parent; if (TWRC_SUCCESS != m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, (TW_MEMREF)&twUI)) { + TW_STATUS status; + m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_STATUS, MSG_GET, (TW_MEMREF)&status); + if (status.ConditionCode == TWCC_CHECKDEVICEONLINE) + return HGTWAIN_ERR_DEVICEOFFLINE; + return HGTWAIN_ERR_FAIL; }