“sane等待所有图片流程结束再调用sane_cancel,解决丢弃图像后继续扫描的流程异常问题”
This commit is contained in:
parent
708f263aff
commit
fe2d00802f
|
@ -216,7 +216,8 @@ DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, const QString &passwor
|
||||||
m_source = source;
|
m_source = source;
|
||||||
m_saneDev = nullptr;
|
m_saneDev = nullptr;
|
||||||
m_password = password;
|
m_password = password;
|
||||||
m_reserveImage = false;
|
m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
|
||||||
|
m_abnormalImageResult = HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceUser::~DeviceUser()
|
DeviceUser::~DeviceUser()
|
||||||
|
@ -367,31 +368,37 @@ void HGAPI DeviceUser::DeviceEventFunc(HGSaneDevice dev, HGUInt event, HGPointer
|
||||||
if (HGSANE_EVENT_TYPE_SCANFINISHED == event)
|
if (HGSANE_EVENT_TYPE_SCANFINISHED == event)
|
||||||
{
|
{
|
||||||
emit p->scanFinishEvent();
|
emit p->scanFinishEvent();
|
||||||
p->m_reserveImage = false;
|
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
|
||||||
|
p->m_abnormalImageResult = HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
else if (HGSANE_EVENT_TYPE_WORKING == event)
|
else if (HGSANE_EVENT_TYPE_WORKING == event)
|
||||||
{
|
{
|
||||||
emit p->scanWorkingEvent();
|
emit p->scanWorkingEvent();
|
||||||
|
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
|
||||||
|
p->m_abnormalImageResult = HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HGUInt HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGUInt type, HGPointer param)
|
HGUInt HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGUInt type, HGPointer param)
|
||||||
{
|
{
|
||||||
DeviceUser* p = (DeviceUser*)param;
|
DeviceUser* p = (DeviceUser*)param;
|
||||||
HGUInt result = HGBASE_ERR_OK;
|
|
||||||
if (HGSANE_IMAGE_TYPE_DOUBLE == type && !p->m_reserveImage)
|
if (HGSANE_IMAGE_TYPE_DOUBLE == type && HGSANE_IMAGE_STATUS_NO_STATUS == p->m_abnormlImageStatus)
|
||||||
{
|
{
|
||||||
emit p->abnormalImage(image, &result);
|
emit p->abnormalImage(image, &p->m_abnormalImageResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HGBASE_ERR_OK == result)
|
if (HGBASE_ERR_OK == p->m_abnormalImageResult || HGSANE_IMAGE_STATUS_RESERVE == p->m_abnormlImageStatus)
|
||||||
{
|
{
|
||||||
p->m_reserveImage = true;
|
if (HGSANE_IMAGE_TYPE_DOUBLE == type)
|
||||||
|
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_RESERVE;
|
||||||
|
|
||||||
emit p->newImage(image);
|
emit p->newImage(image);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return HGSANE_ERR_STOPSCAN;
|
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_DISCARD;
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
|
|
|
@ -134,7 +134,8 @@ private:
|
||||||
HGSaneDevice m_saneDev;
|
HGSaneDevice m_saneDev;
|
||||||
QString m_password;
|
QString m_password;
|
||||||
|
|
||||||
bool m_reserveImage;
|
HGUInt m_abnormlImageStatus;
|
||||||
|
HGUInt m_abnormalImageResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -42,6 +42,10 @@ typedef struct
|
||||||
#define HGSANE_IMAGE_TYPE_NORMAL 0L
|
#define HGSANE_IMAGE_TYPE_NORMAL 0L
|
||||||
#define HGSANE_IMAGE_TYPE_DOUBLE 1L
|
#define HGSANE_IMAGE_TYPE_DOUBLE 1L
|
||||||
|
|
||||||
|
#define HGSANE_IMAGE_STATUS_NO_STATUS 0L
|
||||||
|
#define HGSANE_IMAGE_STATUS_RESERVE 1L
|
||||||
|
#define HGSANE_IMAGE_STATUS_DISCARD 2L
|
||||||
|
|
||||||
/* Sane回调
|
/* Sane回调
|
||||||
*/
|
*/
|
||||||
typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt event, HGPointer param);
|
typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt event, HGPointer param);
|
||||||
|
|
|
@ -1121,8 +1121,7 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
|
||||||
HGUInt type = (SCANNER_ERR_DEVICE_DOUBLE_FEEDING == stat1)
|
HGUInt type = (SCANNER_ERR_DEVICE_DOUBLE_FEEDING == stat1)
|
||||||
? HGSANE_IMAGE_TYPE_DOUBLE : HGSANE_IMAGE_TYPE_NORMAL;
|
? HGSANE_IMAGE_TYPE_DOUBLE : HGSANE_IMAGE_TYPE_NORMAL;
|
||||||
HGUInt imgRet = p->m_imageFunc((HGSaneDevice)p, img, type, p->m_imageParam);
|
HGUInt imgRet = p->m_imageFunc((HGSaneDevice)p, img, type, p->m_imageParam);
|
||||||
if (HGSANE_ERR_STOPSCAN == imgRet)
|
|
||||||
stopScan = true;
|
|
||||||
HGBase_DestroyImage(img);
|
HGBase_DestroyImage(img);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1131,13 +1130,13 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
|
||||||
buffer = NULL;
|
buffer = NULL;
|
||||||
bufferSize = 0;
|
bufferSize = 0;
|
||||||
|
|
||||||
if (stopScan)
|
// if (stopScan)
|
||||||
{
|
// {
|
||||||
saneAPI.sane_cancel_api(p->m_devHandle);
|
// saneAPI.sane_cancel_api(p->m_devHandle);
|
||||||
if (NULL != p->m_scanNotify)
|
// if (NULL != p->m_scanNotify)
|
||||||
p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0);
|
// p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0);
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (!p->m_cancelScan)
|
if (!p->m_cancelScan)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue