解决国产系统开启单张和扫描指定张数时,图像数量和走纸次数不匹配的问题;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;
|
int scanCount = -1;
|
||||||
p->GetScanCount(&scanCount);
|
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)
|
while (!p->m_stopThread)
|
||||||
{
|
{
|
||||||
SANE_Parameters params;
|
SANE_Parameters params;
|
||||||
|
@ -1179,7 +1186,8 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
|
||||||
if (clickedReserveImg)
|
if (clickedReserveImg)
|
||||||
imageCount = 0;
|
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);
|
saneAPI.sane_cancel_api(p->m_devHandle);
|
||||||
if (NULL != p->m_scanNotify)
|
if (NULL != p->m_scanNotify)
|
||||||
|
@ -1431,3 +1439,32 @@ HGResult HGSaneDeviceImpl::GetDoubleImgStatus(HGUInt *status)
|
||||||
|
|
||||||
return HGBASE_ERR_FAIL;
|
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 SetScanMode(const HGChar *scanMode);
|
||||||
HGResult SetScanCount(HGInt scanCount);
|
HGResult SetScanCount(HGInt scanCount);
|
||||||
HGResult GetDoubleImgStatus(HGUInt *status);
|
HGResult GetDoubleImgStatus(HGUInt *status);
|
||||||
|
HGResult GetScanPage(HGChar *scanPage, HGUInt maxLen);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HGSaneSourceImpl* m_sourceImpl;
|
HGSaneSourceImpl* m_sourceImpl;
|
||||||
|
|
Loading…
Reference in New Issue