#pragma once #include #include #include #include #include #include "usb/IUsb.h" #include "GScan.h" #include "ThreadPool.h" class IUsb; class Scanner :public IGScan { public: Scanner(); virtual ~Scanner(); void start(); void stop(); bool is_runing(); int mode(); int count(); void abort_dev_tx(); virtual void open(int vid, int pid) override; virtual int open(int vid) override; virtual bool close() override;//add 2020.3.11 virtual bool is_open() override;//add 2020.3.11 virtual void setusbreport_callback(usbreport_callback callback = 0, void* usrdata = 0) override; virtual int get_image_front_info(ImageInfo* info) override; virtual int aquire_image(cv::Mat& mat, int& bppinfo) override; virtual void clear_hwerror() override; 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 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: void int_run(); bool is_rx(); bool rx_cmd(); bool is_dev_tx(); void im_rx(); int read_data(void* data, int length, int timeout); void pop_dev_im(); int front_datasize(); int im_dev_count(); std::shared_ptr usb; std::future fu_int; volatile bool b_fu_int; std::future fu_rx; volatile bool b_fu_rx; ThreadPool thpool; ThreadPool thpoolRx; std::function image_call; };