diff --git a/HCamDevice.cpp b/HCamDevice.cpp index a28b66c..ae70ede 100644 --- a/HCamDevice.cpp +++ b/HCamDevice.cpp @@ -10,10 +10,10 @@ #include #include #include -#include "../cameraConfig.h" -#include "../CameraParams.h" +//#include "../cameraConfig.h" +//#include "../CameraParams.h" #include -#include "camconfig.h" +//#include "camconfig.h" #include #include @@ -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 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 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 <first) - { - CamProperty::_N_DPI = dpi; - CamProperty::_IMG_BUF_WIDTH = i->second; +// bool HCamDevice::HtCamPsDpiChange(int dpi) +// { +// std::cout << "DPI Change for " << dpi <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() { diff --git a/HCamDevice.h b/HCamDevice.h index a9b7f2b..d7b8d9b 100644 --- a/HCamDevice.h +++ b/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 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); diff --git a/MultiFrameCapture.cpp b/MultiFrameCapture.cpp index cfcc1f6..9b49f0d 100644 --- a/MultiFrameCapture.cpp +++ b/MultiFrameCapture.cpp @@ -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(sp_dst * 4 / (mode ? 1 : 3))); //dpi > 2 ? 7200 : 3600 //m_capFpageregs->setFrame_interval_min(static_cast(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 ;