#pragma once #include "stdafx.h" #include "IGDevice.h" #include "GScan.h" #include "CyUsbEx.h" #include "IConfig.h" #include "G400ScanConfig.h" #include #include #include #include "ThreadPool.h" #include "StopWatch.h" #include "ImageMatQueue.h" #include "opencv2/opencv.hpp" class GScanO1003399 :public IScanner { public: GScanO1003399(); virtual ~GScanO1003399(); virtual void open(int vid, int pid) override; virtual void regist_deviceevent_callback(deviceevent_callback callback, void* usrdata = 0) override; virtual void DogEar_callback(std::function fun) override; virtual int aquire_bmpdata(std::vector& bmpdata) override; virtual BOOL IsConnected() override; virtual std::string GetFWVersion() override; virtual std::string GetSerialNum() override; virtual std::uint32_t GetMotorFPGA() override; virtual std::uint32_t GetScanFPGA() override; virtual bool is_scan() override; virtual BOOL Get_Scanner_PaperOn() override; virtual int Get_Roller_num() override; virtual void config_params(GScanCap& param) override; virtual void Scanner_StartScan(UINT16 count) override; virtual void Stop_scan() override; virtual int notifyscan() override; virtual void ResetScanner() override; virtual bool Get_IsImageQueueEmpty() override; virtual void reset() override; virtual void clear_hwerror() override; virtual UINT32 get_ErrorCode() override; virtual void Set_ErrorCode(UINT32 value) override; virtual int get_scanned_num() override; virtual void set_sleep_time(int mode) override; virtual bool set_scannercode(std::string str) override; virtual std::string get_scannercode() override; private: void usb_run(); void im_rx(); void start(); void stop(); bool is_runing(); int scan_mode(); int count(); void abort_dev_tx(); void config_scanparam(const HG_ScanConfig& cfg); void config_imgprocparam(const HGImgProcParms& imgprocparams); bool is_rx(); bool rx_cmd(); bool is_dev_tx(); int read_data(void* data, int length, int timeout); void pop_dev_im(); int front_datasize(); int im_dev_count(); void imgproce(std::shared_ptr>& buffs); int codeconvter(HGEIntInfo code); static void usbhotplug_callback(bool isconnect, void* userdata); void usbhotplug(bool isleft); void proc(bool bcachemode); private: volatile int devState; volatile int Error_Code; volatile bool scanflag; volatile bool keeplastimg; volatile bool autopaperstop; volatile bool is_kernelsnap_211209; GScanCap m_param; std::shared_ptr m_usb; volatile bool b_imgprothread; volatile bool b_usbthread; BlockingQueue>> imgs; BlockingQueue m_paths; std::shared_ptr m_autotext; std::shared_ptr m_imgprocthread; std::shared_ptr m_usbthread; std::shared_ptr> im_data; BlockingQueue>> m_imagedata; std::atomic_int imagecount; void* huagods; deviceevent_callback dev_callback; };