调整寄存器读写

This commit is contained in:
modehua 2023-07-17 18:32:46 -07:00
parent cd5d017147
commit 70354ab6cc
3 changed files with 330 additions and 306 deletions

View File

@ -10,10 +10,10 @@
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <string.h> #include <string.h>
#include "../cameraConfig.h" //#include "../cameraConfig.h"
#include "../CameraParams.h" //#include "../CameraParams.h"
#include <linux/v4l2-subdev.h> #include <linux/v4l2-subdev.h>
#include "camconfig.h" //#include "camconfig.h"
#include <iostream> #include <iostream>
#include <errno.h> #include <errno.h>
@ -78,9 +78,9 @@ HCamDevice::HCamDevice()
subDeviceName = "/dev/v4l-subdev0"; subDeviceName = "/dev/v4l-subdev0";
subDevicefd = 0; subDevicefd = 0;
videofd = 0; videofd = 0;
v4lWidth = CamProperty::_V4LWIDTH; v4lWidth = 3100;
v4lHeight = CamProperty::_V4LHEIGHT; v4lHeight = 3100;
v4lBufferCount = CamProperty::_V4LBUFFERCOUNT; v4lBufferCount = 3;
v4l2buftype = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; v4l2buftype = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
nplanes = 1; // only use one plane nplanes = 1; // only use one plane
drivertype = V4L2_CAP_VIDEO_CAPTURE_MPLANE; drivertype = V4L2_CAP_VIDEO_CAPTURE_MPLANE;
@ -100,8 +100,9 @@ HCamDevice::HCamDevice()
this->event_thread.reset(new std::thread(&HCamDevice::HtCamEventWorkThread, this)); 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) if ((fd = open(videoDevName.c_str(), O_RDWR, 0)) == -1)
{ {
camera_dbg("open video fial\n"); camera_dbg("open video fial\n");
@ -109,7 +110,8 @@ int HCamDevice::open_video()
} }
videofd = fd; videofd = fd;
camera_dbg("open video succeed\n"); camera_dbg("open video succeed\n");
set_size(width,height);
return 0; return 0;
} }
int HCamDevice::close_video() int HCamDevice::close_video()
@ -169,79 +171,79 @@ int HCamDevice::HtCamEventWorkThread(void)
return 0; return 0;
} }
void HCamDevice::HtCamStartVideoCapturing() // void HCamDevice::HtCamStartVideoCapturing()
{ // {
uint8_t n_buffers; // uint8_t n_buffers;
struct v4l2_buffer buf; // struct v4l2_buffer buf;
if (((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status) // 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); // printf("Run the scan multiple times %d\n", ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status);
return ; // return ;
} // }
for (n_buffers = 0; n_buffers < v4lBufferCount; n_buffers++) // for (n_buffers = 0; n_buffers < v4lBufferCount; n_buffers++)
{ // {
memset(&buf, 0, sizeof(buf)); // memset(&buf, 0, sizeof(buf));
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE) // if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; // buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
else // else
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; // buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP; // buf.memory = V4L2_MEMORY_MMAP;
buf.index = n_buffers; // buf.index = n_buffers;
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE) // if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
{ // {
buf.length = nplanes; // buf.length = nplanes;
buf.m.planes = (struct v4l2_plane *)calloc(buf.length, sizeof(struct v4l2_plane)); // buf.m.planes = (struct v4l2_plane *)calloc(buf.length, sizeof(struct v4l2_plane));
} // }
if (ioctl(videofd, VIDIOC_QBUF, &buf) == -1) // if (ioctl(videofd, VIDIOC_QBUF, &buf) == -1)
{ // {
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0; // ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
camera_err(" VIDIOC_QBUF error\n"); // camera_err(" VIDIOC_QBUF error\n");
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE) // if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
free(buf.m.planes); // free(buf.m.planes);
free(captureBufers); // free(captureBufers);
close(videofd); // close(videofd);
return; // return;
} // }
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE) // if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
free(buf.m.planes); // free(buf.m.planes);
} // }
enum v4l2_buf_type type; // enum v4l2_buf_type type;
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE) // if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; // type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
else // else
type = V4L2_BUF_TYPE_VIDEO_CAPTURE; // type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (ioctl(videofd, VIDIOC_STREAMON, &type) == -1) // if (ioctl(videofd, VIDIOC_STREAMON, &type) == -1)
{ // {
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0; // ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
camera_err(" VIDIOC_STREAMON error! %s\n", strerror(errno)); // camera_err(" VIDIOC_STREAMON error! %s\n", strerror(errno));
return; // return;
} // }
else // else
{ // {
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 1; // ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 1;
camera_print(" stream on succeed\n"); // camera_print(" stream on succeed\n");
} // }
return; // return;
} // }
void HCamDevice::HtCamStopVideoCapturing() // void HCamDevice::HtCamStopVideoCapturing()
{ // {
enum v4l2_buf_type type; // enum v4l2_buf_type type;
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0; // ((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE) // if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; // type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
else // else
type = V4L2_BUF_TYPE_VIDEO_CAPTURE; // type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (ioctl(videofd, VIDIOC_STREAMOFF, &type) == -1) // if (ioctl(videofd, VIDIOC_STREAMOFF, &type) == -1)
camera_err(" VIDIOC_STREAMOFF error! %s\n", strerror(errno)); // camera_err(" VIDIOC_STREAMOFF error! %s\n", strerror(errno));
} // }
void HCamDevice::HtCamExitVideoCapturing() void HCamDevice::HtCamExitVideoCapturing()
{ {
HtCamStopVideoCapturing(); //HtCamStopVideoCapturing();
uint8_t i; uint8_t i;
for (i = 0; i < v4lBufferCount; ++i) for (i = 0; i < v4lBufferCount; ++i)
@ -381,6 +383,13 @@ int HCamDevice::HtCamStopSampling()
return 0; return 0;
} }
int HCamDevice::set_size(int width, int height)
{
v4lWidth = width;
v4lHeight = height;
return 0;
}
int HCamDevice::init_fd() int HCamDevice::init_fd()
{ {
int fd; int fd;
@ -607,15 +616,15 @@ int HCamDevice::init_dev()
HtCamSwitchSampleModes(0); HtCamSwitchSampleModes(0);
// HtCamChangeExposureValue(500); // HtCamChangeExposureValue(500);
// start sample // start sample
camera_dbg("ST SP : %d , VSNP : %d \r\n" ,CamProperty::ST_SP ,CamProperty::VSNP); // camera_dbg("ST SP : %d , VSNP : %d \r\n" ,CamProperty::ST_SP ,CamProperty::VSNP);
if(CamProperty::ST_SP != 0 || CamProperty::ST_SP_VSNP != 0) // if(CamProperty::ST_SP != 0 || CamProperty::ST_SP_VSNP != 0)
HtCamChangeMonoStartSample(CamProperty::ST_SP * 3 + CamProperty::ST_SP_VSNP); // HtCamChangeMonoStartSample(CamProperty::ST_SP * 3 + CamProperty::ST_SP_VSNP);
if(CamProperty::VSNP != 0) // if(CamProperty::VSNP != 0)
{ // {
unsigned int value = HtCamReadFpgaRegs(16); // unsigned int value = HtCamReadFpgaRegs(16);
value = value & 0xffffff00; // value = value & 0xffffff00;
HtCamWriteFpgaRegs(16, CamProperty::VSNP | value); // HtCamWriteFpgaRegs(16, CamProperty::VSNP | value);
} // }
// ex_trigger = 0, int_trigger = 1 // ex_trigger = 0, int_trigger = 1
HtCamChangeTriggerInAndEXt(1); HtCamChangeTriggerInAndEXt(1);
@ -718,18 +727,18 @@ void HCamDevice::setADCReg(int addr , uint8_t value)
void HCamDevice::saveADCReg() void HCamDevice::saveADCReg()
{ {
CamADCConfig adcConfig(CamProperty::_ADCPATH); // CamADCConfig adcConfig(CamProperty::_ADCPATH);
int size = adcConfig.getSize(); // int size = adcConfig.getSize();
size = adcRegSize < size ? adcRegSize : size ; // size = adcRegSize < size ? adcRegSize : size ;
std::vector<int> adcValue(size) ; // std::vector<int> adcValue(size) ;
for(int index =0 ; index < size ; index++) // for(int index =0 ; index < size ; index++)
{ // {
adcValue[index] = pADCReg[index]; // adcValue[index] = pADCReg[index];
} // }
if(!adcConfig.saveValue(adcValue)) // if(!adcConfig.saveValue(adcValue))
{ // {
std::cout << "Save adc Value Error!" << std::endl ; // std::cout << "Save adc Value Error!" << std::endl ;
} // }
} }
uint32_t HCamDevice::HtCamReadFpgaRegs(uint8_t reg_addr) 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+"); // fp = fopen("/home/root/logW", "a+");
// fprintf(fp , "W reg %d , value : %d\r\n" ,reg_addr , reg_value ); // fprintf(fp , "W reg %d , value : %d\r\n" ,reg_addr , reg_value );
// fclose(fp); // fclose(fp);
switch (reg_addr) // switch (reg_addr)
{ // {
case 0x04: // case 0x04:
reg4 = HtCamReadFpgaRegs(0x04); // reg4 = HtCamReadFpgaRegs(0x04);
if (((CamZ_Reg_4 *)&reg4)->color_mode != ((CamZ_Reg_4 *)&reg_value)->color_mode) // if (((CamZ_Reg_4 *)&reg4)->color_mode != ((CamZ_Reg_4 *)&reg_value)->color_mode)
{ // {
getImgFormat(((CamZ_Reg_4 *)&reg_value)->color_mode); // getImgFormat(((CamZ_Reg_4 *)&reg_value)->color_mode);
} // }
break; // break;
default: // default:
break; // break;
} // }
uint32_t *pCamCtrlReg = virBaseAddr; uint32_t *pCamCtrlReg = virBaseAddr;
pCamCtrlReg[reg_addr] = reg_value; pCamCtrlReg[reg_addr] = reg_value;
} }
@ -807,7 +816,7 @@ void HCamDevice::HtCamSetTriggerMode(int val)
{ {
uint32_t *pCamCtrlReg = virBaseAddr; uint32_t *pCamCtrlReg = virBaseAddr;
if (val) if (val)
pCamCtrlReg[10] |= 0x00000040; pCamCtrlReg[10] |= 0x00000040; //40是16进制 转换为二进制0100 0000 刚好就是第十个寄存器的第七位
else else
pCamCtrlReg[10] &= ~(0x00000040); pCamCtrlReg[10] &= ~(0x00000040);
} }
@ -824,51 +833,51 @@ int HCamDevice::HtCamGetColorMode()
return ((pCamCtrlReg[4] & (0x00000004)) >> 2); return ((pCamCtrlReg[4] & (0x00000004)) >> 2);
} }
PERJECT_VERSION getByName(std::string name) // PERJECT_VERSION getByName(std::string name)
{ // {
if(name == "PYTHONZ_1200") // if(name == "PYTHONZ_1200")
return PERJECT_VERSION::PythonZ1200 ; // return PERJECT_VERSION::PythonZ1200 ;
if(name == "PYTHONZ_1800") // if(name == "PYTHONZ_1800")
return PERJECT_VERSION::PythonZ1800 ; // return PERJECT_VERSION::PythonZ1800 ;
if(name == "PYTHONZ_WSS") // if(name == "PYTHONZ_WSS")
return PERJECT_VERSION::PythonZWSS; // return PERJECT_VERSION::PythonZWSS;
if(name == "PYTHONZ_1206" ) // if(name == "PYTHONZ_1206" )
return PERJECT_VERSION::PythonZ1206; // return PERJECT_VERSION::PythonZ1206;
if(name == "PYTHONZ_1602" ) // if(name == "PYTHONZ_1602" )
return PERJECT_VERSION::PythonZ1602; // return PERJECT_VERSION::PythonZ1602;
return PERJECT_VERSION::PythonZ1200; //return a default var // return PERJECT_VERSION::PythonZ1200; //return a default var
} // }
void HCamDevice::init_ps_regs() void HCamDevice::init_ps_regs()
{ {
CamPSConfig psConfig(CONFIG_PATH); //CamPSConfig psConfig(CONFIG_PATH);
memset(pPsReg, 0, sizeof(pPsReg)); // memset(pPsReg, 0, sizeof(pPsReg));
pPsReg[PS_VERSION] = VERSION; // //pPsReg[PS_VERSION] = 100000;
pPsReg[BUF_WIDTH] = v4lWidth; // pPsReg[BUF_WIDTH] = v4lWidth;
pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT; // pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT;
pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH; // pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH;
std::cout << "v4lBufferCount " << v4lBufferCount << std::endl; // std::cout << "v4lBufferCount " << v4lBufferCount << std::endl;
pPsReg[BUF_NUM] = v4lBufferCount; // pPsReg[BUF_NUM] = v4lBufferCount;
pPsReg[CAM_STATUS] = psConfig.getReg(CAM_STATUS); // pPsReg[CAM_STATUS] = psConfig.getReg(CAM_STATUS);
CAM_INFO_REG *camInfo = (CAM_INFO_REG *)&pPsReg[CAM_INFO]; // CAM_INFO_REG *camInfo = (CAM_INFO_REG *)&pPsReg[CAM_INFO];
camInfo->CIS_Width = pPsReg[IMG_WIDTH] / CamProperty::_CIS_NUM; // camInfo->CIS_Width = pPsReg[IMG_WIDTH] / CamProperty::_CIS_NUM;
camInfo->CIS_count = CamProperty::_CIS_NUM; // camInfo->CIS_count = CamProperty::_CIS_NUM;
camInfo->ProjectVersion = getByName(CamProperty::_CAM_TYPE); // camInfo->ProjectVersion = getByName(CamProperty::_CAM_TYPE);
camInfo->vidio_status = 0; // camInfo->vidio_status = 0;
pPsReg[RLS_CHECK_CODE] = Alpha; // pPsReg[RLS_CHECK_CODE] = Alpha;
pPsReg[DATA_STATUS] = 0; // pPsReg[DATA_STATUS] = 0;
// pPsReg[HEARTBAT] = 0x80000001; // pPsReg[HEARTBAT] = 0x80000001;
// CamPSConfig psConfig(CONFIG_PATH); // CamPSConfig psConfig(CONFIG_PATH);
// pPsReg[PS_VERSION] = psConfig.getReg(PS_VERSION); // pPsReg[PS_VERSION] = psConfig.getReg(PS_VERSION);
// pPsReg[CAM_STATUS] = psConfig.getReg(CAM_STATUS); // pPsReg[CAM_STATUS] = psConfig.getReg(CAM_STATUS);
std::cout << "pPsReg[BUF_NUM] " << pPsReg[BUF_NUM] << std::endl; // std::cout << "pPsReg[BUF_NUM] " << pPsReg[BUF_NUM] << std::endl;
std::cout << "CAM_STATUS " << pPsReg[CAM_STATUS] << std::endl; // std::cout << "CAM_STATUS " << pPsReg[CAM_STATUS] << std::endl;
// pPsReg[MOTOR_SPEED] = psConfig.getReg(MOTOR_SPEED); // pPsReg[MOTOR_SPEED] = psConfig.getReg(MOTOR_SPEED);
// pPsReg[CAM_DPI] = psConfig.getReg(CAM_DPI); // pPsReg[CAM_DPI] = psConfig.getReg(CAM_DPI);
// pPsReg[RLS_CHECK_CODE] = psConfig.getReg(RLS_CHECK_CODE); // 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) 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 ); printf("reg addr %d\r\n" ,reg_addr );
std::cout << "Write Camera PS reg addr " << reg_addr << "value " << reg_value << std::endl; 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; return;
pPsReg[reg_addr] = reg_value; pPsReg[reg_addr] = reg_value;
switch (reg_addr) switch (reg_addr)
{ {
case BUF_WIDTH: // case BUF_WIDTH:
case BUF_HEIGHT: // case BUF_HEIGHT:
case BUF_NUM: // case BUF_NUM:
HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT], pPsReg[BUF_NUM]); // HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT], pPsReg[BUF_NUM]);
break; // break;
case CAM_DPI: // case CAM_DPI:
HtCamPsDpiChange(reg_value); // HtCamPsDpiChange(reg_value);
break; // break;
case CAM_STATUS: // case CAM_STATUS:
{ // {
HtCamImageProcessChange(); // // HtCamImageProcessChange();
if (getImgProcSize) // // if (getImgProcSize)
getImgProcSize(reg_value); // // getImgProcSize(reg_value);
} // }
break; break;
default: default:
break; break;
@ -909,14 +918,14 @@ void HCamDevice::HtCamWritePsRegs(uint8_t reg_addr, uint32_t reg_value)
void HCamDevice::savePsReg() void HCamDevice::savePsReg()
{ {
CamPSConfig psConfig(CONFIG_PATH); // CamPSConfig psConfig(CONFIG_PATH);
psConfig.setReg(PS_VERSION , pPsReg[PS_VERSION] ); // psConfig.setReg(PS_VERSION , pPsReg[PS_VERSION] );
psConfig.setReg(CAM_STATUS , pPsReg[CAM_STATUS] ); // psConfig.setReg(CAM_STATUS , pPsReg[CAM_STATUS] );
psConfig.setReg(MOTOR_SPEED , pPsReg[MOTOR_SPEED]); // psConfig.setReg(MOTOR_SPEED , pPsReg[MOTOR_SPEED]);
psConfig.setReg(CAM_DPI , pPsReg[CAM_DPI] ); // psConfig.setReg(CAM_DPI , pPsReg[CAM_DPI] );
psConfig.setReg(HEARTBAT , pPsReg[HEARTBAT] ); // psConfig.setReg(HEARTBAT , pPsReg[HEARTBAT] );
psConfig.setReg(RLS_CHECK_CODE, pPsReg[RLS_CHECK_CODE]); // psConfig.setReg(RLS_CHECK_CODE, pPsReg[RLS_CHECK_CODE]);
psConfig.save(); // psConfig.save();
} }
void HCamDevice::HtCamWriteAllADC() void HCamDevice::HtCamWriteAllADC()
@ -943,14 +952,14 @@ void HCamDevice::HtCamInitADCReg()
#endif #endif
#ifdef ADC_82V48 #ifdef ADC_82V48
CamADCConfig adcConfig(CamProperty::_ADCPATH); //CamADCConfig adcConfig(CamProperty::_ADCPATH);
int size = adcConfig.getSize(); //int size = adcConfig.getSize();
std::cout << " read ADC size : " << size << std::endl ; //std::cout << " read ADC size : " << size << std::endl ;
if (size > 0) //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; return;
} }
@ -958,76 +967,76 @@ void HCamDevice::HtCamInitADCReg()
pADCReg[0] = 0x07; pADCReg[0] = 0x07;
pADCReg[1] = 0x50; pADCReg[1] = 0x50;
/* 1200 cis */ // /* 1200 cis */
if (CamProperty::_CAM_TYPE == "PYTHONZ_1200") // if (CamProperty::_CAM_TYPE == "PYTHONZ_1200")
{ // {
/* gain */ // /* gain */
pADCReg[2] = 0x90; // pADCReg[2] = 0x90;
pADCReg[3] = 0x00; // pADCReg[3] = 0x00;
pADCReg[4] = 0x90; // pADCReg[4] = 0x90;
pADCReg[5] = 0x00; // pADCReg[5] = 0x00;
pADCReg[6] = 0x90; // pADCReg[6] = 0x90;
pADCReg[7] = 0x00; // pADCReg[7] = 0x00;
pADCReg[8] = 0x90; // pADCReg[8] = 0x90;
pADCReg[9] = 0x00; // pADCReg[9] = 0x00;
pADCReg[0xa] = 0x90; // pADCReg[0xa] = 0x90;
pADCReg[0xb] = 0x00; // pADCReg[0xb] = 0x00;
pADCReg[0xc] = 0x90; // pADCReg[0xc] = 0x90;
pADCReg[0xd] = 0x00; // pADCReg[0xd] = 0x00;
/* offset */ // /* offset */
pADCReg[0xe] = 0x58; // pADCReg[0xe] = 0x58;
pADCReg[0xf] = 0x5b; // pADCReg[0xf] = 0x5b;
pADCReg[0x10] = 0x55; // pADCReg[0x10] = 0x55;
pADCReg[0x11] = 0x55; // pADCReg[0x11] = 0x55;
pADCReg[0x12] = 0x50; // pADCReg[0x12] = 0x50;
pADCReg[0x13] = 0x55; // pADCReg[0x13] = 0x55;
} // }
else // else
{ // {
/* offset */ // /* offset */
if (CamProperty::_CAM_TYPE == "PYTHONZ_WSS") // if (CamProperty::_CAM_TYPE == "PYTHONZ_WSS")
{ // {
pADCReg[2] = 0x55; // pADCReg[2] = 0x55;
pADCReg[3] = 0x00; // pADCReg[3] = 0x00;
pADCReg[4] = 0x4a; // pADCReg[4] = 0x4a;
pADCReg[5] = 0x00; // pADCReg[5] = 0x00;
pADCReg[6] = 0x50; // pADCReg[6] = 0x50;
pADCReg[7] = 0x00; // pADCReg[7] = 0x00;
pADCReg[8] = 0x4e; // pADCReg[8] = 0x4e;
pADCReg[9] = 0x00; // pADCReg[9] = 0x00;
pADCReg[0xa] = 0x40; // pADCReg[0xa] = 0x40;
pADCReg[0xb] = 0x00; // pADCReg[0xb] = 0x00;
pADCReg[0xc] = 0x50; // pADCReg[0xc] = 0x50;
pADCReg[0xd] = 0x00; // pADCReg[0xd] = 0x00;
pADCReg[0xe] = 0x65; // pADCReg[0xe] = 0x65;
pADCReg[0xf] = 0x65; // pADCReg[0xf] = 0x65;
pADCReg[0x10] = 0x65; // pADCReg[0x10] = 0x65;
pADCReg[0x11] = 0x65; // pADCReg[0x11] = 0x65;
pADCReg[0x12] = 0x65; // pADCReg[0x12] = 0x65;
pADCReg[0x13] = 0x65; // pADCReg[0x13] = 0x65;
} // }
else // else
{ // {
pADCReg[2] = 0xA0; // pADCReg[2] = 0xA0;
pADCReg[3] = 0x00; // pADCReg[3] = 0x00;
pADCReg[4] = 0xA0; // pADCReg[4] = 0xA0;
pADCReg[5] = 0x00; // pADCReg[5] = 0x00;
pADCReg[6] = 0xA0; // pADCReg[6] = 0xA0;
pADCReg[7] = 0x00; // pADCReg[7] = 0x00;
pADCReg[8] = 0xA0; // pADCReg[8] = 0xA0;
pADCReg[9] = 0x00; // pADCReg[9] = 0x00;
pADCReg[0xa] = 0xA0; // pADCReg[0xa] = 0xA0;
pADCReg[0xb] = 0x00; // pADCReg[0xb] = 0x00;
pADCReg[0xc] = 0xA0; // pADCReg[0xc] = 0xA0;
pADCReg[0xd] = 0x00; // pADCReg[0xd] = 0x00;
pADCReg[0xe] = 0x20; // pADCReg[0xe] = 0x20;
pADCReg[0xf] = 0x20; // pADCReg[0xf] = 0x20;
pADCReg[0x10] = 0x20; // pADCReg[0x10] = 0x20;
pADCReg[0x11] = 0x20; // pADCReg[0x11] = 0x20;
pADCReg[0x12] = 0x20; // pADCReg[0x12] = 0x20;
pADCReg[0x13] = 0x20; // pADCReg[0x13] = 0x20;
} // }
} // }
#endif #endif
} }
@ -1066,69 +1075,69 @@ void HCamDevice::set_reload_correct_event(ReLoadCorrecEvent _reLoadCorrectEvent)
this->reLoadCorrectEvent = _reLoadCorrectEvent; this->reLoadCorrectEvent = _reLoadCorrectEvent;
} }
void HCamDevice::HtCamImageProcessChange() // void HCamDevice::HtCamImageProcessChange()
{ // {
CAM_STATUS_REG* status = (CAM_STATUS_REG*)&pPsReg[CAM_STATUS]; // CAM_STATUS_REG* status = (CAM_STATUS_REG*)&pPsReg[CAM_STATUS];
if(status->doImageProcess) // if(status->doImageProcess)
{ // {
HtCamPsDpiChange(pPsReg[CAM_DPI]); // HtCamPsDpiChange(pPsReg[CAM_DPI]);
}else // }else
{ // {
pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH]; // pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH];
} // }
} // }
// DPI切换-暂只适配1200/1800 // DPI切换-暂只适配1200/1800
bool HCamDevice::HtCamPsDpiChange(int dpi) // bool HCamDevice::HtCamPsDpiChange(int dpi)
{ // {
std::cout << "DPI Change for " << dpi <<std::endl; // std::cout << "DPI Change for " << dpi <<std::endl;
for (auto i = CamProperty::_DPI_WIDTH.begin(); i != CamProperty::_DPI_WIDTH.end(); i++) // for (auto i = CamProperty::_DPI_WIDTH.begin(); i != CamProperty::_DPI_WIDTH.end(); i++)
{ // {
if (dpi == i->first) // if (dpi == i->first)
{ // {
CamProperty::_N_DPI = dpi; // CamProperty::_N_DPI = dpi;
CamProperty::_IMG_BUF_WIDTH = i->second; // CamProperty::_IMG_BUF_WIDTH = i->second;
pPsReg[BUF_WIDTH] = CamProperty::_DPI_V4LWIDTH[dpi]; // pPsReg[BUF_WIDTH] = CamProperty::_DPI_V4LWIDTH[dpi];
if (dpi > 300) // if (dpi > 300)
{ // {
HtCamChangeDpi(0); // HtCamChangeDpi(0);
pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT/2; // pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT/2;
} // }
else // else
{ // {
HtCamChangeDpi(1); // HtCamChangeDpi(1);
pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT; // pPsReg[BUF_HEIGHT] = CamProperty::_V4LHEIGHT;
} // }
std::cout << "image process " << ((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess << std::endl ; // std::cout << "image process " << ((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess << std::endl ;
if(((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess) // if(((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doImageProcess)
pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH ; // pPsReg[IMG_WIDTH] = CamProperty::_IMG_BUF_WIDTH ;
else // else
pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH]; // 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; // ((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 ; // 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]) // if(v4lWidth != pPsReg[BUF_WIDTH] || v4lHeight != pPsReg[BUF_HEIGHT] || v4lBufferCount != pPsReg[BUF_NUM])
{ // {
HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT] , 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.width = %d\n", v4lWidth);
camera_print(" fmt.fmt.pix.height = %d\n", v4lHeight); // camera_print(" fmt.fmt.pix.height = %d\n", v4lHeight);
camera_print(" fmt.fmt.pix.field = %d\n", pPsReg[BUF_NUM]); // camera_print(" fmt.fmt.pix.field = %d\n", pPsReg[BUF_NUM]);
if(reLoadCorrectEvent) // if(reLoadCorrectEvent)
reLoadCorrectEvent(CamProperty::_IMG_BUF_WIDTH); // reLoadCorrectEvent(CamProperty::_IMG_BUF_WIDTH);
} // }
if(config != nullptr) // if(config != nullptr)
config->saveConfig(); // config->saveConfig();
// Camconfig h_config; // // Camconfig h_config;
// h_config.saveConfig(); // // h_config.saveConfig();
return true; // return true;
} // }
} // }
return false; // return false;
} // }
void HCamDevice::HtCamOverClockClear() void HCamDevice::HtCamOverClockClear()
{ {

View File

@ -40,6 +40,20 @@ union CamZ_Reg_4
}params; }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 adcRegSize 20
#define REG_NUM 14 #define REG_NUM 14
typedef std::function<void(uint32_t)> GetImgProcSize; typedef std::function<void(uint32_t)> GetImgProcSize;
@ -56,11 +70,11 @@ public:
~HCamDevice(); ~HCamDevice();
int open_video(); int open_video(int width, int height);
int close_video(); int close_video();
void HtCamStartVideoCapturing(); // void HtCamStartVideoCapturing();
void HtCamStopVideoCapturing(); //void HtCamStopVideoCapturing();
int HtCamWaitVideoCapture(int msTimeout); int HtCamWaitVideoCapture(int msTimeout);
int HtCamReadCaptureFrame(void **pbuf, int timeout); int HtCamReadCaptureFrame(void **pbuf, int timeout);
int width() { return v4lWidth; } int width() { return v4lWidth; }
@ -97,6 +111,7 @@ public:
// void setConfig(Camconfig* _config){config = _config;} // void setConfig(Camconfig* _config){config = _config;}
void HtCamChangeMonoStartSample(int start_sample); void HtCamChangeMonoStartSample(int start_sample);
private: private:
int set_size(int width, int height);
int init_fd(); int init_fd();
int init_sample(); int init_sample();
int init_capture(); int init_capture();
@ -112,9 +127,9 @@ private:
int HtCamStartSampling(); int HtCamStartSampling();
int HtCamStopSampling(); int HtCamStopSampling();
void HtCamChangeDpi(int dpi); void HtCamChangeDpi(int dpi);
bool HtCamPsDpiChange(int dpi); //bool HtCamPsDpiChange(int dpi);
void HtCamImageProcessChange(); //void HtCamImageProcessChange();
int HtCamEventWorkThread(void); int HtCamEventWorkThread(void);

View File

@ -82,7 +82,7 @@ void MultiFrameCapture::SetParent(void *scanner)
{ {
} }
void MultiFrameCapture::open_video() void MultiFrameCapture::open()
{ {
//reset_fpga(); //reset_fpga();
m_capFpageregs->resetADC(); 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_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 //m_capFpageregs->setFrame_interval_min(static_cast<int>(sp_dst * 0.1 / (mode ? 1 : 3) )); //1540
.
// 2023 7-15 屏蔽 // 2023 7-15 屏蔽
// m_capFpageregs->setFrame_interval_max(0x1010); //dpi > 2 ? 7200 : 3600 // m_capFpageregs->setFrame_interval_max(0x1010); //dpi > 2 ? 7200 : 3600
// m_capFpageregs->setFrame_interval_min(0xa98); //dpi > 2 ? 900 : 1540 // m_capFpageregs->setFrame_interval_min(0xa98); //dpi > 2 ? 900 : 1540
configFPGAParam(mode, dpi); configFPGAParam(mode, dpi);
StopWatch swwv4l2open; StopWatch swwv4l2open;
//int ret = video->open_video(width, 60 * 2); // 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 //int ret = video->open_video(); // 300dpi 7344/2 600dpi 7344 //FRAME_HEIGHT * 2
if (ret < 0) if (ret < 0)
{ {
return ; return ;