/* * @Descripttion: * @version: * @Author: pengming * @Date: 2023-10-26 21:31:49 * @LastEditors: pengming */ #pragma once #include "IScanner.h" #include "usb_manager.h" #include "defines.h" #include "USBProtocol.h" #include "BlockingQueue.h" class G1G2Scanner: public IScanner { public: G1G2Scanner(usb_io* usb); virtual ~G1G2Scanner(); virtual void USBDisconnect() override; virtual void Reboot(bool b_loader) override; virtual void PowerOFF() override; virtual void GetFile(std::string path,std::string &content) override; virtual void GetIOStatus(int type) override; virtual int RecordFinalResult(std::string res) override; virtual int CheckLEDDisplay(std::string display) override; virtual int Flat(unsigned int mode) override; virtual void Snap(unsigned int mode, unsigned int count) override; virtual void SetScannerCallback(scanner_call_handler callback, void* user) override; virtual int RecordTestInfo(std::string info) override; virtual bool CheckSwitchs(int idx0, int idx1, int idx2, int idx3) override; virtual bool CheckCapacity(int dst_mem, int dst_disk) override; private: void init_work_thread(); void workrun(); int read_register(int addr, int* val); int write_register(int addr, int val); std::string read_file(std::string path); int write_file(std::string path,std::string content); int read_data(void* data, int length, int timeout); int update_statue(HGEIntInfo* info); bool is_running(); int im_dev_count(); bool is_xferfing(); void xfer_start(); void xfer_image(); int get_image_size(); int get_imgproc_done(); void popimage(); void get_cur_dir(std::string& dir); //void aquire_imgs() private: void proc(bool bcachemode); void procmsg(); private: scanner_call_handler m_callback; void* m_user; volatile bool m_bwork; volatile bool m_bproc; volatile bool m_bprocmsg; std::shared_ptr m_work_thread; std::shared_ptr m_imgprocthread; std::shared_ptr m_msgProcThread; usb_io* m_usb; std::mutex m_mtx_usb; bool m_online = false; int img_index = 0; BlockingQueue>> imgs; BlockingQueue m_paths; struct Msg { TASKID id; DATA_TYPE type; std::string msg; }; BlockingQueue m_msg; };