166 lines
4.6 KiB
C
166 lines
4.6 KiB
C
|
/*
|
||
|
* @Author: your name
|
||
|
* @Date: 2022-01-11 09:41:39
|
||
|
* @LastEditTime: 2022-11-18 14:09:29
|
||
|
* @LastEditors: Zhaozhonmin 1656963645@qq.com
|
||
|
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||
|
* @FilePath: \zynq_MSS\capimage\HCamDevice.h
|
||
|
*/
|
||
|
#pragma once
|
||
|
#include <string>
|
||
|
#include <linux/videodev2.h>
|
||
|
// #include "../cameraConfig.h"
|
||
|
//#include "../CameraParams.h"
|
||
|
#include <functional>
|
||
|
#include <memory>
|
||
|
#include <thread>
|
||
|
union CamZ_Reg_4
|
||
|
{
|
||
|
int value;
|
||
|
struct
|
||
|
{
|
||
|
unsigned int unuse_0 : 2;
|
||
|
unsigned int color_mode : 1;
|
||
|
unsigned int unuse_1 : 2;
|
||
|
unsigned int encode_divide : 3;
|
||
|
unsigned int encode_divide_mode : 1;
|
||
|
unsigned int unuse_2 : 5;
|
||
|
unsigned int en_adc_cfg : 1;
|
||
|
unsigned int clr_exp : 1;
|
||
|
unsigned int soft_reset : 1;
|
||
|
unsigned int en_pattern : 1;
|
||
|
unsigned int line_enable : 1; //不使用
|
||
|
unsigned int byte_sync : 1;
|
||
|
unsigned int adc_config_all : 1 ;
|
||
|
unsigned int adc_select : 5 ;
|
||
|
unsigned int test_pattern : 1;
|
||
|
unsigned int gpio1 : 1 ;
|
||
|
unsigned int gpio2 : 1 ;
|
||
|
unsigned int reserved : 3;
|
||
|
}params;
|
||
|
};
|
||
|
|
||
|
#define adcRegSize 20
|
||
|
#define REG_NUM 14
|
||
|
typedef std::function<void(uint32_t)> GetImgProcSize;
|
||
|
typedef std::function<void(uint32_t)> GetImgFormat;
|
||
|
typedef std::function<void(uint32_t)> GetCameraEvents;
|
||
|
typedef std::function<void(int)> ReLoadCorrecEvent;
|
||
|
//class Camconfig;
|
||
|
|
||
|
|
||
|
class HCamDevice
|
||
|
{
|
||
|
public:
|
||
|
HCamDevice();
|
||
|
|
||
|
~HCamDevice();
|
||
|
|
||
|
int open_video();
|
||
|
int close_video();
|
||
|
|
||
|
void HtCamStartVideoCapturing();
|
||
|
void HtCamStopVideoCapturing();
|
||
|
int HtCamWaitVideoCapture(int msTimeout);
|
||
|
int HtCamReadCaptureFrame(void **pbuf, int timeout);
|
||
|
int width() { return v4lWidth; }
|
||
|
int height() { return v4lHeight; }
|
||
|
|
||
|
uint32_t HtCamReadFpgaRegs(uint8_t reg_addr);
|
||
|
void HtCamWriteFpgaRegs(uint8_t reg_addr, uint32_t reg_value);
|
||
|
void HtCamChangeTriggerInAndEXt(int in_out);
|
||
|
|
||
|
void HtCamSetTriggerMode(int val);
|
||
|
int HtCamGetTriggerMode();
|
||
|
int HtCamGetColorMode();
|
||
|
|
||
|
uint32_t HtCamReadPsRegs(uint8_t reg_addr);
|
||
|
void HtCamWritePsRegs(uint8_t reg_addr, uint32_t reg_value);
|
||
|
void savePsReg();
|
||
|
|
||
|
void HtCamWriteAllADC();
|
||
|
void HtCamInitADCReg();
|
||
|
void HtCamWriteADCReg(uint8_t addr,uint8_t data);
|
||
|
void HtCamReadADCReg(uint8_t addr, uint8_t *data);
|
||
|
|
||
|
void set_get_imgSize_event(GetImgProcSize _getImgProcSize);
|
||
|
void set_get_imgFormat_event(GetImgFormat _getImgFormat);
|
||
|
void set_reload_correct_event(ReLoadCorrecEvent _reLoadCorrectEvent);
|
||
|
|
||
|
void set_get_CameraEvents_event(GetCameraEvents _getCameraEvents);
|
||
|
void HtCamOverClockClear(); // 清除切换超频标志位
|
||
|
|
||
|
uint8_t getADCReg(int addr);
|
||
|
void setADCReg(int addr , uint8_t value);
|
||
|
void saveADCReg();
|
||
|
|
||
|
// void setConfig(Camconfig* _config){config = _config;}
|
||
|
void HtCamChangeMonoStartSample(int start_sample);
|
||
|
private:
|
||
|
int init_fd();
|
||
|
int init_sample();
|
||
|
int init_capture();
|
||
|
int init_video_buffer();
|
||
|
int init_dev();
|
||
|
void init_ps_regs();
|
||
|
void HtCamSwitchSampleModes(unsigned char mode);
|
||
|
void HtCamChangeExposureValue(unsigned int value);
|
||
|
void HtCamExitVideoCapturing();
|
||
|
void HtCamResizeBuffer(int width, int height, int number);
|
||
|
void HtCamChangeAdjustSpTime(uint32_t sp_time_gap, uint32_t sp_time_rw);
|
||
|
void HtCamChangeAdjustPhase(uint16_t times, uint8_t dir);
|
||
|
int HtCamStartSampling();
|
||
|
int HtCamStopSampling();
|
||
|
void HtCamChangeDpi(int dpi);
|
||
|
bool HtCamPsDpiChange(int dpi);
|
||
|
|
||
|
void HtCamImageProcessChange();
|
||
|
|
||
|
int HtCamEventWorkThread(void);
|
||
|
|
||
|
struct captureBuffer
|
||
|
{
|
||
|
void *start;
|
||
|
int dmabuf_fd;
|
||
|
uint32_t length;
|
||
|
};
|
||
|
|
||
|
const unsigned int phyBaseAddr = 0x40010000;
|
||
|
const unsigned int AddrMapSize = 0x100;
|
||
|
unsigned int *virBaseAddr;
|
||
|
|
||
|
int memfd;
|
||
|
std::string subDeviceName;
|
||
|
int subDevicefd;
|
||
|
|
||
|
std::string videoDevName = "/dev/video0";
|
||
|
int videofd;
|
||
|
unsigned int v4lWidth;
|
||
|
unsigned int v4lHeight;
|
||
|
unsigned int v4lBufferCount;
|
||
|
int nplanes;
|
||
|
int drivertype;
|
||
|
enum v4l2_buf_type v4l2buftype;
|
||
|
enum v4l2_memory v4l2memtype;
|
||
|
struct captureBuffer *captureBufers;
|
||
|
int lastSucceedBufferIndex;
|
||
|
|
||
|
uint32_t pPsReg[ REG_NUM + 1] = {0};
|
||
|
uint8_t pADCReg[adcRegSize];
|
||
|
|
||
|
GetImgProcSize getImgProcSize;
|
||
|
GetImgFormat getImgFormat;
|
||
|
GetCameraEvents getCameraEvents = nullptr;
|
||
|
ReLoadCorrecEvent reLoadCorrectEvent = nullptr;
|
||
|
|
||
|
std::shared_ptr<std::thread> event_thread = nullptr;
|
||
|
//Camconfig* config = nullptr;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|