twain3.0/huagao/Device/GDevice.h

89 lines
2.0 KiB
C
Raw Normal View History

#pragma once
#include "IGDevice.h"
#include <memory>
#include <thread>
#include <mutex>
#include "BlockingQueue.h"
#include <string>
class IUsb;
class GDevice : public IGDevice
{
public:
GDevice(std::shared_ptr<IUsb> usb);
virtual ~GDevice();
// ͨ<><CDA8> IGDevice <20>̳<EFBFBD>
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<IUsb> m_usb;
const int buffer_size = 1204 * 1024;
const int crtlBufferSize = 512;
volatile bool m_bScan;
volatile bool m_bListen;
std::shared_ptr<std::thread> m_threadInt;
std::shared_ptr<std::thread> 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<int> image_indexs;
void* m_imagecall_userdata;
void* m_eventcall_userdata;
volatile bool m_run;
// ͨ<><CDA8> IGDevice <20>̳<EFBFBD>
virtual void set_option(Cam_Options option,unsigned int value) override;
virtual int get_option(Cam_Options option) override;
virtual std::vector<Cam_Options> support_options() override;
};