调整寄存器读写
This commit is contained in:
parent
cd5d017147
commit
70354ab6cc
603
HCamDevice.cpp
603
HCamDevice.cpp
|
@ -10,10 +10,10 @@
|
|||
#include <sys/mman.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <string.h>
|
||||
#include "../cameraConfig.h"
|
||||
#include "../CameraParams.h"
|
||||
//#include "../cameraConfig.h"
|
||||
//#include "../CameraParams.h"
|
||||
#include <linux/v4l2-subdev.h>
|
||||
#include "camconfig.h"
|
||||
//#include "camconfig.h"
|
||||
#include <iostream>
|
||||
#include <errno.h>
|
||||
|
||||
|
@ -78,9 +78,9 @@ HCamDevice::HCamDevice()
|
|||
subDeviceName = "/dev/v4l-subdev0";
|
||||
subDevicefd = 0;
|
||||
videofd = 0;
|
||||
v4lWidth = CamProperty::_V4LWIDTH;
|
||||
v4lHeight = CamProperty::_V4LHEIGHT;
|
||||
v4lBufferCount = CamProperty::_V4LBUFFERCOUNT;
|
||||
v4lWidth = 3100;
|
||||
v4lHeight = 3100;
|
||||
v4lBufferCount = 3;
|
||||
v4l2buftype = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
nplanes = 1; // only use one plane
|
||||
drivertype = V4L2_CAP_VIDEO_CAPTURE_MPLANE;
|
||||
|
@ -100,8 +100,9 @@ HCamDevice::HCamDevice()
|
|||
this->event_thread.reset(new std::thread(&HCamDevice::HtCamEventWorkThread, this));
|
||||
}
|
||||
|
||||
int HCamDevice::open_video()
|
||||
int HCamDevice::open_video(int width,int height)
|
||||
{
|
||||
int fd = 0;
|
||||
if ((fd = open(videoDevName.c_str(), O_RDWR, 0)) == -1)
|
||||
{
|
||||
camera_dbg("open video fial\n");
|
||||
|
@ -109,7 +110,8 @@ int HCamDevice::open_video()
|
|||
}
|
||||
videofd = fd;
|
||||
camera_dbg("open video succeed\n");
|
||||
|
||||
|
||||
set_size(width,height);
|
||||
return 0;
|
||||
}
|
||||
int HCamDevice::close_video()
|
||||
|
@ -169,79 +171,79 @@ int HCamDevice::HtCamEventWorkThread(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamStartVideoCapturing()
|
||||
{
|
||||
uint8_t n_buffers;
|
||||
struct v4l2_buffer buf;
|
||||
if (((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status)
|
||||
{
|
||||
printf("Run the scan multiple times %d\n", ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status);
|
||||
return ;
|
||||
}
|
||||
for (n_buffers = 0; n_buffers < v4lBufferCount; n_buffers++)
|
||||
{
|
||||
memset(&buf, 0, sizeof(buf));
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
else
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
buf.index = n_buffers;
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
{
|
||||
buf.length = nplanes;
|
||||
buf.m.planes = (struct v4l2_plane *)calloc(buf.length, sizeof(struct v4l2_plane));
|
||||
}
|
||||
// void HCamDevice::HtCamStartVideoCapturing()
|
||||
// {
|
||||
// uint8_t n_buffers;
|
||||
// struct v4l2_buffer buf;
|
||||
// if (((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status)
|
||||
// {
|
||||
// printf("Run the scan multiple times %d\n", ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status);
|
||||
// return ;
|
||||
// }
|
||||
// for (n_buffers = 0; n_buffers < v4lBufferCount; n_buffers++)
|
||||
// {
|
||||
// memset(&buf, 0, sizeof(buf));
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
// else
|
||||
// buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
// buf.memory = V4L2_MEMORY_MMAP;
|
||||
// buf.index = n_buffers;
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// {
|
||||
// buf.length = nplanes;
|
||||
// buf.m.planes = (struct v4l2_plane *)calloc(buf.length, sizeof(struct v4l2_plane));
|
||||
// }
|
||||
|
||||
if (ioctl(videofd, VIDIOC_QBUF, &buf) == -1)
|
||||
{
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
camera_err(" VIDIOC_QBUF error\n");
|
||||
// if (ioctl(videofd, VIDIOC_QBUF, &buf) == -1)
|
||||
// {
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
// camera_err(" VIDIOC_QBUF error\n");
|
||||
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
free(buf.m.planes);
|
||||
free(captureBufers);
|
||||
close(videofd);
|
||||
return;
|
||||
}
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
free(buf.m.planes);
|
||||
}
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// free(buf.m.planes);
|
||||
// free(captureBufers);
|
||||
// close(videofd);
|
||||
// return;
|
||||
// }
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// free(buf.m.planes);
|
||||
// }
|
||||
|
||||
enum v4l2_buf_type type;
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
else
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (ioctl(videofd, VIDIOC_STREAMON, &type) == -1)
|
||||
{
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
camera_err(" VIDIOC_STREAMON error! %s\n", strerror(errno));
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 1;
|
||||
camera_print(" stream on succeed\n");
|
||||
}
|
||||
return;
|
||||
}
|
||||
// enum v4l2_buf_type type;
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
// else
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
// if (ioctl(videofd, VIDIOC_STREAMON, &type) == -1)
|
||||
// {
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
// camera_err(" VIDIOC_STREAMON error! %s\n", strerror(errno));
|
||||
// return;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 1;
|
||||
// camera_print(" stream on succeed\n");
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
|
||||
void HCamDevice::HtCamStopVideoCapturing()
|
||||
{
|
||||
enum v4l2_buf_type type;
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
else
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (ioctl(videofd, VIDIOC_STREAMOFF, &type) == -1)
|
||||
camera_err(" VIDIOC_STREAMOFF error! %s\n", strerror(errno));
|
||||
}
|
||||
// void HCamDevice::HtCamStopVideoCapturing()
|
||||
// {
|
||||
// enum v4l2_buf_type type;
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
// if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
|
||||
// else
|
||||
// type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
// if (ioctl(videofd, VIDIOC_STREAMOFF, &type) == -1)
|
||||
// camera_err(" VIDIOC_STREAMOFF error! %s\n", strerror(errno));
|
||||
// }
|
||||
|
||||
void HCamDevice::HtCamExitVideoCapturing()
|
||||
{
|
||||
HtCamStopVideoCapturing();
|
||||
//HtCamStopVideoCapturing();
|
||||
|
||||
uint8_t i;
|
||||
for (i = 0; i < v4lBufferCount; ++i)
|
||||
|
@ -381,6 +383,13 @@ int HCamDevice::HtCamStopSampling()
|
|||
return 0;
|
||||
}
|
||||
|
||||
int HCamDevice::set_size(int width, int height)
|
||||
{
|
||||
v4lWidth = width;
|
||||
v4lHeight = height;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HCamDevice::init_fd()
|
||||
{
|
||||
int fd;
|
||||
|
@ -607,15 +616,15 @@ int HCamDevice::init_dev()
|
|||
HtCamSwitchSampleModes(0);
|
||||
// HtCamChangeExposureValue(500);
|
||||
// start sample
|
||||
camera_dbg("ST SP : %d , VSNP : %d \r\n" ,CamProperty::ST_SP ,CamProperty::VSNP);
|
||||
if(CamProperty::ST_SP != 0 || CamProperty::ST_SP_VSNP != 0)
|
||||
HtCamChangeMonoStartSample(CamProperty::ST_SP * 3 + CamProperty::ST_SP_VSNP);
|
||||
if(CamProperty::VSNP != 0)
|
||||
{
|
||||
unsigned int value = HtCamReadFpgaRegs(16);
|
||||
value = value & 0xffffff00;
|
||||
HtCamWriteFpgaRegs(16, CamProperty::VSNP | value);
|
||||
}
|
||||
// camera_dbg("ST SP : %d , VSNP : %d \r\n" ,CamProperty::ST_SP ,CamProperty::VSNP);
|
||||
// if(CamProperty::ST_SP != 0 || CamProperty::ST_SP_VSNP != 0)
|
||||
// HtCamChangeMonoStartSample(CamProperty::ST_SP * 3 + CamProperty::ST_SP_VSNP);
|
||||
// if(CamProperty::VSNP != 0)
|
||||
// {
|
||||
// unsigned int value = HtCamReadFpgaRegs(16);
|
||||
// value = value & 0xffffff00;
|
||||
// HtCamWriteFpgaRegs(16, CamProperty::VSNP | value);
|
||||
// }
|
||||
// ex_trigger = 0, int_trigger = 1
|
||||
HtCamChangeTriggerInAndEXt(1);
|
||||
|
||||
|
@ -718,18 +727,18 @@ void HCamDevice::setADCReg(int addr , uint8_t value)
|
|||
|
||||
void HCamDevice::saveADCReg()
|
||||
{
|
||||
CamADCConfig adcConfig(CamProperty::_ADCPATH);
|
||||
int size = adcConfig.getSize();
|
||||
size = adcRegSize < size ? adcRegSize : size ;
|
||||
std::vector<int> adcValue(size) ;
|
||||
for(int index =0 ; index < size ; index++)
|
||||
{
|
||||
adcValue[index] = pADCReg[index];
|
||||
}
|
||||
if(!adcConfig.saveValue(adcValue))
|
||||
{
|
||||
std::cout << "Save adc Value Error!" << std::endl ;
|
||||
}
|
||||
// CamADCConfig adcConfig(CamProperty::_ADCPATH);
|
||||
// int size = adcConfig.getSize();
|
||||
// size = adcRegSize < size ? adcRegSize : size ;
|
||||
// std::vector<int> adcValue(size) ;
|
||||
// for(int index =0 ; index < size ; index++)
|
||||
// {
|
||||
// adcValue[index] = pADCReg[index];
|
||||
// }
|
||||
// if(!adcConfig.saveValue(adcValue))
|
||||
// {
|
||||
// std::cout << "Save adc Value Error!" << std::endl ;
|
||||
// }
|
||||
}
|
||||
|
||||
uint32_t HCamDevice::HtCamReadFpgaRegs(uint8_t reg_addr)
|
||||
|
@ -751,18 +760,18 @@ void HCamDevice::HtCamWriteFpgaRegs(uint8_t reg_addr, uint32_t reg_value)
|
|||
// fp = fopen("/home/root/logW", "a+");
|
||||
// fprintf(fp , "W reg %d , value : %d\r\n" ,reg_addr , reg_value );
|
||||
// fclose(fp);
|
||||
switch (reg_addr)
|
||||
{
|
||||
case 0x04:
|
||||
reg4 = HtCamReadFpgaRegs(0x04);
|
||||
if (((CamZ_Reg_4 *)®4)->color_mode != ((CamZ_Reg_4 *)®_value)->color_mode)
|
||||
{
|
||||
getImgFormat(((CamZ_Reg_4 *)®_value)->color_mode);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// switch (reg_addr)
|
||||
// {
|
||||
// case 0x04:
|
||||
// reg4 = HtCamReadFpgaRegs(0x04);
|
||||
// if (((CamZ_Reg_4 *)®4)->color_mode != ((CamZ_Reg_4 *)®_value)->color_mode)
|
||||
// {
|
||||
// getImgFormat(((CamZ_Reg_4 *)®_value)->color_mode);
|
||||
// }
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
uint32_t *pCamCtrlReg = virBaseAddr;
|
||||
pCamCtrlReg[reg_addr] = reg_value;
|
||||
}
|
||||
|
@ -807,7 +816,7 @@ void HCamDevice::HtCamSetTriggerMode(int val)
|
|||
{
|
||||
uint32_t *pCamCtrlReg = virBaseAddr;
|
||||
if (val)
|
||||
pCamCtrlReg[10] |= 0x00000040;
|
||||
pCamCtrlReg[10] |= 0x00000040; //40是16进制 转换为二进制0100 0000 刚好就是第十个寄存器的第七位
|
||||
else
|
||||
pCamCtrlReg[10] &= ~(0x00000040);
|
||||
}
|
||||
|
@ -824,51 +833,51 @@ int HCamDevice::HtCamGetColorMode()
|
|||
return ((pCamCtrlReg[4] & (0x00000004)) >> 2);
|
||||
}
|
||||
|
||||
PERJECT_VERSION getByName(std::string name)
|
||||
{
|
||||
if(name == "PYTHONZ_1200")
|
||||
return PERJECT_VERSION::PythonZ1200 ;
|
||||
if(name == "PYTHONZ_1800")
|
||||
return PERJECT_VERSION::PythonZ1800 ;
|
||||
if(name == "PYTHONZ_WSS")
|
||||
return PERJECT_VERSION::PythonZWSS;
|
||||
if(name == "PYTHONZ_1206" )
|
||||
return PERJECT_VERSION::PythonZ1206;
|
||||
if(name == "PYTHONZ_1602" )
|
||||
return PERJECT_VERSION::PythonZ1602;
|
||||
return PERJECT_VERSION::PythonZ1200; //return a default var
|
||||
}
|
||||
// PERJECT_VERSION getByName(std::string name)
|
||||
// {
|
||||
// if(name == "PYTHONZ_1200")
|
||||
// return PERJECT_VERSION::PythonZ1200 ;
|
||||
// if(name == "PYTHONZ_1800")
|
||||
// return PERJECT_VERSION::PythonZ1800 ;
|
||||
// if(name == "PYTHONZ_WSS")
|
||||
// return PERJECT_VERSION::PythonZWSS;
|
||||
// if(name == "PYTHONZ_1206" )
|
||||
// return PERJECT_VERSION::PythonZ1206;
|
||||
// if(name == "PYTHONZ_1602" )
|
||||
// return PERJECT_VERSION::PythonZ1602;
|
||||
// return PERJECT_VERSION::PythonZ1200; //return a default var
|
||||
// }
|
||||
|
||||
void HCamDevice::init_ps_regs()
|
||||
{
|
||||
CamPSConfig psConfig(CONFIG_PATH);
|
||||
memset(pPsReg, 0, sizeof(pPsReg));
|
||||
pPsReg[PS_VERSION] = VERSION;
|
||||
pPsReg[BUF_WIDTH] = v4lWidth;
|
||||
pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT;
|
||||
pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH;
|
||||
std::cout << "v4lBufferCount " << v4lBufferCount << std::endl;
|
||||
pPsReg[BUF_NUM] = v4lBufferCount;
|
||||
pPsReg[CAM_STATUS] = psConfig.getReg(CAM_STATUS);
|
||||
CAM_INFO_REG *camInfo = (CAM_INFO_REG *)&pPsReg[CAM_INFO];
|
||||
camInfo->CIS_Width = pPsReg[IMG_WIDTH] / CamProperty::_CIS_NUM;
|
||||
camInfo->CIS_count = CamProperty::_CIS_NUM;
|
||||
camInfo->ProjectVersion = getByName(CamProperty::_CAM_TYPE);
|
||||
camInfo->vidio_status = 0;
|
||||
pPsReg[RLS_CHECK_CODE] = Alpha;
|
||||
pPsReg[DATA_STATUS] = 0;
|
||||
//CamPSConfig psConfig(CONFIG_PATH);
|
||||
// memset(pPsReg, 0, sizeof(pPsReg));
|
||||
// //pPsReg[PS_VERSION] = 100000;
|
||||
// pPsReg[BUF_WIDTH] = v4lWidth;
|
||||
// pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT;
|
||||
// pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH;
|
||||
// std::cout << "v4lBufferCount " << v4lBufferCount << std::endl;
|
||||
// pPsReg[BUF_NUM] = v4lBufferCount;
|
||||
// pPsReg[CAM_STATUS] = psConfig.getReg(CAM_STATUS);
|
||||
// CAM_INFO_REG *camInfo = (CAM_INFO_REG *)&pPsReg[CAM_INFO];
|
||||
// camInfo->CIS_Width = pPsReg[IMG_WIDTH] / CamProperty::_CIS_NUM;
|
||||
// camInfo->CIS_count = CamProperty::_CIS_NUM;
|
||||
// camInfo->ProjectVersion = getByName(CamProperty::_CAM_TYPE);
|
||||
// camInfo->vidio_status = 0;
|
||||
// pPsReg[RLS_CHECK_CODE] = Alpha;
|
||||
// pPsReg[DATA_STATUS] = 0;
|
||||
// pPsReg[HEARTBAT] = 0x80000001;
|
||||
|
||||
// CamPSConfig psConfig(CONFIG_PATH);
|
||||
// pPsReg[PS_VERSION] = psConfig.getReg(PS_VERSION);
|
||||
// pPsReg[CAM_STATUS] = psConfig.getReg(CAM_STATUS);
|
||||
std::cout << "pPsReg[BUF_NUM] " << pPsReg[BUF_NUM] << std::endl;
|
||||
std::cout << "CAM_STATUS " << pPsReg[CAM_STATUS] << std::endl;
|
||||
// std::cout << "pPsReg[BUF_NUM] " << pPsReg[BUF_NUM] << std::endl;
|
||||
// std::cout << "CAM_STATUS " << pPsReg[CAM_STATUS] << std::endl;
|
||||
|
||||
// pPsReg[MOTOR_SPEED] = psConfig.getReg(MOTOR_SPEED);
|
||||
// pPsReg[CAM_DPI] = psConfig.getReg(CAM_DPI);
|
||||
// pPsReg[RLS_CHECK_CODE] = psConfig.getReg(RLS_CHECK_CODE);
|
||||
pPsReg[HEARTBAT] = psConfig.getReg(HEARTBAT);
|
||||
//pPsReg[HEARTBAT] = psConfig.getReg(HEARTBAT);
|
||||
}
|
||||
|
||||
uint32_t HCamDevice::HtCamReadPsRegs(uint8_t reg_addr)
|
||||
|
@ -882,25 +891,25 @@ void HCamDevice::HtCamWritePsRegs(uint8_t reg_addr, uint32_t reg_value)
|
|||
{
|
||||
printf("reg addr %d\r\n" ,reg_addr );
|
||||
std::cout << "Write Camera PS reg addr " << reg_addr << "value " << reg_value << std::endl;
|
||||
if (reg_addr >= PSReg::REG_NUM)
|
||||
if (reg_addr >= REG_NUM)
|
||||
return;
|
||||
pPsReg[reg_addr] = reg_value;
|
||||
switch (reg_addr)
|
||||
{
|
||||
case BUF_WIDTH:
|
||||
case BUF_HEIGHT:
|
||||
case BUF_NUM:
|
||||
HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT], pPsReg[BUF_NUM]);
|
||||
break;
|
||||
case CAM_DPI:
|
||||
HtCamPsDpiChange(reg_value);
|
||||
break;
|
||||
case CAM_STATUS:
|
||||
{
|
||||
HtCamImageProcessChange();
|
||||
if (getImgProcSize)
|
||||
getImgProcSize(reg_value);
|
||||
}
|
||||
// case BUF_WIDTH:
|
||||
// case BUF_HEIGHT:
|
||||
// case BUF_NUM:
|
||||
// HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT], pPsReg[BUF_NUM]);
|
||||
// break;
|
||||
// case CAM_DPI:
|
||||
// HtCamPsDpiChange(reg_value);
|
||||
// break;
|
||||
// case CAM_STATUS:
|
||||
// {
|
||||
// // HtCamImageProcessChange();
|
||||
// // if (getImgProcSize)
|
||||
// // getImgProcSize(reg_value);
|
||||
// }
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -909,14 +918,14 @@ void HCamDevice::HtCamWritePsRegs(uint8_t reg_addr, uint32_t reg_value)
|
|||
|
||||
void HCamDevice::savePsReg()
|
||||
{
|
||||
CamPSConfig psConfig(CONFIG_PATH);
|
||||
psConfig.setReg(PS_VERSION , pPsReg[PS_VERSION] );
|
||||
psConfig.setReg(CAM_STATUS , pPsReg[CAM_STATUS] );
|
||||
psConfig.setReg(MOTOR_SPEED , pPsReg[MOTOR_SPEED]);
|
||||
psConfig.setReg(CAM_DPI , pPsReg[CAM_DPI] );
|
||||
psConfig.setReg(HEARTBAT , pPsReg[HEARTBAT] );
|
||||
psConfig.setReg(RLS_CHECK_CODE, pPsReg[RLS_CHECK_CODE]);
|
||||
psConfig.save();
|
||||
// CamPSConfig psConfig(CONFIG_PATH);
|
||||
// psConfig.setReg(PS_VERSION , pPsReg[PS_VERSION] );
|
||||
// psConfig.setReg(CAM_STATUS , pPsReg[CAM_STATUS] );
|
||||
// psConfig.setReg(MOTOR_SPEED , pPsReg[MOTOR_SPEED]);
|
||||
// psConfig.setReg(CAM_DPI , pPsReg[CAM_DPI] );
|
||||
// psConfig.setReg(HEARTBAT , pPsReg[HEARTBAT] );
|
||||
// psConfig.setReg(RLS_CHECK_CODE, pPsReg[RLS_CHECK_CODE]);
|
||||
// psConfig.save();
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamWriteAllADC()
|
||||
|
@ -943,14 +952,14 @@ void HCamDevice::HtCamInitADCReg()
|
|||
#endif
|
||||
|
||||
#ifdef ADC_82V48
|
||||
CamADCConfig adcConfig(CamProperty::_ADCPATH);
|
||||
int size = adcConfig.getSize();
|
||||
std::cout << " read ADC size : " << size << std::endl ;
|
||||
if (size > 0)
|
||||
//CamADCConfig adcConfig(CamProperty::_ADCPATH);
|
||||
//int size = adcConfig.getSize();
|
||||
//std::cout << " read ADC size : " << size << std::endl ;
|
||||
//if (size > 0)
|
||||
{
|
||||
for (int index = 0; index < size; index++)
|
||||
//for (int index = 0; index < size; index++)
|
||||
{
|
||||
pADCReg[index] = adcConfig.getReg(index);
|
||||
//pADCReg[index] = adcConfig.getReg(index);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -958,76 +967,76 @@ void HCamDevice::HtCamInitADCReg()
|
|||
pADCReg[0] = 0x07;
|
||||
pADCReg[1] = 0x50;
|
||||
|
||||
/* 1200 cis */
|
||||
if (CamProperty::_CAM_TYPE == "PYTHONZ_1200")
|
||||
{
|
||||
/* gain */
|
||||
pADCReg[2] = 0x90;
|
||||
pADCReg[3] = 0x00;
|
||||
pADCReg[4] = 0x90;
|
||||
pADCReg[5] = 0x00;
|
||||
pADCReg[6] = 0x90;
|
||||
pADCReg[7] = 0x00;
|
||||
pADCReg[8] = 0x90;
|
||||
pADCReg[9] = 0x00;
|
||||
pADCReg[0xa] = 0x90;
|
||||
pADCReg[0xb] = 0x00;
|
||||
pADCReg[0xc] = 0x90;
|
||||
pADCReg[0xd] = 0x00;
|
||||
/* offset */
|
||||
pADCReg[0xe] = 0x58;
|
||||
pADCReg[0xf] = 0x5b;
|
||||
pADCReg[0x10] = 0x55;
|
||||
pADCReg[0x11] = 0x55;
|
||||
pADCReg[0x12] = 0x50;
|
||||
pADCReg[0x13] = 0x55;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* offset */
|
||||
if (CamProperty::_CAM_TYPE == "PYTHONZ_WSS")
|
||||
{
|
||||
pADCReg[2] = 0x55;
|
||||
pADCReg[3] = 0x00;
|
||||
pADCReg[4] = 0x4a;
|
||||
pADCReg[5] = 0x00;
|
||||
pADCReg[6] = 0x50;
|
||||
pADCReg[7] = 0x00;
|
||||
pADCReg[8] = 0x4e;
|
||||
pADCReg[9] = 0x00;
|
||||
pADCReg[0xa] = 0x40;
|
||||
pADCReg[0xb] = 0x00;
|
||||
pADCReg[0xc] = 0x50;
|
||||
pADCReg[0xd] = 0x00;
|
||||
pADCReg[0xe] = 0x65;
|
||||
pADCReg[0xf] = 0x65;
|
||||
pADCReg[0x10] = 0x65;
|
||||
pADCReg[0x11] = 0x65;
|
||||
pADCReg[0x12] = 0x65;
|
||||
pADCReg[0x13] = 0x65;
|
||||
}
|
||||
else
|
||||
{
|
||||
pADCReg[2] = 0xA0;
|
||||
pADCReg[3] = 0x00;
|
||||
pADCReg[4] = 0xA0;
|
||||
pADCReg[5] = 0x00;
|
||||
pADCReg[6] = 0xA0;
|
||||
pADCReg[7] = 0x00;
|
||||
pADCReg[8] = 0xA0;
|
||||
pADCReg[9] = 0x00;
|
||||
pADCReg[0xa] = 0xA0;
|
||||
pADCReg[0xb] = 0x00;
|
||||
pADCReg[0xc] = 0xA0;
|
||||
pADCReg[0xd] = 0x00;
|
||||
pADCReg[0xe] = 0x20;
|
||||
pADCReg[0xf] = 0x20;
|
||||
pADCReg[0x10] = 0x20;
|
||||
pADCReg[0x11] = 0x20;
|
||||
pADCReg[0x12] = 0x20;
|
||||
pADCReg[0x13] = 0x20;
|
||||
}
|
||||
}
|
||||
// /* 1200 cis */
|
||||
// if (CamProperty::_CAM_TYPE == "PYTHONZ_1200")
|
||||
// {
|
||||
// /* gain */
|
||||
// pADCReg[2] = 0x90;
|
||||
// pADCReg[3] = 0x00;
|
||||
// pADCReg[4] = 0x90;
|
||||
// pADCReg[5] = 0x00;
|
||||
// pADCReg[6] = 0x90;
|
||||
// pADCReg[7] = 0x00;
|
||||
// pADCReg[8] = 0x90;
|
||||
// pADCReg[9] = 0x00;
|
||||
// pADCReg[0xa] = 0x90;
|
||||
// pADCReg[0xb] = 0x00;
|
||||
// pADCReg[0xc] = 0x90;
|
||||
// pADCReg[0xd] = 0x00;
|
||||
// /* offset */
|
||||
// pADCReg[0xe] = 0x58;
|
||||
// pADCReg[0xf] = 0x5b;
|
||||
// pADCReg[0x10] = 0x55;
|
||||
// pADCReg[0x11] = 0x55;
|
||||
// pADCReg[0x12] = 0x50;
|
||||
// pADCReg[0x13] = 0x55;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// /* offset */
|
||||
// if (CamProperty::_CAM_TYPE == "PYTHONZ_WSS")
|
||||
// {
|
||||
// pADCReg[2] = 0x55;
|
||||
// pADCReg[3] = 0x00;
|
||||
// pADCReg[4] = 0x4a;
|
||||
// pADCReg[5] = 0x00;
|
||||
// pADCReg[6] = 0x50;
|
||||
// pADCReg[7] = 0x00;
|
||||
// pADCReg[8] = 0x4e;
|
||||
// pADCReg[9] = 0x00;
|
||||
// pADCReg[0xa] = 0x40;
|
||||
// pADCReg[0xb] = 0x00;
|
||||
// pADCReg[0xc] = 0x50;
|
||||
// pADCReg[0xd] = 0x00;
|
||||
// pADCReg[0xe] = 0x65;
|
||||
// pADCReg[0xf] = 0x65;
|
||||
// pADCReg[0x10] = 0x65;
|
||||
// pADCReg[0x11] = 0x65;
|
||||
// pADCReg[0x12] = 0x65;
|
||||
// pADCReg[0x13] = 0x65;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// pADCReg[2] = 0xA0;
|
||||
// pADCReg[3] = 0x00;
|
||||
// pADCReg[4] = 0xA0;
|
||||
// pADCReg[5] = 0x00;
|
||||
// pADCReg[6] = 0xA0;
|
||||
// pADCReg[7] = 0x00;
|
||||
// pADCReg[8] = 0xA0;
|
||||
// pADCReg[9] = 0x00;
|
||||
// pADCReg[0xa] = 0xA0;
|
||||
// pADCReg[0xb] = 0x00;
|
||||
// pADCReg[0xc] = 0xA0;
|
||||
// pADCReg[0xd] = 0x00;
|
||||
// pADCReg[0xe] = 0x20;
|
||||
// pADCReg[0xf] = 0x20;
|
||||
// pADCReg[0x10] = 0x20;
|
||||
// pADCReg[0x11] = 0x20;
|
||||
// pADCReg[0x12] = 0x20;
|
||||
// pADCReg[0x13] = 0x20;
|
||||
// }
|
||||
// }
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1066,69 +1075,69 @@ void HCamDevice::set_reload_correct_event(ReLoadCorrecEvent _reLoadCorrectEvent)
|
|||
this->reLoadCorrectEvent = _reLoadCorrectEvent;
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamImageProcessChange()
|
||||
{
|
||||
CAM_STATUS_REG* status = (CAM_STATUS_REG*)&pPsReg[CAM_STATUS];
|
||||
if(status->doImageProcess)
|
||||
{
|
||||
HtCamPsDpiChange(pPsReg[CAM_DPI]);
|
||||
}else
|
||||
{
|
||||
pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH];
|
||||
}
|
||||
}
|
||||
// void HCamDevice::HtCamImageProcessChange()
|
||||
// {
|
||||
// CAM_STATUS_REG* status = (CAM_STATUS_REG*)&pPsReg[CAM_STATUS];
|
||||
// if(status->doImageProcess)
|
||||
// {
|
||||
// HtCamPsDpiChange(pPsReg[CAM_DPI]);
|
||||
// }else
|
||||
// {
|
||||
// pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH];
|
||||
// }
|
||||
// }
|
||||
|
||||
// DPI切换-暂只适配1200/1800
|
||||
bool HCamDevice::HtCamPsDpiChange(int dpi)
|
||||
{
|
||||
std::cout << "DPI Change for " << dpi <<std::endl;
|
||||
for (auto i = CamProperty::_DPI_WIDTH.begin(); i != CamProperty::_DPI_WIDTH.end(); i++)
|
||||
{
|
||||
if (dpi == i->first)
|
||||
{
|
||||
CamProperty::_N_DPI = dpi;
|
||||
CamProperty::_IMG_BUF_WIDTH = i->second;
|
||||
// bool HCamDevice::HtCamPsDpiChange(int dpi)
|
||||
// {
|
||||
// std::cout << "DPI Change for " << dpi <<std::endl;
|
||||
// for (auto i = CamProperty::_DPI_WIDTH.begin(); i != CamProperty::_DPI_WIDTH.end(); i++)
|
||||
// {
|
||||
// if (dpi == i->first)
|
||||
// {
|
||||
// CamProperty::_N_DPI = dpi;
|
||||
// CamProperty::_IMG_BUF_WIDTH = i->second;
|
||||
|
||||
|
||||
pPsReg[BUF_WIDTH] = CamProperty::_DPI_V4LWIDTH[dpi];
|
||||
// pPsReg[BUF_WIDTH] = CamProperty::_DPI_V4LWIDTH[dpi];
|
||||
|
||||
if (dpi > 300)
|
||||
{
|
||||
HtCamChangeDpi(0);
|
||||
pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT/2;
|
||||
}
|
||||
else
|
||||
{
|
||||
HtCamChangeDpi(1);
|
||||
pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT;
|
||||
}
|
||||
std::cout << "image process " << ((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess << std::endl ;
|
||||
if(((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess)
|
||||
pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH ;
|
||||
else
|
||||
pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH];
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->CIS_Width = pPsReg[IMG_WIDTH] / ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->CIS_count;
|
||||
// 更改数据缓存区大小
|
||||
// if (dpi > 300)
|
||||
// {
|
||||
// HtCamChangeDpi(0);
|
||||
// pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT/2;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// HtCamChangeDpi(1);
|
||||
// pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT;
|
||||
// }
|
||||
// std::cout << "image process " << ((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess << std::endl ;
|
||||
// if(((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess)
|
||||
// pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH ;
|
||||
// else
|
||||
// pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH];
|
||||
// ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->CIS_Width = pPsReg[IMG_WIDTH] / ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->CIS_count;
|
||||
// // 更改数据缓存区大小
|
||||
|
||||
std::cout << "LL " << v4lWidth << pPsReg[BUF_WIDTH] << v4lHeight << pPsReg[BUF_HEIGHT] << v4lBufferCount << pPsReg[BUF_NUM] << std::endl ;
|
||||
if(v4lWidth != pPsReg[BUF_WIDTH] || v4lHeight != pPsReg[BUF_HEIGHT] || v4lBufferCount != pPsReg[BUF_NUM])
|
||||
{
|
||||
HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT] , pPsReg[BUF_NUM]);
|
||||
camera_print(" fmt.fmt.pix.width = %d\n", v4lWidth);
|
||||
camera_print(" fmt.fmt.pix.height = %d\n", v4lHeight);
|
||||
camera_print(" fmt.fmt.pix.field = %d\n", pPsReg[BUF_NUM]);
|
||||
if(reLoadCorrectEvent)
|
||||
reLoadCorrectEvent(CamProperty::_IMG_BUF_WIDTH);
|
||||
}
|
||||
if(config != nullptr)
|
||||
config->saveConfig();
|
||||
// Camconfig h_config;
|
||||
// h_config.saveConfig();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// std::cout << "LL " << v4lWidth << pPsReg[BUF_WIDTH] << v4lHeight << pPsReg[BUF_HEIGHT] << v4lBufferCount << pPsReg[BUF_NUM] << std::endl ;
|
||||
// if(v4lWidth != pPsReg[BUF_WIDTH] || v4lHeight != pPsReg[BUF_HEIGHT] || v4lBufferCount != pPsReg[BUF_NUM])
|
||||
// {
|
||||
// HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT] , pPsReg[BUF_NUM]);
|
||||
// camera_print(" fmt.fmt.pix.width = %d\n", v4lWidth);
|
||||
// camera_print(" fmt.fmt.pix.height = %d\n", v4lHeight);
|
||||
// camera_print(" fmt.fmt.pix.field = %d\n", pPsReg[BUF_NUM]);
|
||||
// if(reLoadCorrectEvent)
|
||||
// reLoadCorrectEvent(CamProperty::_IMG_BUF_WIDTH);
|
||||
// }
|
||||
// if(config != nullptr)
|
||||
// config->saveConfig();
|
||||
// // Camconfig h_config;
|
||||
// // h_config.saveConfig();
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
|
||||
void HCamDevice::HtCamOverClockClear()
|
||||
{
|
||||
|
|
25
HCamDevice.h
25
HCamDevice.h
|
@ -40,6 +40,20 @@ union CamZ_Reg_4
|
|||
}params;
|
||||
};
|
||||
|
||||
union CAM_INFO_REG
|
||||
{
|
||||
int value = 0;
|
||||
struct
|
||||
{
|
||||
unsigned int ProjectVersion : 6; //所属项目版本
|
||||
unsigned int cam_run_status : 1; //相机扫描状态
|
||||
unsigned int vidio_status : 1; // v4l状态
|
||||
unsigned int CIS_count : 8; // CIS计数
|
||||
unsigned int CIS_Width : 16;
|
||||
/* data */
|
||||
};
|
||||
};
|
||||
|
||||
#define adcRegSize 20
|
||||
#define REG_NUM 14
|
||||
typedef std::function<void(uint32_t)> GetImgProcSize;
|
||||
|
@ -56,11 +70,11 @@ public:
|
|||
|
||||
~HCamDevice();
|
||||
|
||||
int open_video();
|
||||
int open_video(int width, int height);
|
||||
int close_video();
|
||||
|
||||
void HtCamStartVideoCapturing();
|
||||
void HtCamStopVideoCapturing();
|
||||
// void HtCamStartVideoCapturing();
|
||||
//void HtCamStopVideoCapturing();
|
||||
int HtCamWaitVideoCapture(int msTimeout);
|
||||
int HtCamReadCaptureFrame(void **pbuf, int timeout);
|
||||
int width() { return v4lWidth; }
|
||||
|
@ -97,6 +111,7 @@ public:
|
|||
// void setConfig(Camconfig* _config){config = _config;}
|
||||
void HtCamChangeMonoStartSample(int start_sample);
|
||||
private:
|
||||
int set_size(int width, int height);
|
||||
int init_fd();
|
||||
int init_sample();
|
||||
int init_capture();
|
||||
|
@ -112,9 +127,9 @@ private:
|
|||
int HtCamStartSampling();
|
||||
int HtCamStopSampling();
|
||||
void HtCamChangeDpi(int dpi);
|
||||
bool HtCamPsDpiChange(int dpi);
|
||||
//bool HtCamPsDpiChange(int dpi);
|
||||
|
||||
void HtCamImageProcessChange();
|
||||
//void HtCamImageProcessChange();
|
||||
|
||||
int HtCamEventWorkThread(void);
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ void MultiFrameCapture::SetParent(void *scanner)
|
|||
{
|
||||
}
|
||||
|
||||
void MultiFrameCapture::open_video()
|
||||
void MultiFrameCapture::open()
|
||||
{
|
||||
//reset_fpga();
|
||||
m_capFpageregs->resetADC();
|
||||
|
@ -1098,14 +1098,14 @@ void MultiFrameCapture::openDevice(int dpi, int mode)
|
|||
|
||||
//m_capFpageregs->setFrame_interval_max(static_cast<int>(sp_dst * 4 / (mode ? 1 : 3))); //dpi > 2 ? 7200 : 3600
|
||||
//m_capFpageregs->setFrame_interval_min(static_cast<int>(sp_dst * 0.1 / (mode ? 1 : 3) )); //1540
|
||||
.
|
||||
|
||||
// 2023 7-15 屏蔽
|
||||
// m_capFpageregs->setFrame_interval_max(0x1010); //dpi > 2 ? 7200 : 3600
|
||||
// m_capFpageregs->setFrame_interval_min(0xa98); //dpi > 2 ? 900 : 1540
|
||||
configFPGAParam(mode, dpi);
|
||||
StopWatch swwv4l2open;
|
||||
//int ret = video->open_video(width, 60 * 2); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
int ret = video->open_video(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
int ret = video->open_video(width, 60 * 2); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
//int ret = video->open_video(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
|
||||
if (ret < 0)
|
||||
{
|
||||
return ;
|
||||
|
|
Loading…
Reference in New Issue