解决国产系统开启单张和扫描指定张数时,图像数量和走纸次数不匹配的问题;BUG-905
This commit is contained in:
parent
3f4aaa7c78
commit
8371fae5e1
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue