217 lines
5.3 KiB
C
217 lines
5.3 KiB
C
|
#pragma once
|
||
|
#include <string>
|
||
|
#include <memory>
|
||
|
#include "regsaccess.h"
|
||
|
|
||
|
#ifdef HAS_UV
|
||
|
#define MAX_REGS 0x0e
|
||
|
#else
|
||
|
#define MAX_REGS 0x0e
|
||
|
#endif
|
||
|
|
||
|
typedef struct Frame_FPGA
|
||
|
{
|
||
|
unsigned short int height;
|
||
|
unsigned short int num : 16;
|
||
|
|
||
|
} FrameFpga;
|
||
|
|
||
|
typedef struct Mode_FPGA
|
||
|
{
|
||
|
unsigned short int colorMode : 1;
|
||
|
unsigned short int dpi : 2;
|
||
|
unsigned short int led : 1;
|
||
|
unsigned short sample : 9;
|
||
|
unsigned short int adcA : 1;
|
||
|
unsigned short int adcB : 1;
|
||
|
unsigned short int selftest : 1;
|
||
|
unsigned short int sp;
|
||
|
} ModeFpga;
|
||
|
|
||
|
typedef struct CMD_FPGA
|
||
|
{
|
||
|
unsigned int cmd : 1; // start : 1 , stop : 0
|
||
|
unsigned int adc_confif_hz : 4;
|
||
|
unsigned int cis_HL : 1; //true 华菱 8478 lvds
|
||
|
unsigned int reserved : 26;
|
||
|
} CmdFpga;
|
||
|
|
||
|
typedef struct STATUS_FPGA
|
||
|
{
|
||
|
unsigned int status : 1; // start : 1 , stop : 0
|
||
|
unsigned int reserved : 31;
|
||
|
} StatusFpga;
|
||
|
|
||
|
typedef struct Ad_Gain
|
||
|
{
|
||
|
unsigned short int gain_low8 : 8;
|
||
|
unsigned short int gain_hight : 1;
|
||
|
unsigned int reserved : 23;
|
||
|
} AdGain;
|
||
|
|
||
|
typedef struct CIS_AD_Gain
|
||
|
{
|
||
|
unsigned short int ad0_value : 8; //!< 数据位
|
||
|
unsigned short int ad0_reserved : 2; //!< 保留位
|
||
|
unsigned short int ad0_addr : 5; //!< 寄存器地址
|
||
|
unsigned short int ad0_rw : 1; //!< 读写位 1:读, 0:写
|
||
|
unsigned short int ad1_value : 8; //!< 数据位
|
||
|
unsigned short int ad1_reserved : 2; //!< 保留位
|
||
|
unsigned short int ad1_addr : 5; //!< 寄存器地址
|
||
|
unsigned short int ad1_rw : 1; //!< 读写位 1:读, 0:写;
|
||
|
} CisAdGain;
|
||
|
|
||
|
typedef struct CIS_LED_RF
|
||
|
{
|
||
|
unsigned short int ledEnable : 1;
|
||
|
unsigned short int fanMode : 2;
|
||
|
unsigned short int jamEnable : 1;
|
||
|
unsigned short int sample : 9;
|
||
|
unsigned short int reserved : 3;
|
||
|
unsigned short int ledR;
|
||
|
} CisLedRF;
|
||
|
|
||
|
typedef struct CIS_LED_R
|
||
|
{
|
||
|
unsigned short int ledEnable : 1;
|
||
|
unsigned short int sample : 9;
|
||
|
unsigned short int en_test_color : 1;
|
||
|
unsigned short int en_test : 1;
|
||
|
unsigned short int cis_type : 1;
|
||
|
unsigned short int reserved : 3;
|
||
|
unsigned short int ledR;
|
||
|
} CisLedR;
|
||
|
|
||
|
typedef struct CIS_LED_GB
|
||
|
{
|
||
|
unsigned short int ledG;
|
||
|
unsigned short int ledB;
|
||
|
} CisLedGB;
|
||
|
|
||
|
typedef struct CIS_LED_UV
|
||
|
{
|
||
|
unsigned short int ledASide;
|
||
|
unsigned short int ledBSide;
|
||
|
} CisLedUv;
|
||
|
|
||
|
typedef struct CIS_FRAME_INTERVAL
|
||
|
{
|
||
|
unsigned short Frame_Interval_min;
|
||
|
unsigned short Frame_Interval_max : 13;
|
||
|
unsigned short reversed : 3;
|
||
|
} CisFrameInterval;
|
||
|
|
||
|
typedef union Fpga_Params
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
FrameFpga frame; // 0x00
|
||
|
ModeFpga mode; // 0x01
|
||
|
CmdFpga cmd; // 0x02
|
||
|
StatusFpga status; // 0x03
|
||
|
CisAdGain Aad; // 0x04
|
||
|
CisLedR AledR; // 0x05
|
||
|
CisLedGB AledGB; // 0x06
|
||
|
CisAdGain Bad; // 0x07
|
||
|
#ifndef G300
|
||
|
CisLedRF BledR; // 0x08
|
||
|
#else
|
||
|
CisLedR BledR; // 0x08
|
||
|
#endif
|
||
|
CisLedGB BledGB; // 0x09
|
||
|
unsigned int ExpIncr; // 0x0a
|
||
|
unsigned int TrigMode; // 0x0b
|
||
|
CisFrameInterval FrameInterval; // 0x0c
|
||
|
CisLedUv UVLed;
|
||
|
unsigned int reversed; // 0x0e
|
||
|
unsigned int fpgaversion; // 0x0f
|
||
|
// unsigned int ConFrameCount;//多帧计数
|
||
|
};
|
||
|
unsigned int regs[16];
|
||
|
} FpgaParams;
|
||
|
|
||
|
typedef union CIS_VSP
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
unsigned int ASide_VSP : 9;
|
||
|
unsigned int BSide_VSP : 9;
|
||
|
unsigned int reserved : 14;
|
||
|
} bits;
|
||
|
int value;
|
||
|
} CISVSP;
|
||
|
|
||
|
class FpgaComm : public IRegsAccess
|
||
|
{
|
||
|
public:
|
||
|
FpgaComm();
|
||
|
virtual ~FpgaComm() {}
|
||
|
|
||
|
void reset();
|
||
|
void regsAccess_reset(bool enable);
|
||
|
void setRegs(int addr, int value);
|
||
|
int getRegs(int addr);
|
||
|
void setFrameHeight(int height);
|
||
|
int getFrameHeight();
|
||
|
void setFrameNum(int num);
|
||
|
void enableLed(bool bEnable);
|
||
|
void enableUV(bool enable);
|
||
|
void capture();
|
||
|
void setAGain(int indexGain, int value);
|
||
|
void setBGain(int indexGain, int value);
|
||
|
void setAOffset(int indexOffset, int value);
|
||
|
void setBOffset(int indexOffset, int value);
|
||
|
|
||
|
void setAExposureR(int value);
|
||
|
void setAExposureG(int value);
|
||
|
void setAExposureB(int value);
|
||
|
void setAExposureUV(int value);
|
||
|
|
||
|
void setBExposureR(int value);
|
||
|
void setBExposureG(int value);
|
||
|
void setBExposureB(int value);
|
||
|
void setBExpousreUV(int value);
|
||
|
|
||
|
void setEnTestCol(bool en);
|
||
|
void setEnTestBit(bool en);
|
||
|
|
||
|
void setSp(int value);
|
||
|
int getSp();
|
||
|
|
||
|
void EnableTest(bool bTest);
|
||
|
int IsTest();
|
||
|
|
||
|
void setColorMode(int mode);
|
||
|
int getColorMode();
|
||
|
|
||
|
void setDpi(int dpi);
|
||
|
int getDpi();
|
||
|
|
||
|
void setSample(int sample);
|
||
|
int getSample();
|
||
|
|
||
|
// 20190626 YHP autoTrig function
|
||
|
void setDelayTime(int value);
|
||
|
void setTrigMode(bool isArmMode);
|
||
|
|
||
|
void update(int times);
|
||
|
void enableJamCheck(bool b);
|
||
|
void resetADC();
|
||
|
void setVsp(unsigned int Aside, unsigned int BSide);
|
||
|
|
||
|
void setFrame_interval_min(int min);
|
||
|
int getFrame_interval_min();
|
||
|
void setFrame_interval_max(int max);
|
||
|
int getFrame_interval_max();
|
||
|
unsigned int getFrame_counter_val();
|
||
|
int getFrameNum();
|
||
|
void set_cis_type(bool isA3_CIS);
|
||
|
void set_8478_type(bool is_HL);
|
||
|
|
||
|
virtual bool write(unsigned int addr, unsigned int val);
|
||
|
virtual bool read(unsigned int addr, unsigned int &val);
|
||
|
|
||
|
private:
|
||
|
FpgaParams fpgaParams;
|
||
|
std::shared_ptr<IRegsAccess> m_regsAccess;
|
||
|
};
|