From 8371fae5e14bb4d99ee7bf1f60ed8a6219c8fbe9 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Fri, 23 Feb 2024 13:56:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=9B=BD=E4=BA=A7=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=BC=80=E5=90=AF=E5=8D=95=E5=BC=A0=E5=92=8C=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E6=8C=87=E5=AE=9A=E5=BC=A0=E6=95=B0=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=9B=BE=E5=83=8F=E6=95=B0=E9=87=8F=E5=92=8C=E8=B5=B0=E7=BA=B8?= =?UTF-8?q?=E6=AC=A1=E6=95=B0=E4=B8=8D=E5=8C=B9=E9=85=8D=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9BBUG-905?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/sane_user/HGSaneImpl.cpp | 39 +++++++++++++++++++++++++++++++- modules/sane_user/HGSaneImpl.hpp | 1 + 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/modules/sane_user/HGSaneImpl.cpp b/modules/sane_user/HGSaneImpl.cpp index 9e9b7caa..bb9413b7 100644 --- a/modules/sane_user/HGSaneImpl.cpp +++ b/modules/sane_user/HGSaneImpl.cpp @@ -1040,6 +1040,13 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) int scanCount = -1; p->GetScanCount(&scanCount); + //获取扫描页面类型,双张或单张 + HGChar scanPage[256] = { 0 }; + p->GetScanPage(scanPage, 256); + bool isDuplex = true; + if (0 == strcmp(OPTION_VALUE_SMYM_DM, scanPage)) + isDuplex = false; + while (!p->m_stopThread) { SANE_Parameters params; @@ -1179,7 +1186,8 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) if (clickedReserveImg) imageCount = 0; - if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet || (imageCount == scanCount * 2 && !clickedReserveImg)) //图像数量和扫描张数对应时正常结束扫描,双张保留则继续扫描 + if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet || + ((isDuplex ? imageCount == scanCount * 2 : imageCount == scanCount) && !clickedReserveImg)) //图像数量和扫描张数对应时正常结束扫描,双张保留则继续扫描 { saneAPI.sane_cancel_api(p->m_devHandle); if (NULL != p->m_scanNotify) @@ -1431,3 +1439,32 @@ HGResult HGSaneDeviceImpl::GetDoubleImgStatus(HGUInt *status) return HGBASE_ERR_FAIL; } + +HGResult HGSaneDeviceImpl::GetScanPage(HGChar *scanPage, HGUInt maxLen) +{ + if (NULL == scanPage || 0 == maxLen) + { + return HGBASE_ERR_INVALIDARG; + } + + SANE_Int dev_options = 0; + SANE_Int method = 0; + m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, 0, SANE_ACTION_GET_VALUE, &dev_options, nullptr); + for (int i = 1; i < dev_options; ++i) + { + const SANE_Option_Descriptor* opt = m_sourceImpl->m_saneApi.sane_get_option_descriptor_api(m_devHandle, i); + if (strcmp(opt->name, SANE_STD_OPT_NAME_PAGE) == 0) + { + char *value = (char*)malloc(opt->size * 2 + 4); + SANE_Status ret = m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, value, &method); + if (ret == SANE_STATUS_GOOD) + { + strcpy(scanPage, value); + free(value); + return HGBASE_ERR_OK; + } + } + } + + return HGBASE_ERR_FAIL; +} diff --git a/modules/sane_user/HGSaneImpl.hpp b/modules/sane_user/HGSaneImpl.hpp index f22626fd..0dbbb9e7 100644 --- a/modules/sane_user/HGSaneImpl.hpp +++ b/modules/sane_user/HGSaneImpl.hpp @@ -105,6 +105,7 @@ private: HGResult SetScanMode(const HGChar *scanMode); HGResult SetScanCount(HGInt scanCount); HGResult GetDoubleImgStatus(HGUInt *status); + HGResult GetScanPage(HGChar *scanPage, HGUInt maxLen); private: HGSaneSourceImpl* m_sourceImpl;