#pragma once #include "IScanner.h" #include "ThreadPool.h" #include #include class gscan3399 :public IScanner { public: gscan3399(); virtual ~gscan3399(); virtual void open(int vid, int pid, int index); virtual int aquire_image(std::string& image, int num); virtual bool IsConnected(); virtual std::string GetFWVersion(); virtual void SetFWVersion(); virtual std::string GetSerialNum(); virtual void SetSerialNum(std::string serial); virtual std::string GetKernelVersion(); virtual std::string GetIpAddr(); virtual std::string GetMbVersion(); virtual void SetRatio(int tyepe, int ration,int dpi=0); virtual void GetRatio(int type, int& ratio,int dpi=0); virtual void Reboot(bool loader=false); virtual void PowerOff(); virtual bool is_scan(); virtual bool Get_Scanner_PaperOn(); virtual void Config_Scanner(HGScanConfig config); virtual void Scanner_StartScan(UINT16 count); virtual void Stop_scan(); virtual void ResetScanner(); virtual bool Get_IsImageQueueEmpty(); virtual void reset(); virtual void run(); virtual int get_decompress_pix_type(); virtual void set_decompress_pix_type(int pixtype); virtual void GetFlatMaxBright(bool iscolor, unsigned int& val); virtual void SetFlatMaxBright(bool iscolor, unsigned int val); virtual bool Updata(std::string filename, std::function func); virtual void SetIsDuplex(bool value); virtual void ActiveteUSB(); virtual int GetScanNum(); virtual int GetRollerNum(); virtual void ClrRollerNum(); virtual void ClrScanNum(); virtual void SendFlatData(CorrectParam param, int index); virtual CaptureParams GetFlatData(); virtual void StartFlat(bool iscolor); virtual void DevStateChange(); virtual int getMatSum(); virtual void close(); virtual void GetExpose(int& Aside, int& Bside); virtual void SetExpose(int aside, int bside); virtual void GetSptime(int type, int& time); virtual void SetSptime(int type, int time); virtual void GetSleepTime(int& sleeptime); virtual void SetSleepTime(int sleeptime); virtual void SetFlatCallback(std::function func); virtual void GetSpeedMode(int& speedmode,bool getorset); virtual void GetOrSetVIDPID(int& value, bool get) override; virtual std::string GetSysInfo() override; private: static void usbcallback(bool isleft, void* usrdata); int read_data(void* data, int length, int timeout); void get_imgdata(); bool is_runing(); bool bulk_starttransfer(); bool is_bulktransferring(); void popimg(); int front_datasize(); int get_imgremains(); void imgproce(std::shared_ptr>& buffs); void OnUsbHotplug(bool isleft); void usb_run(); int codeconvter(HGEIntInfo code); std::string GetDeviceFile(std::string path); private: volatile int devState; volatile int Error_Code; volatile bool b_usbthread; ThreadPool m_imgthread; std::shared_ptr m_usbthread; std::shared_ptr> im_data; BlockingQueue m_imagespath; std::atomic_int imgremains; HGScanConfig m_config; std::function m_flatcallback; };