#pragma once #include "IGDevice.h" #include #include #include #include "BlockingQueue.h" #include class IUsb; class GDevice : public IGDevice { public: GDevice(std::shared_ptr usb); virtual ~GDevice(); // ͨ¹ý IGDevice ¼Ì³Ð virtual bool open() override; virtual void close() override; virtual bool is_open() override; bool start(image_callback callfunc, void* userdata); void set_event_call(event_callback event_callfunc, void* userdata); virtual void stop() override; virtual int is_run() override; virtual void reset() override; void write_dsp_fw(std::string path); void write_devname(std::string name); std::string read_devname(); void write_reg(int type, int addr, int value); int read_reg(int type, int addr); bool write_flash(unsigned int addr, void* data, int size); bool read_flash(unsigned int addr, void* data, int size); void trigger_scan(void); void write_pid(unsigned short pid); unsigned short read_pid(); private: void recv_main(); void Int_main(); void init_cam(); int read_data(void* data, int lenght, int timeout); void read_frame(int index, int offset); int frame_size(int index); void pick_paper(void); bool DataOn(); std::shared_ptr m_usb; const int buffer_size = 1204 * 1024; const int crtlBufferSize = 512; volatile bool m_bScan; volatile bool m_bListen; std::shared_ptr m_threadInt; std::shared_ptr m_threadrecv; std::mutex m_mtxInt; std::mutex m_mtxCtrl; image_callback image_call; event_callback event_call; const int to_device = 0x40; const int from_device = 0xc0; const int regs_access = 0x0c; const int flash_access = 0x04; const int regs_req = 0x0c; BlockingQueue image_indexs; void* m_imagecall_userdata; void* m_eventcall_userdata; volatile bool m_run; // ͨ¹ý IGDevice ¼Ì³Ð virtual void set_option(Cam_Options option,unsigned int value) override; virtual int get_option(Cam_Options option) override; virtual std::vector support_options() override; };