#pragma once #include "UsbScanEx.h" #include #include #include #include #include #include "MutexEx.h" #include "opencv2/core/core.hpp" #include #include "jpeglib.h" #include #include #include #include "ImageMatQueue.h" #include "PublicFunc.h" using namespace cv; enum tagDevState { DEV_STOP = -1, DEV_ISRUNNING, DEV_WRONG }; typedef enum tagDevState DevState, PDevState; enum tagEventIndex { EVENT_IMAGE, EVENT_NUM }; class GScn_Drv { public: GScn_Drv(); ~GScn_Drv(); void open(int vid, int pid); int aquire_image(cv::Mat& image); BOOL IsConnected(); std::string GetFWVersion(); std::string GetSerialNum(); bool is_scan(); USBCB Get_Scanner_Status(); BOOL Get_Scanner_PaperOn(); void Config_Scanner(PUSBCB pUSBCB); void Scanner_StartScan(UINT16 count); void Stop_scan(); void ResetScanner(); bool Get_IsImageQueueEmpty(); void reset(); void run(); void set_decompress_pix_type(int pixtype); void SetIsDuplex(BOOL value); void setlist(std::vector >list); UINT32 get_ErrorCode(); void Set_ErrorCode(UINT32 value); private: cv::Mat popMat(); void pushMat(JpegBuffer& data); cv::Mat Get_Img_Data(int buffersize); DWORD usbmain(); void Pop_Image(); private: std::shared_ptr m_usb; ImageMatQueue m_pImages; bool m_bRun; boost::mutex m_Locker; boost::mutex m_imgLocker; int pixType; volatile UINT32 Error_Code; volatile int devState; boost::thread m_threadUsb; };