twain3.0/huagao/Device/GScan439Android.h

77 lines
2.5 KiB
C++

#pragma once
#include "stdafx.h"
#include "GScan.h"
#include "IConfig.h"
#include "G400ScanConfig.h"
#include <memory>
#include <future>
#include <functional>
#include "ThreadPool.h"
#include "StopWatch.h"
#include "ImageMatQueue.h"
#include "opencv2/opencv.hpp"
class GScan439Android :
public IScanner
{
public:
GScan439Android();
virtual ~GScan439Android();
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<void(int)> fun) override;
virtual int aquire_bmpdata(std::vector<unsigned char>& bmpdata) override;
virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override;
virtual std::string GetSerialNum() override;
virtual std::string GetMacAdder() 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:
static void usbhotplug_callback(bool isconnect, void* userdata);
void usbhotplug(bool isleft);
int read_data(void* data, int length, int timeout);
void usbmainloop();
void readimg();
int tranxferimg(unsigned int datalen, std::shared_ptr<std::vector<char>> data);
int codeconvter(HGEIntInfo code);
bool getStatus();
private:
volatile int Error_Code;
volatile bool scanflag;
std::atomic_int imagecount;
int aquirenum = 0;
int getimgnum = 0;
GScanCap m_param;
std::shared_ptr<IUsb> m_usb;
volatile bool b_imgprothread;
volatile bool b_usbthread;
volatile int m_status;
ThreadPool m_readimgpool;
BlockingQueue<std::shared_ptr<std::vector<char>>> imgs;
std::shared_ptr<std::thread> m_usbthread;
std::shared_ptr<std::vector<char>> im_data;
BlockingQueue<std::shared_ptr<std::vector<unsigned char>>> m_imagedata;
deviceevent_callback dev_callback;
void* huagods;
};