rk3399_arm_lvds/capimage/FpgaComm.h

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;
};