#pragma once #include #include #include #include #include #include #include #include #include #include "filetools.h" #include "PublicFunc.h" using namespace std; enum tagDevState { DEV_STOP = -1, DEV_ISRUNNING, DEV_WRONG }; typedef enum tagDevState DevState, PDevState; typedef struct tag_USBCB { UINT32 u32_CMD; UINT32 u32_Data; UINT32 u32_Count; }USBCB, * PUSBCB; //u32_Data typedef enum tagUsbSupported { //停止扫描 SCAN_STOP = -2, //异常 HAVE_ERROR = -1, //正常状态 NORMAL = 0, //开盖 OPEN_COVER = 1, // 无纸 NO_FEED = 2, // 搓纸失败 FEED_IN_ERROR = 4, // 卡纸 PAPER_JAM = 8, // 检测到双张 DETECT_DOUBLE_FEED = 16, // 检测到订书钉 DETECT_STAPLE = 32, // 纸张倾斜 PAPER_SKEW = 64, // 自动模式 AUTO_SCAN_MODE = 65, // 手动模式 MANAUL_SCAN_MODE = 66, // 计数模式 COUNT_MODE = 67, // 硬件错误 HARDWARE_ERROR = 68, // FPGA崩溃 FPGA_ERROR = 68, // 开始 START_SCAN = 69, //停止 STOP_SCAN = 70, //有图 HAVE_IMAGE = 71, // 更新扫描参数 UPDATE_SCAN_PARAMETER = 72, // PC繁忙或出错 PC_SCAN_BUSY_or_ERROR = 73, //摺角 DOG_EAR=74, //幅面检测错误 SIZE_ERROR=75, //取图超时 AQUIRE_IMAGE_TIMEOUT=76, //获取图片与扫描张数不匹配 LOSE_IMAGE=77, //USB 未连接 USB_DISCONNECTED = 200, //用户点击停止 USER_STOP = 201, //自动校正完成 AUTO_FLAT_FINISHED = 202, //usb 已连接 USB_CONNECTED, HAVE_PAPER } UsbSupported, * PUsbSupported; static map msgs = { {UsbSupported::OPEN_COVER,"扫描仪开盖!请关闭扫描仪上盖!"}, {UsbSupported::NO_FEED,"无纸!请放置纸张!"}, {UsbSupported::FEED_IN_ERROR,"搓纸失败!请整理纸张!"}, {UsbSupported::PAPER_JAM,"卡纸!"}, {UsbSupported::DETECT_DOUBLE_FEED,"双张"}, {UsbSupported::DETECT_STAPLE,"检测到订书针!"}, {UsbSupported::PAPER_SKEW,"纸张歪斜!请整理纸张!"}, {UsbSupported::COUNT_MODE,"计数模式,请退出计数模式!"}, {UsbSupported::HARDWARE_ERROR,"硬件异常!请重启扫描仪!"}, {UsbSupported::USB_DISCONNECTED,"USB连接异常!"}, {UsbSupported::USER_STOP,"未找到扫描仪!请检查电源或者USB连接线是否接通!"}, {UsbSupported::AUTO_FLAT_FINISHED,"设备已被其他程序占用,请关闭占用程序之后再重试!"}, {UsbSupported::DOG_EAR,"检测到折角!"}, {UsbSupported::SIZE_ERROR,"幅面检测异常!"}, {UsbSupported::AQUIRE_IMAGE_TIMEOUT,"取图超时!"}, {UsbSupported::LOSE_IMAGE,"上传图片与扫描张数不匹配!"} }; enum tagEventIndex { EVENT_IMAGE, EVENT_NUM }; class CImageApply; class IUsb; class ImageMatQueue; typedef void(*deviceevent_callback)(int eventID, void* userdata); class IScanner { public: IScanner() { bFilterMsg = false; aquire_image_count = updata_image_count = updata_image_count = roller_num = lose_image_num= 0; } virtual ~IScanner() { bFilterMsg = true; } void ResetMsgFiter() { bFilterMsg = true; } int get_aquire_image_count() { return aquire_image_count; }; int get_updata_image_count() { return updata_image_count; }; int get_lose_image_num() { return lose_image_num; }; void set_lose_image_num(int value) { lose_image_num = value; }; void set_aquire_image_count(int aquire, int updata) { aquire_image_count = aquire; updata_image_count = updata; if (setindicatortext) setindicatortext(aquire, updata); }; void regist_indicatortext_callback(std::function indicatortext) { if (indicatortext) setindicatortext = indicatortext; }; virtual void open(int vid, int pid) = 0; virtual void regist_deviceevent_callback(deviceevent_callback callback, void* usrdata = 0) = 0; virtual void DogEar_callback(std::function fun)=0; virtual int aquire_bmpdata(std::vector& bmpdata) = 0; virtual BOOL IsConnected() = 0; virtual std::string GetFWVersion() = 0; virtual std::string GetSerialNum() = 0; virtual bool is_scan() = 0; virtual BOOL Get_Scanner_PaperOn() = 0; virtual int Get_Roller_num() = 0; virtual void config_params(GScanCap& params) = 0; virtual void Scanner_StartScan(UINT16 count) = 0; virtual void Stop_scan() = 0; virtual void ResetScanner() = 0; virtual bool Get_IsImageQueueEmpty() = 0; virtual void reset() = 0; virtual void clear_hwerror() = 0; virtual void setdecodepixtype(int twpixtype) = 0; virtual UINT32 get_ErrorCode() = 0; virtual void Set_ErrorCode(UINT32 value) = 0; virtual int get_scanned_num() = 0; virtual void set_sleep_time(int mode) = 0; virtual bool set_scannercode(std::string str) = 0; virtual std::string get_scannercode() = 0; void DoEvents() { MSG msg; if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { DispatchMessage(&msg); TranslateMessage(&msg); } } protected: volatile UINT32 Error_Code; volatile int devState; std::shared_ptr m_pImages; std::mutex m_Locker; std::mutex m_imgLocker; std::string fwVersion; std::string SerialNum; std::string scannercode; std::function setindicatortext; int aquire_image_count; int updata_image_count; int roller_num; int pixType; int lose_image_num; bool bFilterMsg; };