// // Created by Nick on 2019/4/7. // #ifndef HGSCANSERVICE_FPGACOMM_H #define HGSCANSERVICE_FPGACOMM_H #include "serialib.h" #include #include #include #include "Gpio.h" #include "scanservices_utils.h" //#define HAS_UV #ifdef HAS_UV #define MAX_REGS 0x0e #else #define MAX_REGS 0x0d #endif typedef struct Frame_FPGA { unsigned int height:16; unsigned 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 reserved : 31; } CmdFpga; typedef struct STATUS_FPGA { unsigned int status : 1; //start : 1 , stop : 0 unsigned int reserved : 31; } StatusFpga; typedef union Ad_Gain { struct { unsigned short int gain_low8 : 8; unsigned short int gain_hight : 1; } gain_value; unsigned short int value; } AdGain; typedef union CIS_AD_Gain { struct { 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:写; } bits; int value; } CisAdGain; typedef struct CIS_LED_RF { union { struct { unsigned short int ledEnable : 1; unsigned short int fanMode : 2; unsigned short int jamEnable : 1; unsigned short int sample : 9; } led_sample; unsigned short int reserved; } user_define; unsigned short int ledR; }CisLedRF; typedef struct CIS_LED_R { union { struct { 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 ; } led_sample; unsigned short int reserved; } user_define; unsigned short int ledR; } CisLedR; typedef union CIS_LED_GB { struct { unsigned short int ledG; unsigned short int ledB; } bits; int value; } CisLedGB; typedef union CIS_LED_UV { struct { unsigned short int ledASide; unsigned short int ledBSide; } bits; int value; } CisLedUv; typedef union CIS_VSP { struct { unsigned int ASide_VSP:9; unsigned int BSide_VSP:9; unsigned int reserved : 14; } bits; int value; } CISVSP; 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; //0x0d unsigned int reversed;//0x0e unsigned int fpgaversion;//0x0f unsigned int ConFrameCount;//多帧计数 } params; int regs[17]; } FpgaParams; #define FAN_PORT 59 class FpgaComm { public: FpgaComm(); void reset(); void setRegs(int addr, int value); int getRegs(int addr); void setFrameHeight(int height); int getFrameHeight(); int getAutoFrameHeight(); void setFrameNum(int num); void enableLed(bool bEnable); void enableUV(bool enable); void capture(); void updateRegs(); void setAGain(int indexGain, int value); void getAGain(int indexGain, int &Avalue, int &Bvalue); void setBGain(int indexGain, int value); void getBGain(int indexGain, int &Avalue, int &Bvalue); void setAOffset(int indexOffset, int value); void getAOffset(int indexGain, int &Avalue, int &Bvalue); void setBOffset(int indexOffset, int value); void getBOffset(int indexGain, int &Avalue, int &Bvalue); 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 setFanMode(int mode); void setSp(int value); int getSp(); void setSample(int sampleFront,int sampleBack); void EnableTest(bool bTest); int IsTest(); void setColorMode(int mode); int getColorMode(); void setDpi(int dpi); int getDpi(); void setSample(int sample); int getSample(); int read(int addr); //20190626 YHP autoTrig function void setFrame_interval_min(int min); int getFrame_interval_min(); void setFrame_interval_max(int max); int getFrame_interval_max(); //void setDelayTime(int value); void setTrigMode(bool isArmMode); void update(); void enableJamCheck(bool b); void resetADC(); void setVsp(unsigned int Aside,unsigned int BSide); unsigned int getFrame_counter_val(); int getFrameNum(); void set_cis_type(bool isA3_CIS); private: const std::string com = "/dev/ttyS3"; const unsigned int bauds = 921600; unsigned char bufSend[7]; unsigned char bufRecv[5]; serialib m_serial; FpgaParams fpgaParams; bool isUVEnable = false; Gpio fanGpio; void updateRegs(int addr); void write(int addr, int data); }; #endif //HGSCANSERVICE_FPGACOMM_H