#pragma once #include "GScan.h" #include #include #include "common.h" #include "Global.h" typedef struct tag_USBCB { unsigned int u32_CMD; unsigned int u32_Data; unsigned int u32_Count; }USBCB, * PUSBCB; /*u32_CMD COMMAND*/ enum tagUsbKeyWords { /*无命令*/ NO_COMMAND = 0, /*获取dsp 状态*/ GET_DSP_STATUS = 1, /*取图*/ GET_IMAGE = 2, /*销毁DSP中驻存的图*/ POP_IMAGE = 3, /*开始扫描命令*/ START_COMMAND = 4, /*停止扫描命令*/ STOP = 5, /*获取扫描仪扫描模式*/ GET_SCAN_MODE = 6, /*获取固件版本号*/ GET_FW_VERSION = 7, /*返回PC端的状态*/ SEND_STATUS_PC = 8, /*下发扫描配置参数*/ CONFIGURED_DATA = 9, /*下发固件信息*/ SEND_FW = 10, /*获取扫描参数*/ GET_CONFIG_DATA = 11, /*获取扫描历史总张数*/ GET_SCANN_NUM = 12, /*获取有无纸的状态*/ GET_PAPERFEEDER_STATUS = 13, /*DSP初始化*/ INIT_HARDWARE_SYS = 14, /*获取有无纸的状态*/ GET_PAPER_STATUS = 0x0d, /*下发元器件配置参数(灰度,LED R曝光时间)*/ SEND_COMPONENTS_GR = 15, /*下发元器件配置参数(LED G/B曝光时间)*/ SEND_COMPONENTS_GB = 16, /*下发扫描模式*/ SEND_SCAN_MODE = 17, /*开始进行平场矫正*/ START_FLAT = 18, /*停止平场矫正*/ STOP_FLAT = 19, /*下发200dpi彩色平场矫正参数*/ SEND_200_COLOR_FLAT_DATA = 20, /*下发300dpi彩色平场矫正参数*/ SEND_300_COLOR_FLAT_DATA = 21, /*获取200dpi彩色平场矫正参数*/ GET_200_COLOR_FLAT_DATA = 22, /*获取300dpi彩色平场矫正参数*/ GET_300_COLOR_FLAT_DATA = 23, /*下发200dpi灰度平场校正参数*/ SEND_200_GRAY_FLAT_DATA = 24, /*下发300dpi灰度平场校正参数*/ SEND_300_GRAY_FLAT_DATA = 25, /*获取200DPI灰度平场校正参数*/ GET_200_GRAY_FLAT_DATA = 26, /*获取300DPI灰度平场校正参数*/ GET_300_GRAY_FLAT_DATA = 27, /*下发序列号命令*/ SEND_SERIAL = 28, /*获取序列号命令*/ GET_SERIAL = 29, /*获取辊轴张数*/ GET_ROLLER_NUM = 30, /*清空辊轴张数*/ CLR_ROLLER_NUM = 31, /*下发扫描张数*/ START_COMMAND_COUNT = 38, /*设置休眠时间*/ SET_SLEEP_TIME = 39, /*获取休眠时间*/ GET_SLEEP_TIME = 40, /*清空硬件缓存*/ CLR_HARDWARE_CACHE = 41 }; class GScanO200 : public IGScan { public: GScanO200(); virtual ~GScanO200(); virtual void open(int vid = 0x064b, int pid = 0x7823) override; virtual int open(int vid = 0x3072) override; virtual bool close() override; virtual bool is_open() override; virtual void setusbreport_callback(usbreport_callback callback,void* usrdata) override; virtual int get_image_front_info(ImageInfo* info) override;//add 2020.03.11 virtual int aquire_image(cv::Mat &mat,int& bppinfo) override;//add 2020.03.11 virtual bool IsConnected() override; virtual std::string GetFWVersion(int mode) override; virtual std::string GetSerialNum(int mode) override; virtual bool is_scan() override; virtual bool Get_Scanner_PaperOn() override; virtual void config_params(GScanCap& params,int mode) override; virtual void Scanner_StartScan(UINT32 count,int mode) override; virtual void Stop_scan() override; virtual void ResetScanner() override; virtual bool Get_IsImageQueueEmpty() override; virtual void clear_hwerror() override; virtual void reset() override; virtual void setdecodepixtype(int twpixtype) override; virtual UINT32 get_ErrorCode() override; virtual void Set_ErrorCode(UINT32 value) override; virtual int get_scanned_num() override; virtual int get_roller_num() override; virtual void clr_roller_num() override; virtual int get_sleep_time() override; virtual void set_sleep_time(int time) override; virtual bool clr_hardware_cache() override; private: static void on_usbcallback(bool isleft, void* usrdata); void onusbcallback(bool isleft); void usbmain(); USBCB Get_Scanner_Status(); std::shared_ptr> Get_Img_Data(int buffersize); void Pop_Image(); std::shared_ptr m_usb; volatile int mode = 0; std::unique_ptr m_threadUsb; usbreport_callback m_usbreport; void* m_usrdata; };