223 lines
8.4 KiB
C++
223 lines
8.4 KiB
C++
#pragma once
|
|
#include "ICapturer.h"
|
|
#include "ThreadPool.h"
|
|
class FpgaComm;
|
|
class gVideo;
|
|
class Gpio;
|
|
|
|
class MultiFrameCapture_8458Color : public ICapturer
|
|
{
|
|
public:
|
|
MultiFrameCapture_8458Color();
|
|
virtual ~MultiFrameCapture_8458Color();
|
|
virtual void open();
|
|
virtual void open(HGScanConfig config,FPGAConfigParam fpgaparam);
|
|
virtual void open(HGScanConfig config, FPGAConfigParam_8478 fpgaparam){}
|
|
virtual void close();
|
|
virtual void start();
|
|
virtual void stop();
|
|
virtual bool is_runing();
|
|
virtual void snap();
|
|
virtual void snap(frame_data_info info);
|
|
virtual cv::Size frame_data_size();
|
|
virtual void stopsnap();
|
|
virtual int getautosizeheight();
|
|
virtual void set_size(int width, int height);
|
|
virtual void set_sp(int sp);
|
|
|
|
virtual void *readFrame(int timeout);
|
|
virtual frame_data_info ReadMultiFrame(int state);
|
|
virtual void set_gain(int ix, int val);
|
|
virtual void set_offset(int ix, int val);
|
|
virtual void set_expo(int ix, int val);
|
|
|
|
virtual std::shared_ptr<IRegsAccess> regs();
|
|
virtual void reset();
|
|
virtual int width();
|
|
virtual int height();
|
|
virtual int color();
|
|
virtual void init_autocorrect(int colormode);
|
|
virtual void setcapturecall(std::function<void(int, std::string)> callback)
|
|
{
|
|
m_captureCallback = callback;
|
|
};
|
|
virtual void Fpga_regsAccess_reset(bool enable);
|
|
|
|
virtual uint32_t multi_frame_counts() { return frame_count; }
|
|
virtual uint32_t multi_curr_snap_index() { return curr_frame_snap_index; }
|
|
virtual void single_correct(std::uint32_t mode);
|
|
virtual cv::Mat read_one_frame() override;
|
|
|
|
void init_imagedatabuffer();
|
|
void free_imagedatabuffer();
|
|
void update_imgdatainfo(void *itemmat, frame_data_info &info, uint32_t h, uint32_t w);
|
|
void update_imgdatainfo(void *itemmat, uint32_t h, uint32_t w);
|
|
|
|
private:
|
|
void configFPGAParam(int mode, int dpi);
|
|
void init_lutdate();
|
|
void openDevice(int dpi, int mode);
|
|
void creatcorrectconfig(int dpi, int mode);
|
|
bool saveLutImg(int dpi, int mode, bool black);
|
|
void correctcolor(int correctmode);
|
|
|
|
void fpga_reset();
|
|
void fpga_reload();
|
|
|
|
void init_adc_8458();
|
|
void write_adc_8458(int bank,int addr,int val,bool A_or_B);
|
|
uint32_t read_adc_8458(int bank,int addr,bool A_or_B);
|
|
void set_exp_8458_double(int exp,int sp,bool A_or_B);
|
|
void set_exp_8458_single(int exp,int sp,bool A_or_B);
|
|
void set_pixel_count_8458(int val);
|
|
void set_analog_gain_8458(int r1,int r2,int g1,int g2,int b1,int b2,bool A_or_B);
|
|
void set_analog_offset_8458(int type,int val,bool A_or_B);
|
|
void set_digital_offset_8458(int type,int val,bool A_or_B);
|
|
void set_digital_gain_8458(int type,int val,bool A_or_B);
|
|
void set_ADC_config_frequency(uint32_t freq);
|
|
void set_led_off();
|
|
void set_dpi_mode(bool is_600);
|
|
|
|
private:
|
|
std::function<void(int, std::string)> m_captureCallback;
|
|
std::shared_ptr<gVideo> video;
|
|
std::shared_ptr<Gpio> vdd_cis_3voff_pin;
|
|
std::shared_ptr<Gpio> vdd_vis_5ven_pin;
|
|
std::shared_ptr<Gpio> reset_pin;
|
|
std::shared_ptr<Gpio> image_in_transfer_pin;
|
|
std::shared_ptr<Gpio> initDone_pin;
|
|
std::shared_ptr<Gpio> fpgaLoad;
|
|
std::shared_ptr<FpgaComm> fpgaComm;
|
|
std::shared_ptr<Gpio> fpga_conf_initn;
|
|
std::shared_ptr<Gpio> fpga_conf_done;
|
|
ThreadPool snapthread;
|
|
uint32_t m_fpgaversion;
|
|
uint32_t frame_height;
|
|
uint32_t frame_count;
|
|
uint32_t curr_frame_snap_index;
|
|
const int FPGA_MAX_HEIGHT_SUP=1048576;
|
|
frame_data_info pimgdata_info;
|
|
std::future<void> snap_fu;
|
|
bool bcorrecting;
|
|
bool b_stop_snap;
|
|
std::thread m_correctthread;
|
|
HGScanConfig m_config;
|
|
FPGAConfigParam m_fpgaparam;
|
|
|
|
const uint8_t bank_value_b[192] =
|
|
{0x01,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //300*600 dpi
|
|
,0x44,0x64,0x46,0x00,0x64,0x00,0x64,0x00,0x64,0x00
|
|
,0xc8,0x00,0x64,0x00,0xc8,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xA1,0x01
|
|
,0x44,0x43,0x45,0x09,0x02,0x02,0x02,0x00,0x2A,0x14
|
|
,0x34,0x05,0x00,0x01,0x13,0xc4,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00
|
|
,0x41,0x00,0x50,0x09,0xe2,0x0a,0x32,0x13,0xc3,0x00
|
|
//,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00
|
|
,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00
|
|
,0x02,0x00,0x03,0x02,0x00,0x60,0x00,0x6d,0x00,0x60
|
|
//,0x02,0x00,0x03,0x02,0x00,0x5c,0x00,0x5D,0x00,0x60
|
|
,0x07,0x8C,0x0A,0x5F,0x00,0x03,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00};
|
|
|
|
|
|
const uint8_t bank_value[192] =
|
|
// {0x01,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //300*300 dpi
|
|
// ,0x44,0x64,0x46,0x00,0x64,0x00,0x64,0x00,0x64,0x00
|
|
// ,0xc8,0x00,0x64,0x00,0xc8,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xA1,0x01
|
|
// ,0x44,0x43,0x45,0x09,0x02,0x02,0x02,0x00,0x2A,0x14
|
|
// ,0x34,0x05,0x00,0x01,0x13,0xc4,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00
|
|
// ,0x41,0x00,0x50,0x09,0xe2,0x0a,0x32,0x13,0xc3,0x00
|
|
// //,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00
|
|
// ,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00
|
|
// ,0x02,0x00,0x03,0x04,0x00,0x60,0x00,0x6D,0x00,0x60
|
|
// ,0x07,0x8C,0x0A,0x5F,0x00,0x03,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00};
|
|
|
|
// {0x01,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //300*600 dpi
|
|
// ,0x44,0x64,0x46,0x00,0x64,0x00,0x64,0x00,0x64,0x00
|
|
// ,0xc8,0x00,0x64,0x00,0xc8,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xA1,0x01
|
|
// ,0x44,0x43,0x45,0x09,0x02,0x02,0x02,0x00,0x2A,0x14
|
|
// ,0x34,0x05,0x00,0x01,0x13,0xc4,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00
|
|
// ,0x41,0x00,0x50,0x09,0xe2,0x0a,0x32,0x13,0xc3,0x00
|
|
// //,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00
|
|
// ,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00
|
|
// ,0x02,0x00,0x03,0x02,0x00,0x60,0x00,0x6D,0x00,0x60
|
|
// //,0x02,0x00,0x03,0x02,0x00,0x61,0x00,0x66,0x00,0x60
|
|
// //,0x02,0x00,0x03,0x02,0x00,0x5c,0x00,0x5D,0x00,0x60
|
|
// ,0x07,0x8c,0x0A,0x5F,0x00,0x03,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
// ,0x00,0x00,0x00,0x00};
|
|
|
|
|
|
{0x01,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //600*600 dpi
|
|
,0x44,0x64,0x46,0x00,0x64,0x00,0x64,0x00,0x64,0x00
|
|
,0xc8,0x00,0x64,0x00,0xc8,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xA1,0x01
|
|
,0x44,0x43,0x45,0x09,0x02,0x02,0x02,0x00,0x2A,0x14
|
|
,0x34,0x05,0x00,0x01,0x13,0xc4,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00
|
|
,0x41,0x00,0x50,0x09,0xe2,0x0a,0x32,0x13,0xc3,0x00
|
|
//,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00
|
|
,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00
|
|
,0x01,0x00,0x01,0x02,0x00,0x60,0x00,0x6D,0x00,0x60
|
|
//,0x02,0x00,0x03,0x02,0x00,0x5c,0x00,0x5D,0x00,0x60
|
|
,0x07,0x8C,0x0A,0x5F,0x00,0x03,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
,0x00,0x00,0x00,0x00};
|
|
|
|
const uint8_t bank_change[3] = {0x01,0x41,0x81};
|
|
union adc_8458_param
|
|
{
|
|
struct
|
|
{
|
|
uint32_t val_l : 8; //数据位
|
|
uint32_t addr_l : 6; //adc 寄存器地址
|
|
uint32_t r_or_w_l :2; //读写标志位 0x11 读 0x01 写
|
|
uint32_t val_h : 8;
|
|
uint32_t addr_h : 6;
|
|
uint32_t r_or_w_h :2;
|
|
}param;
|
|
uint32_t value;
|
|
};
|
|
|
|
};
|