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

View File

@ -11,6 +11,7 @@ public:
GScan200(); GScan200();
virtual ~GScan200(); virtual ~GScan200();
virtual void open(int vid, int pid) override; 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 int aquire_bmpdata(std::vector<unsigned char>& bmpdata) override;
virtual BOOL IsConnected() override; virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override; virtual std::string GetFWVersion() override;

View File

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

View File

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

View File

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

View File

@ -10,6 +10,7 @@ public:
virtual ~GScanVirtual(); virtual ~GScanVirtual();
// 通过 IGScan 继承 // 通过 IGScan 继承
virtual void open(int vid, int pid) override; 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 int aquire_bmpdata(std::vector<unsigned char>& bmpdata) override;
virtual BOOL IsConnected() override; virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override; virtual std::string GetFWVersion() override;