1.增加扫描事件回调接口

2.增加扫描超时检测退出功能
This commit is contained in:
lovelyyoung 2020-08-31 15:46:14 +08:00
parent 382e47ec7a
commit d6b6eda07a
7 changed files with 45 additions and 5 deletions

View File

@ -61,7 +61,9 @@ typedef enum tagUsbSupported {
// PC繁忙或出错
PC_SCAN_BUSY_or_ERROR = 73,
//USB 未连接
USB_DISCONNECTED = 200
USB_DISCONNECTED = 200,
//用户点击停止
USER_STOP = 201
} UsbSupported, * PUsbSupported;
@ -71,10 +73,10 @@ enum tagEventIndex
EVENT_NUM
};
class DiscardBlank;
class CImageApply;
class IUsb;
class ImageMatQueue;
typedef void(*deviceevent_callback)(int eventID, void* userdata);
class IScanner
{
@ -82,7 +84,8 @@ public:
IScanner() { bFilterMsg = false; }
virtual ~IScanner() { bFilterMsg = true; }
void ResetMsgFiter() { bFilterMsg = true; }
virtual void open(int vid, int pid) = 0;;
virtual void open(int vid, int pid) = 0;
virtual void regist_deviceevent_callback(deviceevent_callback callback, void* usrdata = 0) = 0;
virtual int aquire_bmpdata(std::vector<unsigned char>& bmpdata) = 0;
virtual BOOL IsConnected() = 0;
virtual std::string GetFWVersion() = 0;

View File

@ -27,6 +27,10 @@ void GScan200::open(int vid, int pid)
}
}
void GScan200::regist_deviceevent_callback(deviceevent_callback callback, void* usrdata)
{
}
int GScan200::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
{
return 0;

View File

@ -11,6 +11,7 @@ public:
GScan200();
virtual ~GScan200();
virtual void open(int vid, int pid) override;
virtual void regist_deviceevent_callback(deviceevent_callback callback, void* usrdata = 0) override;
virtual int aquire_bmpdata(std::vector<unsigned char>& bmpdata) override;
virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override;

View File

@ -143,6 +143,7 @@ typedef enum tagUsbKeyWords : UINT32
} UsbKeyWords, * PUsbKeyWords;
GScanO200::GScanO200() :
huagods(NULL),
m_bread_fixed_ratio_fromDSP(false)
{
m_pImages.reset(new ImageMatQueue());
@ -192,11 +193,22 @@ void GScanO200::open(int vid, int pid)
{
m_usb = *usbs.begin();
bool ret = m_usb->open();
USBCB status = { GET_DSP_STATUS ,0,0 };
if (m_usb.get() && m_usb->is_connected())
m_usb->write_bulk(&status, sizeof(status));
if (m_usb.get() && m_usb->is_connected())
m_usb->read_bulk(&status, sizeof(status));
if (ret) {
m_usb->set_usbhotplug_callback(usbhotplug_callback, this);
}
}
}
void GScanO200::regist_deviceevent_callback(deviceevent_callback callback, void* usrdata)
{
huagods = usrdata;
dev_callback = callback;
}
#ifdef LOG_NORMAL
fstream fsaquire;
static int aquiretimes = 1;
@ -368,12 +380,14 @@ void GScanO200::Scanner_StartScan(UINT16 count)
m_pImages->setscanflags(false);
devState = DEV_WRONG;
Set_ErrorCode(status.u32_Data);
if (huagods)
dev_callback(status.u32_Data, huagods);
return;
default:
break;
}
#ifndef G200
//#ifndef G200
USBCB paperstatus = { GET_PAPER_STATUS ,0,0 };
if (m_usb.get() && m_usb->is_connected())
m_usb->write_bulk(&paperstatus, sizeof(paperstatus));
@ -383,9 +397,11 @@ void GScanO200::Scanner_StartScan(UINT16 count)
m_pImages->setscanflags(false);
devState = DEV_WRONG;
Set_ErrorCode(NO_FEED);
if (huagods)
dev_callback(NO_FEED, huagods);
return;
}
#endif // !G200
//#endif // !G200
if (gcap.is_duplex)
count = count == 65535 ? 65535 : count / 2;
@ -484,6 +500,9 @@ void GScanO200::usbhotplug(bool isleft)
m_pImages->setscanflags(false);
if (m_usb.get())
m_usb.reset();
if (huagods)
dev_callback(USB_DISCONNECTED, huagods);
}
}
@ -529,6 +548,7 @@ void GScanO200::usbmain()
// continue;
// }
//}
if (sw.elapsed_ms() > 10000)
{
m_pImages->setscanflags(false);
@ -590,11 +610,15 @@ void GScanO200::usbmain()
Set_ErrorCode(usbcb.u32_Data);
m_pImages->setscanflags(false);
devState = DEV_WRONG;
if (huagods)
dev_callback(usbcb.u32_Data, huagods);
#else
if (!haveError)
{
haveError = true;
Set_ErrorCode(usbcb.u32_Data);
if (huagods)
dev_callback(usbcb.u32_Data, huagods);
}
#endif

View File

@ -16,6 +16,7 @@ public:
virtual ~GScanO200();
// 通过 IGScan 继承
virtual void open(int vid, int pid) override;
virtual void regist_deviceevent_callback(deviceevent_callback callback, void* usrdata = 0) override;
virtual int aquire_bmpdata(std::vector<unsigned char>& bmpdata) override;
virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override;
@ -47,5 +48,7 @@ private:
std::shared_ptr<IUsb> m_usb;
std::unique_ptr<thread> m_threadUsb;
GScanCap gcap;
void* huagods;
deviceevent_callback dev_callback;
};

View File

@ -28,6 +28,10 @@ void GScanVirtual::open(int vid, int pid)
fs.close();
}
void GScanVirtual::regist_deviceevent_callback(deviceevent_callback callback, void* usrdata)
{
}
int GScanVirtual::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
{
StopWatch sw;

View File

@ -10,6 +10,7 @@ public:
virtual ~GScanVirtual();
// 通过 IGScan 继承
virtual void open(int vid, int pid) override;
virtual void regist_deviceevent_callback(deviceevent_callback callback, void* usrdata = 0) override;
virtual int aquire_bmpdata(std::vector<unsigned char>& bmpdata) override;
virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override;